Relógio Dog Timer + Arduino


8

Como faço para configurar um cronômetro de monitoramento de hardware com um Arduino?


2
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.

Algumas informações básicas sobre um projeto para fazer isso estão disponíveis em http://www.practicalarduino.com/news/id/471


1
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
}

3

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.