Я думаю, что вы должны выбрать другой ответ, так как в Arduino встроен сторожевой таймер.
Мэтт Уильямсон,
Ответы:
7
Доступно несколько специализированных аппаратных сторожевых микросхем, но это достаточно просто сделать, используя обычную 555 таймерную ИС и пару вспомогательных частей. С 555, сконфигурированным в нестабильном режиме с очень длинным периодом «ВЫСОКИЙ» и относительно коротким (возможно, 0,3 секунды) периодом «НИЗКИЙ», выход можно подключить к выводу сброса Arduino через диод, чтобы сделать сторожевой таймер открытым коллектором. устройство. Затем Arduino может периодически сбрасывать сторожевой таймер, используя цифровой выход, чтобы включить транзистор, который разряжает синхронизирующий конденсатор, подключенный к 555, предотвращая его когда-либо достижение точки запуска, которая заставит его сбросить Arduino.
phooky абсолютно верен, но у внутреннего WDT есть ограничения: он не может работать более 6 секунд (зависит от модели процессора), и нет способа сделать «чистую» перезагрузку исключительно из программного обеспечения. Вы можете попросить ЦП перейти в положение 0 и перезапустить загрузчик, но тогда у вас могут остаться неясные вещи в ОЗУ и такие вещи, как флаги прерывания, все еще установленные в ЦП. Утверждение RESET в оборудовании гарантирует, что Arduino создаст чистую среду.
jonoxer
2
истечение времени ожидания WDT приведет к «чистому сбросу», поскольку все регистры будут гарантированно запускаться в определенном состоянии. Выполнить его в программном обеспечении так же просто, как отключить прерывания и бесконечные циклы.
Ник Т
14
Уже есть сторожевой таймер, встроенный в чип atmega; Вы можете использовать, avr/wdt.hчтобы манипулировать им.
Быстрый пример:
#include<avr/wdt.h>void setup(){
wdt_enable(WDTO_500MS);// have the wdt reset the chip// if 500ms passes without a reset}void loop(){
wdt_reset();// reset the wdt}
Ответы:
Доступно несколько специализированных аппаратных сторожевых микросхем, но это достаточно просто сделать, используя обычную 555 таймерную ИС и пару вспомогательных частей. С 555, сконфигурированным в нестабильном режиме с очень длинным периодом «ВЫСОКИЙ» и относительно коротким (возможно, 0,3 секунды) периодом «НИЗКИЙ», выход можно подключить к выводу сброса Arduino через диод, чтобы сделать сторожевой таймер открытым коллектором. устройство. Затем Arduino может периодически сбрасывать сторожевой таймер, используя цифровой выход, чтобы включить транзистор, который разряжает синхронизирующий конденсатор, подключенный к 555, предотвращая его когда-либо достижение точки запуска, которая заставит его сбросить Arduino.
Некоторая основная информация о проекте для этого доступна по адресу http://www.practicalarduino.com/news/id/471.
источник
Уже есть сторожевой таймер, встроенный в чип atmega; Вы можете использовать,
avr/wdt.h
чтобы манипулировать им.Быстрый пример:
источник
Я слышал о некоторых проблемах с WDT и обычным загрузчиком, поэтому вы можете попробовать использовать другой загрузчик, например, Adaboot.
Кроме того, с помощью WDT вы можете сделать еще кое-что, кроме простого сброса. Я рекомендую http://www.atmel.com/dyn/resources/prod_documents/doc2551.pdf
источник