|
|
  |
Зависание микроконтроллера, ATMega 128 |
|
|
|
Apr 14 2008, 14:03
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(smalcom @ Apr 14 2008, 16:27)  Не знаю на кого грешить(( На себя. Цитата(smalcom @ Apr 14 2008, 16:27)  если дотронуться металическим предметом до ножек кварца, то или пускается дальше или уходит в перезагрузку Хочется спросить - а отверткой в ухе не пробовали? Если серьезно, совершенно нормальный процесс. Не нужно лазить на ножки кварца точно так же как в ухо. P.S. Да, еще watchdog не мешало бы включить, если не включен.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Apr 14 2008, 14:20
|

Частый гость
 
Группа: Свой
Сообщений: 119
Регистрация: 5-11-07
Из: Москва
Пользователь №: 32 073

|
Цитата(smalcom @ Apr 14 2008, 17:27)  Наблюдается следующая картина: казалось бы без всяких причин виснет контроллер, если дотронуться металическим предметом до ножек кварца, то или пускается дальше или уходит в перезагрузку PS. менял кварц - непомогло PPS. частота - 14.7456МГц Попробуйте заземлить корпус кварца...
--------------------
У кого что сбоит, тот о том и говорит.
|
|
|
|
|
Apr 14 2008, 14:46
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
PPS. кварц заземлен. PPPS. wathcdog включен - все зависает намертво, какбудто просто останавливается тактовый генератор, правда у ватчдога свой... я в непонятках. Цитата Если серьезно, совершенно нормальный процесс. Не нужно лазить на ножки кварца точно так же как в ухо. нормальная операция проверки неисправности тактовых цепей. ЗЫx. плата мелкосерийная, количество копий около 150ти, а ведет себя так только последняя партия из 10штук
Сообщение отредактировал smalcom - Apr 14 2008, 14:48
|
|
|
|
|
Apr 14 2008, 15:11
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
ммм... меня могли неправильно понять - криво написал. вобщем виснет он не от того что я до него дотрагиваюсь))), а сам по себе. признаю - пунктуация не мой конек. Цитата BOD включен? Керамика по питанию в непосредственной близости от МК есть? BOD выключен. керамика по питанию стоит - 0.1uF(3шт, возле нескольких подводов питания к контроллеру). каждая ножка кварца соединена с конденсатором 22pF - вторая ножка конденсатороа на земле. ммм. напряжение питания - 4.75В. Рядом лежит такойже девайс из старой партии: работает без проблем
|
|
|
|
|
Apr 14 2008, 15:17
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(smalcom @ Apr 14 2008, 17:04)  керамика по питанию стоит - 0.1uF(3шт, возле нескольких подводов питания к контроллеру). каждая ножка кварца соединена с конденсатором 22pF - вторая ножка конденсатороа на земле. Если BOD выключен, тогда какая используется схема сброса (что подключено к Reset). Не получается ли так что через МК косвенным путем питается что-то еще e.g.: Код линия Vcc ------ [MK ]-------[ Rн ] Какой источник питания?
|
|
|
|
|
Apr 14 2008, 15:37
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
фьюзы BLEV=1 BODEN=1 SUT=2 CKSEL=D BLB1=3 BLB0=3 OCDEN=1 JTAGEN=1 CKOPT=0 EESV=1 BSIZ=0 BRST=1 M103C=1 WDTON=0 но после прошивки почемуто WDTON читается опять как 1. Цитата что поменялось между партиями? сами атмеги. ммм глуповато звучит кнеша, но на старых внизу написано 0727, а на новых - 0740
|
|
|
|
|
Apr 14 2008, 16:34
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Цитата керамический резонатор 0.9..3.0 МГц не, при CKOPT=0 это как раз f>1МГц кварц менял, про емкости у него не думал. прикол в том, что даже ватчдог не выводит его из этого зависшего состояния. грешу на самый маловероятный исход - проблемная партия контроллеров вот что я только что пронаблюдал - контроллер не завис а начал жестко тупить, те мигание светодиода "я жив" вместо периода 1с превратилось в 30с. ЗЫ. опять же почему ватчдог имея свой собственный генератор невыводит его из этого состояния ЗЗЫ. при этом потрбляемый ток падает в два раза
Сообщение отредактировал smalcom - Apr 14 2008, 16:37
|
|
|
|
|
Apr 14 2008, 16:55
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(smalcom @ Apr 14 2008, 20:34)  не, при CKOPT=0 это как раз f>1МГц Да верно - я напутал. Но смутно помню, что кода-то экспериментировал с CKSEL, и понял 1111 - лучше. Попробуйте. Цитата(smalcom @ Apr 14 2008, 20:34)  кварц менял, про емкости у него не думал. прикол в том, что даже ватчдог не выводит его из этого зависшего состояния. А может он всё таки не включен? "но после прошивки почемуто WDTON читается опять как 1." Цитата(smalcom @ Apr 14 2008, 20:34)  вот что я только что пронаблюдал - контроллер не завис а начал жестко тупить, те мигание светодиода "я жив" вместо периода 1с превратилось в 30с. ЗЫ. опять же почему ватчдог имея свой собственный генератор невыводит его из этого состояния ЗЗЫ. при этом потрбляемый ток падает в два раза Ну это похоже на эффект от деление тактовой частоты в регистре XDIV. Кстати XDIV и на пробуждение из sleep влияет. Sleep у вас есть? А если тестовую программку написать? Только лампочкой мигает и ватчдог сбрасывает.
|
|
|
|
|
Apr 15 2008, 04:00
|

Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544

|
Цитата в регистре XDIV Его нет в Меге128. Цитата плюс если верить даташиту, то ватчдог работает в любом из слип режимов. Да.Работает.
|
|
|
|
|
Apr 15 2008, 04:47
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Его нет в Меге128. Как это нет? А по адресу 0x3C(0x5C) что находится? Цитата ЗЫ. опять же почему ватчдог имея свой собственный генератор невыводит его из этого состояния Если у вас не работает основной тактовый генератор, то WDT никак не осилит перезапуск. Проблема скорее кроется именно в неустойчивой работе генератора меги с Вашим типом кварца. Ставьте CKSEL=F и CKOPT=0. SUT я бы поставил 3, если, конечно, не нужен быстрый старт. И хорошо промойте плату возле генератора, бывает - помогает.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Apr 15 2008, 07:57
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Чёй-то не нашел в ДШ. Ткните носом. Вот дерево разделов: System Clock and Clock Options -> Timer/Counter Oscillator -> XTAL Divide Control Register - XDIV Сразу за External Clock.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Apr 16 2008, 06:29
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(smalcom @ Apr 15 2008, 23:08)  чота с плюсами лажа какаето А это не исходники.ру  тут этого баловства не особенно. Судя по тому, что там написано было - надо попробовать ещё прошить старые платы прошивками, скомпилированными новым компилятором и наоборот. Если где-то шалит какое-то прерывание (обработчик есть, но прерывание не сбрасывается и лупит дальше), то оно может очень сильно тормозить ход основной программы - грубо, в число тактов выполнения обработчика раз (в то время, когда глобально прерывания разрешены, между прерываниями будет проскакивать по одной команде основной программы). Хотя... "1 из 10 штук завис" - это как-то не очень похоже на прошивку.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 17 2008, 20:33
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(Dog Pawlowa @ Apr 17 2008, 23:54)  Не нужно давать вредные советы - можно доиграться вплоть до потери программы во флэши. это как?... я тогда просто не понимаю что происходит при отключении питания... мне казалось, что просто прекращается работа генератора и сё... а как может потеряться программа во флэши??
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Apr 18 2008, 06:40
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Mozart @ Apr 17 2008, 23:33)  это как?... я тогда просто не понимаю что происходит при отключении питания... мне казалось, что просто прекращается работа генератора и сё... а как может потеряться программа во флэши?? Не просто. При снижении питания может произойти все что угодно - например может неправильно декодироваться команда. Например вместо безобидной пересылки из регистра в регистр начнется стирание страницы флэш-памяти. И это неоднократно подтверждено жизнью. Поэтому контроллер должен быть обязательно сброшен при напряжении питания ниже критического.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Apr 18 2008, 16:00
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(Dog Pawlowa @ Apr 18 2008, 10:40)  Не просто. При снижении питания может произойти все что угодно - например может неправильно декодироваться команда. Например вместо безобидной пересылки из регистра в регистр начнется стирание страницы флэш-памяти. И это неоднократно подтверждено жизнью. Поэтому контроллер должен быть обязательно сброшен при напряжении питания ниже критического. у мну такого ещё не разу не было... учту... сенкс
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Apr 18 2008, 16:22
|
Группа: Новичок
Сообщений: 6
Регистрация: 9-01-07
Пользователь №: 24 231

