watchdog arduino mega2560

Un saluto a tutti. Leggendo qua e la ho capito che il bootloader che ho sul mega2560 ha un bug per quanto riguarda il watchdog che non mi permette di utilizzarlo. Quello che non mi è chiaro, nonostante tutte le letture se c'è effettivamente una soluzione. Ho letto dell'optiboot che forse dovrebbe risolverlo. Qualcuno mi sa dare qualche dritta per uscire da questo fosso? Grazie a tutti!

credo che il bug sia semplicemente che se imposti un tempo trooopo basso (diciamo < di 10 secondi) non riesci a caricare nessun nuovo sketch, e se troppo basso, non superi nemmeno la fase di boot del boot-lader creando un riavvio automatico infinito.
il tutto risolvibile con un programmatore ISP

grazie per la risposta, ma il problema non è quello, infatti ho impostato anche 8 secondi. da come ho capito il problema sta che nel primo avvio il bootloader imposta a 15ms, creando il loop infinto, comunque risolvibile facilmente facendo l'upload con il tato reset premuto e rilasciato nel momento opportuno.

ragazzi nessuno riesce ad aiutarmi?

Vorrei chiederti, però: a che ti serve il watchdog? Se usato in malo modo porta spesso a bloccare il micro in reset infiniti per loop del codice scritti male. Ti serve davvero?

Leo innanzitutto grazie della risposta. lo so che se usato male potrebbe essere un casino, ma proverò ad usarlo bene, perchè credo che in un buon sistema affidabile il watchdog ci debba essere. Per questo era il mio motivo di studio . Poi magari studiandolo me ne pentirò, ma vorrei provarlo a mie spese 2560 permettendo :)

Se hai solo una scheda Arduino, te lo sconsiglio. Inavvertitamente puoi bloccare la scheda nel watchdog che autoresetta all'infinito l'Atmega. E senza un altro Arduino o un programmatore esterno per resettare i fuse, saresti nell'impossibilità di toglierlo.

A proposito, sai come si attiva?

Io l'ho attivato, e già mi sono trovato nella condizione di loop infinito, risolto con la procedura descritta sul sito (comunque ho anche il programmatore l'mkii). Ma il problema come ho descritto sopra e che il bootloader del2560 cambia impostazioni del watchdog passandolo a 15ms (almeno così ho capito leggendo sui vari forum). E non so come risolvere questo bug. Ho sentito di optiboot??

scusa, ma se nel setup risetti il watchdog dovresti risolvere no? l’importante è che riesca ad avvenire il boot dello sketch

io lo setto nel setup ad esempio e lo setto per sicurezza ad 8 secondi per essere sicuri che durante il caricamento del bootloader lui non interviene. Infatti al primo avvio dopo l'upload funziona (perchè lo carico nel setup), però poi se interviene il watchdog e si resetta automaticamente, entra in loop infinito(da qui il fatto che lui lo passa a 15 ms e quindi non esce dal bootloader).

Non puoi modificare i sorgenti del bootloader e ricompilarlo con un altro valore? L'Optiboot mi pare non sia compatibile con gli Atmega1280/2560

sarebbe un'ottima idea Leo, però non so come intervenire. se mi riuscite a dare una mano ve ne sarò grato :)

Qual è il sorgente del codice? Sai quale bootloader è usato sulle Mega? Io non lo so.

stavo controllando proprio questo, dovrebbe essere stk500boot_v2_mega2560.hex ho provato ad aprire stk500boot.c e poi ho aperto ATmegaBOOT_168.c che è un'altro per il 168. Quello che ho notato da ignorante che in quello del 168 c'è un controllo sul watchdog mentre nel primo non c'è nulla. Ho provato a fare una ricerca in tutto il file, niente. Non so se la prova che ho fatto è stupida o meno.

Ho visto dal file boards.txt che il Mega1280 usa l'ATmegaBOOT_168 mentre il Mega2560 usa effettivamente l'stk500boot_v2. Vediamo se si capisce qualcosa.

Leo però così stiamo dando per scontato che il problema è nel bootloader (che come ti ho detto l'ho letto su qualche forum in inglese). Io sinceramente credo che il problema sia quello, dopo le varie prove, ma la mano sul fuoco non la metto.

Eh. No. Non c'è la gestione del watchdog, anche perché di default esso è disattivato. Forse è per questo che va in errore.

Prova ad inserire nella parte iniziale della funzione main() del file stk500veccc.c

    //set watchdog to 8s
    WDTCSR |= _BV(WDCE) | _BV(WDE);
    WDTCSR = (_BV(WDE3) | _BV(WDE0) | _BV(WDE)); //o forse WDEP3 e WDEP0

All'incirca alla riga 447 o 448. Poi ricompila il bootloader e ricaricalo sul micro abilitando il fuse del watchdog.

scusare ma il watchdog mica si resetta se ogni tot non chiami una funzione? aggiungi quella chiamata nel codice del boot-loader, no?

non l'ho mai fatto? riesci a guidarmi dandomi indicazioni più precise?

@lesto: Non ho capito.

@makky: devi ricompilare il bootloader. Vai nella cartella /hardware/arduino/bootloaders/stk500v2 apri un terminale e lancia il makefile Poi riflasha il micro col bootloader compilato avendo però l'accortezza di attivare il fuse del watchdog.

Se non sai come fare, ti rimando al mio primo intervento, in cui ti dicevo che se usato in malo modo, può esser più fonte di danni che altro. Anche perché se il codice è scritto bene il micro NON deve entrare in loop infiniti e quindi non ha bisogno di watchdog :P