Watchdog Arduino: come funziona

cane da guardia Arduino

In questo nuovo articolo vedremo cos'è a cane da guardia, per cosa può essere utilizzato e come utilizzarlo nei tuoi progetti Arduino. Tutto quello che devi sapere su questa funzione interessante ma sconosciuta. E sì, come suggerisce il nome (watchdog), può essere utilizzato per rintracciare alcuni problemi.

Qui vedremo tutto ciò che devi sapere per quanto riguarda…

Cos'è un cane da guardia?

In informatica, un cane da guardia è un meccanismo di supervisione utilizzato per monitorare il funzionamento di un sistema o programma. La sua funzione principale è rilevare e rispondere a situazioni anomale o guasti del sistema, come arresti anomali o blocchi, e adottare misure correttive per garantire il funzionamento continuo o il ripristino del sistema.

Il cane da guardia funziona con un timer configurato per un intervallo di tempo specifico. Se il sistema o il programma non esegue un'azione specifica o non alimenta il watchdog (ovvero, non lo riavvia) entro tale intervallo di tempo, il watchdog presuppone che il sistema sia in uno stato indesiderato o abbia smesso di rispondere correttamente e intraprende un periodo predeterminato azione. Questa azione può variare in base all'implementazione e può includere il riavvio del sistema, la generazione di log degli errori, la generazione di allarmi o l'adozione di azioni specifiche per correggere il problema.

Il watchdog viene utilizzato su una varietà di sistemi e dispositivi informatici, dai sistemi operativi e server ai dispositivi sistemi real-time embedded e critici, incluso Arduino. Il suo obiettivo principale è migliorare l'affidabilità e la disponibilità del sistema rilevando e rispondendo automaticamente ai problemi, riducendo così la necessità di intervento manuale in situazioni di guasto.

Cos'è il watchdog di Arduino?

libri su arduino

Il timer watchdog di Arduino deve essere impostato in base alle esigenze dell'applicazione. Lui Timer del cane da guardia utilizza una sorgente di clock interna da 128 kHz (può variare a seconda della scheda e dell'MCU utilizzati). Quando attivato, inizia a contare da zero fino a un valore predeterminato dall'utente. Se il timer del watchdog non si reimposta quando raggiunge questo valore, reimposta il microcontrollore.

Un microcontrollore, o MCU, è un piccolo dispositivo elettronico che integra un'unità di elaborazione centrale (CPU), memoria, periferiche di input/output e talvolta interfacce di comunicazione su un singolo chip. È progettato per controllare ed eseguire compiti specifici.

Il timer del cane da guardia ATmega328P, che è implementato in Arduino UNO, offre 10 diverse impostazioni orarie, ciascuna delle quali determina quando il timer trabocca e quindi causa un ripristino. I diversi intervalli di tempo sono i seguenti: 16 ms, 32 ms, 64 ms, 0.125 secondi, 0.25 secondi, 0.5 secondi, 1 secondo, 2 secondi, 4 secondi e 8 secondi, come vedremo più avanti nella tabella che allego.

Se ancora non ti è chiaro cosa puoi fare con il Watchdog Timer di Arduino UNO, vedremo Un esempio così puoi capirlo graficamente. In questo esempio utilizzeremo un semplice lampeggio dei LED. I LED lampeggiano per un periodo prestabilito prima di entrare nel ciclo while(). Questo ciclo while() viene utilizzato come alternativa a un sistema bloccato. Poiché il timer del watchdog non viene reimpostato durante il ciclo while(), causerà il riavvio del sistema e i LED inizieranno a lampeggiare nuovamente prima che il sistema si arresti in modo anomalo e si riavvii. Questo ciclo continuerà…

Considerazioni e caratteristiche

Il timer del cane da guardia È disabilitato all'inizio del codice. Viene incorporato un ritardo di x secondi prima di abilitare il Watchdog. Questo ritardo è fondamentale per consentire al bootloader di Arduino di verificare se viene caricato nuovo codice e per concedere tempo sufficiente per scrivere il codice nella memoria flash. Questo aspetto è rilevante a titolo precauzionale. Può verificarsi una situazione in cui, a causa di una codifica errata o di considerazioni errate, il codice scritto resetta il microcontrollore a intervalli molto brevi e all'infinito. Ciò può danneggiare la scheda Arduino e impedire il corretto caricamento dei codici su di essa. Se ciò accade, è necessario masterizzare il bootloader utilizzando un altro Arduino come ISP sull'Arduino bloccato...

Quando utilizziamo il watchdog Arduino, è necessario utilizzare registri di bit per definire il comportamento del chip. I relativi registri e il loro significato sono dettagliati nel datasheet del microcontrollore presente sulla scheda Arduino. Tuttavia, l'ambiente di sviluppo integrato (IDE) di Arduino è dotato di alcune funzioni e macro progettate per semplificare questo processo, che possono essere importate includendo la libreria #includere per utilizzare il watchdog del chip AVR.

In questo modo possiamo configurare il watchdog attivandolo utilizzando la funzione wdt_enable(). L'argomento di questa funzione determina il tempo prima del reset della scheda se il timer non è stato resettato. Per quanto riguarda i valori che è possibile configurare nel codice, li inserisco qui:

Tempo prima che venga attivato il watchdog argomento wtd_enable()
ms 15 WDTO_15MS
ms 30 WDTO_30MS
ms 60 WDTO_60MS
ms 120 WDTO_120MS
ms 250 WDTO_250MS
ms 500 WDTO_500MS
1 s WDTO_1S
2 s WDTO_2S
4 s WDTO_4S
8 s WDTO_8S
Per maggiori informazioni potete consultare la scheda tecnica di Arduino, dove potrete trovare maggiori dettagli sul microcontrollore integrato stesso, i registri che possono essere utilizzati con il watchdog, piedinatura, periferiche, specifiche tecniche, tensioni, consumo energetico, ecc.

Esempio di utilizzo del watchdog su Arduino

Arduino IDE, tipi di dati, programmazione

Infine vediamo come si utilizza praticamente il watchdog con un esempio nell'IDE di Arduino. Come possiamo vedere, è abbastanza semplice, puoi trovare diversi codici sorgente come questo su Internet, così puoi esercitarti, modificare e creare i tuoi codici per utilizzare watchdog nei tuoi progetti. Vediamo il nostro esempio:

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

Come si può vedere in questo esempio di sketch per Arduino, ci sono tre funzioni del notevole linguaggio di programmazione per la gestione del watchdog, e questi sono:

  • wdt_disable() per disabilitare il timer durante la configurazione di Arduino.
  • wdt_enable(tiempo) per assegnare un intervallo al timer ed avviarlo, specificando l'orario corrispondente come ho indicato nella tabella precedente.
  • wdt_reset() per rinnovare l'intervallo assegnato e il programma non si riavvia.

Aggiungi come fonte preferita