Wat is Watchdog Timer ?
Componenten en benodigdheden
| × | 1 |
Apps en online services
|
Over dit project
Wat is de situatie terwijl je microcontroller in een oneindige lus verward. Is er een geval zoals het vastlopen of vastlopen van uw microcontroller tijdens het uitvoeren van een taak? Wat zijn de normale methoden voor het oplossen van problemen? Reset-knop, rechts ? Is het praktisch mogelijk om altijd op de knop te drukken? Dus, hoe zit het met een apparaat om deze taak uit te voeren? klinkt goed. Cool... !🙂.
Ja ! Nu hebben we het over zo'n apparaat dat al op een microcontroller zit. Dat is Watchdog-timer.
Waakhond Timer.
"Een waakhond-timer ( WDT ) is een hardwaretimer die automatisch een systeemreset genereert als het hoofdprogramma deze periodiek niet onderhoudt. Het wordt vaak gebruikt om een ingebouwd apparaat dat vastloopt, automatisch te resetten vanwege een software- of hardwarefout. " (os.mbed.com/cookbook/WatchDog-Timer).
Voer de hond!
Als je een hond in huis hebt. Je moet die hond regelmatig voeren. als je op een dag niet kunt eten, zal het je bijten! Zoals deze watchdog-timer werkt.
We hebben een hoofdgedeelte in het programma dat keer op keer loopt(loop ). We schakelen de watchdog-timer in die wordt geladen met een beginwaarde die groter is dan de totale vertraging in het hoofdprogramma. Elke keer dat het hoofdprogramma deze timer reset. Als het hoofdprogramma niet terugkomt om de timer te resetten voordat deze tot nul is afgeteld, wordt er een interrupt gegenereerd om de processor te resetten. Evenzo beschermt de watchdog-timer de microcontroller tegen een hangcase.
Laten we dus watchdog-timer proberen in Arduino;)
In Arduino gebruikt UNO ATMEGA328P microcontroller.
Watchdog-timerbibliotheek
#include
Bibliotheek is nodig om watchdog-timer in Arduino te gebruiken
Waakhond-timer inschakelen:
wdt_enable(WDT Reset Timer);
Om de watchdog-timer in te schakelen, WDT RESET TIMER varieert van 15ms - 8s
Bijv.:wdt_enable(WDT0_8S);
--Wachthond-timer ingeschakeld voor 8 seconden
Waakhondtimer resetten
wdt_reset();
Deze functie wordt gebruikt voor het resetten van de watchdog-timer. Reset-functie gebruikt binnen loop() . Als uw programma een grotere delay() . gebruikt die groter is dan de drempelvertraging van de watchdog-timer, voeg ook een resetfunctie toe voor die vertraging. Anders wordt de microcontroller gereset voordat die taak wordt voltooid.
Watchdog-timer uitschakelen
wdt_disable();
Voorbeeldcode:
#include
void setup(){
Serial.begin(9600);
Serial.println("Setup gestart :");
// maak een vertraging voordat u WDT inschakelt
// deze vertraging helpt om alle initiële taken te voltooien
delay(2000);
wdt_enable(WDTO_4S);
}
void loop(){
Serial.println("LOOP gestart ! ");
for(int i=0; i<=5; i++){
Serial.print( "Loop :");
Serial.print(i);
Serial.println();
delay(1000);
wdt_reset();
}
//infinity loop om MCU op te hangen
terwijl(1){}
}
Uitvoer
Schiet uw feedback, vragen, discussie in de commentaarsectie.
Code
- Volledige code
Volledige codeArduino
#includevoid setup(){ Serial.begin(9600); Serial.println("Setup gestart:"); // maak een vertraging voordat WDT wordt ingeschakeld // deze vertraging helpt bij het voltooien van alle initiële taken vertraging (2000); wdt_enable(WDTO_4S);}void loop(){ Serial.println("LOOP gestart! "); for(int i=0; i<=5; i++){ Serial.print("Loop:"); Serial.print(i); Serieel.println(); vertraging (1000); wdt_reset(); } // oneindige lus om MCU op te hangen terwijl(1){}}
Productieproces