РЕШЕНО Atmega128a и sx1287 - случайный ресет

Тема в разделе "Микроконтроллеры AVR", создана пользователем RogerRU, 30 янв 2020.

  1. RogerRU

    RogerRU Нерд

    Добрый день, коллеги! )))

    Имею связку Atmega128A и LoRa SX1287
    МК работает от внутреннего генератора 8Mhz, вся система питается от 3.3v
    Использую библиотеку arduino-LoRa
    В тестовом режиме клиент раз в 5 сек принимает пакет от сервера выводит данные в Serial
    Все работает Ок, НО
    ПРОБЛЕМА: случайным образом после 10 мин - 2 час. стабильной работы МК уходит в reset.
    ЧТО проверено:
    - питание LoRa и МК отдельное для каждого, стабильное, пульсации не больше 50мВ, запаса по току достаточно
    - работа через прерывание или внутри loop() - без разницы
    - понижение частоты SPI - толку нет
    - у человека была похожая проблема, решение было в том, что глючил Watchdog, но у меня он отключен в принципе и бутлоадера тоже нет (шью через программатор USBAsp)

    Код программы из примера (у меня чуть изменено, но сути это не меняет)

    Да, сервер (Arduino DUE) работает как передатчик сутками напролет - проблем нет.

    WTF?
    h
     
  2. parovoZZ

    parovoZZ Гуру

    ну пусть уходит. RC генератор заводится же практически мгновенно.

    А с BOD что?

    В любом случае надо смотреть регистр (не помню название), в котором поднят флаг причины загрузки МК.
     
  3. RogerRU

    RogerRU Нерд

    Нет не пусть ))) Девайс должен контролировать работу насосов и если он уйдет в ребут пока клапан открыт будет очень не хорошо.
    Он тоже вырублен
    А вот тут бы поподробнее...
     
  4. Daniil

    Daniil Гуру

    кажется MCUSR/MCUCSR
     
  5. parovoZZ

    parovoZZ Гуру

    И долго он сидит в ребуте?
     
  6. RogerRU

    RogerRU Нерд

    Ребут мгновенный, но контроль будет утерян
     
  7. RogerRU

    RogerRU Нерд

    Сдается мне что работа с регистром ничего не даст, регистр только покажет 5 вариантов от чего был сброс:
    The ATmega128A has five sources of reset:
    • Power-on Reset. The MCU is reset when the supply voltage is below the Power-on Reset threshold (VPOT).
    • External Reset. The MCU is reset when a low level is present on the RESET pin for longer than the minimum pulse length.
    • Watchdog Reset. The MCU is reset when the Watchdog Timer period expires and the Watchdog is enabled.
    • Brown-out Reset. The MCU is reset when the supply voltage VCC is below the Brown-out Reset threshold (VBOT) and the Brown-out Detector is enabled.
    • JTAG AVR Reset. The MCU is reset as long as there is a logic one in the Reset Register, one of the scan chains of the JTAG system. Refer to the section IEEE 1149.1 (JTAG) Boundary-scan for details.
    Накидал быстренько код:
    Код (C++):

      JTR_RST = MCUCSR & B00010000;  // брос по JTAG
      WD_RST  = MCUCSR & B00001000;  // срабатывание сторожевого таймера
      BO_RST  = MCUCSR & B00000100;  // защита от падения напряжения
      EXT_RST = MCUCSR & B00000010;  // сигнал сброса
      PON_RST = MCUCSR & B00000001;  // подача питания


      Serial.begin(9600);
      if (PON_RST) {Serial.println("PON_RST = true");} else {Serial.println("PON_RST = false");}
      if (EXT_RST) {Serial.println("EXT_RST = true");} else {Serial.println("EXT_RST = false");}
      if (BO_RST) {Serial.println("BO_RST = true");}   else {Serial.println("BO_RST = false");}
      if (WD_RST) {Serial.println("WD_RST = true");}  else {Serial.println("WD_RST = false");}
      if (JTR_RST) {Serial.println("JTR_RST = true");} else {Serial.println("JTR_RST = false");}
    Будем посмотреть...:(:(
     
  8. a1000

    a1000 Гик

    А ножка Reset у вас в воздухе не весит?
     
  9. DetSimen

    DetSimen Guest

    Смотри, где память портишь
     
    SergeiL нравится это.
  10. SergeiL

    SergeiL Оракул Модератор

    Тоже к этому склоняюсь.
     
    DetSimen нравится это.
  11. parovoZZ

    parovoZZ Гуру

    Она внутри всегда подтянута через 50к.
     
  12. parovoZZ

    parovoZZ Гуру

    Ну если там ничего не будет, значит сваливаешься программно. Например, по вектору прерывания, на который не объявлен обработчик,
     
    microsystems нравится это.
  13. a1000

    a1000 Гик

    Да, но посмотрите с чем человек работает. Насос, клапана - индуктивная нагрузка которая при коммутации может давать неплохую импульсную помеху. Внутренних 50к может не хватить.
     
    microsystems нравится это.
  14. RogerRU

    RogerRU Нерд

    Проверил, утечек вроде нет

    Как я предполагал работа с регистром MCUCSR толку не дала,биты EXT_RST и PON_RST всегда true
    EXT_RST = MCUCSR & B00000010
    PON_RST = MCUCSR & B00000001

    Ну во-первых я хоть и не супергуру, но и не совсем деревянный, что бы все это напрямую к МК цеплять :D, мотор через драйвер, а клапан вообще через реле с опторазвязкой.
    Во-вторых сейчас плата на стенде вообще без периферии, ну кроме собственно LoRa и SPI дисплея, который вырублен, а при его работе(с разными библиотеками) картина точно такая же.

    Что буду пробовать:
    1. попробую завести МК через внешний кварц 16Mhz, что даст? - ХЗ, но попробую
    2. попробую сменить библиотеку для Лоры, тоже сомнительно т.к. народ на буржуйских форумах пишет что либа работает стабильно и без проблем, пробежавшись по ней глазами, в принципе согласен.
    3.пока даже не знаю что...:(

    Как то так.
     
  15. parovoZZ

    parovoZZ Гуру

    ну всё - вешай на пин ресета внешний кондер 100n и резистор 10к на Vcc, и наблюдай дальше.
     
    Последнее редактирование: 31 янв 2020
  16. parovoZZ

    parovoZZ Гуру

    Ничего, кроме дополнительной головной боли - сбить с генерации внешний кварц в разы проще, чем внутренний RC. Поэтому все нормальные процы стартуют с внутреннего RC источника, а уже только по готовности кварцевого осциллятора переключаются на него. В AtMega/AtXMega решили выпендриться и сделали через одно место.

    есть кондуктивные помехи (по проводам), а есть радиопомехи - наводка на провода. Опторазвязка на последние не влияет никак.
     
  17. RogerRU

    RogerRU Нерд

    Попробую.
    Отпишусь по результату.
    Я почему то был уверен, что он есть, а глянул на схему - нет. Блин.
    Там имеет значение физическая близость к пину?
     
  18. parovoZZ

    parovoZZ Гуру

    На питающих - да (самое идеальное, когда дорожка шины питания проходит сквозь контактную площадку конденсатора), для ресета - желательно.
     
  19. RogerRU

    RogerRU Нерд

    Ок, спасибо. Плата не бредборде, а уже нормально сделана, монтаж довольно плотный, но попробую куда нибудь кондер вкорячить...
     
  20. parovoZZ

    parovoZZ Гуру

    Возьми выводной кондер и прямо на ноги его посади.