Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Зависание микроконтроллера
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2, 3
smalcom
Наблюдается следующая картина: казалось бы без всяких причин виснет контроллер, если дотронуться металическим предметом до ножек кварца, то или пускается дальше или уходит в перезагрузку, или сделает еще пару шагов и опять виснет. Выводит его из такого состояния только кнопка резет или сброс питания.
контроллер - ATMega128-16AU. Программа раньше работала, проблеиы появились только в текущем месяце на новых устройствах. Не знаю на кого грешить((

PS. менял кварц - непомогло
PPS. частота - 14.7456МГц
Dog Pawlowa
Цитата(smalcom @ Apr 14 2008, 16:27) *
Не знаю на кого грешить((

На себя.

Цитата(smalcom @ Apr 14 2008, 16:27) *
если дотронуться металическим предметом до ножек кварца, то или пускается дальше или уходит в перезагрузку

Хочется спросить - а отверткой в ухе не пробовали?

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


Попробуйте заземлить корпус кварца...
smalcom
PPS. кварц заземлен.
PPPS. wathcdog включен - все зависает намертво, какбудто просто останавливается тактовый генератор, правда у ватчдога свой... я в непонятках.

Цитата
Если серьезно, совершенно нормальный процесс. Не нужно лазить на ножки кварца точно так же как в ухо.

нормальная операция проверки неисправности тактовых цепей.


ЗЫx. плата мелкосерийная, количество копий около 150ти, а ведет себя так только последняя партия из 10штук
defunct
Цитата(smalcom @ Apr 14 2008, 16:46) *
PPS. кварц заземлен.
PPPS. wathcdog включен - все зависает намертво, какбудто просто останавливается тактовый генератор, правда у ватчдога свой... я в непонятках.

BOD включен?
Керамика по питанию в непосредственной близости от МК есть?

IMHO нахомутали с разводкой..
smalcom
ммм... меня могли неправильно понять - криво написал. вобщем виснет он не от того что я до него дотрагиваюсь))), а сам по себе. признаю - пунктуация не мой конек.

Цитата
BOD включен?
Керамика по питанию в непосредственной близости от МК есть?


BOD выключен. керамика по питанию стоит - 0.1uF(3шт, возле нескольких подводов питания к контроллеру). каждая ножка кварца соединена с конденсатором 22pF - вторая ножка конденсатороа на земле.

ммм. напряжение питания - 4.75В. Рядом лежит такойже девайс из старой партии: работает без проблем
defunct
Цитата(smalcom @ Apr 14 2008, 17:04) *
керамика по питанию стоит - 0.1uF(3шт, возле нескольких подводов питания к контроллеру). каждая ножка кварца соединена с конденсатором 22pF - вторая ножка конденсатороа на земле.

Если BOD выключен, тогда какая используется схема сброса (что подключено к Reset).

Не получается ли так что через МК косвенным путем питается что-то еще e.g.:

Код
линия Vcc ------ [MK ]-------[ Rн ]

Какой источник питания?
smalcom
в схеме сброса включен супервизор MCP100-315 и кнопка для ручного сброса.
источник питания(в данный момент) - компьютерный БП 400Вт.

по поводу неправильных цепочек питания - сейчас пройдусь тестером

upd. проверил - вроде утечек нет
defunct
Цитата
Рядом лежит такойже девайс из старой партии: работает без проблем

что поменялось между партиями?
Замеряйте потребляемый ток старого и нового устройства.
galjoen
Цитата(smalcom @ Apr 14 2008, 18:46) *
PPPS. wathcdog включен - все зависает намертво, какбудто просто останавливается тактовый генератор, правда у ватчдога свой... я в непонятках.

А если в фьюзах ватчдог невыключаемым сделать. А вообще как с фьюзами? Размах напряжения на кварце в частности какой? А лучше выложите все фьюзы - так проще разобраться.
injen-d
Возможно виноват не запрограммированный бит CKOPT - очень сильно влияет на амплитуду тактовых импульсов от кварца (на осцилографе очень хорошо видно, да и во всевозможной литературе написано)
smalcom
фьюзы
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
Dog Pawlowa
Цитата(smalcom @ Apr 14 2008, 17:46) *
нормальная операция проверки неисправности тактовых цепей.

У меня для таких целей помехогенерирующая "тарахтелка есть".

Присоединяюсь к CKOPT, сам всегда устанавливаю.
smalcom
Цитата
Замеряйте потребляемый ток старого и нового устройства

одинаковый(около 62мА)
galjoen
Цитата(smalcom @ Apr 14 2008, 19:37) *
CKSEL=D

Если я правильно понял, ваш случай - CKSEL3..1=110? Если так, то вэтом режиме д.б. керамический резонатор 0.9..3.0 МГц. Я для таких частот (>8 МГц) ставлю CKSEL3..0=1111 (не запрограммированные).
smalcom
Цитата
керамический резонатор 0.9..3.0 МГц

не, при CKOPT=0 это как раз f>1МГц

кварц менял, про емкости у него не думал. прикол в том, что даже ватчдог не выводит его из этого зависшего состояния.

грешу на самый маловероятный исход - проблемная партия контроллеров

вот что я только что пронаблюдал - контроллер не завис а начал жестко тупить, те мигание светодиода "я жив" вместо периода 1с превратилось в 30с.

ЗЫ. опять же почему ватчдог имея свой собственный генератор невыводит его из этого состояния
ЗЗЫ. при этом потрбляемый ток падает в два раза
galjoen
Цитата(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 у вас есть?

А если тестовую программку написать? Только лампочкой мигает и ватчдог сбрасывает.
smalcom
Цитата
"но после прошивки почемуто WDTON читается опять как 1."

прошил дргим программатором, стало верно записываться.

про слип я думал, но его я не использую. плюс если верить даташиту, то ватчдог работает в любом из слип режимов.
Igor26
Цитата
в регистре XDIV

Его нет в Меге128.
Цитата
плюс если верить даташиту, то ватчдог работает в любом из слип режимов.

Да.Работает.
Rst7
Цитата
Его нет в Меге128.


Как это нет? А по адресу 0x3C(0x5C) что находится?

Цитата
ЗЫ. опять же почему ватчдог имея свой собственный генератор невыводит его из этого состояния


Если у вас не работает основной тактовый генератор, то WDT никак не осилит перезапуск.

Проблема скорее кроется именно в неустойчивой работе генератора меги с Вашим типом кварца. Ставьте CKSEL=F и CKOPT=0. SUT я бы поставил 3, если, конечно, не нужен быстрый старт.

И хорошо промойте плату возле генератора, бывает - помогает.
Igor26
Цитата
А по адресу 0x3C(0x5C) что находится?

Чёй-то не нашел в ДШ. Ткните носом.
vmp
Вы уверены, что конденсаторы на кварце стоят правильного номинала? Может быть на сборке ошиблись?
Serj78
Цитата(vmp @ Apr 15 2008, 11:11) *
Вы уверены, что конденсаторы на кварце стоят правильного номинала? Может быть на сборке ошиблись?


поставьте ckopt галочку и посмотрите осциллографом с делителем 1/10 размах напряжения на ноге xtal2.
если там меньше 2/3 от напряжения питания- меняйте кварц илии его обвеску.
Rst7
Цитата
Чёй-то не нашел в ДШ. Ткните носом.


Вот дерево разделов:

System Clock and Clock Options -> Timer/Counter Oscillator -> XTAL Divide Control Register - XDIV

Сразу за External Clock.
Igor26
Цитата
System Clock and Clock Options -> Timer/Counter Oscillator -> XTAL Divide Control Register - XDIV

Сразу за External Clock.

Спасибо. Теперь увидел.
GDI
Можно попробовать поменять контроллеры у старой и новой плат, т.е. определить дело в контроллере или все же в плате(утечки, плохо промыта и т.п.). А не может у вас какая то периферия глючить, еепром по I2C или еще что?
smalcom
вопщем пропаял еще раз мегу, промыл спиртом, заменил кондеры у кварца - 1 из 10 завис через 5минут. проверить осцилом немогу - нету такого, тот что в наличии садит линию кварца, но тестером видно 2.6В. замечено что быстрей всего мегу убить можно обменом по 232му порту.
пробовал в старую плату впаять новую мегу - работает.
грешил бы на прошивку, но уже более 3.5 лет работает на полуторасотнях устройствах при серьезных нагрузках и сбоев небыло.
defunct
Иногда может повлиять толщина и материал дорожек.
Замечал что платы изготовленные разными подрядчиками по одному и тому же рисунку могут вести себя по разному.
некоторые (целые партии PCB) глючили - приходилось резать дорожку питания в непосредственной близости от МК и вставлять LC фильтр.

Насчет фузов. Для частот выше 8Mhz фузы (CKSEL) ставить в 1111 (0xF).
smalcom
сдается мне, что полтергейст зажат в узкий круг. вернусь из командировки и(надеюсь, что звонков от заказчика не будет) ) покопаю глубже. всем огромное спасибо за участие(подчерпнул дополнительные знания). приеду - с меня плюсики.
smalcom
чота с плюсами лажа какаето
ReAl
Цитата(smalcom @ Apr 15 2008, 23:08) *
чота с плюсами лажа какаето

А это не исходники.ру wink.gif тут этого баловства не особенно.
Судя по тому, что там написано было - надо попробовать ещё прошить старые платы прошивками, скомпилированными новым компилятором и наоборот.
Если где-то шалит какое-то прерывание (обработчик есть, но прерывание не сбрасывается и лупит дальше), то оно может очень сильно тормозить ход основной программы - грубо, в число тактов выполнения обработчика раз (в то время, когда глобально прерывания разрешены, между прерываниями будет проскакивать по одной команде основной программы).
Хотя... "1 из 10 штук завис" - это как-то не очень похоже на прошивку.
Mozart
вообще может быть из-за ресета по снижению напряжения питания (BODEN). надо его сбросить
Dog Pawlowa
Цитата(Mozart @ Apr 17 2008, 22:06) *
вообще может быть из-за ресета по снижению напряжения питания (BODEN). надо его сбросить

Не нужно давать вредные советы - можно доиграться вплоть до потери программы во флэши.
Mozart
Цитата(Dog Pawlowa @ Apr 17 2008, 23:54) *
Не нужно давать вредные советы - можно доиграться вплоть до потери программы во флэши.

это как?... я тогда просто не понимаю что происходит при отключении питания... мне казалось, что просто прекращается работа генератора и сё... а как может потеряться программа во флэши??
Dog Pawlowa
Цитата(Mozart @ Apr 17 2008, 23:33) *
это как?... я тогда просто не понимаю что происходит при отключении питания... мне казалось, что просто прекращается работа генератора и сё... а как может потеряться программа во флэши??

Не просто.
При снижении питания может произойти все что угодно - например может неправильно декодироваться команда. Например вместо безобидной пересылки из регистра в регистр начнется стирание страницы флэш-памяти. И это неоднократно подтверждено жизнью.
Поэтому контроллер должен быть обязательно сброшен при напряжении питания ниже критического.
Mozart
Цитата(Dog Pawlowa @ Apr 18 2008, 10:40) *
Не просто.
При снижении питания может произойти все что угодно - например может неправильно декодироваться команда. Например вместо безобидной пересылки из регистра в регистр начнется стирание страницы флэш-памяти. И это неоднократно подтверждено жизнью.
Поэтому контроллер должен быть обязательно сброшен при напряжении питания ниже критического.

у мну такого ещё не разу не было... учту... сенкс
Laserr
Цитата(Dog Pawlowa @ Apr 18 2008, 10:40) *
При снижении питания может произойти все что угодно...


ППКС. У меня дома лежит tiny со стертым ID laughing.gif
Yura_K
Было такое же на ATmega8535. Правда стоял на плате в одной сборке с усилителями ШИМ (2 канала по 5 ампер) smile.gif. Решилось все экранированием платы (под ней силовые провода на нагрузку лежали).
VladimirYU
Цитата(Dog Pawlowa @ Apr 18 2008, 10:40) *
Не просто.

Поэтому контроллер должен быть обязательно сброшен при напряжении питания ниже критического.

Полностью согласен. При этом, из собственного опыта, не доверяю ни каким BODам, а ставлю внешний супервизор. +20 рублей, но про такие проблемы забываешь раз и навсегда.
smalcom
да, кстати, проблема была в том, что прогу скомпилил новым набором утилит - gcc-4.3.0, binutils-2.18, glibc-1.6; раньше были gcc-3.4.0, binutils-2.17, glibc-1.4
Flasher
Могу рассказать в чем секрет зависания устройства. Будете долго удивляться. - Это компьютерный блок питания. В большинстве случаев товарищи даже и не знают, что пытаются запитать свою технику от драндулета, на корпусе которого в незаземленном варианте присутствует 110 Вольт, и касание отверткой заставляет стекать заряд с конденсаторов через корпус на отвертку и через внутренние цепи контроллера. Этот драндулет имеет ужасающе большой спектр помех. Плюс пульсации в ВЧ области вполне достаточные, чтобы процессор рестартанул (в лучшем случае) или начал выполнять вообще неизвестно что, пока напряжение просело ниже допустимого... Так что дерзайте- можно запитать девайс еще от велогенератора или пьезоподжигалки- и искать глюки в программе можно до посинения.
ReAl
Цитата(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;
Что вполне соответствует стандарту smile.gif, cnt тоже надо объявить volatile, чтобы сохранился интересующий порядок операций.



Цитата(Flasher @ Apr 26 2008, 00:08) *
Могу рассказать в чем секрет зависания устройства. Будете долго удивляться. - Это компьютерный блок питания.
lol.gif
Удивляюсь smile.gif Вот чего не знал, того не знал... smile.gif
И как дурак уже 15 лет на столе держу в качестве источника для отлаживаемых плат компьютерные блоки питания smile.gif Если место позволяет - часто даже на плате кроме штатного разъёма ещё штыри заложены под флопарный разъёмчик, чтобы переходник не был нужен.
И ничего не "рестартует в лучшем случае", включая сам комп, внутри которого стоит такой же блок питания. И изделия серийные выпускаются в компьютерном корпусе и с компьютерным блоком питангия - там и микроконтроллеры, и ПЛИС, и АЦП горстями (ну да, по питанию АЦП фильтры дополнительные).
Может это? Прокладочку поменять?
Samsony
Цитата(smalcom @ Apr 14 2008, 17:27) *
Наблюдается следующая картина: казалось бы без всяких причин виснет контроллер, если дотронуться металическим предметом до ножек кварца, то или пускается дальше или уходит в перезагрузку, или сделает еще пару шагов и опять виснет. Выводит его из такого состояния только кнопка резет или сброс питания.
контроллер - ATMega128-16AU. Программа раньше работала, проблеиы появились только в текущем месяце на новых устройствах. Не знаю на кого грешить((

PS. менял кварц - непомогло
PPS. частота - 14.7456МГц


Попробуйте выяснить кто виноват. Для это:
- Запитайте устройство не от БП (господин Flasher правильно высказал свое мнение по поводу компьтерного БП - помойка там конкретная);
- Если не полегчает, то отключите от источника питания платы все, что может приводить к "просадкам" питания (в идеале - оставить только проц и светодиод какой нибудь)
- Правильно выставьте бит CKSEL. Посмотрите осцилом на амплитуду на кварце - должна быть не менее 1,5В...
- Отключите супервизор, RESET повесьте прям на ногу питания МК

Кстати, как схема питания реализована?

Было у нас такое дело - производили устройство, все было ОК....
Затем пошел серийный брак - устройство вроде работает, но после установки на транспорт - сбойт... Виснет, перестает работать, перезапускается....
Думал долго, перепахал всю плату - не помогло. А дело было вот в чем. Использовали программатор ChipProg который стоял на компьютере с которого прошивались изделия. В один прекрасный или ужасный день наши герои - радиомеханики переставили винду, поставили какую то "тюнингувую модель ручной сборки WinXP. С этого дня брак и пошел. Хотя все отлично прошивалось и тестировалось...
smalcom
старый набор avrtools и новый генерят разный код, предположительно изменена схема работы с переменными и прологи/эпилоги(в новом) засим вполне вероятно предсказанная ReAl ситуация с постоянной обработкой прерывания(честно еще досконально листинги ассемблера неразбирал). Программы скомпиленные новым набором(замечено пока только в коде для m128) зависают.
Igor26
Цитата
Это компьютерный блок питания.

Интересно знать, уважаемый, а как у тебя компьютер то работает от компьютерного блока питания? Он ведь сложней твоего девайса в десятки раз.
dx40
Цитата(Flasher @ Apr 26 2008, 01:08) *
Могу рассказать в чем секрет зависания устройства. Будете долго удивляться. - Это компьютерный блок питания.

Что-то тут не так - компьютер ведь не виснет? Да и есть блоки питания meanwell - те же яйца - но никто не жаловался. Может к ресету проводник длинной сантиметров 10 висит в воздухе?
Nanobyte
Блоки питания от ПК разные бывают. Есть у меня один, на котором я испытываю устойчивость устройств к поганому питанию. Осциллографом на шины питания лучше не смотреть без валидола. Если работает с таким питанием, тогда будет работать с любым другим.
А есть ещё и замечательные БП, на выходе которых помех практически нет.
Кроме того, все эти БП требуют какой-то минимальной нагрузки по линии 5 вольт (обычно 0,2-0,5 амп), а без неё напряжение на выходе прыгает с частотой от нескольких Hz до десятков Hz. Если запитать от БП только микроконтроллер и пару светодиодов, на правильную работу БП лучше сильно не рассчитывать.
Сергей Борщ
Цитата(Flasher @ Apr 26 2008, 00:08) *
на корпусе которого в незаземленном варианте присутствует 110 Вольт
...Засунули лом...
"Грррр шмяк" - сказала японская лесопилка.
"Ну дык, еб тыть!" - сказали суровые русские мужики и пошли валить лес двуручными пилами.

Сказано в инструкции "без заземления НЕ ВКЛЮЧАТЬ". Нет, блин, мы умнее: "в незаземленном варианте..."
Igor26
Прикола ради, замерил прям щас напряжение между корпусом компа и "землей". 110 вольт. Не сбоит, представьте себе. Лет пять не замечаю.
Flasher
Цитата(Igor26 @ Apr 28 2008, 09:41) *
Интересно знать, уважаемый, а как у тебя компьютер то работает от компьютерного блока питания? Он ведь сложней твоего девайса в десятки раз.


А ты попробуй, коснись отверткой ножки кварца smile.gif - потом доложишь как стабильно он будет работать. Только заземление не забудь отключить. А если серъезно-законы грамотной разводки и схемотехники еще никто не отменял. Поэтому еще раз внимательно перечитайте корневой пост автора и мой ответ. У меня в практике попадались криво разведенные устройства подключенные к БП.- после пары включений слетала флэшь и фьюзы. А если БП не заземлен- то после касания к элементам схемы пукой- процессор не отвечал даже в параллельгом режиме

Цитата(Сергей Борщ @ Apr 28 2008, 10:58) *
...Засунули лом...
"Грррр шмяк" - сказала японская лесопилка.
"Ну дык, еб тыть!" - сказали суровые русские мужики и пошли валить лес двуручными пилами.

Сказано в инструкции "без заземления НЕ ВКЛЮЧАТЬ". Нет, блин, мы умнее: "в незаземленном варианте..."

Ну хорошо- Вы грамотный. А видели домашние лаборатории радиолюбителей- розетка не евро- переходник без заземления от шнура....? Думаете, эти люди об этом задумываются?

Цитата(Igor26 @ Apr 28 2008, 14:42) *
Прикола ради, замерил прям щас напряжение между корпусом компа и "землей". 110 вольт. Не сбоит, представьте себе. Лет пять не замечаю.

Детский сад...Проздравляю- Вы уникальный пользователь! Вы, наверное, не трогаете ножки кварца на материнке в рабочем состоянии. Или к нему девайсы не подключаете?. Мп3 плееры не слетали при подключении к компу? а Флэшки? Нет?- так Вы- везунчик!!! Теперь просто представьте куда пойдут заряды если внешнее устройство имеет нулевой потенциал до касания корпуса? А самое главное через какие контакты?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.