interner oder externer Watchdog
Vor- und Nachteile und was man beachten sollte
Watchdog
Wenn man seinen Sketch (Programm) auf dem Arduino zum Laufen gebracht hat, soll es natürlich auch stabil sein. Nun ist natürlich die beste Möglichkeit ein Programm stabil zu machen, die Vermeidung von Fehlern und die weiteren bekannten Methoden aus der Softwareentwicklung. Da aber nicht wirklich 100% aller auftretenden Fälle beachtet werden können (Speicherleck, externe Einflüsse, Spannungsspitzen/Spannungsausfall), macht es durchaus Sinn einen Überwachungsmechanismus zu implementieren. Dieser wird allgemein Watchdog genannt. Der Sinn eines Watchdos ist die Programmausführung zu kontrollieren und bei Fehlfunktion (Programm kommt X ms nicht an einer bestimmten Programmstelle vorbei) einen RESET auszulösen.
Vor allem bei Geräten welche [sehr] lange autonom funktionieren sollen/müssen oder wo es auf hohe Verfügbarkeit ankommt, ist dieser Mechanismus zwingend.
interner Watchdog |
externet Watchdog |
kein zusätzlicher Hardwareaufwand sehr einfache Programmierung es wird nur ein interner Reset ausgelöst begrenzte Zeit < 8 Sekunden möglich |
zusätzlicher Hardwareaufwand einfache Programmierung Hardwarereset wird ausgelöst unbegrenzte TimeOutzeit möglich |
Speziell das Thema Hardwarereset sollte nicht unterschätzt werden. Wenn beim Arduino Shields oder andere externe Komponenten benutzt werden, so kann nur mit einem Hardwarereset sichergestellt werden, das wirklich alles auf Grundzustand zurückgesetzt wird.
Es sei hier stellvertretend das GSM Shield oder auch die Ethernetshiels genannt.
Programmstruktur für [internen] Watchdog
#include
void setup ()
{
// ...
wdt_enable (WDTO_8S); //Watchdog aktivieren nach 8 Sekunden Reset
}
void loop ()
{
wdt_reset (); //8sekundenintervall neu starten
...
}
Schaltungsvorschlag für externer Watchdog
Watchdog Timer der ein echtes RESET erzeugt, und somit angeschlossene Shields ebenfalls rücksetzt.