Озадачился вопросом, как лучше сделать автосброс Mega 2560. Опишу ситуацию. Данный проект - эдакая солянка, "коктейль жадности", то есть то, что купил лишнее и решил скидать в один корпус, чтобы можно было от нечего делать, вспоминать, что там есть и как до этого достучаться. В "черном ящике" Мега, различные датчики (странно, что нет счетчика Гейгера), пара 7-сегментных матриц, OLED, APDS-9960, RTC DS3231, конечно же, WiFi (ESP-01), ну и еще чего-то. Соединено все качественно, что самое смешное. Раз в неделю эта лабудень решительно виснет, то есть датчик расстояния GP2Y0A02YK0F (о, вот он тоже там, вспомнил) перестает реагировать на хозяина, oled демонстрирует утренний курс бананов в Зимбабве, а не злободневный, да в общем происходит нормальный зависон, хотя в коде никаких условий, способных вогнать скетч в бесконечный цикл, нет. (за работу библиотек не поручусь, конечно). Вопрос. Как лучше отлавливать "крепкий зависон"? Хватит ли вотчдога типа Код (C++): #include <avr/wdt.h> void setup() { wdt_enable(WDTO_8S); ... } void loop() { wdt_reset(); ... } Или заставить тот же ESP-01 слушать "пульс" Mega 2560 и "жать" reset на ней? И если да, как лучше организовать?
Аппаратный ватчдог, как вариант: внешнее устройство, которое передёргивает питание, если на него долгое время не поступает импульсов. Как вариант: http://samopal.pro/wdt-ne555/
Спасибо, действительно, аппаратный ватчдог как-то надежнее. Разве что я бы хотел пока попробовать без еще одной схемки, а с помощью ESP-01 (она работает у меня в паре с Ардуино и соединена с ней по RX/TX), которая бы ждала каждые минут 5 весточку от Ардуины "status=ok" и в случае неполучения сажала бы на землю RESET Ардуины на короткое время. Но я пока не могу понять, можно ли соединять GPIO 0 или GPIO 2 от ESP-01 с ресетом ардуины, не включен ли там и так LOW (они же служат для ввода ESP в режим прошивки и прочего?) и могу ли я просто один из этих входов делать выходами и управлять HIGH/LOW на них.
Спасибо, это мысль! Последний вопрос - если для аппаратного вотчдога в будущем использовать, например, ATTiny85, там же не надо гальванически развязывать ничего? Просто нога Attiny, скажем, через 100 ом резистор идет на Reset "старшего товарища" и все?
Самый минимальный тини13 вполне справится, я такое делал. Задаем таймаут, главное устройство периодически дергает ножкой, лучше сделать по прерыванию, чтобы не париться во всех функциях, тинька клнтролирует процесс. Резет осуществляется притягиванием одноименной ноги к земле через транзистор. Можно и реле. Можно и оптопарой, но ее я юзаю при разных уровнях напряжения.