Watchdog-Timer am Arduino verstehen & nutzen – Schutz vor Programmabstürzen
Komponenten
| Bauteil | Anzahl |
|---|---|
| Arduino UNO (ATmega328P) | 1 |
Software
- Arduino IDE
- AVR-Bibliothek
<avr/wdt.h>(bereits im AVR-GCC enthalten)
Was ist ein Watchdog-Timer (WDT)?
Ein Watchdog-Timer ist ein Hardware-Timer im Mikrocontroller, der das System automatisch zurücksetzt, wenn die Hauptsoftware ihn nicht regelmäßig („füttert“) zurücksetzt. Er schützt vor Endlosschleifen, Deadlocks oder Hardware-Fehlern, die den Controller „einfrieren“.
Analogie: Wie ein Hund – wenn du ihn nicht regelmäßig fütterst, beißt er (Reset).

WDT am ATmega328P (Arduino UNO)
Der interne WDT kann auf folgende Timeout-Werte eingestellt werden:
| Konstante | Timeout |
|---|---|
WDTO_15MS |
15 ms |
WDTO_30MS |
30 ms |
WDTO_60MS |
60 ms |
WDTO_120MS |
120 ms |
WDTO_250MS |
250 ms |
WDTO_500MS |
500 ms |
WDTO_1S |
1 s |
WDTO_2S |
2 s |
WDTO_4S |
4 s |
WDTO_8S |
8 s |
Wichtige Funktionen
| Funktion | Beschreibung |
|---|---|
wdt_enable(WDTO_XXX) |
Aktiviert WDT mit gewähltem Timeout. |
wdt_reset() |
Setzt WDT zurück („füttert den Hund“). Muss häufiger aufgerufen werden als der Timeout. |
wdt_disable() |
Deaktiviert WDT. |
Wichtig: Wenn delay() länger als der WDT-Timeout ist, muss wdt_reset() vor dem delay() aufgerufen werden, sonst resetet der Controller mitten im Delay.
Beispiel: WDT-Demo mit absichtlicher Endlosschleife
#include <avr/wdt.h>
void setup() {
Serial.begin(9600);
Serial.println("Setup gestartet...");
delay(2000); // Zeit für Serial Monitor & Bootloader
wdt_enable(WDTO_4S); // WDT auf 4 Sekunden
}
void loop() {
Serial.println("LOOP gestartet!");
for (int i = 0; i <= 5; i++) {
Serial.print("Loop: "); Serial.println(i);
delay(1000);
wdt_reset(); // WDT alle 1 s füttern → OK
}
// Jetzt: Endlosschleife ohne wdt_reset() → WDT schlägt zu nach 4 s
while (1) {}
}
Serielle Ausgabe (Beispiel)
Setup gestartet... LOOP gestartet! Loop: 0 Loop: 1 Loop: 2 Loop: 3 Loop: 4 Loop: 5 --- Board resettet sich nach ~4 s (kein wdt_reset in while(1)) --- Setup gestartet... ...

Best Practices
- WDT erst nach kritischen Initialisierungen aktivieren (z. B. nach
delay(2000)im Setup), damit Bootloader & Setup nicht resetet werden. wdt_reset()an strategischen Stellen im Hauptloop & in langen Blockierfunktionen.- Bei Verwendung von Libraries (z. B. Ethernet, SD), die lange blockieren: WDT-Timeout großzügig wählen oder
wdt_reset()in Callbacks einbauen. - Im Sleep-Mode: WDT kann als Wake-Up-Quelle dienen (Interrup-Mode), nicht nur Reset.
- Für sicherheitskritische Systeme: Externer Watchdog-IC (z. B. MAX6369) – funktioniert auch bei CPU-Hardwarefehler.
Erweiterung: Watchdog-Interrupt statt Reset
Der WDT kann statt Reset einen Interrupt auslösen (WDIE Bit im WDTCSR Register). Damit kann die Software vor dem Reset noch Aufräumarbeiten machen (Daten speichern, Log schreiben). Nach dem Interrupt wird der WDT im System-Reset-Modus neu gestartet – wenn er dann nicht gefüttert wird, folgt der harte Reset.
Herstellungsprozess
- Insert Molding erklärt: Effizienz steigern & Kosten senken in der Multi-Material-Produktion
- Prototyping erklärt: Der entscheidende Validierungsschritt für Startups
- Linearmotoren verstehen: Von elektrischer Energie zur präzisen Linearbewegung
- CNC-Drehen erklärt: Präzisionsbearbeitung für hochwertige Teile
- Gießereien verstehen: Wo Metall zu Bausteinen der modernen Industrie wird
- Mehrstufige Pumpen verstehen: Funktion, Einsatz und Vorteile
- Pressenzuführungen: Funktionsweise, Typen & Industrielle Anwendung
- Tauchpumpen: Funktionsweise, Einsatzbereiche und Vorteile
- Getränkeroboter: Technologie, Automatisierung und Rolle in der Getränkeindustrie
- Mechanische Pressen erklärt: Funktion, Typen und industrielle Anwendungen