E' meglio un watchdog interno o esterno ad arduino?


Migliorare la Sicurezza e l'Affidabilità di Arduino (e Raspberry) con un Watchdog "Esterno": test del breakout watchdog32



Nel mondo di Arduino e dell'elettronica embedded in generale, la sicurezza e l'affidabilità sono due aspetti fondamentali. Uno dei problemi comuni che gli sviluppatori possono incontrare è l'inaspettato blocco del microcontrollore, che può causare malfunzionamenti critici di tutto il sistema. In questo articolo, esploreremo come l'uso di un watchdog esterno possa contribuire significativamente a prevenire blocchi indesiderati e ad aumentare la sicurezza e l'affidabilità del sistema.

Comprendere il Watchdog Interno di Arduino (cosa è e come funziona)



Il watchdog interno di Arduino è una funzione di sicurezza integrata nel chip, che aiuta a prevenire blocchi o arresti anomali del microcontrollore in caso di errori nel programma o malfunzionamenti di origine elettrica.

Ecco come funziona e come abilitarlo: il watchdog interno è essenzialmente un timer che deve essere periodicamente ricaricato, o come meglio si usa in gergo, "retriggerato",con una specifica funzione che si chiama wdt_reset(),da inserire nel nostro programma. Se il timer non viene "retriggerato" entro un determinato periodo di tempo, arriva al suo limite di conteggio, e poi il microcontrollore viene riavviato automaticamente a seguito della generazione di un reset.Il timer del watchdog interno di Arduino è configurato con un periodo predefinito, prossimo ad un secondo.

Riassumendo, ogni volta che la funzione wdt_reset() viene chiamata, il timer del watchdog viene "retriggerato". Il nostro programma deve continuamente "retriggerare" il watchdog in modo che non scada il timer. Se il programma si blocca per un errore di programmazione o un loop infinito, o smette di retriggerare il watchdog per un disturbo elettrico, il microcontrollore verrà riavviato appena il tempo del timer watchdog termina, perché genera un reset hardware.

Per abilitare il watchdog interno su Arduino, segui questi passaggi:

- Includi la libreria watchdog: #include
- Configura il watchdog timer con una delle opzioni predefinite, che sono WDTO_1S per un timeout di 1 secondo, e WDTO_2S per 2 secondi.
- Di seguito, reiggera il Watchdog Timer nel tuo loop o nelle parti del codice dove vuoi fare questo, inserendo la chiamata alla funzione wdt_reset()

Assicurati di retriggerare il watchdog timer regolarmente, altrimenti il microcontrollore verrà riavviato automaticamente se il timer scade.

Usare il watchdog interno è una buona pratica per aumentare la robustezza e l'affidabilità dei tuoi progetti Arduino, specialmente quando si tratta di applicazioni critiche, o comunque, dove il blocco della CPU potrebbe portare problemi all'utilizzatore, o anche a problemi di immagine e professionalità al softwarista.

Fai in modo che quando la CPU riparte a seguito di un reset, la cosa sia tracciata, ad esempio, incrementando una variabile non volatile nella EEPROM. Questo ti sarà utile per verificare la robustezza del sistema anche dopo molti mesi, rileggendo il valore di questa variabile.

Watchdog interno o esterno ?



Sebbene il Watchdog interno sia un ausilio alla sicurezza ed alla affidabilità, tuttavia ci sono svariati motivi per aggiungere al sistema un Watchdog esterno.

- Il Watchdog interno usa uno dei timer del microcontrollore, e questo potrebbe essere una limitazione per le nostre necessità.
- Ci sono alcune librerie (ad esempio quella relativa alla gestione di display OLED) che vanno in conflitto con il Watchdog interno, proprio per l'uso dello stesso timer.
- Quando siamo davanti a scenari altamente critici o pericolosi, una buona soluzione, come recitano i dettami delle certificazioni SAFETY, è avere una ridondanza dei sistemi di sicurezza, che siano preferibilmente costruiti con circuiti o tecnologie differenti, e qui possiamo affiancare il Watchdog esterno a quello interno.

Personalmente io dove posso uso sempre in Watchdog esterno, perché è più maneggevole, lo posso disconnettere fisicamente dal reset, pur continuando ad avere il trigger sull'oscilloscopio, per risolvere più speditamente i problemi del mio codice, che viceversa mi resetterebbero continuamente la cpu, creando notevoli perdite di tempo.

In pratica (test della board WATCHDOG32)



Cercando su Google il termine watchdog ci si rende conto immediatamente di quanto siano numerosi i chip disponibili che fanno questa funzione, quasi sempre accompagnati dalla funzione di controllo della tensione di alimentazione, che è uno dei maggiori problemi che possono ingenerare in blocchi della nostra CPU.