|
Цитата(Dog Pawlowa @ Apr 18 2008, 10:40)  При снижении питания может произойти все что угодно... ППКС. У меня дома лежит tiny со стертым ID
|
|
|
|
|
Apr 18 2008, 17:06
|
Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821

|
Было такое же на ATmega8535. Правда стоял на плате в одной сборке с усилителями ШИМ (2 канала по 5 ампер)  . Решилось все экранированием платы (под ней силовые провода на нагрузку лежали).
--------------------
Чудес не бывает - бывает мало знаний и опыта!
|
|
|
|
|
Apr 19 2008, 08:29
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(Dog Pawlowa @ Apr 18 2008, 10:40)  Не просто. Поэтому контроллер должен быть обязательно сброшен при напряжении питания ниже критического. Полностью согласен. При этом, из собственного опыта, не доверяю ни каким BODам, а ставлю внешний супервизор. +20 рублей, но про такие проблемы забываешь раз и навсегда.
|
|
|
|
|
Apr 26 2008, 14:55
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(smalcom @ Apr 24 2008, 20:15)  да, кстати, проблема была в том, что прогу скомпилил новым набором утилит - gcc-4.3.0, binutils-2.18, glibc-1.6; раньше были gcc-3.4.0, binutils-2.17, glibc-1.4 И всё-таки, как это может влиять не на "тотальное" зависание, а на "1 из 10". Что касается разницы между 3.х и 4.х, то 4.х гораздо агрессивнее оптимизирует работу с не-volatile-переменными, скажем, Цитата #include <avr/io.h> #include <avr/interrupt.h>
unsigned cnt;
unsigned foo(void) { int tmp; uint8_t sr = SREG; cli(); tmp = cnt; SREG = sr; return tmp; } Успешно компилируется в Цитата foo: /* prologue: frame size=0 */ /* prologue end (size=0) */ in r24,95-0x20 /* #APP */ cli /* #NOAPP */ out 95-0x20,r24 lds r24,cnt lds r25,(cnt)+1 /* epilogue: frame size=0 */ ret Т.е. по сути в Цитата uint8_t sr = SREG; cli(); SREG = sr; return cnt; Что вполне соответствует стандарту  , cnt тоже надо объявить volatile, чтобы сохранился интересующий порядок операций. Цитата(Flasher @ Apr 26 2008, 00:08)  Могу рассказать в чем секрет зависания устройства. Будете долго удивляться. - Это компьютерный блок питания. Удивляюсь  Вот чего не знал, того не знал... И как дурак уже 15 лет на столе держу в качестве источника для отлаживаемых плат компьютерные блоки питания  Если место позволяет - часто даже на плате кроме штатного разъёма ещё штыри заложены под флопарный разъёмчик, чтобы переходник не был нужен. И ничего не "рестартует в лучшем случае", включая сам комп, внутри которого стоит такой же блок питания. И изделия серийные выпускаются в компьютерном корпусе и с компьютерным блоком питангия - там и микроконтроллеры, и ПЛИС, и АЦП горстями (ну да, по питанию АЦП фильтры дополнительные). Может это? Прокладочку поменять?
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 26 2008, 19:30
|

Группа: Новичок
Сообщений: 4
Регистрация: 12-01-07
Пользователь №: 24 365

|
Цитата(smalcom @ Apr 14 2008, 17:27)  Наблюдается следующая картина: казалось бы без всяких причин виснет контроллер, если дотронуться металическим предметом до ножек кварца, то или пускается дальше или уходит в перезагрузку, или сделает еще пару шагов и опять виснет. Выводит его из такого состояния только кнопка резет или сброс питания. контроллер - ATMega128-16AU. Программа раньше работала, проблеиы появились только в текущем месяце на новых устройствах. Не знаю на кого грешить((
PS. менял кварц - непомогло PPS. частота - 14.7456МГц Попробуйте выяснить кто виноват. Для это: - Запитайте устройство не от БП (господин Flasher правильно высказал свое мнение по поводу компьтерного БП - помойка там конкретная); - Если не полегчает, то отключите от источника питания платы все, что может приводить к "просадкам" питания (в идеале - оставить только проц и светодиод какой нибудь) - Правильно выставьте бит CKSEL. Посмотрите осцилом на амплитуду на кварце - должна быть не менее 1,5В... - Отключите супервизор, RESET повесьте прям на ногу питания МК Кстати, как схема питания реализована? Было у нас такое дело - производили устройство, все было ОК.... Затем пошел серийный брак - устройство вроде работает, но после установки на транспорт - сбойт... Виснет, перестает работать, перезапускается.... Думал долго, перепахал всю плату - не помогло. А дело было вот в чем. Использовали программатор ChipProg который стоял на компьютере с которого прошивались изделия. В один прекрасный или ужасный день наши герои - радиомеханики переставили винду, поставили какую то "тюнингувую модель ручной сборки WinXP. С этого дня брак и пошел. Хотя все отлично прошивалось и тестировалось...
|
|
|
|
|
Apr 28 2008, 06:52
|
Частый гость
 
Группа: Свой
Сообщений: 147
Регистрация: 4-05-06
Пользователь №: 16 779

|
Цитата(Flasher @ Apr 26 2008, 01:08)  Могу рассказать в чем секрет зависания устройства. Будете долго удивляться. - Это компьютерный блок питания. Что-то тут не так - компьютер ведь не виснет? Да и есть блоки питания meanwell - те же яйца - но никто не жаловался. Может к ресету проводник длинной сантиметров 10 висит в воздухе?
|
|
|
|
|
Apr 28 2008, 07:12
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Блоки питания от ПК разные бывают. Есть у меня один, на котором я испытываю устойчивость устройств к поганому питанию. Осциллографом на шины питания лучше не смотреть без валидола. Если работает с таким питанием, тогда будет работать с любым другим. А есть ещё и замечательные БП, на выходе которых помех практически нет. Кроме того, все эти БП требуют какой-то минимальной нагрузки по линии 5 вольт (обычно 0,2-0,5 амп), а без неё напряжение на выходе прыгает с частотой от нескольких Hz до десятков Hz. Если запитать от БП только микроконтроллер и пару светодиодов, на правильную работу БП лучше сильно не рассчитывать.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Apr 28 2008, 07:58
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Flasher @ Apr 26 2008, 00:08)  на корпусе которого в незаземленном варианте присутствует 110 Вольт ...Засунули лом... "Грррр шмяк" - сказала японская лесопилка. "Ну дык, еб тыть!" - сказали суровые русские мужики и пошли валить лес двуручными пилами. Сказано в инструкции "без заземления НЕ ВКЛЮЧАТЬ". Нет, блин, мы умнее: "в незаземленном варианте..."
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 28 2008, 11:59
|
Местный
  
Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294

|
Цитата(Igor26 @ Apr 28 2008, 09:41)  Интересно знать, уважаемый, а как у тебя компьютер то работает от компьютерного блока питания? Он ведь сложней твоего девайса в десятки раз. А ты попробуй, коснись отверткой ножки кварца  - потом доложишь как стабильно он будет работать. Только заземление не забудь отключить. А если серъезно-законы грамотной разводки и схемотехники еще никто не отменял. Поэтому еще раз внимательно перечитайте корневой пост автора и мой ответ. У меня в практике попадались криво разведенные устройства подключенные к БП.- после пары включений слетала флэшь и фьюзы. А если БП не заземлен- то после касания к элементам схемы пукой- процессор не отвечал даже в параллельгом режиме Цитата(Сергей Борщ @ Apr 28 2008, 10:58)  ...Засунули лом... "Грррр шмяк" - сказала японская лесопилка. "Ну дык, еб тыть!" - сказали суровые русские мужики и пошли валить лес двуручными пилами.
Сказано в инструкции "без заземления НЕ ВКЛЮЧАТЬ". Нет, блин, мы умнее: "в незаземленном варианте..." Ну хорошо- Вы грамотный. А видели домашние лаборатории радиолюбителей- розетка не евро- переходник без заземления от шнура....? Думаете, эти люди об этом задумываются? Цитата(Igor26 @ Apr 28 2008, 14:42)  Прикола ради, замерил прям щас напряжение между корпусом компа и "землей". 110 вольт. Не сбоит, представьте себе. Лет пять не замечаю. Детский сад...Проздравляю- Вы уникальный пользователь! Вы, наверное, не трогаете ножки кварца на материнке в рабочем состоянии. Или к нему девайсы не подключаете?. Мп3 плееры не слетали при подключении к компу? а Флэшки? Нет?- так Вы- везунчик!!! Теперь просто представьте куда пойдут заряды если внешнее устройство имеет нулевой потенциал до касания корпуса? А самое главное через какие контакты?
|
|
|
|
|
Apr 29 2008, 17:18
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Сергей Борщ @ Apr 28 2008, 10:58)  ...Засунули лом... "Грррр шмяк" - сказала японская лесопилка. "Ну дык, еб тыть!" - сказали суровые русские мужики и пошли валить лес двуручными пилами. У Аверченко в рассказе начала прошлого века была немецкая пилорама и костыль с железной дороги, забитый в бревно. Но в целом характер мужика не поменялся  Цитата(Flasher @ Apr 28 2008, 14:59)  А ты попробуй, коснись отверткой ножки кварца  А этот "лом" или "костыль" в современном помещении, насыщенном наводками от 50Гц до я не знаю куда (неплохо выглядят 30-50кГц от электронных балластов, разных ионизаторов воздуха и т.п.) может сбить и прибор, запитанный от батарейки. Цитата(Flasher @ Apr 28 2008, 14:59)  то после касания к элементам схемы пукой- процессор не отвечал ... Ну хорошо- Вы грамотный. А видели домашние лаборатории радиолюбителей- розетка не евро- переходник без заземления от шнура....? Думаете, эти люди об этом задумываются? Опечаточка прямо в тему  Это проблемы пук "радиолюбителей" (не зря это слово кроме смысла, обозначающего хобби человека, имеет и смысл, близкий к матерному), а не "блоков питания PC" вообще. Радиолюбители разные бывают, некоторые не ленятся арматурку спустить и хоррошую железяку метра на полтора в землю закопать  Хоть я и верю в особо убойные блоки, к которым "без валидола нельзя" - мне они просто не попадались. При том, что на столе обычно стоит "первый попавшийся" блок питания. Раньше - какой-нибудь 286-ой или "поиск" уже окончательно отжил своё и из него просто вымародёрен блок, так как никто не претендует на замену в нём мамки и получение в наследство его монитора. Сейчас - взятый у того, кто на фирме за это дело отвечает ("если сейчас под рукой запасного нет, то как будешь заказывать компы - закажи для меня блок питания" - т.е. _я_ специально блоки не отбирал, брались из общего потока).
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 30 2008, 11:07
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Если комуто вдруг интересно будет(тк как в асме я не силен) ложу три сгенеренных компиляторами файла linavr_new - gcc-4.3.0 + binutils-2.18 + libc-1.6 linavr_old - gcc-3.4.6 + binutils-2.15.92.0.2 + libc-1.4.6 winavr - gcc-4.1.2 + binutils-2.17 + libc-1.4.6
|
|
|
|
|
Apr 30 2008, 15:41
|
Местный
  
Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294

