Welcome! Log In Create A New Profile

Advanced

Uso del Watchdog su Arduino Mega R3

Posted by truck64 
Uso del Watchdog su Arduino Mega R3
May 06, 2020 11:18AM
Ciao a tutto il forum,
ho da pochi giorni avviato la mia prima stampante e fino ad ora l'ho sempre sorvegliata come un falco.. Con la prospettiva in futuro di usarla senza presidio umano ho letto e mi hanno raccontato che ci possono essere casi in cui l'Arduino può smettere di "loopare", col rischio di mandare in surriscaldamento hotend o piatto (questa non vuol essere minimamente una critica verso chi scrive il firmware). Da vecchio programmatore di PLC mi sto informando sulla funzione di watchdog ma trovo spesso indicazioni incomplete. Da quello che ho capito per evitare di bloccare la Mega è necessario prima sostituire il codice del bootloader originale (io ho trovato questo Arduino-stk500v2-bootloader. Qualcuno di voi ha esperienza in merito?
Grazie


Luca

CoreXY custom (LF Mark1) 395x360x350 - Mega (clone per ora..) + RAMPS1.4 + 4xA4988 + 4 Nema17 17HS4401 - HotEnd V6 clone con ugello da 0.4mm - RepRapDiscount - Display LCD 2004 Smart Controller - Firmware MK4duo 4.2.9 - Repetier-Host 2.1.6
Re: Uso del Watchdog su Arduino Mega R3
May 06, 2020 12:03PM
Non proprio, il bootlader è una cosa, il watchdog una cosa diversa.

Il bootloader è quella cosa che se apri la posta seriale in un certo modo ti permette di flashare il firmware, direttamente da seriale, altrimenti devi usare la connessione diretta ai pin della "porta di programmazione".

Il watchdog invece è una impostazione del processore controlla il funzionamento del processore, cioè una specie di registro che tiene conto che un certo bit deve essere settato ogni tot secondi, e di questo si deve occupare la routine del programma, se questo non viene fatto il sistema resetta il processore.

Tutte le spiegazioni non sono fatte in modo "scientifico" ma spannometrico perché poi ogni processore lo attiva a suo modo.


MI pare che comqune esista un sistema che controlli il blocco del processore, al limite, senza scomodare firmware o altro, esistono come nei vecchi Hifi dei bei sensori che superata una certa temperatura staccano l'alimentazione a 12V (che poi può anche staccare la 220 tramite relais), se cerchi in giro sono circuiti abbastanza semplici, tipo quelli in uso sulle macchine utensili per lo Start e STOP, se il sensore rileva una tempaeratura superiore agli 80°C (dipende dal tipo di sensore), stacca l'alimentazione e stop.

Sicuro veloce e a prova di bomba, e di bug software.

Saluti

Carlo D.


P3Steel - MKS GEN v1.2 e REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER + Gen 7 MOSFET (HotBed) + alimentatore step-down 12V -> 5V
Firmware MK4duo 4.3.6 con ABL induttivo con LJ18A3 - Slic3R (Originale) ed ESP3D per controllare la stampante da remoto.
HotEnd Cinese V6 clone con ugello da 0.4mm.

[My Building Log]
Re: Uso del Watchdog su Arduino Mega R3
May 06, 2020 11:52PM
Ciao Carlo, grazie della risposta.
Si, come ridondanza ho già previsto interruttori termostatci e circuiti di spegnimento indipendenti dall'Arduino, compreso un sensore di fumo. Solo che faccio fatica trovare componenti abbastanza piccoli, leggeri e affidabili da mettere sull'hotend. Per non parlare dei fili in più da portarsi dietro (ho una CoreXY bowden mediamente grande e ogni filo in più verso la testina mi rompe).
Il watchdog del processore, funzione che ho imparato a usare per lavoro su altri sistemi di automazione, sarebbe la soluzione più "pulita" ma ho letto che sul Mega è problematica perchè porta a un reset infinito del processore. Una soluzione citata quà e la sul web è quella di usare il cip del bootloader (ATmega168 ?) per disabilitare il watchdog al reset della scheda ma quì comincia la confusione:
- ho trovato articoli in cui si dice che la modifica del bootloader è già implementata nelle schede originali più recenti forum.arduino.cc
- ho trovato altri che dicono di aver "riflashato" il bootloader anche di recente
In ogni caso ho dato un occhiata veloce a Marlin e MK4duo, premetto che ho giocato poco con Arduino, ma a parte la direttiva #define USE_WATCHDOG per altro commentata non ho trovato nessun richiamo alle funzioni di wdt.h quindi non riesco a capire come lavora nel firmware delle stampanti.
Mi sarebbe utile sapere se qualcuno lo usa e come.
Grazie


Luca

CoreXY custom (LF Mark1) 395x360x350 - Mega (clone per ora..) + RAMPS1.4 + 4xA4988 + 4 Nema17 17HS4401 - HotEnd V6 clone con ugello da 0.4mm - RepRapDiscount - Display LCD 2004 Smart Controller - Firmware MK4duo 4.2.9 - Repetier-Host 2.1.6
Re: Uso del Watchdog su Arduino Mega R3
May 07, 2020 02:46AM
Allora c'è in giro un po' di confusione, arduino originale, ha come chip USB un secondo processore cito " ATmega16U2 (ATmega8U2 in the revision 1 and revision 2 Arduino boards)", questo in pratica è potente come un Arduino 168 o giù di lì, e ed è usato per una funzione particolare, la scheda può comportarsi come una HID (Human Interface Device) se necessario, cambiando appunto il software del chip, ad esempio per emulare una tastiera od un joystick da computer.

Le schede cloni in genere hanno dei chip di comunicazione diversi, FTDI o il più economico CH340G o CH341G chinese, e su quelle il chip è solo un chip di comunicazione che non può emulare una interfaccia HID, infatti sotto linux sono visualizzati in maniera diversa, uno come periferica USB, l'altro come porta comunicazione.

Come nota di contorno alcuni lamentano dei ritardi o dei blocchi di comunicazione soprattutto con i chip CH340G e CH341G, il bug si presenta se non ricordo male, se si inviano più di un certo tot di byte consecutivi, lui ne salta uno e ovviamente genera errori.

Il watchdog in pratica lo attivi con quella direttiva, poi non so come va usato, nel caso Pagina del produttore che poi è Microchip che si è comprata qualche tempo fa ATMel.

Da lì puoi scaricare le specifiche del processore se ti interessa capire come funziona la cosa.

Questa scheda non è originale ma usa lo stesso chip 16u2

Sul fatto che il watchdog rallenti il microprocessore è vero, introduce ogni tanto dei ritardi perché deve controllare il timer e fare le sue cose come resettare i contatori ecc.

Saluti

Carlo D.


P3Steel - MKS GEN v1.2 e REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER + Gen 7 MOSFET (HotBed) + alimentatore step-down 12V -> 5V
Firmware MK4duo 4.3.6 con ABL induttivo con LJ18A3 - Slic3R (Originale) ed ESP3D per controllare la stampante da remoto.
HotEnd Cinese V6 clone con ugello da 0.4mm.

[My Building Log]
Re: Uso del Watchdog su Arduino Mega R3
May 09, 2020 02:48PM
Non hai trovato quel file perché è una libreria che simula il watchdog... I processori come il mega 2560 o precedenti non hanno un watchdog hardware, va quindi emulato con un timer... La libreria fa questo, ma si può tranquillamente fare a meno...
Purtroppo proprio perché è in emulazione non sempre funziona se il processore si blocca, anche i timer vanno in blocco...
Nel successivi processori invece il watchdog è hardware c'è proprio una sezione hardware nel processore indipendente che di continuo manda il reset al processore ameno che non venga puntualmente resettato. Però anche se il processore si blocca per qualsiasi motivo questa sezione va avanti di suo e resetterà il processore facendo un completo restart...
Il watchdog va attivato è una sicurezza in più se si dovesse bloccare il processore...


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Re: Uso del Watchdog su Arduino Mega R3
May 26, 2020 09:33AM
A me sembra che la documentazione ufficiale dica il contrario, ossia che gli AVR Mega abbiamo il Watchdog in hw.

Poi non entro nei dettagli se sia usabile su Arduino o cosa faccia quella libreria.

Ma in linea di principio dovrebbe funzionare, l'unico limite è che il reset del watchdog non fa ripartire lo Sketch ma fa ripartire il bootloader (che magari, non lo so, potrebbe non avere la gestione WD).
Ergo un tempo di WDog troppo basso potrebbe portare ad un loop di reset infiniti perché non si fa tempo ad eseguire lo sketch dove c'è la gestione WD.

Edited 1 time(s). Last edit at 05/26/2020 09:39AM by FabryR.
Re: Uso del Watchdog su Arduino Mega R3
May 27, 2020 03:34AM
Anche a me sembra che su ATmega 2560 il watchdog sia hardware.

Il bootloader è un programma aggiuntivo, che viene configurato per essere eseguito sempre, e poi fa partire il programma che carichi.

Non esiste il concetto di bootloader come nei processori da computer, esiste un chip che carica il bios che carica il firmware ecc..

[www.arduino.cc]

meglio spiegato qui:

[www.baldengineer.com]

e trovi informazioni anche sul watchdog.

Probabilmente quando il watchdog "scatta" fa semplicemente ripartire il software che è appunto il bootloader, in teoria il bootloader dovrebbe semplicemente rifare il giro, cioè "verificare se esiste un programma da lanciare" e "lanciarlo", andrebbe visto come l'attivazione del watchdog interferisca con questo processo, nell'articolo che ti ho linkato sopra si parla dell'Uno che necessita di un bootloader diverso da quello di "serie" per usare il watchdog, il mega è diverso per cui non saprei.

AGGIORNAMENTO:
Ho letto in giro ed in teoria il bootloader introduce un ritardo di 5 secondi (almeno per l'arduino UNO, ma dalla pagina di optiboot sembrerebbe che anche il bootloader del mega sia derivato da quello) tra l'alimentazione od il reset e l'effettiva partenza del programma caricato con il bootloader, magari questo influisce sul watchdog, anche se in teoria durante quel tempo il processore non è bloccato sta solo aspettando i codici dalla seriale, nel caso tu voglia riprogrammare lo "sketch".


Saluti

Carlo D.

Edited 1 time(s). Last edit at 05/27/2020 03:56AM by onekk.


P3Steel - MKS GEN v1.2 e REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER + Gen 7 MOSFET (HotBed) + alimentatore step-down 12V -> 5V
Firmware MK4duo 4.3.6 con ABL induttivo con LJ18A3 - Slic3R (Originale) ed ESP3D per controllare la stampante da remoto.
HotEnd Cinese V6 clone con ugello da 0.4mm.

[My Building Log]
Re: Uso del Watchdog su Arduino Mega R3
May 27, 2020 05:04AM
Ciao FabryR. E' esattamente quello che ho trovato anc'io ATmega640/1280/1281/2560/2561 - Complete Datasheet. Il problema è che non so se e come questa funzione venga sfruttata da Marlin/MK4DUO, vista la vastità di processori ai quali si possono adattare non tutti dotati di questa specifica. Per questo sono andato a cercare la libreria che per quanto ho capito è fornita da AVR per sovraintendere alla funzione specifica anche sul Mega2560 R3. Mi sono procurato un po di Arduini e esempi, appena ho tempo faccio delle prove. Ma visti i dubbi che mi restano anche dopo la risposta del Mago, che ringrazio comunque, mi sono orientato verso l'adozione di un automazione esterna la controllore della stampante che faccia da supervisore e eventualmente da blocco di sicurezza, specie per i processi termici. Appena ho qualcosa di funzionante vi aggiorno.

PS. per Carlo:
si il ritado all'avvio delle schede Arduino, che non dipende dal processore ma dall'insieme dei componeti di Arduino, è proprio il problema per il quale il bootloader dovrebbe disattivare watchdog fino all'avvio del programma principale altrimenti il reset va in loop e non se ne esce più. Ed è per questo che si parla di riprogrammare il bootloader perche quello originale non lo fa o in passato non lo faceva. Ma come detto in precedenza se nessuno ha già fatto espertienza diretta e può condividerla vedrò di fare qualche prova io e vi saprò dire.
Grazie a tutti.

Edited 2 time(s). Last edit at 05/27/2020 05:46AM by truck64.


Luca

CoreXY custom (LF Mark1) 395x360x350 - Mega (clone per ora..) + RAMPS1.4 + 4xA4988 + 4 Nema17 17HS4401 - HotEnd V6 clone con ugello da 0.4mm - RepRapDiscount - Display LCD 2004 Smart Controller - Firmware MK4duo 4.2.9 - Repetier-Host 2.1.6
Re: Uso del Watchdog su Arduino Mega R3
May 27, 2020 06:26AM
Quote
onekk
Probabilmente quando il watchdog "scatta" fa semplicemente ripartire il software che è appunto il bootloader, in teoria il bootloader dovrebbe semplicemente rifare il giro, cioè "verificare se esiste un programma da lanciare" e "lanciarlo", andrebbe visto come l'attivazione del watchdog interferisca con questo processo, nell'articolo che ti ho linkato sopra si parla dell'Uno che necessita di un bootloader diverso da quello di "serie" per usare il watchdog, il mega è diverso per cui non saprei.

AGGIORNAMENTO:
Ho letto in giro ed in teoria il bootloader introduce un ritardo di 5 secondi (almeno per l'arduino UNO, ma dalla pagina di optiboot sembrerebbe che anche il bootloader del mega sia derivato da quello) tra l'alimentazione od il reset e l'effettiva partenza del programma caricato con il bootloader, magari questo influisce sul watchdog, anche se in teoria durante quel tempo il processore non è bloccato sta solo aspettando i codici dalla seriale, nel caso tu voglia riprogrammare lo "sketch".
Il watchdog non è altro che un timer connesso al pulsante di reset, con il timer che può essere resettato periodicamente (ed è quello che deve fare il sw) o completamente disattivato (WatchDog off).
Quando scatta il tempo impostato perché nessuno è arrivato in tempo a resettare il timer, viene emesso un reset e la cpu riparte come se qualcuno avesse premuto il pulsante fisico di reset (o avesse tolto e poi ridato corrente).

Il bootloader è un normale programma, è solamente il programma eseguito per primo all'avvio, che poi a sua volta passa il controllo ad un programma successivo (lo sketch).
Se il WDog è acceso quando si entra nel bootloader ci possono essere due comportamenti:

a) Il bootloader ha una gestione del WDog, ossia controlla tra i primi suoi compiti (è importante farlo presto) se il watchdog è attivo ed in quel caso lo spegne (o in alternativa continua a resettare il timer periodicamente) per riaccenderlo un attimo prima di uscire dal bootloader per ridare il controllo allo sketch.
Volendo potrebbe anche non riaccenderlo e lasciare il compito della riaccensione del WDog allo sketch stesso (anche perché di certo prima l'aveva acceso lui)

b) Il bootloader non ha una gestione del WDog e quindi il timer del WD va avanti.
In questo caso è importante che il tempo di esecuzione del bootloader sia abbastanza basso da permettere di eseguire il bootloader completamente e poi avviare lo sketch con ancora abbastanza tempo residuo sul timer WD per permettere di arrivare sino alla routine di reset del WD presente nello sketch, altrimenti si finisce in un loop di reset da WD.

Ho trovato questo per l'uso da Arduino : [black-electronics.com] dove sembrerebbe che il tempo max impostabile sia 8 sec ed il min 15ms

Edited 4 time(s). Last edit at 05/27/2020 06:34AM by FabryR.
Re: Uso del Watchdog su Arduino Mega R3
May 27, 2020 12:39PM
Da quel poco che si capisce dal sito di optiboot che dovrebbe essere l'attuale bootloader di Arduino, come mi sembra di capire da uno dei link che ho postato, il problema del watchdog dovrebbe essere sisolto con optiboot o con i recenti bootloader di arduino, che dovrebbero essere almeno dall'UNO in poi, in un articolo di adafruit si parlava di bootloader e si diceva che dal Uno in poi rispetto a quelli precdenti il bootloader era passato da circa 2000 byte a 512 byte facendo aumentare la memoria a disposizione di 1.5 kbyte.

Però ora non so con il 2560 come funzioni, ovviamente il "watchdog timer" dovrebbe essere inserito nel loop principale, e anche in quello che gestisce gli interrupt, nelle prime istruzioni dovrebbe esserci quella che resetta il timer del watchdog.

Poi va visto come viene implementato il loop principale e la gestione degli interrupt, dal poco che ricordo sono due parti distinte del codice, se viene richiesto un interrupt il mani loop viene "interotto" e il controllo passa alla routine di gestione degli interrupt che controlla quale interrupt è scattato e agisce di conseguenza.

Ma non è che io abbia programmato molto così "low level", mi sono sempre limitato ad usare sketch semplici.

Saluti

Carlo D.


P3Steel - MKS GEN v1.2 e REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER + Gen 7 MOSFET (HotBed) + alimentatore step-down 12V -> 5V
Firmware MK4duo 4.3.6 con ABL induttivo con LJ18A3 - Slic3R (Originale) ed ESP3D per controllare la stampante da remoto.
HotEnd Cinese V6 clone con ugello da 0.4mm.

[My Building Log]
Sorry, only registered users may post in this forum.

Click here to login