Arduino Watchdog: Cum funcționează

Arduino watchdog

În acest nou articol vom vedea ce a câine de pază, pentru ce poate fi folosit și cum să îl utilizați în proiectele dvs Arduino. Tot ce trebuie să știți despre această funcție interesantă, dar necunoscută. Și da, așa cum sugerează și numele (câine de pază), poate fi folosit pentru a urmări unele probleme.

Aici vom vedea Tot ce trebuie să știți in ceea ce priveste…

Ce este un câine de pază?

În calcul, a câine de pază este un mecanism de supraveghere folosit pentru a monitoriza funcționarea unui sistem sau program. Funcția sa principală este de a detecta și de a răspunde la situații anormale sau defecțiuni ale sistemului, cum ar fi blocări sau înghețuri, și de a lua măsuri corective pentru a garanta continuitatea funcționării sau recuperarea sistemului.

Câinele de pază funcționează cu un cronometru care este configurat pentru un anumit interval de timp. Dacă sistemul sau programul nu efectuează o anumită acțiune sau nu alimentează watchdog-ul (adică nu îl repornește) în acel interval de timp, watchdog-ul presupune că sistemul se află într-o stare nedorită sau a încetat să mai răspundă corect și ia o valoare implicită. acțiune. Această acțiune poate varia în funcție de implementare și poate include repornirea sistemului, generarea de jurnale de erori, declanșarea alarmelor sau luarea de acțiuni specifice pentru a corecta problema.

Watchdog-ul este folosit pe o varietate de sisteme și dispozitive informatice, de la sisteme de operare și servere la dispozitive sisteme în timp real încorporate și critice, inclusiv Arduino. Scopul său principal este de a îmbunătăți fiabilitatea și disponibilitatea sistemului prin detectarea automată și răspunsul la probleme, reducând astfel nevoia de intervenție manuală în situațiile de defecțiune.

Ce este câinele de pază Arduino?

cărți despre arduino

Timer-ul Watchdog al Arduino trebuie ajustat în funcție de nevoile aplicației. El Temporizator de supraveghere folosește o sursă internă de ceas de 128 kHz (poate varia în funcție de placă și MCU utilizat). Când este activat, începe să conteze de la zero până la o valoare predeterminată de utilizator. Dacă Timer-ul Watchdog nu se resetează când atinge această valoare, resetează microcontrolerul.

Un microcontroler sau MCU este un dispozitiv electronic mic care integrează o unitate centrală de procesare (CPU), memorie, periferice de intrare/ieșire și, uneori, interfețe de comunicare pe un singur cip. Este conceput pentru a controla și executa sarcini specifice.

Temporizatorul Watchdog ATmega328P, care este implementat în Arduino UNO, oferă 10 setări de timp diferite, fiecare determinând când cronometrul va depăși și, prin urmare, va provoca o resetare. Diferitele intervale de timp sunt următoarele: 16 ms, 32 ms, 64 ms, 0.125 secunde, 0.25 secunde, 0.5 secunde, 1 secundă, 2 secunde, 4 secunde și 8 secunde, așa cum vom vedea mai târziu în tabelul pe care îl includ.

Dacă încă nu vă este clar ce puteți face cu Watchdog Timer Arduino UNO, vom vedea un exemplu ca să-l poți înțelege grafic. În acest exemplu, vom folosi un simplu LED care clipește (clipește). LED-urile clipesc pentru o perioadă stabilită înainte de a intra în bucla while(). Această buclă while() este folosită ca alternativă la un sistem de blocare. Deoarece Watchdog Timer nu este resetat în timpul buclei while(), va provoca o repornire a sistemului, iar LED-urile vor începe să clipească din nou înainte ca sistemul să se blocheze și să repornească. Acest ciclu va continua...

Considerații și caracteristici

Temporizatorul Watchdog este dezactivat la începutul codului. O întârziere de x secunde este încorporată înainte de a activa Watchdog. Această întârziere este crucială pentru a permite bootloader-ului Arduino să verifice dacă este încărcat cod nou și pentru a acorda suficient timp pentru a scrie codul în memoria flash. Acest aspect este relevant ca măsură de precauție. Poate apărea o situație în care, din cauza codării defectuoase sau a unor considerente necorespunzătoare, codul scris resetează microcontrolerul la intervale foarte scurte la infinit. Acest lucru poate deteriora placa Arduino și poate împiedica încărcarea corectă a codurilor pe aceasta. Dacă se întâmplă acest lucru, trebuie să ardeți bootloader-ul folosind un alt Arduino ca ISP pe Arduino blocat...

Când folosim watchdog-ul Arduino, este necesar să îl folosim registre de biți pentru a defini comportamentul cipului. Registrele relevante și semnificația lor sunt detaliate în fișa de date a microcontrolerului care este prezentă pe placa Arduino. Cu toate acestea, Arduino Integrated Development Environment (IDE) vine cu unele funcții și macrocomenzi concepute pentru a simplifica acest proces, care pot fi importate prin includerea bibliotecii #include pentru a utiliza cip-ul AVR watchdog.

În acest fel, putem configura watchdog-ul activând-o folosind funcția wdt_enable().. Argumentul acestei funcții determină timpul înainte de resetarea plăcii dacă cronometrul nu a fost resetat. În ceea ce privește valorile pe care le puteți configura în cod, le includ aici:

Timp înainte de declanșarea câinelui de pază Argumentul wtd_enable().
15 ms WDTO_15MS
30 ms WDTO_30MS
60 ms WDTO_60MS
120 ms WDTO_120MS
250 ms WDTO_250MS
500 ms WDTO_500MS
1 s WDTO_1S
2 s WDTO_2S
4 s WDTO_4S
8 s WDTO_8S
Pentru mai multe informații, puteți consulta fișa tehnică Arduino, unde puteți găsi mai multe detalii despre microcontrolerul integrat în sine, registrele care pot fi utilizate cu watchdog, pinout, periferice, specificații tehnice, tensiuni, consum de energie etc.

Exemplu de utilizare a watchdog-ului în Arduino

Arduino IDE, tipuri de date, programare

În cele din urmă, să vedem cum este folosit practic watchdog-ul cu un exemplu în IDE-ul Arduino. După cum putem vedea, este destul de simplu, puteți găsi diverse coduri sursă ca acesta pe Internet, astfel încât să puteți exersa, modifica și crea propriile coduri pentru a utiliza watchdog în proiectele dvs. Să vedem exemplul nostru:

#include <avr/wdt.h> // Incluir la biblioteca watchdog (wdt.h)
 
void setup()
{
  wdt_disable(); // Desactivar el watchdog mientras se configura, para que no se resetee
  wdt_enable(WDTO_2S); // Configurar watchdog a dos segundos
}
 
void loop()
{
  wdt_reset(); // Actualizar el watchdog para que no produzca un reinicio
  //Aquí iría el código de tu programa...
}

După cum se poate vedea în acest exemplu de schiță pentru Arduino, există trei funcții dintre limbajele de programare notabile pentru gestionarea watchdog-ului și acestea sunt:

  • wdt_disable() pentru a dezactiva temporizatorul în timp ce configurați Arduino.
  • wdt_enable(Tiempo) pentru a atribui un interval cronometrului și a-l porni, specificând timpul corespunzător așa cum am arătat în tabelul anterior.
  • wdt_reset() pentru a reînnoi intervalul alocat și pentru ca programul să nu repornească.

Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.