|
Цитата(smalcom @ Apr 30 2008, 12:19)  на БП пульсациии я мерял - 50мВ при частое 50Гц+многоКГц Измерял-правильное слово. И какое средство измерения Вы применяли? Выбросы на частоте нескольких мегагерц зафиксировали? Или школьный вольтметр не позволяет этого сделать?
|
|
|
|
|
Apr 30 2008, 16:28
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(smalcom @ Apr 30 2008, 15:07)  Если комуто вдруг интересно будет(тк как в асме я не силен) ложу три сгенеренных компиляторами файла linavr_new - gcc-4.3.0 + binutils-2.18 + libc-1.6 linavr_old - gcc-3.4.6 + binutils-2.15.92.0.2 + libc-1.4.6 winavr - gcc-4.1.2 + binutils-2.17 + libc-1.4.6 Это что, игра найдите десять отличий? Я нашел одно в коде откомпилированном gcc-4.3.0 есть работа с ватшдогом в gcc-4.1.2 нет. Если код разный, то я не могу сказать что дело только в компиляторе. В следующий раз посылайте исходники. Да еще. Компилируют проект с отключенной оптимизацией только те, кто не знает слова volatile. Анатолий.
|
|
|
|
|
Apr 30 2008, 16:31
|

Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544

|
Цитата Вы, наверное, не трогаете ножки кварца на материнке в рабочем состоянии. Нет конечно. А зачем? Цитата Мп3 плееры не слетали при подключении к компу? а Флэшки? Ни разу. Ни дома, ни работе. Цитата Теперь просто представьте куда пойдут заряды если внешнее устройство имеет нулевой потенциал до касания корпуса? А самое главное через какие контакты? Тот же самый USB-разъём взгляните как выглядит. Сначала идут контакты питания, а затем сигнальные. Та же песня и с PCMCI. Как Вы думаете, почему? А потому, что сначала уравниваются потенциалы внешнего устройства с компьютером, на периферию подается питание, сразу же выходы внешнего устройства переводятся в Z-состояние и только потом начинается "болтовня" периферейной платы с ПК. Чуток OFF. С незаземленным компьютером проблема была один раз. Когда системный блок стоял рядом с батареей центрального отопления. На него запрыгнула кошка, которую только что "постирали". Какое же было её удивление, когда одна лапка была на системнике, а вторую она поставила на батарею.
|
|
|
|
|
Apr 30 2008, 16:42
|
Местный
  
Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294

