Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Watchdog-Timer am Arduino verstehen & nutzen – Schutz vor Programmabstürzen

Komponenten

Bauteil Anzahl
Arduino UNO (ATmega328P) 1

Software

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

Watchdog-Timer am Arduino verstehen & nutzen – Schutz vor Programmabstürzen

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

Watchdog-Timer am Arduino verstehen & nutzen – Schutz vor Programmabstürzen

Best Practices

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

  1. Insert Molding erklärt: Effizienz steigern & Kosten senken in der Multi-Material-Produktion
  2. Prototyping erklärt: Der entscheidende Validierungsschritt für Startups
  3. Linearmotoren verstehen: Von elektrischer Energie zur präzisen Linearbewegung
  4. CNC-Drehen erklärt: Präzisionsbearbeitung für hochwertige Teile
  5. Gießereien verstehen: Wo Metall zu Bausteinen der modernen Industrie wird
  6. Mehrstufige Pumpen verstehen: Funktion, Einsatz und Vorteile
  7. Pressenzuführungen: Funktionsweise, Typen & Industrielle Anwendung
  8. Tauchpumpen: Funktionsweise, Einsatzbereiche und Vorteile
  9. Getränkeroboter: Technologie, Automatisierung und Rolle in der Getränkeindustrie
  10. Mechanische Pressen erklärt: Funktion, Typen und industrielle Anwendungen