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
Categorie Articoli
Corso-di-elettrotecnica-ed-elettronica-3-volumi
Libro-tutto-sull-audio---inglese
Libro-ELETTRONICA-FONDAMENTALE
Dove-acquistare-abbigliamento-risparmiando
Come-vedere-le-partite-sullo-smartphone
Come-difendersi-dagli-allegati-pericolosi-nelle-email
KEEPASS-un-posto-sicuro-per-le-nostre-PASSWORD
I-3-trend-estivi-del-2020-scopri-i-tagli-che-ti-stanno-meglio
Ultimi articoli
OPTA-FINDER-ARDUINO-COMPATIBLE APRI
whatsapp-alarm-repeater APRI
Arduino_Template_Menu_Eng APRI
Arduino_Template_Menu APRI
Power-Supply-with-Current-Control APRI
Vantaggi_Alimentatori-Controllo_Corrente APRI
Camping-La-Secca-Moneglia APRI
Safety-Relays APRI
Rele-di-sicurezza APRI
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