|
Цитата(Igor26 @ Apr 30 2008, 19:31)  Нет конечно. А зачем? Ни разу. Ни дома, ни работе. Счастливец...Зайдите как-нибудь в любой сервисный центр компьютерной фирмы... Цитата(Igor26 @ Apr 30 2008, 19:31)  Тот же самый USB-разъём взгляните как выглядит. Сначала идут контакты питания, а затем сигнальные. Та же песня и с PCMCI. Как Вы думаете, почему? А потому, что сначала уравниваются потенциалы внешнего устройства с компьютером, на периферию подается питание, сразу же выходы внешнего устройства переводятся в Z-состояние и только потом начинается "болтовня" периферейной платы с ПК. Блаженны верующие...
|
|
|
|
|
May 1 2008, 05:08
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
2FlasherЦитата Измерял-правильное слово Или школьный вольтметр не позволяет этого сделать? у вас плохой день? наехать охота? Школьный вольтметр называется С1-76 2aesokЦитата В следующий раз посылайте исходники. с начала значит тему не читал... исходники одни и теже ммм, да в одной прошивке было там про ватчдог. уже после того как начал разбираться. ЗЫ. исходник в качестве коментариев помещен в ассемблерный листинг Цитата Компилируют проект с отключенной оптимизацией только те, кто не знает слова volatile. "Пгемного благодаген"... Спасибо за совет а отличия есть. пример функции полученной новым Цитата void Usart0_SetAddress(byte ad) { ce: df 93 push r29 d0: cf 93 push r28 d2: 0f 92 push r0 d4: cd b7 in r28, 0x3d ; 61 d6: de b7 in r29, 0x3e ; 62 d8: 89 83 std Y+1, r24 ; 0x01 addr = ad; da: 89 81 ldd r24, Y+1 ; 0x01 dc: 80 93 13 03 sts 0x0313, r24 } e0: 0f 90 pop r0 e2: cf 91 pop r28 e4: df 91 pop r29 e6: 08 95 ret и старым Цитата void Usart0_SetAddress(byte ad) { ce: cf 93 push r28 d0: df 93 push r29 d2: cd b7 in r28, 0x3d ; 61 d4: de b7 in r29, 0x3e ; 62 d6: 21 97 sbiw r28, 0x01 ; 1 d8: 0f b6 in r0, 0x3f ; 63 da: f8 94 cli dc: de bf out 0x3e, r29 ; 62 de: 0f be out 0x3f, r0 ; 63 e0: cd bf out 0x3d, r28 ; 61 e2: 89 83 std Y+1, r24 ; 0x01 addr = ad; e4: 89 81 ldd r24, Y+1 ; 0x01 e6: 80 93 17 03 sts 0x0317, r24 ea: 21 96 adiw r28, 0x01 ; 1 ec: 0f b6 in r0, 0x3f ; 63 ee: f8 94 cli f0: de bf out 0x3e, r29 ; 62 f2: 0f be out 0x3f, r0 ; 63 f4: cd bf out 0x3d, r28 ; 61 f6: df 91 pop r29 f8: cf 91 pop r28 fa: 08 95 ret компиляторами
|
|
|
|
|
May 1 2008, 15:01
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-12-07
Пользователь №: 33 465

|
Автору темы, для решения вопроса, следует выложить принципиальную схему(если он конечно не против), хотя бы цепи питания от входного разъема до МК. С этого и начнём, дальше будет видно...
Сообщение отредактировал svl - May 1 2008, 15:12
|
|
|
|
|
May 2 2008, 07:56
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-12-07
Пользователь №: 33 465

|
Попробуй подключить к схеме аккумулятор или крону, решает вопрос о помехе в питании и погоняй девайс. А вообще в качестве стабилизатора, я бы использовал ШИМ + танталы по цепи питания.
|
|
|
|
|
May 2 2008, 11:18
|
Местный
  
Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294

|
Цитата(smalcom @ May 2 2008, 01:05)  схема, софт?невопрос Критика схемы: Зачем нужно- пояснять не буду- хто знает- сам поймет. 1) МАХ232 - со стороны PC последовательно резисторы 100 Ом и кондеры 100пик между выходом и входом максимки. 2)С15 убрать, С13 уменьшить до 4,7мкф 3)Вход 12 вольт на кренку пустить через резистор пару ом. Параллельно входу кренки поставить что-то типа 1,5КЕ18А 4) вместо 6N137 можете еще глянуть в сторону H11L1 5) внешний супервизор- ну просто нах не нужен. 6) Набуя там hc245 - науке неизвестно... Про все остальное- автор может в асю стукнуть при желании- поможем.
|
|
|
|
|
May 2 2008, 13:02
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Flasher @ Apr 26 2008, 06:38)  Это компьютерный блок питания. В большинстве случаев товарищи даже и не знают, что пытаются запитать свою технику от драндулета, на корпусе которого в незаземленном варианте присутствует 110 Вольт Хм... А сколько там, по-вашему, ДОЛЖНО БЫТЬ, в незаземленном варианте-то? И какое сопротивление было у мультиметра, котрым вы намеряли эти 110 В? Цитата(Flasher @ May 2 2008, 20:48)  Критика схемы: Некоторые моменты в схеме позволяют уверенно утверждать, что автор схемы не читал статью "Помехоустойчивые устройства"
|
|
|
|
|
May 2 2008, 13:23
|
Местный
  
Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294

|
Цитата(=AK= @ May 2 2008, 16:02)  Хм... А сколько там, по-вашему, ДОЛЖНО БЫТЬ, в незаземленном варианте-то? И какое сопротивление было у мультиметра, котрым вы намеряли эти 110 В? Некоторые моменты в схеме позволяют уверенно утверждать, что автор схемы не читал статью "Помехоустойчивые устройства"Открываем схему любого компового блока питания. На входе между фазовым и нулевым проводом стоят на корпус(который должен подключаться к заземлению) конденсаторы 4700 *2kV. Для переменного тока частотой 50Гц эти конденсаторы имеют реактивное сопротивление = 1 / (2 * Pi * F * C) 670кОм. Образуется делитель напряжения , со средней точкой на корпусе, если его не заземлить. Китайский мультиметр имеет входное сопротивление несколько Мом...дальше объяснять? Насчет второго замечания- когда сможете изготовлять устройства с 4 группой жесткости по электромагнитной совместимости- обсудим тонкости за баночкой пива вместе
|
|
|
|
|
May 2 2008, 13:28
|

извечный пессимист
    
Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125

|
Цитата(smalcom @ May 2 2008, 03:05)  2Flasher, я действительно неправ с пунктуацией в первом посте -приношу извинения. схема, софт?невопрос чета в одном посте не добавило
По схеме можно сказать одно, половину деталей можно смело выкинуть в результате хватит и 88меги, а вот то что необходимо на схеме не наблюдается. Особенно умиляют подтяжки на 485 - 47К, а так же транзистор. который и нафиг там не нужен, да и резисторы по SPI - 4,7К внушают уважение
--------------------
Slaves are those of this world Given freedom to lay chains upon The Master The wolf is no longer free Release the chains and come for me
|
|
|
|
|
May 2 2008, 13:35
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Flasher @ May 2 2008, 22:53)  дальше объяснять? Да. Пожалуйста, не останавливайтесь на полдороги. Недоговоренности могут привести к ошибкам. Цитата(Flasher @ May 2 2008, 22:53)  Насчет второго замечания- когда сможете изготовлять устройства с 4 группой жесткости по электромагнитной совместимости- обсудим тонкости за баночкой пива вместе  Я дал ссылку на статью, которую, насколько я могу судить, автор схемы не читал, но которую ему, как мне кажется, полезно было бы прочесть. Объясните, каким таинственным образом моя рекомендация почитать статью связана с тем, прошли ли мои изделия испытания на 4 группу или нет? Пока что речь идет о том, что устройство и на 1 группу не тянет, поскольку зависает даже при очевидном отсутствии внешних помех.
|
|
|
|
|
May 2 2008, 14:10
|
Местный
  
Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294

|
Цитата(=AK= @ May 2 2008, 16:35)  Да. Пожалуйста, не останавливайтесь на полдороги. Недоговоренности могут привести к ошибкам. Я дал ссылку на статью, которую, насколько я могу судить, автор схемы не читал, но которую ему, как мне кажется, полезно было бы прочесть. Объясните, каким таинственным образом моя рекомендация почитать статью связана с тем, прошли ли мои изделия испытания на 4 группу или нет? Пока что речь идет о том, что устройство и на 1 группу не тянет, поскольку зависает даже при очевидном отсутствии внешних помех. Рекомендацию принял на свой счет  Так что ссори, если что не так. Статья довольно жиденькая и многие ошибки она никак не поможет найти. Поэтому максимум- пару выводов автор может взять на будущее. здесь больше вопрос целесообразности схемотехнических решений. Продолжу про БП. Корпус его во многих реализациях соединен с общим проводом выходных цепей, а уж если он находится в компьютере- то тем более соединен. Таким образом на устройстве присутствует потенциал половины сетевого напряжения относительно заземления и всего что не имеет этого потенциала. Ток КЗ между землей и корпусом 110В/680 Ком. -десятые доли миллиампера. Так что при касании устройства чем-то еще пойдет ток через схему либо до уравнивания потенциалов либо постоянно. Отчего схема, конечно , может обидется...
|
|
|
|
|
May 2 2008, 21:33
|

Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342

