Watch Dog Timer + Arduino


8

Wie richte ich einen Hardware-Watchdog-Timer mit einem Arduino ein?


2
Ich denke, Sie sollten die andere Antwort wählen, da der Arduino den Wachhund eingebaut hat.
Matt Williamson

Antworten:


7

Es gibt eine Reihe dedizierter Hardware-Watchdog-Chips, aber es ist einfach genug, einen normalen 555-Timer-IC und einige unterstützende Teile zu verwenden. Wenn der 555 im Astable-Modus mit einer sehr langen "HIGH" -Periode und einer relativ kurzen (möglicherweise 0,3 Sekunden) "LOW" -Periode konfiguriert ist, kann der Ausgang über eine Diode mit dem Reset-Pin des Arduino verbunden werden, um den Watchdog zu einem Open-Collector zu machen Gerät. Der Arduino kann dann den Watchdog unter Verwendung eines digitalen Ausgangs periodisch zurücksetzen, um einen Transistor einzuschalten, der den an den 555 angeschlossenen Zeitkondensator entlädt, wodurch verhindert wird, dass er jemals einen Triggerpunkt erreicht, der dazu führt, dass er den Arduino zurücksetzt.

Einige grundlegende Informationen zu einem Projekt hierfür finden Sie unter http://www.practicalarduino.com/news/id/471


1
phooky ist absolut korrekt, aber das interne WDT hat Einschränkungen: Es kann nicht länger als 6 Sekunden ausgeführt werden (abhängig vom CPU-Modell) und es gibt keine Möglichkeit, einen sauberen "Neustart" nur über Software durchzuführen. Sie können die CPU anweisen, auf Position 0 zu springen und den Bootloader neu zu starten, aber dann bleiben möglicherweise zweifelhafte Dinge im RAM und Dinge wie Interrupt-Flags, die noch in der CPU gesetzt sind. Durch das Aktivieren von RESET in der Hardware wird sichergestellt, dass das Arduino eine saubere Umgebung bietet.
Jonoxer

2
Wenn Sie die WDT-Zeitüberschreitung zulassen, wird ein "sauberer Reset" durchgeführt, da garantiert wird, dass alle Register in einem definierten Zustand gestartet werden. Das Ausführen in Software ist so einfach wie das Deaktivieren von Interrupts und das endlose Schleifen.
Nick T

14

In den Atmega-Chip ist bereits ein Watchdog-Timer eingebaut. Sie können es verwenden avr/wdt.h, um es zu manipulieren.

Ein kurzes Beispiel:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.