Например TDA7294

Форум РадиоКот • Просмотр темы - Watchdog для Arduino, или как защититься от зависаний
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб дек 13, 2025 08:38:58

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 04:56:39 
Родился

Зарегистрирован: Ср май 31, 2023 20:33:57
Сообщений: 5
Рейтинг сообщения: 0
По дефолту ардуина такова, что микроконтроллер при просадке питающего напряжения может зависнуть. Или еще от чего-нибудь, см. закон Мерфи.
Я этот эффект лично ловил на 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...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 08:25:36 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 2218
Зарегистрирован: Чт янв 26, 2012 16:44:29
Сообщений: 19517
Откуда: Таксимо
Рейтинг сообщения: 0
По питанию сброс через светодиод и резистор, с вачдог не знаю есть спецмикросхемы

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

_________________
Мои поставщики запчастей с отличной репутацией
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 08:29:11 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 26
Зарегистрирован: Ср мар 09, 2016 08:07:41
Сообщений: 300
Рейтинг сообщения: 0
В микроконтроллере ATmega собака есть и ее следует использовать. Проблема в том, что у ардуины сначала работает загрузчик, который таймер собаки не сбрасывает. Поэтому первое, что приходит в голову, записать свою прошивку через программатор. проблема исчезнет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 09:12:27 
Мудрый кот

Карма: 25
Рейтинг сообщений: 485
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1786
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
С новым загрузчиком (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


Последний раз редактировалось veso74 Вт июл 11, 2023 14:20:35, всего редактировалось 1 раз.

Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 09:56:13 
Друг Кота

Карма: -1
Рейтинг сообщений: 84
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8866
Откуда: .ru
Рейтинг сообщения: 0
Зачем загрузчик ?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 11:04:46 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15285
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
По дефолту ардуина такова, что микроконтроллер при просадке питающего напряжения может зависнуть....

С какого такого перепугу?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:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 13:03:34 
Друг Кота

Карма: -1
Рейтинг сообщений: 84
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8866
Откуда: .ru
Рейтинг сообщения: 0
BOB51 писал(а):
#asm("wdr") не воспринимает: invalid preprocessing directive #asm

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 14:09:49 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15285
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
WDR Это инструкция из набора ассемблерных команд АВРок.
В отношении ардуино (за рамками "референса" IDE) необходимо правила для работы под ассемблером в AVR GCC использовать.
А они "немного иные"....( :cry: )
Да и файлы, воспринимаемые ардуиноIDE должны иметь расширения
Код:
*.ino
*.cpp
*.h

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


Последний раз редактировалось BOB51 Вт июл 11, 2023 14:12:27, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 14:11:44 
Друг Кота

Карма: 49
Рейтинг сообщений: 547
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 19492
Рейтинг сообщения: 0
так на #asm ругается же, а не на wdr

asm ("wdr");

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Вт июл 11, 2023 14:15:53 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15285
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Воть и я про то...
Уж больно тяжко вычитывать те "правила ассемблерных вставок" после работы с "чистокровным" avrasm2...
Предпочитаю или "чистый ассемблер" или не вылазить за "рамки референса" - ибо у адуринки не только АВРки водятся.
8)
И второе...
"расширенные возможности" допустимы в основном в подключаемых файлах проекта, а не в основном *.ino...
т.е. в дополнительных файлах библиотек или *.h *.cpp в папке проекта.
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Ср июл 12, 2023 03:44:56 
Родился

Зарегистрирован: Ср май 31, 2023 20:33:57
Сообщений: 5
Рейтинг сообщения: 0
По дефолту ардуина такова, что микроконтроллер при просадке питающего напряжения может зависнуть....

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


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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Ср июл 12, 2023 09:14:18 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Сомнительно. Вибромоторчик не такой уж мощный и батарейки вполне могут дать необходимый ток без просадки напряжения. По крайней мере, у меня солевые крутят вибромотор, сделанный из моторчика привода компакт-дисков. Никаких зависаний. Просто перед проектированием я всегда читаю рекомендации по питанию и не пренебрегаю конденсаторами.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Ср июл 12, 2023 09:26:59 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15285
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
vjk7
1. Схема BOD сбрасывает МК, но не периферию - та остается в том состоянии, что предшествовало сбросу (или исходному состоянию выводов МК по сигналу reset, если нет "промежуточных элементов" между выводом МК и нагрузкой);
2. Программа в МК после сброса по BOD будет перезапущена только после восстановления питания до определенного уровня.
Так что ёжли устройство "вошло в крысис" по питанию - надо то питание вовремя восстановить.
Или разрабатывать схему так, чтобы вся периферия переходила в пассивное состояние при отключенном МК.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Ср июл 12, 2023 09:43:20 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 2218
Зарегистрирован: Чт янв 26, 2012 16:44:29
Сообщений: 19517
Откуда: Таксимо
Рейтинг сообщения: 0
Лет 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 как я не пытался.

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

_________________
Мои поставщики запчастей с отличной репутацией
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Ср июл 12, 2023 15:39:16 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15285
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Там скорее всего имела место "проблема нулевого адреса ЕЕПРОМ", свойственная АВРкам.
:roll:
Честно говоря сколько с МК не занимался (MCS51, PIC10/12/16, AVR) с "подвисанием" встречаться не приходилось
(разве что на этапе отладки схемотехники и/или программы - но на то и отладка на макете :wink: ).
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Чт июл 13, 2023 00:26:05 
Друг Кота

Карма: 13
Рейтинг сообщений: 84
Зарегистрирован: Чт сен 20, 2007 14:08:00
Сообщений: 13796
Рейтинг сообщения: 3
roman.com писал(а):
больше никогда не буду связываться с Arduino...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

_________________
тематические ответы только в форуме, в приват не пишите


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Чт июл 13, 2023 00:32:13 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
имхо, тут не только курсы, тут по хорошему надо специальность изучать, профессию получать, пусть даже рамках самообразования.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Чт июл 13, 2023 08:33:56 
Встал на лапы

Зарегистрирован: Ср дек 25, 2019 21:17:31
Сообщений: 99
Откуда: Саратов
Рейтинг сообщения: 0
А если контролить компаратором напряжение на выходе блока питания, и как только оно падает - сбрасывать по прерыванию все порты? На МК отдельный стаб и кондёр большой ёмкости, чтобы он выключался в последнюю очередь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Чт июл 13, 2023 08:59:42 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15285
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Можно и компаратором и АЦП.
Для адуринки удобнее АЦП (уже все необходимое в "референсе" имеется)
Но тогда надо включать источник опорного напряжения - а это дополнительный расход энергии и настраивать порог чуток выше BOD. Плюс внешний делитель на резисторах.
Да еще знать, с какой скоростью падает напряжение питания после выдачи сообщения об "батарейка издохла" ибо не исключено, что к моменту подсоединения зарядки уже успеет и BOD отработать (что не всегда явно заметно).
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Watchdog для Arduino, или как защититься от зависаний
СообщениеДобавлено: Чт июл 13, 2023 12:47:02 
Встал на лапы

Зарегистрирован: Ср дек 25, 2019 21:17:31
Сообщений: 99
Откуда: Саратов
Рейтинг сообщения: 0
АЦП читать надо, а компаратор все сам делает )) По поводу ИОН - у 328р разве не могут оба входа компаратора на порты выводиться? Вроде должны.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y