Например TDA7294

Форум РадиоКот :: Просмотр темы - Watchdog для Arduino, или как защититься от зависаний
Форум РадиоКот
https://radiokot.ru/forum/

Watchdog для Arduino, или как защититься от зависаний
https://radiokot.ru/forum/viewtopic.php?f=66&t=189094
Страница 1 из 2

Автор:  vjk7 [ Вт июл 11, 2023 04:56:39 ]
Заголовок сообщения:  Watchdog для Arduino, или как защититься от зависаний

По дефолту ардуина такова, что микроконтроллер при просадке питающего напряжения может зависнуть. Или еще от чего-нибудь, см. закон Мерфи.
Я этот эффект лично ловил на Arduino Nano (Atmega328P). Но думаю, что будет он и на Atmega32u4 (Arduino Pro Micro) и на Digispark (Attiny85)
И тогда какие уровни выходов были LOW, те останутся LOW. А какие HIGH, те останутся HIGH. Если там двигатель и он вращается от HIGH, то при зависании он так и будет вращаться, пока не случится "авария".
В моем случае там здоровенный асинхронник, который поднимает 300 кг и имеет 20 метров троса, так что это откровенно небезопасно.

В связи с этим 2 вопроса.

Вопрос 1. В микроконтроллерах (во всяком случае Atmega328P и Atmega32u4) бывает watchdog таймер. Как раз против зависаний. Надо только его настроить.
Но вот вопрос, а точно ли он эффективен (вызовет RESET) при зависании, вызванном чем угодно? Или нет?

Вопрос 2. А если ему не доверять, то как сделать некий внешний "watchdog"?
Какой самый простой способ?
Ну, как бы, мы можем на какой-то из выходных пинов выдавать ШИМ или еще какой-нибудь пульсирующий сигнал.
Но вот как сделать схему, которая в случае прекращения пульсации сигнала будет отключать питание либо нажимать тот же RESET...