|
Цитата(Stanislav_S @ May 2 2008, 16:28)  Особенно умиляют подтяжки на 485 - 47К, а так же транзистор. который и нафиг там не нужен, Подтяжки как подтяжки... Вы зато посмотрите на супернавороченный "терминатор"!  При таком терминаторе (с высоким импедансом на постоянке) хватит и 47К. Теперь насчет транзистора. Как я вижу, изолированное питание для RS-485-ой части (" +5Viso") схема получает отдельно, по одному кабелю с самой линией? Мы с таким сталкивались. Получается, при отрубании питания процессорной части с сохранением питания линии выход оптрона включения драйвера (в данной схеме "ISO2") в "неактивном" состоянии, т.е. транзистор оптрона закрыт, и если он напрямую подключен к DE драйвера RS-485, то подтяжка к " +5Viso" заставляет драйвер включаться на постоянную передачу....  Весь обмен на линии останавливается, объект стоит, электрики бегают, операторы матерятся, мастера смены пинают программистов...  ...И все это из-за отсутствия инвертора между выходом оптрона и входом DE драйвера RS-485. Разработчики этой схемы, судя по наличию инвертора (в виде Q1) тоже с такой проблемой сталкивались  . Другое дело, что "забыли" КРЕНку сделать на " +5Viso", а по линии подавать вольт 12, но это уже другие проблемы... У нас, например, сделан в каждом модуле на питание RS-485 персональный DC/DC от основного питания всей схемы.
--------------------
Gray©at
|
|
|
|
|
May 3 2008, 03:38
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Flasher @ May 2 2008, 23:40)  Продолжу про БП. Корпус его во многих реализациях соединен с общим проводом выходных цепей, а уж если он находится в компьютере- то тем более соединен. Таким образом на устройстве присутствует потенциал половины сетевого напряжения относительно заземления и всего что не имеет этого потенциала. Угу. Странно было видеть, что в своем исходном посте вы преподносите это как открытие, как удивительное и мало кому известное откровение. Следующий шаг. В своем исходном посте вы особо выделяете и все время подчеркиваете, что речь идет о БП компьютера. Создается впечатление, что БП компьютера в этом смысле является чем-то особым, выдающимся. Так ли это? Какое напряжение вы ожидаете увидеть между землей и вторичной если возьмете обычный трансформатор 220В 50Гц? А если возьмете маломощный импульсный блок питания, тапример, так наз. "plug pack" (т.е. маломощный БП, совмещенный с сетевой вилкой)? Цитата(Flasher @ May 2 2008, 23:40)  Отчего схема, конечно , может обидется... Как вы думаете, может ли "обидеться" схема, если вместо БП компьютера используется любой другой БП (конечно, при прочих равных, т.е. при отсутствии заземления)? Цитата(Flasher @ May 2 2008, 20:48)  6) Набуя там hc245 - науке неизвестно... Судя по тому, что проц может управлять их направлением, они используются и как входные буферы, и как выходные драйверы типа "с открытым эмиттером". Особой науки в этом нет, просто надо схемы научиться читать.
|
|
|
|
|
May 3 2008, 05:11
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
По поводу транзистора в 485 тута уже объяснили)) таки были проблемы с переходом в состояние передачи. HC245 нужны для того чтобы они выгорали - их легче менять чем атмегу, плюс вместо них можно ставить улн2803. Подтяжки на 485ом на 47к нужны чтобы при переходе всех модулей в режим приема линии не принимала нестабильных состояний. Почему не пущено по линии 12В, почему нет защиты от переполюсовки питания? Провтыкал, када управляющие звенья начинают вмешиваться и когда "быстрей, быстрей,быстрей". По поводу оптрона - посмотрю, сенк. Резисторы в цепи 232, угу я в курсе про них, но данные железяки используются в нестандартных местах... К примеру кабель с 232-м до следующего устройства может быть 5,7,15 метров. Супервизор зачем? Я - параноик) Цитата У нас, например, сделан в каждом модуле на питание RS-485 персональный DC/DC от основного питания всей схемы. тоже так хотел, уже и накидал схемку, как вдруг: Я: шеф пали какая железяка у нас терь будет! Шеф: должно быть маленькое и дешевое! Я: Ммм, ладно.
|
|
|
|
|
May 3 2008, 07:18
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(smalcom @ Apr 30 2008, 15:07)  Если комуто вдруг интересно будет(тк как в асме я не силен) ложу три сгенеренных компиляторами файла linavr_new - gcc-4.3.0 + binutils-2.18 + libc-1.6 linavr_old - gcc-3.4.6 + binutils-2.15.92.0.2 + libc-1.4.6 winavr - gcc-4.1.2 + binutils-2.17 + libc-1.4.6 Прблема вот здесь (castet_switch_rs1.7ucom.linavr_new.lss): Код SIGNAL(_VECTOR(10)) //4.4ms { 97a: 1f 92 push r1 97c: 0f 92 push r0 97e: 0f b6 in r0, 0x3f; 63 980: 0f 92 push r0 982: 11 24 eor r1, r1 984: 8f 93 push r24 986: df 93 push r29 988: cf 93 push r28 98a: cd b7 in r28, 0x3d; 61 98c: de b7 in r29, 0x3e; 62 TickVal1s++; 98e: 80 91 56 03 lds r24, 0x0356 992: 8f 5f subi r24, 0xFF; 255 994: 80 93 56 03 sts 0x0356, r24 TickVal50ms++; 998: 80 91 55 03 lds r24, 0x0355 99c: 8f 5f subi r24, 0xFF; 255 99e: 80 93 55 03 sts 0x0355, r24 //input devices Inputs_Test(); 9a2: 0e 94 52 08 call 0x10a4; 0x10a4 <Inputs_Test> Usart0_FF(); При в ходе в обработчик прерывания сохраняються регистры r1, r0, SREG, r24, r29, r28. Дальше по коду идет вызов функции Inputs_Test, которая: Код void Inputs_Test(void) { 10a4: df 93 push r29 10a6: cf 93 push r28 10a8: cd b7 in r28, 0x3d; 61 10aa: de b7 in r29, 0x3e; 62 if((IN_PORT & (0x01 << COIN_IN)) == 0) //if high level on input1 pin 10ac: e9 e3 ldi r30, 0x39; 57 10ae: f0 e0 ldi r31, 0x00; 0 10b0: 80 81 ld r24, Z 10b2: 88 2f mov r24, r24 10b4: 90 e0 ldi r25, 0x00; 0 10b6: 81 70 andi r24, 0x01; 1 10b8: 90 70 andi r25, 0x00; 0 10ba: 00 97 sbiw r24, 0x00; 0 Изменяет регистры r31, r30, r24, r25. Тоесть, обработчик прерываня сохраняет не все регистры которые в нем изменяються. gcc-4.1.2 генерирует правильный код: Код SIGNAL(_VECTOR(10)) //4.4ms { 9ee: 1f 92 push r1 9f0: 0f 92 push r0 9f2: 0f b6 in r0, 0x3f; 63 9f4: 0f 92 push r0 9f6: 11 24 eor r1, r1 9f8: 2f 93 push r18 9fa: 3f 93 push r19 9fc: 4f 93 push r20 9fe: 5f 93 push r21 a00: 6f 93 push r22 a02: 7f 93 push r23 a04: 8f 93 push r24 a06: 9f 93 push r25 a08: af 93 push r26 a0a: bf 93 push r27 a0c: ef 93 push r30 a0e: ff 93 push r31 a10: cf 93 push r28 a12: df 93 push r29 a14: cd b7 in r28, 0x3d; 61 a16: de b7 in r29, 0x3e; 62 Прада зачем было нужно лесть с отверткой в кварц я не понял. Анатолий.
Сообщение отредактировал aesok - May 3 2008, 07:19
|
|
|
|
|
May 3 2008, 08:03
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(smalcom @ May 3 2008, 14:41)  HC245 нужны для того чтобы они выгорали - их легче менять чем атмегу, плюс вместо них можно ставить улн2803. Хм... Вы в курсе, что ULN2803 имеют выходы с открытым коллектором, т.е. ток нагрузки втекает в выходы, а то, что у вас нарисовано на выходе 245-х дает вытекающий ток? Странные у вас "замены". Цитата(smalcom @ May 3 2008, 14:41)  Подтяжки на 485ом на 47к нужны чтобы при переходе всех модулей в режим приема линии не принимала нестабильных состояний. Приемники RS485 всегда имеют петлю гистерезиса (т.е. являются триггерами Шмитта). Поэтому для них принципиально не существует "нестабильных состояний", их выход стабильно находится или в 0, или в 1. Я догадываюсь, что говоря о "нестабильных состояниях" вы на самом деле имели ввиду "неопределенные состояния". Действительно, когда все приемопередатчики RS485 находятся в режиме приема, и разность напряжений между сигнальными линиями мала, на выходе любого приемника может быть как 0, так и 1, заранее сказать нельзя, что именно. При этом даже малая помеха, наведенная на линию связи, способна вызвать переключение и инициировать начало прииема ложного пакета данных. Для определенности и уменьшения влияния помех предпочтительно использовать приемопередатчики с так наз. failsafe фичей. Читайте аппноту TI Interface Circuits for TIA/EIA-485 (RS-485), там это подробно разобрано начиная со стр. 2-5. Обратите внимание на рекомендуемые номиналы резисторов подтяжки. Навешивая подтягивающие резисторы или используя failsafe приемники, вы не избавляетесь от неопределенности сигнала на входе UARTа в паузах между пакетами. Эта неопределенность уменьшается, но не исчезает. При мало-мальски мощной наведенной помехе вы опять получите на входе UART-а то, что вам не хотелось бы видеть. Вообще же требование на наличие failsafe (самопального или встроенного) является верным признаком того, что или используется дурной самопальный протокол обмена, или же нормальный протокол реализован программистом с грубыми ошибками. В любом случае помехоустойчивость обмена будет примерно в сотню раз хуже, чем могла бы быть, если бы, например, был использован грамотно реализованный Modbus RTU. Хорошему протоколу совершенно по барабану, каково состояние приемников, когда на линии нет драйвера.
|
|
|
|
|
May 3 2008, 08:43
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(forever failure @ May 3 2008, 17:43)  Подтяжки драйвера RS-485, кстати тоже неправильно сделаны. Линия A должна подтягиваться к "+", B - к общему ("-"), а не наоборот. Имейте ввиду, что оптрон инвертирует сигнал. Однако, даже если бы он не инвертировал. Объясните, почему, собственно, на входе UARTа вам хочется в паузах между пакетами видеть высокий уровень, а не низкий. Зачем?
|
|
|
|
|
May 3 2008, 09:56
|
Гуру
     
Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613

