Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.235.139.122] |
|
Сообщ.
#1
,
|
|
|
Наблюдается следующая картина: казалось бы без всяких причин виснет контроллер, если дотронуться металическим предметом до ножек кварца, то или пускается дальше или уходит в перезагрузку, или сделает еще пару шагов и опять виснет. Выводит его из такого состояния только кнопка резет или сброс питания.
контроллер - ATMega128-16AU. Программа раньше работала, проблеиы появились только в текущем месяце на новых устройствах. Не знаю на кого грешить(( PS. менял кварц - непомогло PPS. частота - 14.7456МГц |
Сообщ.
#2
,
|
|
|
попробуй прикрутить watchdog на случай зависания
вроде так Цитата iar void main( void ) { WDTCR = (0<<WDTOE) | (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0); for(;;) { __watchdog_reset(); ... }; } |
Сообщ.
#3
,
|
|
|
угу, ватчдог прикручен. виснет вместе с ним.
ЗЫ. плата мелкосерийная, количество копий около 150ти, а ведет себя так только последняя партия из 10штук Добавлено ммм... меня могли неправильно понять - криво написал. вобщем виснет он не от того что я до него дотрагиваюсь))), а сам по себе. признаю - пунктуация не мой конек. Добавлено ммм. напряжение питания - 4.75В. Рядом лежит такойже девайс из старой партии: работает без проблем |
Сообщ.
#4
,
|
|
|
может кварцы другие? попробуй поменять емкости у кварца
|
Сообщ.
#5
,
|
|
|
кварц менял, про емкости у него не думал. прикол в том, что даже ватчдог не выводит его из этого зависшего состояния
Добавлено вот что я только что пронаблюдал - контроллер не завис а начал жестко тупить, те мигание светодиода "я жив" вместо периода 1с превратилось в 30с. ЗЫ. опять же почему ватчдог имея свой собственный генератор невыводит его из этого состояния ЗЗЫ. при этом потрбляемый ток падает в два раза |
Сообщ.
#6
,
|
|
|
Потенциалы всех выводов контроллера должны быть определены, т. е. если какая-то нога не используется, то вывод этого порта либо сдедать выходом, либо включить на нём внутренний подтягивающий резистор (или внешний).
А так ещё похоже на кривую разводку платы и отсутствие блокировочных конденсаторов по питанию, или плохое качество питания. |
Сообщ.
#7
,
|
|
|
Цитата antigen @ А так ещё похоже на кривую разводку платы и отсутствие блокировочных конденсаторов по питанию, или плохое качество питания. Цитата smalcom @ Рядом лежит такойже девайс из старой партии: работает без проблем Другая партия контроллеров? Кварцев? Конденсаторов? |
Сообщ.
#8
,
|
|
|
Цитата smalcom @ кварц менял, про емкости у него не думал. прикол в том, что даже ватчдог не выводит его из этого зависшего состояния По всей вероятности, срываются колебания кварцевого мультивибратора. Да и что может сделать любой W-DOG если нет тактовой частоты ?! Иногда бывают фокусы с краской -зеленкой печатных плат. Попробуй почистить скальпелем вокруг кварца и конденсаторов. Посмотри, что под ними - может какая-нибудь хрень вроде остатков флюса под чип-компонентами. Возможно, где-то разорвана земля платы и часть схемы "повисла в воздухе". Что будет если: - на проблемной плате отсоединить кварц и оба конденсатора. - заменить (временно) это хозяйство внешним кварцевым генератором той же частоты. |
Сообщ.
#9
,
|
|
|
Цитата Да и что может сделать любой W-DOG если нет тактовой частоты ?! задача - поднять мертвый контроллер. согласно даташиту у ватчдога есть свой собственный генератор с частотой 1МГц. ЗЫ. если нужен бдет ватчдог терь только внешний буду делать. Цитата - заменить (временно) это хозяйство внешним кварцевым генератором той же частоты. не имею возможности((( Цитата - на проблемной плате отсоединить кварц и оба конденсатора. незапускается Цитата По всей вероятности, срываются колебания кварцевого мультивибратора. угу, но кто виноват |
Сообщ.
#10
,
|
|
|
Цитата smalcom @ Цитата Да и что может сделать любой W-DOG если нет тактовой частоты ?! задача - поднять мертвый контроллер. согласно даташиту у ватчдога есть свой собственный генератор с частотой 1МГц. ЗЫ. если нужен бдет ватчдог терь только внешний буду делать. Ты не понял - если нет тактовой частоты процессору, никакой W-DOG не поможет . -Added Цитата smalcom @ Цитата - заменить (временно) это хозяйство внешним кварцевым генератором той же частоты. не имею возможности((( Имеешь. Вытащи провод с исправной карты. -Added Цитата ЫукпШ @ Что будет если: - на проблемной плате отсоединить кварц и оба конденсатора. - заменить (временно) это хозяйство внешним кварцевым генератором той же частоты. Эти два пункта нужно делать вместе. |
Сообщ.
#11
,
|
|
|
Цитата ЫукпШ @ Да и что может сделать любой W-DOG если нет тактовой частоты ?! Цитата ЫукпШ @ Ты не понял - если нет тактовой частоты процессору, никакой W-DOG не поможет . Хм...ИМХО - заблуждение. Если это так, то как же режим микропотребления (не SLEEP), при которым тактовый "гасится" и питание может быть уменьшено до 1...2В, что гарантирует, что данные регистров не будут потеряны при запуске? И таймер (WaitDog) - который может вывести контроллер из этого режима??? Добавлено Цитата smalcom @ угу, но кто виноват Перекинь эти детали с рабочей платы. Добавлено Цитата smalcom @ ЗЫ. если нужен бдет ватчдог терь только внешний буду делать. Я бы заострил внимание на контроллере. |
Сообщ.
#12
,
|
|
|
Цитата medved_68 @ Хм...ИМХО - заблуждение. Если это так, то как же режим микропотребления (не SLEEP), при которым тактовый "гасится" и питание может быть уменьшено до 1...2В, что гарантирует, что данные регистров не будут потеряны при запуске? И таймер (WaitDog) - который может вывести контроллер из этого режима??? Еще разок: На подозрении аппаратная неисправность кварцевого мультивибратора. Если нет тактовой частоты, никакой сигнал RESET, в том числе с W-DOG-а ничего не сможет поделать. А та, Медведь, говоришь об одном из штатных режимов процессора. И возможного выхода из него. |
Сообщ.
#13
,
|
|
|
Цитата ЫукпШ @ А та, Медведь, говоришь об одном из штатных режимов процессора. И возможного выхода из него. Да. Цитата ЫукпШ @ На подозрении аппаратная неисправность кварцевого мультивибратора. А у меня большие подозрения на контроллер. И вот почему: Цитата smalcom @ ИМХО - если нет тактовой частоты - то и этого не было бы. вот что я только что пронаблюдал - контроллер не завис а начал жестко тупить, те мигание светодиода "я жив" вместо периода 1с превратилось в 30с. |
Сообщ.
#14
,
|
|
|
Цитата medved_68 @ А у меня большие подозрения на контроллер. И вот почему: Цитата smalcom @ ИМХО - если нет тактовой частоты - то и этого не было бы. вот что я только что пронаблюдал - контроллер не завис а начал жестко тупить, те мигание светодиода "я жив" вместо периода 1с превратилось в 30с. Тактовый генератор работает не устойчиво. Частота не предсказуемо меняется. Уменьшилась в 30 раз. Или амплитуда уменьшилась на грань допустимого значения. Со всеми вытекающими... |
Сообщ.
#15
,
|
|
|
Цитата ЫукпШ @ Тактовый генератор работает не устойчиво. Частота не предсказуемо меняется. Уменьшилась в 30 раз. Или амплитуда уменьшилась на грань допустимого значения. Со всеми вытекающими... Очень похоже. Кварц из бракованной партии, конденсаторы по ошибке сильно не те впаяли, вплоть даже до того, что флюс поменяли на такой, который нужно старательнее отмывать и утечки в области кварца/выводов генератора мешают (например, как уже было сказано, уменьшили амплитуду на грань допустимого). |
Сообщ.
#16
,
|
|
|
smalcom извини за подозрения... новые устройства...в смысле развел новые платы?
Похожий эффект можно получить при большом расстоянии между кварцем...кондерами и процом... если растояние и так минимальное... рискни и припояй кондеры прям к ногам контроллера... |
Сообщ.
#17
,
|
|
|
сдается мне, что полтергейст зажат в узкий круг. вернусь из командировки и(надеюсь, что звонков от заказчика не будет) ) покопаю глубже. всем огромное спасибо за участие(подчерпнул дополнительные знания). приеду - с меня плюсики.
|
Сообщ.
#18
,
|
|
|
А мне сдается, что в старых платах была старая прошивка старая -- рабочая, а в новых платах ее чуть-чуть подправили и появились таки глюки.
Могу даже предположить в чем проблема: все обращения к переменным в два-четыре байта (short, int, long)(которые используются внутри любого из прерываний) нужно в теле основной программы обрамлять запретом прерываний. Поскольку контроллер восьмиразрядный, то при попадании в прерывание между обработкой отдельных байт одной переменной, один из байт этой переменной (при выходе из прерывания) может затираться неверным значением. Эта ситуация может быть незаметной или проявляться очень редко, а при изменении кода (в любом месте программы) изменятся временные соотношения между частями программы и эта лажа может вылезти явно. volatile в данной ситуации не работает (под IAR-ом и, вроде, в соответствии со стандартом С) поскольку операции с многобайтными переменными не атомарные (на восьмиразрядных контроллерах) Дважды сталкивался с такой фигней на мегах под иар-ом smalcom, тот самый счетчик, который считает период мигания светодиода, случаем не int? |
Сообщ.
#19
,
|
|
|
Цитата А мне сдается, что в старых платах была старая прошивка старая -- рабочая, а в новых платах ее чуть-чуть подправили и появились таки глюки. второй раз я нарушил старое правило разработчика - "Работает? НИ...Я НЕ ТРОГАЙ" была произведена замена avrtools - пакет кторый я собираю - замена произошла на gcc-4.3.0-binutils-2.18-glibc1.6.1... и это ошибка, которую я второй раз допускаю((( не бейте, я хотел как лучше. Цитата то при попадании в прерывание между обработкой отдельных байт новый компилятор(или glibc) изменили пролог и эпилог(помню как оптимизация пагубно влияет на работу контроллера) ЗЫ. оптимизацию не включал - новый компилятор все решил за меня Цитата случаем не int на контроллерах появилась привычка(за которую брат програмист на PC дает люлей)) ) - писать typedef: word(unsigned short int), byte(unsigned char) итд. PPS. да, кстати результаты тестов будет видно утром после ночной прогонки... на всякий случай у меня на домашней тачке остались старые хексы))). а вообще всем биг сенк помимо темы и другие интересные вещи узнал |