WatchDog Hardware
Circuitul prezentat este realizat în jurul integratului 555 și folosit ca timer pentru resetarea unui dispozitiv. Sistemul este denumit "WatchDog". În această situație circuitul este folosit pentru placa de dezvoltare Arduino.
Varianta hardware reprezintă aplicarea unui semnal pe pinul de reset al dispozitivului, cea ce duce la resetarea sistemului.
Circuitul funcționează ca un astabil. La punerea în funcțiune, ieșirea 555 este pozitivă și datorită diodei nu poate trece spre Reset. Condensatorul C1 se încarcă prin R1 și R2 până când linia Discharge 555 se deschide, cea ce duce la descărcarea C1 și apariția unei tensiuni negative la ieșirea 555 și implicit la pinul Reset prin D1, rezultând Resetarea Sistemului. După descărcarea C1 ciclul se reaia.
În această configurație, fără să conectam pinul Digital I/O, ciclul se repetă după aprox. 80 secunde (avem un Reset la fiecare 80 sec.). Dacă dorim controlul Resetului, trebuie aplicat la pinul Digital I/O un semnal negativ scurt în intervalul de 80 sec pentru a reinițializa circuitul (mai exact, punerea la masă prin R3 duce la reîncărcarea C1).
Programare Arduino pentru control 555 prin pin Digital I/O:
Reinițializare WatchDog la un interval de 5 secunde folosind funcția Delay >> (Această variantă întârzie ciclul programului cu 5 sec. !!!) |
---|
int dog = 12; // set pin for harware watchdog (Digital I/O) void loop() { // set harware watchdog circuit pinMode(dog, OUTPUT); // set dog pin digitalWrite(dog, LOW); // reset dog delay(200); pinMode(dog, INPUT); // release dog Serial.println("WatchDog Hardware restarted..."); delay(5000); // wait 5 sec before run again } |
Reinițializare WatchDog la un interval de 10 secunde folosind funcția millis |
---|
int dog = 12; // set pin for harware watchdog (Digital I/O) unsigned long timedelay = millis(); // store last time update for harware watchdog const int interval = 10000; // set 10 sec. interval for restart harware watchdog void loop() { // set harware watchdog circuit if ((millis()-timedelay) > interval) { pinMode(dog, OUTPUT); // set dog pin digitalWrite(dog, LOW); // reset dog delay(200); pinMode(dog, INPUT); // release dog Serial.println("WatchDog Hardware restarted..."); timedelay = millis(); } |
WatchDog Software
Varianta software constă doar în programarea plăcii de dezvoltare și nu necesită alte circuite periferice. Timerul intern variază între 15milisec și 8sec. Pentru programare este necesară includerea unor librării.
Programare Arduino pentru reset:
Reset dacă sistemul staționează mai mult de 2 secunde |
---|
#include
void setup() { wdt_disable(); // disable reset function at startup wdt_enable(WDTO_2S); // set reset for 2 sec } void loop() { wdt_reset(); // restart reset function } |
Reset folosind funcția de chemare și funcția millis la un interval de 60 sec |
---|
#include
void loop() { // millis function trigger on every 60 sec if ((millis()-resetsys) > 60000) { reset(); // call reset function resetsys = millis(); // reset millis } } void reset() { wdt_enable(WDTO_250MS); while(1); } |
0 comentarii:
Trimiteți un comentariu