Eu acho que você deve escolher a outra resposta como o Arduino tem o cão de guarda construído dentro.
Matt Williamson
Respostas:
7
Há vários chips dedicados para vigilância de hardware disponíveis, mas é fácil o suficiente com um IC de timer 555 regular e algumas peças de suporte. Com o 555 configurado no modo astável com um período "ALTO" muito longo e um período "BAIXO" relativamente curto (talvez 0,3 segundos), a saída pode ser conectada ao pino de redefinição do Arduino por meio de um diodo para tornar o cão de guarda um coletor aberto dispositivo. O Arduino pode então redefinir periodicamente o watchdog usando uma saída digital para ligar um transistor que descarrega o capacitor de temporização conectado ao 555, impedindo que ele atinja um ponto de disparo que fará com que o Arduino seja redefinido.
O phooky está absolutamente correto, mas o WDT interno tem limitações: ele não pode ser executado por mais de cerca de 6 segundos (depende do modelo da CPU) e não há como fazer uma "reinicialização" limpa apenas com o software. Você pode dizer à CPU para pular para a posição 0 e reiniciar o carregador de inicialização, mas poderá ficar com coisas desonestas na RAM e coisas como sinalizadores de interrupção ainda definidos na CPU. A afirmação de RESET no hardware garante que o Arduino tenha um ambiente limpo.
jonoxer
2
deixando o out WDT vai causar um "clean reset", como todos os registos serão garantidas para iniciar em um estado definido. Realizá-lo em software é tão simples quanto desativar interrupções e loop infinito.
Nick T
14
Já existe um cronômetro de vigilância embutido no chip atmega; você pode usar avr/wdt.hpara manipulá-lo.
Um exemplo rápido:
#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}
Ouvi falar de alguns problemas relatados no WDT e no gerenciador de inicialização normal, portanto, você pode tentar outro gerenciador de inicialização com ele, por exemplo, o Adaboot.
Respostas:
Há vários chips dedicados para vigilância de hardware disponíveis, mas é fácil o suficiente com um IC de timer 555 regular e algumas peças de suporte. Com o 555 configurado no modo astável com um período "ALTO" muito longo e um período "BAIXO" relativamente curto (talvez 0,3 segundos), a saída pode ser conectada ao pino de redefinição do Arduino por meio de um diodo para tornar o cão de guarda um coletor aberto dispositivo. O Arduino pode então redefinir periodicamente o watchdog usando uma saída digital para ligar um transistor que descarrega o capacitor de temporização conectado ao 555, impedindo que ele atinja um ponto de disparo que fará com que o Arduino seja redefinido.
Algumas informações básicas sobre um projeto para fazer isso estão disponíveis em http://www.practicalarduino.com/news/id/471
fonte
Já existe um cronômetro de vigilância embutido no chip atmega; você pode usar
avr/wdt.h
para manipulá-lo.Um exemplo rápido:
fonte
Ouvi falar de alguns problemas relatados no WDT e no gerenciador de inicialização normal, portanto, você pode tentar outro gerenciador de inicialização com ele, por exemplo, o Adaboot.
Além disso, você pode fazer muito mais coisas com o WDT, além de apenas uma redefinição. Eu recomendo http://www.atmel.com/dyn/resources/prod_documents/doc2551.pdf
fonte