Автор:  vlasovzloy [ Вт июл 11, 2023 08:25:36 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

По питанию сброс через светодиод и резистор, с вачдог не знаю есть спецмикросхемы

Добавлено after 1 hour 40 minutes 28 seconds:
Это я на тини2313 5 вольтовое питание, делал светодиод красный и резистор. Бодлевелем нифига не сбрасывало. Зависал мк

Автор:  JackSmith [ Вт июл 11, 2023 08:29:11 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

В микроконтроллере ATmega собака есть и ее следует использовать. Проблема в том, что у ардуины сначала работает загрузчик, который таймер собаки не сбрасывает. Поэтому первое, что приходит в голову, записать свою прошивку через программатор. проблема исчезнет.

Автор:  veso74 [ Вт июл 11, 2023 09:12:27 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

С новым загрузчиком (Optiboot) проблемы с WDT исправлены. Перезаписать загрузчик.
---
Пробовал WDT несколько минут назад, Arduino Nano, Optiboot.
Работает обычно - restart через 8 сек:
Код:
#include <avr/wdt.h>

#define LED_PIN 13

void setup() {
  // Blink LED to signal reset
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);
  delay(1000);
  digitalWrite(LED_PIN, LOW);
}

void loop() {
  wdt_enable(WDTO_8S);

  // Infinite loop to simulate a crash
  while (1);
}

В помощь: How to make the Watchdog timer work

Автор:  roman.com [ Вт июл 11, 2023 09:56:13 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

Зачем загрузчик ?

Arduino умеет работать напрямую с регистрами...

-если мы например хотим включить Watchdog то просто в любом месте программы пишем "включить Watchdog"

////////////////////////////////////////////// Ст таймер
WDTCR=0x1F; // Разрешение изменения ст таймера
WDTCR=0x0F; // Вкл. ст таймер // время переполнения: 2,0 c
//////////////////////////////////////////////

-затем в любом месте программы пишем "сбросить Watchdog"

#asm("wdr") // Сброс ст таймер 2,0 c

-если мы например хотим выключить Watchdog то просто в любом месте программы пишем "выключить Watchdog"

////////////////////////////////////////////// Ст таймер
WDTCR=0x1F; // Разрешение изменения ст таймера
WDTCR=0x00; // Выкл. ст таймер // время переполнения: 2,0 c
//////////////////////////////////////////////

:tea:

Вложение:
ATmega8-таймер-сторожевой.c [2.86 KiB]
Скачиваний: 100

Автор:  BOB51 [ Вт июл 11, 2023 11:04:46 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

По дефолту ардуина такова, что микроконтроллер при просадке питающего напряжения может зависнуть....

С какого такого перепугу?7...
У адуринок по умолчанию (в случае загрузки бутлоадера также уже заложено ибо "записать загрузчик" одновременно и набор фузов устанавливает) установлен порог сработки по BOD
для old bootloader к примеру это
BODLEVEL2:BODLEVEL1:BODLEVEL0 = 1:0:1
т.е. аппаратный сброс при уровне питающего напряжения
2,5 - 2,7 - 2,9 вольта
8)
А вот касательно собаки... запустить то можно, но ведь ее надо внутри программы периодически сбрасывать - а это уже проблемы автора прожки...
Тем более, что Ардуино IDE (тест на 1.8.9) таки
#asm("wdr") не воспринимает: invalid preprocessing directive #asm
:tea:

Автор:  roman.com [ Вт июл 11, 2023 13:03:34 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

BOB51 писал(а):
#asm("wdr") не воспринимает: invalid preprocessing directive #asm

как так !
:o
это же прямая инструкция Arduino !
Вложение:
Screenshot_1.jpg [38.74 KiB]
Скачиваний: 124

больше никогда не буду связываться с Arduino...
:facepalm:

Автор:  BOB51 [ Вт июл 11, 2023 14:09:49 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

WDR Это инструкция из набора ассемблерных команд АВРок.
В отношении ардуино (за рамками "референса" IDE) необходимо правила для работы под ассемблером в AVR GCC использовать.
А они "немного иные"....( :cry: )
Да и файлы, воспринимаемые ардуиноIDE должны иметь расширения
Код:
*.ino
*.cpp
*.h

иные (
Код:
*.c
) не воспринимаются.
Не ведаю насчет WDR (там надо разбираться с документацией по включению ассемблерных вставок), но вот с прерываниями проще - имеем воть такие макросы:
Код:
sei()
- глобальное разрешение прерываний;
Код:
cli()
- глобальный запрет прерываний;
Код:
reti()
- макрос принудительно помещает в код программы инструкцию reti, обеспечивая возврат из прерывания
8)

Автор:  Morroc [ Вт июл 11, 2023 14:11:44 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

так на #asm ругается же, а не на wdr

asm ("wdr");

Автор:  BOB51 [ Вт июл 11, 2023 14:15:53 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

Воть и я про то...
Уж больно тяжко вычитывать те "правила ассемблерных вставок" после работы с "чистокровным" avrasm2...
Предпочитаю или "чистый ассемблер" или не вылазить за "рамки референса" - ибо у адуринки не только АВРки водятся.
8)
И второе...
"расширенные возможности" допустимы в основном в подключаемых файлах проекта, а не в основном *.ino...
т.е. в дополнительных файлах библиотек или *.h *.cpp в папке проекта.
:roll:

Автор:  vjk7 [ Ср июл 12, 2023 03:44:56 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

По дефолту ардуина такова, что микроконтроллер при просадке питающего напряжения может зависнуть....

С какого такого перепугу?7...


Ну я ловил этот эффект, когда еще был неопытным и пытался сделать свое первое устройство на Arduino Nano, запитав ее от 3 мизинчиковых батареек.
Я тогда еще ничего толком не умел (ну, тех же батареек хватало этак... часов на шесть :D самых лучших алкалиновых. как же это наивно было...), но устройство всякими наворотами нафаршировал знатно. Был там и вибромоторчик, который включался электромагнитным реле, обмотка которого была запитана прямо от одного из выходов ардуины)) И вот при его включении - ардуина тупо зависала со включенным моторчиком. После перехода на 18650 проблема ушла, так что ее причина - это именно зависание при просадке напряжения, видимо от пускового тока вибромоторчика при питании от столь хилых батареек.

Автор:  Martian [ Ср июл 12, 2023 09:14:18 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

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

Автор:  BOB51 [ Ср июл 12, 2023 09:26:59 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

vjk7
1. Схема BOD сбрасывает МК, но не периферию - та остается в том состоянии, что предшествовало сбросу (или исходному состоянию выводов МК по сигналу reset, если нет "промежуточных элементов" между выводом МК и нагрузкой);
2. Программа в МК после сброса по BOD будет перезапущена только после восстановления питания до определенного уровня.
Так что ёжли устройство "вошло в крысис" по питанию - надо то питание вовремя восстановить.
Или разрабатывать схему так, чтобы вся периферия переходила в пассивное состояние при отключенном МК.
8)

Автор:  vlasovzloy [ Ср июл 12, 2023 09:43:20 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

Лет 10- 15 назад переделалывал термостат на холодильнике на тини2313, проблемно было найти обычный в те времена. Автора и схему щас не вспомню, комп сломан. Чуть попозже мб нарою. Ну там немного переделал плату под себя. В общем периодически все зависало и сбрасывались настройки. Хорошо дома жил в то воемя, так бы растаяло все испортилось. Бодлевел встроеный пробовал разный, нифига. Потом на форуме у нас вычитал про светодиод и резистор. Поставил на ресет цепочку, все ок. И в подвалах термостаты годами работают и на отопление. В общем рекомендую. Про вачдог не подскажу, таких устройств нету

Добавлено after 9 minutes 1 second:
https://hardlock.org.ua/viewtopic.php?t=10
Возможно этот, печатная плата по крайней мере та

Добавлено after 2 minutes 20 seconds:
Цитата:
После сборки термостата он зароботал сразу но если передёрнуть быстро питание то слетало EEPROM, в этой бедемне так же помог форум , первую ножку микроконтролера я соединил с корпусом через резистор на 3.3к и между 20 и 1 н. подключил светодиод анодом на 20 н. после такого усовершенствования мне уже не удалось сбросить EEPROM как я не пытался.

кстати сам автор об этом пишет тоже

Автор:  BOB51 [ Ср июл 12, 2023 15:39:16 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

Там скорее всего имела место "проблема нулевого адреса ЕЕПРОМ", свойственная АВРкам.
:roll:
Честно говоря сколько с МК не занимался (MCS51, PIC10/12/16, AVR) с "подвисанием" встречаться не приходилось
(разве что на этапе отладки схемотехники и/или программы - но на то и отладка на макете :wink: ).
8)

Автор:  kalobyte [ Чт июл 13, 2023 00:26:05 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

roman.com писал(а):
больше никогда не буду связываться с Arduino...

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

а вставки ассемблера это уже относится к синтаксису компилятора гцц для авр

Код:
asm
    (
        "lds %0, (value) \n"
        "ror %0 \n"
        :"=r" (value)
    );

вот так это может выглядеть
в других компиляторх вставки выглядят проще без тупых \n и прочей херни

vjk7 писал(а):
Но вот вопрос, а точно ли он эффективен (вызовет RESET) при зависании, вызванном чем угодно? Или нет?

любой ватчдог имеет свой внутренний автономный низкочастотный генератор + счетчик, который считает, если он был запущен в начале проги

в коде надо вызывать команду сброса счетчика, чтобы он не досчитал до своего переполнения
по дефолту биты настроены так, что его выход дергает схему сброса, что нарисовано в даташите

поэтому ватчдог сбрасывает всегда

то, о чем ты пишеш
vjk7 писал(а):
По дефолту ардуина такова, что микроконтроллер при просадке питающего напряжения может зависнуть. Или еще от чего-нибудь, см. закон Мерфи.

он не зависает
там есть специальный супервизор питания, который прижимает сброс, блокируя всю работу, чтобы не повредить содержимое флеш памяти и не попортилась прошивка или епром

напряжение срабатывания задается конфигурационными битами в настройке платы в опции перезаписи загрузчика

vjk7 писал(а):
В моем случае там здоровенный асинхронник, который поднимает 300 кг и имеет 20 метров троса, так что это откровенно небезопасно.

для проектирования подобных устройств есть специальные курсы, где объясняется базовые принципы защиты

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

Автор:  Martian [ Чт июл 13, 2023 00:32:13 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

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

И уж точно не на ардуино делать.

Автор:  Игорь_396 [ Чт июл 13, 2023 08:33:56 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

А если контролить компаратором напряжение на выходе блока питания, и как только оно падает - сбрасывать по прерыванию все порты? На МК отдельный стаб и кондёр большой ёмкости, чтобы он выключался в последнюю очередь.

Автор:  BOB51 [ Чт июл 13, 2023 08:59:42 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

Можно и компаратором и АЦП.
Для адуринки удобнее АЦП (уже все необходимое в "референсе" имеется)
Но тогда надо включать источник опорного напряжения - а это дополнительный расход энергии и настраивать порог чуток выше BOD. Плюс внешний делитель на резисторах.
Да еще знать, с какой скоростью падает напряжение питания после выдачи сообщения об "батарейка издохла" ибо не исключено, что к моменту подсоединения зарядки уже успеет и BOD отработать (что не всегда явно заметно).
8)

Автор:  Игорь_396 [ Чт июл 13, 2023 12:47:02 ]
Заголовок сообщения:  Re: Watchdog для Arduino, или как защититься от зависаний

АЦП читать надо, а компаратор все сам делает )) По поводу ИОН - у 328р разве не могут оба входа компаратора на порты выводиться? Вроде должны.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/