|
Цитата(smalcom @ May 3 2008, 09:11)  Я: шеф пали какая железяка у нас терь будет! Шеф: должно быть маленькое и дешевое! Я: Ммм, ладно. L78M05 имеет небольшой выходной ток. Стоит подумать над необходимостью предохранителей F1, F2. Они сработают при выходе из строя L78M05, но тогда достаточно одного на входе, да еще необходимо чем то ограничить напряжение на выходе стабилизатора, иначе в предохранителях уже не будет смысла. Зачем так поставлен F3? Защиту по входному питанию стоит поставить. По зависаниям, если не менялась разводка, вряд ли кто поможет. Ищите отличия в платах, деталях.
|
|
|
|
|
May 3 2008, 10:55
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(aesok @ May 3 2008, 11:18)  Тоесть, обработчик прерываня сохраняет не все регистры которые в нем изменяються. Попробуйте все функции которые вызываються из прерываний объявить с атрибутом "always_inline" Анатолий.
|
|
|
|
|
May 3 2008, 19:34
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
2aesok, МЕГАСЕНК. как думаете в мейллист команде гцц стоит написать об этом, или это ключами компилятора решается? Попробую совет. Цитата Хм... Вы в курсе, что ULN2803 имеют выходы с открытым коллектором, т.е. ток нагрузки втекает в выходы, а то, что у вас нарисовано на выходе 245-х дает вытекающий ток? Странные у вас "замены". управлять же можно разными железками. бывают такие которым нужен ТТЛ, есть такие которым нужен мощный выход ОК. в зависимости от этого используется та или иная ревизия. также ревизию с 245ми проще(почти только программно) перевести на 16входов(ЗЫ. встречалась правка ТЗ прямо на объекте). Цитата Вообще же требование на наличие failsafe (самопального или встроенного) является верным признаком того, что или используется дурной самопальный протокол обмена, или же нормальный протокол реализован программистом с грубыми ошибками. протокол работает хорошо и ошибки отсеиваются без проблем. я просто перестраховываюсь(этим блокам 3года от роду) Цитата L78M05 имеет небольшой выходной ток есть на 1 ампер. Вылетает эта штука не сразу при достижении одного ампера. Цитата Зачем так поставлен F3? при работе с улн он ограничивает ток нагрузки. Цитата иначе в предохранителях уже не будет смысла самое первое когда я увидел работу предохранителей в деле - это нередкие ошибки монтажников и сопли на атмеге. в итоге контроллер просто молчит, а не вытягивает за собой все что не выдержит тока замыкания. Цитата Ищите отличия в платах, деталях. проблема найдена - разный код, сгенерированный разными компиляторами
|
|
|
|
|
May 3 2008, 21:15
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(smalcom @ May 3 2008, 23:34)  2aesok, МЕГАСЕНК. как думаете в мейллист команде гцц стоит написать об этом нет не нужно, поздно уже писать. Анатолий.
|
|
|
|
|
May 3 2008, 21:31
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(defunct @ May 4 2008, 01:17)  А этот баг присутсвует в версии 4.2.2? Нет, только в 4.3.0 Анатолий.
|
|
|
|
|
May 3 2008, 22:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата Объясните, почему, собственно, на входе UARTа вам хочется в паузах между пакетами видеть высокий уровень, а не низкий. Зачем? Чтобы при неактивном канале было НЕАКТИВНОЕ логическое состояние - чтобы не только активность в канале определялась без лишних вопросов, но и чтобы неактивный канал не вызывал разнотолков. Тем более если у Вас аппаратный УАРТ с определением состояния линии BREAK, то Вы на коне, а если программный - придётся натрудить не только мозолей на пальцах, но и места в памяти программ, которой не завсегда много, ну а если какой-нить простенький аппаратный УАРТ, то научиться обходить его типа "убогость" может оказаться сложнее, чем реализовать весь программно. Итого - использование определения сигнала линии BREAK избыточно и нецелесообразно в относительно простых программно-аппаратных решениях. Ну и далее - переход из BREAK в режим передачи должен сопровождаться выдерживанием передающим хостом некоего таймаута не менее 1-го байта или вариантов с заполнением канала некими символами (0xFF) перед непосредственно передачей, а последнее налагает некоторые ограничения на реализации протоколов. IMNHO, при неактивном состоянии линии её удержание в состоянии логического нуля не просто нецелесообразно, но и неоправданно усложняет само использование канала. IMHO линию нужно держать при неактивном состоянии в логической единице, что избавит всех от ненужных хлопот. ЗЫ. Программы, у которых "срывает крышу" от всяких несуразиц в канале - на помойку, независимо от того, какой уровень в канале при неактивном состоянии.
--------------------
aka Vit
|
|
|
|
|
May 4 2008, 00:41
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(sensor_ua @ May 4 2008, 07:33)  Чтобы при неактивном канале было НЕАКТИВНОЕ логическое состояние - чтобы не только активность в канале определялась без лишних вопросов, но и чтобы неактивный канал не вызывал разнотолков. В неактивном канале нужное вам состояние на входе UART-а обеспечивается подтягивающими резисторами. Предположим, вы поставили резисторы по 1к, т.е. один резистор тянет на +5, другой - на землю. Какой мощности должна быть наведенная помеха для того, чтобы на входе UART-а появился ложный "старт"? В первом приближении, помеха должна иметь можность 5В^2/2k=12.5 мВт (у автора топика с его 47к подтяжками будет еще меньше, но это не суть важно). После этого ваша софтинка примет помеховый сигнал за истинный, поскольку вы надеетесь на резисторы и на то, что такой помехи не будет. Начнется ложный прием, а пришедший вслед за этим настоящий пакет данных будет испорчен. Теперь оценим, какой мощности должна быть помеха, которая "испортит жизнь" правильному протоколу, такому, как Modbus RTU и т.п. Правильный протокол не делает никаких предположений о состоянии линии связи в паузах. Зато он требует, чтобы в начале каждого пакета включенный передатчик держал пасивное высокое состояние на линии в течении определенного времени, которое должно быть существенно больше, чем байт-интервал. Еще такой протокол требует, чтобы во время передачи пауза между соседними байтими в пакете была определенной и достаточно маленькой. Предположим, наведенная помеха в паузах запускает ложный прием. Однако ложный пакет будет отвергнут, поскольку очень маловероятно, что она выдает помеховые импульсы в нужном темпе (чтобы выполнялось требование о малой паузе между байтами) и что CRC помехового пакета будет правильным. Предположим, наведенная помеха запускает ложный прием незадолго до начала истинного пакета. Однако включенный передатчик своим выходом задавит помеху, а длинная пауза в начале передачи заставит приемник выбросить помеховый пакет, поскольку за время действия паузы не приходит новых байтов - не выполняется условие малой паузы между соседними байтами. Теперь оценим, какой мощности должна быть помеха, чтобы испортить настоящий пакет данных в таком протоколе. Работающий передатчик RS485 обязан уметь выдавать на линию не менее 60 мА тока (реально выдает раза в два больше). Мощность помехи, необходимая для того, чтобы пересилить выход передатчика, должна быть 5В*60мА=300мВт. Почти в 20 раз больше, чем с резисторами. Вот настолько и будет лучше помехоустойчивость правильного протокола по сравнению с дешевыми самопалами, которым нужно, "чтобы при неактивном канале было НЕАКТИВНОЕ логическое состояние" (с). Разница в десятки-сотни раз. Цитата(sensor_ua @ May 4 2008, 07:33)  ЗЫ. Программы, у которых "срывает крышу" от всяких несуразиц в канале - на помойку, независимо от того, какой уровень в канале при неактивном состоянии. Добавьте к программам протоколы, у которых "срывает крышу" от всяких несуразиц в канале.
|
|
|
|
|
May 4 2008, 14:41
|

Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342

