На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Зависание микроконтроллера , ATMega 128
      Наблюдается следующая картина: казалось бы без всяких причин виснет контроллер, если дотронуться металическим предметом до ножек кварца, то или пускается дальше или уходит в перезагрузку, или сделает еще пару шагов и опять виснет. Выводит его из такого состояния только кнопка резет или сброс питания.
      контроллер - ATMega128-16AU. Программа раньше работала, проблеиы появились только в текущем месяце на новых устройствах. Не знаю на кого грешить((

      PS. менял кварц - непомогло
      PPS. частота - 14.7456МГц
        попробуй прикрутить watchdog на случай зависания
        вроде так
        Цитата iar
        ExpandedWrap disabled
          void main( void )
          {
            WDTCR = (0<<WDTOE) | (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0);
            for(;;)
            {
              __watchdog_reset();
          ...
            };
          }
        Сообщение отредактировано: ElcnU -
          угу, ватчдог прикручен. виснет вместе с ним.

          ЗЫ. плата мелкосерийная, количество копий около 150ти, а ведет себя так только последняя партия из 10штук

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

          Добавлено
          ммм. напряжение питания - 4.75В. Рядом лежит такойже девайс из старой партии: работает без проблем
            может кварцы другие? попробуй поменять емкости у кварца
              кварц менял, про емкости у него не думал. прикол в том, что даже ватчдог не выводит его из этого зависшего состояния

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

              ЗЫ. опять же почему ватчдог имея свой собственный генератор невыводит его из этого состояния
              ЗЗЫ. при этом потрбляемый ток падает в два раза
              Сообщение отредактировано: smalcom -
                Потенциалы всех выводов контроллера должны быть определены, т. е. если какая-то нога не используется, то вывод этого порта либо сдедать выходом, либо включить на нём внутренний подтягивающий резистор (или внешний).
                А так ещё похоже на кривую разводку платы и отсутствие блокировочных конденсаторов по питанию, или плохое качество питания.
                  Цитата antigen @
                  А так ещё похоже на кривую разводку платы и отсутствие блокировочных конденсаторов по питанию, или плохое качество питания.
                  :)
                  Цитата smalcom @
                  Рядом лежит такойже девайс из старой партии: работает без проблем

                  Другая партия контроллеров? Кварцев? Конденсаторов? :wacko:
                    Цитата smalcom @
                    кварц менял, про емкости у него не думал. прикол в том, что даже ватчдог не выводит его из этого зависшего состояния

                    По всей вероятности, срываются колебания кварцевого
                    мультивибратора.

                    Да и что может сделать любой W-DOG если нет тактовой частоты ?! :huh:

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

                    Возможно, где-то разорвана земля платы и часть схемы "повисла в воздухе".

                    Что будет если:
                    - на проблемной плате отсоединить кварц и оба конденсатора.
                    - заменить (временно) это хозяйство внешним кварцевым генератором той же частоты.
                    Сообщение отредактировано: ЫукпШ -
                      Цитата
                      Да и что может сделать любой W-DOG если нет тактовой частоты ?!

                      задача - поднять мертвый контроллер. согласно даташиту у ватчдога есть свой собственный генератор с частотой 1МГц.
                      ЗЫ. если нужен бдет ватчдог терь только внешний буду делать.

                      Цитата
                      - заменить (временно) это хозяйство внешним кварцевым генератором той же частоты.

                      не имею возможности(((

                      Цитата
                      - на проблемной плате отсоединить кварц и оба конденсатора.

                      незапускается


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

                      угу, но кто виноват
                        Цитата smalcom @
                        Цитата
                        Да и что может сделать любой W-DOG если нет тактовой частоты ?!

                        задача - поднять мертвый контроллер. согласно даташиту у ватчдога есть свой собственный генератор с частотой 1МГц.
                        ЗЫ. если нужен бдет ватчдог терь только внешний буду делать.

                        Ты не понял - если нет тактовой частоты процессору, никакой W-DOG
                        не поможет . ;)

                        -Added
                        Цитата smalcom @
                        Цитата
                        - заменить (временно) это хозяйство внешним кварцевым генератором той же частоты.

                        не имею возможности(((

                        Имеешь.
                        Вытащи провод с исправной карты.

                        -Added
                        Цитата ЫукпШ @
                        Что будет если:
                        - на проблемной плате отсоединить кварц и оба конденсатора.
                        - заменить (временно) это хозяйство внешним кварцевым генератором той же частоты.

                        Эти два пункта нужно делать вместе. :D
                          Цитата ЫукпШ @
                          Да и что может сделать любой W-DOG если нет тактовой частоты ?!

                          Цитата ЫукпШ @
                          Ты не понял - если нет тактовой частоты процессору, никакой W-DOG
                          не поможет .

                          Хм...ИМХО - заблуждение. Если это так, то как же режим микропотребления (не SLEEP), при которым тактовый "гасится" и питание может быть уменьшено до 1...2В, что гарантирует, что данные регистров не будут потеряны при запуске? И таймер (WaitDog) - который может вывести контроллер из этого режима??? :wacko:

                          Добавлено
                          Цитата smalcom @
                          угу, но кто виноват

                          Перекинь эти детали с рабочей платы.

                          Добавлено
                          Цитата smalcom @
                          ЗЫ. если нужен бдет ватчдог терь только внешний буду делать.

                          Я бы заострил внимание на контроллере. :D
                            Цитата medved_68 @
                            Хм...ИМХО - заблуждение. Если это так, то как же режим микропотребления (не SLEEP), при которым тактовый "гасится" и питание может быть уменьшено до 1...2В, что гарантирует, что данные регистров не будут потеряны при запуске? И таймер (WaitDog) - который может вывести контроллер из этого режима??? :wacko:

                            Еще разок:
                            На подозрении аппаратная неисправность кварцевого мультивибратора.
                            Если нет тактовой частоты, никакой сигнал RESET, в том числе с
                            W-DOG-а ничего не сможет поделать.

                            А та, Медведь, говоришь об одном из штатных режимов
                            процессора. И возможного выхода из него.
                              Цитата ЫукпШ @
                              А та, Медведь, говоришь об одном из штатных режимов
                              процессора. И возможного выхода из него.

                              Да.
                              Цитата ЫукпШ @
                              На подозрении аппаратная неисправность кварцевого мультивибратора.

                              А у меня большие подозрения на контроллер. И вот почему:
                              Цитата smalcom @
                              вот что я только что пронаблюдал - контроллер не завис а начал жестко тупить, те мигание светодиода "я жив" вместо периода 1с превратилось в 30с.
                              ИМХО - если нет тактовой частоты - то и этого не было бы. :D
                                Цитата medved_68 @
                                А у меня большие подозрения на контроллер. И вот почему:
                                Цитата smalcom @
                                вот что я только что пронаблюдал - контроллер не завис а начал жестко тупить, те мигание светодиода "я жив" вместо периода 1с превратилось в 30с.
                                ИМХО - если нет тактовой частоты - то и этого не было бы. :D

                                Тактовый генератор работает не устойчиво.
                                Частота не предсказуемо меняется.
                                Уменьшилась в 30 раз.
                                Или амплитуда уменьшилась на грань допустимого значения.
                                Со всеми вытекающими...
                                  Цитата ЫукпШ @
                                  Тактовый генератор работает не устойчиво.
                                  Частота не предсказуемо меняется.
                                  Уменьшилась в 30 раз.
                                  Или амплитуда уменьшилась на грань допустимого значения.
                                  Со всеми вытекающими...

                                  Очень похоже.
                                  Кварц из бракованной партии, конденсаторы по ошибке сильно не те впаяли, вплоть даже до того, что флюс поменяли на такой, который нужно старательнее отмывать и утечки в области кварца/выводов генератора мешают (например, как уже было сказано, уменьшили амплитуду на грань допустимого).
                                    smalcom извини за подозрения... новые устройства...в смысле развел новые платы?
                                    Похожий эффект можно получить при большом расстоянии между кварцем...кондерами и процом...
                                    если растояние и так минимальное... рискни и припояй кондеры прям к ногам контроллера...
                                    Сообщение отредактировано: hot_ice -
                                      сдается мне, что полтергейст зажат в узкий круг. вернусь из командировки и(надеюсь, что звонков от заказчика не будет) ) покопаю глубже. всем огромное спасибо за участие(подчерпнул дополнительные знания). приеду - с меня плюсики.
                                        А мне сдается, что в старых платах была старая прошивка :rolleyes: старая -- рабочая, а в новых платах ее чуть-чуть подправили и появились таки глюки.

                                        Могу даже предположить в чем проблема: все обращения к переменным в два-четыре байта (short, int, long)(которые используются внутри любого из прерываний) нужно в теле основной программы обрамлять запретом прерываний.

                                        Поскольку контроллер восьмиразрядный, то при попадании в прерывание между обработкой отдельных байт одной переменной, один из байт этой переменной (при выходе из прерывания) может затираться неверным значением. Эта ситуация может быть незаметной или проявляться очень редко, а при изменении кода (в любом месте программы) изменятся временные соотношения между частями программы и эта лажа может вылезти явно.

                                        volatile в данной ситуации не работает (под IAR-ом и, вроде, в соответствии со стандартом С) поскольку операции с многобайтными переменными не атомарные (на восьмиразрядных контроллерах)

                                        Дважды сталкивался с такой фигней на мегах под иар-ом

                                        smalcom, тот самый счетчик, который считает период мигания светодиода, случаем не int?
                                          Цитата
                                          А мне сдается, что в старых платах была старая прошивка :rolleyes: старая -- рабочая, а в новых платах ее чуть-чуть подправили и появились таки глюки.

                                          второй раз я нарушил старое правило разработчика - "Работает? НИ...Я НЕ ТРОГАЙ"
                                          была произведена замена avrtools - пакет кторый я собираю - замена произошла на gcc-4.3.0-binutils-2.18-glibc1.6.1... и это ошибка, которую я второй раз допускаю((( не бейте, я хотел как лучше.

                                          Цитата
                                          то при попадании в прерывание между обработкой отдельных байт

                                          новый компилятор(или glibc) изменили пролог и эпилог(помню как оптимизация пагубно влияет на работу контроллера)
                                          ЗЫ. оптимизацию не включал - новый компилятор все решил за меня

                                          Цитата
                                          случаем не int

                                          на контроллерах появилась привычка(за которую брат програмист на PC дает люлей)) ) - писать typedef: word(unsigned short int), byte(unsigned char) итд.


                                          PPS. да, кстати результаты тестов будет видно утром после ночной прогонки... на всякий случай у меня на домашней тачке остались старые хексы))). а вообще всем биг сенк помимо темы и другие интересные вещи узнал
                                          Сообщение отредактировано: smalcom -
                                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                          0 пользователей:


                                          Рейтинг@Mail.ru
                                          [ Script execution time: 0,0549 ]   [ 16 queries used ]   [ Generated: 28.03.24, 16:19 GMT ]