Was ist ein Watchdog-Timer?
Komponenten und Verbrauchsmaterialien
![]() |
| × | 1 |
Apps und Onlinedienste
![]() |
|
Über dieses Projekt
Was ist die Situation, während Ihr Mikrocontroller in einer Endlosschleife verwirrt ist😖. Gibt es einen Fall, in dem Ihr Mikrocontroller beim Ausführen einer Aufgabe hängen bleibt oder hängen bleibt? Was sind die normalen Methoden zur Fehlerbehebung? Reset-Taste, rechts ? Ist es praktisch möglich, die ganze Zeit auf den Knopf zu drücken? Wie wäre es also mit einem Gerät, das diese Aufgabe erledigt? hört sich gut an. Cool... !🙂.
Ja ! Jetzt diskutieren wir über ein solches Gerät, das bereits auf einem Mikrocontroller enthalten ist. Das ist der Watchdog-Timer.
Watchdog-Timer.
"Ein Watchdog-Timer ( WDT ) ist ein Hardware-Timer, der automatisch einen System-Reset generiert, wenn das Hauptprogramm es versäumt, ihn regelmäßig zu warten. Es wird häufig verwendet, um ein eingebettetes Gerät, das aufgrund eines Software- oder Hardwarefehlers hängen bleibt, automatisch zurückzusetzen. " (os.mbed.com/cookbook/WatchDog-Timer).
Füttere den Hund !
Wenn Sie einen Hund zu Hause haben. Sie müssen diesen Hund in regelmäßigen Abständen füttern. Wenn du eines Tages nicht füttern kannst, wird es dich beißen! So wie dieser Watchdog-Timer funktioniert.

Wir haben einen Hauptteil im Programm, der immer wieder läuft (Schleife ). Wir aktivieren Watchdog-Timer wird mit einem Anfangswert geladen, der größer ist als die Gesamtverzögerung im Hauptprogramm. Jedes Mal, wenn das Hauptprogramm diesen Timer zurücksetzt. Falls das Hauptprogramm den Timer nicht zurücksetzt, bevor er auf null heruntergezählt hat, wird ein Interrupt generiert, um den Prozessor zurückzusetzen. Ebenso schützt ein Watchdog-Timer den Mikrocontroller vor dem Hängenbleiben.
Lassen Sie uns also den Watchdog-Timer in Arduino ausprobieren;)
In Arduino verwendet UNO ATMEGA328P Mikrocontroller.

Watchdog-Timer-Bibliothek
#include
Bibliothek wird benötigt, um Watchdog-Timer in Arduino zu verwenden
Watchdog-Timer aktivieren:
wdt_enable(WDT Reset Timer);
Um den Watchdog-Timer zu aktivieren, WDT RESET TIMER variiert von 15ms - 8s

Beispiel:wdt_enable(WDT0_8S);
--Aktivierter Watchdog-Timer für 8Sekunden
Watchdog-Timer zurücksetzen
wdt_reset();
Diese Funktion dient zum Zurücksetzen des Watchdog-Timers. Reset-Funktion verwendet innerhalb von loop() . Wenn Ihr Programm ein größeres delay() verwendet die größer als die Schwellenverzögerung des Watchdog-Timers ist, fügen Sie auch vor dieser Verzögerung eine Reset-Funktion hinzu. Andernfalls wird der Mikrocontroller zurückgesetzt, bevor diese Aufgabe abgeschlossen wird.
Watchdog-Timer deaktivieren
wdt_disable();
Beispielcode :
#include
void setup(){
Serial.begin(9600);
Serial.println("Setup gestartet:");
// Verzögern Sie die Aktivierung von WDT
// Diese Verzögerung hilft, alle anfänglichen Aufgaben abzuschließen
delay(2000);
wdt_enable(WDTO_4S);
}
void loop(){
Serial.println("LOOP gestartet ! ");
for(int i=0; i<=5; i++){
Serial.print( "Loop :");
Serial.print(i);
Serial.println();
delay(1000);
wdt_reset();
}
//Unendlichkeitsschleife zum Aufhängen der MCU
while(1){}
}
Ausgabe

Schießen Sie Ihr Feedback, Ihre Fragen und Ihre Diskussion in den Kommentarbereich.
Code
- Vollständiger Code
Vollständiger CodeArduino
#includevoid setup () { Serial.begin (9600); Serial.println("Setup gestartet:"); // eine Verzögerung vor dem Aktivieren von WDT machen // diese Verzögerung hilft, alle anfänglichen Tasks abzuschließen delay(2000); wdt_enable (WDTO_4S);}void loop () { Serial.println ( "LOOP gestartet!"); for(int i=0; i<=5; i++) {Serial.print ("Loop:"); Serial.print (i); Serial.println(); Verzögerung (1000); wdt_reset(); } //Unendlichschleife zum Aufhängen der MCU während(1){}}
Herstellungsprozess