|
Насчет "устойчивости" протокола... Вот вы когда дорогу переходите на светофоре. Тоже, в принципе, придерживаетесь определенного протокола: "Красный - стоять, зеленый - идти". Вполне нормальный, достаточно помехоустойчивый протокол. НО. Когда загорается зеленый и вы собираетесь пойти - вы смотрите на дорогу? Вы убеждаетесь в отсутствии "лихачей", стареньких подслеповатых дедушек на "Москвичах", блондинок? Во-от, так что как бы ни был хорош "протокол" - но если есть возможность улучшить его работу элементарными средствами (в данном случае "растяжки" на RS-485), надо ими воспользоваться. =AK= все правильно написал про "грамотно реализованный" протокол, при наличии помех он, конечно, "битые" пакеты не пропустит... Но для уменьшения количества этих самых битых пакетов вдобавок к протоколу меры защиты аппаратного уровня не помешают. Цитата(=AK= @ May 3 2008, 11:43)  Имейте ввиду, что оптрон инвертирует сигнал. Внимательно изучите схему. В этом включении - не инвертирует! Цитата Однако, даже если бы он не инвертировал. Объясните, почему, собственно, на входе UARTа вам хочется в паузах между пакетами видеть высокий уровень, а не низкий. Зачем? Потому что "исторически так сложилось" © М.С.Горбачев. В "неактивном" состоянии на линии UART предполагается уровень "MARK" (равный -12В в RS-232 или лог. "1" в ТТЛ). Стартовый бит начинается с перехода "MARK -> SPACE".
--------------------
Gray©at
|
|
|
|
|
May 4 2008, 17:21
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Цитата Замените хотя бы ISO2 на обычный транзисторный оптрон я хотел их заменить, проблема в том что разработка данного варианта велась в краткие прекраткие сроки, я еще и втык получил за попытку сделать лучше Цитата Вы же, надеюсь, не дергаете сигнал прием/передача с частотой 1 МГц? нет, конечно)) максимум вроде около 100-150Гц по протоколу. протокол у меня простой: Заголовок Адресат Команда Данные постоянной длины CRC16 перед отправкой пакета задержка, чтобы линия успокоилась. есть главный контроллер который опрашивает линию у всех ведомых и полученные данные отправляет на комп. в линии не больше 32 устройств. длина линии в среднем 100м(так по памяти, есть больше, есть меньше). топология - шина(тк это RS485). скорость - 19200.
|
|
|
|
|
May 4 2008, 23:13
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(GrayCat @ May 5 2008, 00:11)  Во-от, так что как бы ни был хорош "протокол" - но если есть возможность улучшить его работу элементарными средствами (в данном случае "растяжки" на RS-485), надо ими воспользоваться. Наличие или отсутствие растяжек никак не влияет на работу правильного протокола, поэтому "улучшить его работу" растяжками невозможно. "Чувствительность" к наличию растяжек есть полная гарантия того, что протокол плохой. Цитата(GrayCat @ May 5 2008, 00:11)  Но для уменьшения количества этих самых битых пакетов вдобавок к протоколу меры защиты аппаратного уровня не помешают. Растяжки не уменьшают количество битых пакетов, если протокол правильно реализован. Чтобы получился битый пакет, в плохом протоколе помеха должна пересилить растяжки, а в хорошем - пересилить работающий выход передатчика. Цитата(smalcom @ May 5 2008, 02:51)  перед отправкой пакета задержка, чтобы линия успокоилась. Я писал, что нужно два элемента: - "Задержка перед отправкой пакета", когда передатчик включен, но данных не передает. Длительность паузы - порядка 2-3 байт-интервалов. - Гарантия малых пауз между соседними байтами в пакете. Если приемник видит большую паузу между байтами, текущий пакет немедленно выбрасывается как ложный, а приемник мгновенно приводится в состояние готовности к приему нового пакета. При этом ложные помеховые пакеты, прием которых начался в паузе между настоящими пакетами, будут выброшены за время паузы в начале настоящего пакета. Соответственно, помеха не в состоянии испортить пакет данных, вне зависимости от наличия или отсутствия подтяжек.
|
|
|
|
|
May 5 2008, 02:35
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(=AK= @ May 5 2008, 02:13)  При этом ложные помеховые пакеты, прием которых начался в паузе между настоящими пакетами, будут выброшены за время паузы в начале настоящего пакета. Соответственно, помеха не в состоянии испортить пакет данных, вне зависимости от наличия или отсутствия подтяжек. Есть более простой способ решающий эту проблему - байт стаффинг. Никаких задержек и никаких лишних включений "перед отправкой пакета" не потребуется. Не потребуется также отмерять точные интервалы. Проигрываем в объеме передаваемых данных, но раз используются скорости 19200 предположу, что трафик в сети невелик, а значит применить байт стаффинг можно. Цитата по протоколу. протокол у меня простой: Заголовок Адресат Команда Данные постоянной длины CRC16 Что такое "Заголовок"? Если его выбросить то формат у вас совпадает с modbus rtu. Когда "Адресат" идет первым, то по первому же байту можно определить предназначен ли этот пакет конкретному устройству или нет и вести предварительную отбраковку еще в прерывании.
|
|
|
|
|
May 5 2008, 03:00
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(defunct @ May 5 2008, 12:05)  Есть более простой способ решающий эту проблему - байт стаффинг. Никаких задержек и никаких лишних включений "перед отправкой пакета" не потребуется. Не потребуется также отмерять точные интервалы. Нет, не работает. В ситуации, когда помеха запускает UART ложным старт-битом незадолго до байта заголовка (soh), ваш пакет бyдет испорчен, поскольку заголовочный байт не будет принят. Значит, при определенном уровне помех, когда ложный запуск происходит часто, связи вообще не будет, все пакеты бyдут испорчены. Правильный протокол в этой ситуации будет работать как ни в чем не бывало.
|
|
|
|
|
May 5 2008, 03:54
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(=AK= @ May 5 2008, 06:00)  В ситуации, когда помеха запускает UART ложным старт-битом незадолго до байта заголовка (soh), ваш пакет бyдет испорчен, поскольку заголовочный байт не будет принят. Не будет ничего испорчено. Последовательность такая: Передатчик посылает 1-2 байта преамбулы 0xFF, открывающую стаффинг последовательность, RTU пакет, закрывающую стаффинг последовательность, и байт преамбулы. Использую этот подход в радио каналах и серьезно задумываюсь над переносом этого протокола в 485 сети потому что жесткие времянки модбаса слегка достают уже (при том что против формата RTU пакетов я ничего не имею - формат грамотный). Плюсы: 1. Передатчик волен вставлять любые паузы между символами (актуально когда хост - компьютер с не реал-тайм драйвером UART'a), 2. Четко выделяется начало и конец пакета, к обработке можно переходить немедленно после приема закрывающего флага, не нужно считать CRC в прерывании на слейве. 3. Опять же хост - тот же компьютер с не риалтайм приемником вместо непрогнозируемого таймаута четко распознает конец пакета - что уменьшает время реакции. Минусы Избыточность. (в худшем случае 2х кратное увеличение количества передаваемых данных на 1 пакет).
|
|
|
|
|
May 5 2008, 06:22
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(defunct @ May 5 2008, 13:24)  Передатчик посылает 1-2 байта преамбулы 0xFF, открывающую стаффинг последовательность Если передатчик посылает всего 1 байт преамбулы 0xFF: - Помеха, которая создаст ложный старт-бит незадолго до этого, запустит UART - В момент прихода байтa преамбулы 0xFF, UART, находящийся где-то в середине приема байта, "не увидит" 0xFF, а увидит некий ложный байт. Пакет будет испорчен. Если передатчик посылает 2 байтa преамбулы 0xFF, то ситуация лучше: первый байт может быть испорчен, но второй "прочистит" приемник, так что пакет будет принят правильно. Однако по затратам времени два байта преамбулы ничем не лучше паузы в 2 байт-интервала. Что же касается накладных расходов, то ваши затраты на парсенье эскэйп-последовательностей выглядят не меньшими, чем затраты на проверку тайм-аутов между байтами. Разница в основном в том, что вы парсите софтом, а тайм-ауты проверяются в основном железом (таймером). Поэтому вам нужно меньше таймеров, но более производительный проц. В принципе шило на мыло, примерно тож на тож получится.
|
|
|
|
|
May 5 2008, 09:26
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(=AK= @ May 5 2008, 10:22)  - Помеха, которая создаст ложный старт-бит незадолго до этого, запустит UART Для того, чтобы не оказаться в такой ситуации я использую простой приём - ведущий тоже слушает линию в т.ч. и при своей передаче. Т.е. приёмник USART ведущего так-же будет запущен перед тем, как он начнёт передавать. Применительно к RS485 получится, что переданный и самопринятый байты ведущего не будут совпадать. В этом случае передатчик прерывает свою передачу и начинает всё заново. Временные затраты в этом случае минимальны. Но если вся сеть своя, и подключение чужих устройств не планируется, то есть НЕСРАВНЕННО ЛУЧШИЙ СПОСОБ - использование CAN-овских приёмопередатчиков. В этом случае приёмник может остановить передачу глючного пакета. Вообще при использовании CAN-овских приёмопередатчиков сплошные достоинства, и никаких недостатков - я когда-то давно эту тему поднимал. Кстати будет работать (не очень хорошо) сеть, где часть приёмопередатчиков RS485, а часть CAN.
|
|
|
|
|
May 5 2008, 09:39
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(galjoen @ May 5 2008, 18:56)  Для того, чтобы не оказаться в такой ситуации я использую простой приём - ведущий тоже слушает линию в т.ч. и при своей передаче. Т.е. приёмник USART ведущего так-же будет запущен перед тем, как он начнёт передавать. Применительно к RS485 получится, что переданный и самопринятый байты ведущего не будут совпадать. В этом случае передатчик прерывает свою передачу и начинает всё заново. Временные затраты в этом случае минимальны. Это будет работать при условии, что помехи во всей сети совершенно одинаковы, что, в общем-то, совсем не очевидно, особенно при больших длинах кабеля и пр. Кроме того, ввиду разброса параметров (порогов срабатывания) приемников, это вообще-то требует их индивидуального отбора.
|
|
|
|
|
May 5 2008, 10:15
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(=AK= @ May 5 2008, 13:39)  Это будет работать при условии, что помехи во всей сети совершенно одинаковы, что, в общем-то, совсем не очевидно, особенно при больших длинах кабеля и пр. Нет не так. Правильнее сказать так - это срабатывает не в 100% случаев. Но в случае не срабатывания этого приёма - сработает "классический" способ. Цитата(=AK= @ May 5 2008, 13:39)  Кроме того, ввиду разброса параметров (порогов срабатывания) приемников, это вообще-то требует их индивидуального отбора.  Приёмники можно не подбирать - применительно к АВР можно проинициализировать USART ведущего с U2X=1, а ведомого с U2X=0. При этом приёмник ведущего начнёт приём при более коротком (на 10%) импульсе помехи. Ещё можно не ставить у ведущего подтягивающих резисторов и т.д. Я вобщем-то и говорил, что такой способ был-бы вне конкуренции при использовании CAN-овских приёмопередатчиков. При этом приёмник, приняв помеху за стартовый бит, сам остановил-бы передачу ведущего. Но и при использовании RS485 результат лучше, чем при байт стаффинге и при передаче 1 перед передачей. Его можно ещё улучшить если параллельно приёмнику подать сигнал на вход прерывания или захвата. А насчёт способа с двумя FF - он не будет работать при контроле четности (или нечётности?) т.к. бит чётности будет 0. И приёмник может до бесконечности принимать его за стартовый бит (если передатчик использует 1 стоп-бит).
|
|
|
|
|
May 11 2008, 23:23
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(=AK= @ May 5 2008, 09:22)  Если передатчик посылает всего 1 байт преамбулы 0xFF: - Помеха, которая создаст ложный старт-бит незадолго до этого, запустит UART - В момент прихода байтa преамбулы 0xFF, UART, находящийся где-то в середине приема байта, "не увидит" 0xFF, а увидит некий ложный байт. Пакет будет испорчен. не будет пакет испорчен, так как приемник не ловит преамбулу. Преамбула используется для синхронизации. Приемник "ловит" (лучше сказать выделяет из потока мусора) только стаффинг последовательность. Один байт 0xFF даст возможность приемнику правильно принять стаффинг последовательность, т.к. гарантируется высокий уровень (СТОП) в линии на протяжении минимум 9 битов. Цитата Если передатчик посылает 2 байтa преамбулы 0xFF, то ситуация лучше: первый байт может быть испорчен, но второй "прочистит" приемник, так что пакет будет принят правильно. Первый байт, а не второй "прочищает" приемник. Если для устойчивого приема достаточно преамбулы в 1 байт, то два байта будет более чем достаточно. Что же касается временных затрат на посылку преамбулы и стаффинг последовательности - да они имеют место быть, но см. выше, такой подход в некоторых случаях (мастер PC) наоборот повышает скорость обмена, за счет: 1. пресечения таймаутов между пакетами; 2. простого распознаваения конца пакета - упрощение rx flow-control'a; + сводится к нулю количество потерянных пакетов, из-за неверно сформированных таймаутов, когда одно из устройств сети работает под управлением не real-time ОС (например мастер ПК под Windows) и используются передатчики с FIFO большого объема, но не позволяющие разместить пакет целиком. Цитата(Rst7 @ May 5 2008, 12:53)  Тут способ с двумя байтами 0xFF вне конкуренции, конечно. С одним 0xFF. AK просто не до конца смоделировал работу. Пусть помеха включила приемник за 2 бита до инициализации преамбулы. Тогда на линии будет следующий (12-ти битовый) фрейм: 0 x 0 1 1 1 1 1 1 1 1 1 [ стаффинг ] x - неопределенный бит после x начинается фрейм преамбулы 0xFF приемник примет байт 0xFD/0xFC вместо 0xFF, и проигнорирует его, передатчик будет удерживать высокий уровень на линии т.к. передается 0xFF + 1(2)СТОП(а), и не даст приемнику начать прием до тех пор пока не сформируется СТАРТ бит стаффинг фрейма, т.о. в 485 сети достаточно всего лишь одного байта преамбулы. Допустим искаженный байт 0xFF в результате воздейтсвия помехи совпадет с первым байтом открывающей стаффинг последовательности, но и в этом случае приемник приняв за ним такой же байт, и по условию "принято 0 байт данных" пакета, просто "переоткроет" прием пакета повторно.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|