Per testare velocemente uno di questi chip mi sono ovviamente orientato verso un breakout, ovvero una schedina premontata. La mi scelta è caduta su un modulino che si chiama WatchDog32, che ho trovato in kit su ebay (https://www.ebay.it/itm/235363182136).

Analizziamo un attimo il modulo Watchdog32:

- è disponibile in tre versioni: kit componenti, premontato o solo PCB
- monta il chip ADM1232 o MAX1232
- ha tre tempi (0,15sec, 0,6sec e 1,2sec) impostabili chiudendo un ponticello a goccia di stagno
- ha due soglie di controllo della tensione di alimentazione (4,75V o 4,5V) impostabili chiudendo un ponticello a goccia di stagno
- ha una la caratteristica indispensabile per essere usata con Arduino: il pin di ENABLE, ed il relativo jumper di sezionamento, che consente di escludere il reset generato nelle operazioni preliminare di aggiustamento dello sketch, e di abilitare il Watchdog solo quando Arduino ha terminato il suo boot, evitando un restart infinito che non lo lascerebbe partire. Sempre da questo pin potremo abilitare il WATCHDOG dopo le operazioni di boot di Arduino, tipicamente come ultima operazione del nostro SETUP, dopo aver fatto il primo retrigger.
- ha un led verde per segnalare alimentazione presente
- ha un led rosso per segnalare reset da watchdog32 presente. Se il modulo non è abilitato tramite il pin ENABLE, oppure ha il jumper che seziona il reset del chip da quello di Arduino, vedremo il led rosso accendersi, ma Arduino non verrà realmente resettato.

Una volta connesso il breackout (il nostro modulino watchdog32) con i soliti fili Dupont, come da schema allegato, ho utilizzato lo sketch presente su ebay insieme al modulo, per testare speditamente il modulo. Questo ha un menù, da dove possiamo fare alcune prove:

- retriggerare watchdog32 entro i tempi prestabiliti, dove non vedremo nessun reset
- retriggerare watchdog32 con tempi superiori al necessario, dove si vedrà nascere un reset.
- retriggerare watchdog32 con tempi crescenti, per scoprire quale sia il vero tempo di intervento

Inutile dire che tutte queste operazioni le dobbiamo fare tramite il terminale seriale di Arduino IDE.

Considerazioni Finali e logica esterna di autoavvio del wd esterno:



La sicurezza e l'affidabilità sono priorità cruciali quando si sviluppano progetti con Arduino. L'aggiunta di un watchdog esterno può facilitare le operazioni di debug. Con la giusta comprensione e implementazione, puoi aumentare la stabilità e la fiducia nei tuoi progetti embedded.

Una buona soluzione sarebbe abilitare il Watchdog esterno con un circuito di ritardo hardware, tipo NE555 in configurazione monostabile, che al power on abiliti il Watchdog32 dopo qualche secondo. Questo coprirebbe anche quei rarissimi casi in cui un disturbo capita tra il power on e l'abilitazione del watchdog, caso remoto ma non impossibile, che ci blocca la cpu senza possibilità di recupero, se non con un reset manuale; il sistema ripartirebbe automaticamente.



L.Pautasso (contatti: lpautas gmail)



Il link alla board https://www.ebay.it/itm/235363182136<

I banner pubblicitari contenuti in questa pagina sono noiosi, ma ci consentono di pagare le spese del server. Se clicchi su uno di essi, contribuirai anche tu al mantenimento del sito. GRAZIE




Cerca 


Categorie Articoli

Ultimi articoli

Internal-or-External-Watchdog   APRI 

Watchdog-interno-o-esterno   APRI 

Ripetitore-di-allarme-su-Whatsapp   APRI 

Bufala-in-crosta   APRI 

Home-Automation-ESPeriment   APRI 

ESPerimento-Domotica   APRI 

Arduino-measures-liquid-level   APRI 

Arduino-misura-livello-liquidi   APRI 

finder   APRI 

LORA-english-version   APRI 

Pluviometro-LORA   APRI 

Pillole_di_Promessi_Sposi   APRI 

LORA   APRI 

promessisposi-riscrittura   APRI 

Arduino_crashes   APRI 

Arduino_si_blocca   APRI 

Arduino_e_Trenino   APRI 

millis_no_overflow   APRI 

millis   APRI 

Arduino_millis_no_Overflow   APRI 

millis   APRI 

Impara-Giocando   APRI 

Corso-di-elettrotecnica-ed-elettronica-3-volumi   APRI 

Libro-tutto-sull-audio---inglese   APRI 

Libro-ELETTRONICA-FONDAMENTALE   APRI 

Il-timer-NE555   APRI 

Audio-Handbook   APRI 

bottiglia-solare-per-illuminare-le-case   APRI 

Calcolare-la-rata-di-un-prestito   APRI 

I-Distillatori-solari   APRI