WatchDog su Arduino Mega 2560

Ciao a tutti,
ho cercato in lungo e largo sui forum e ho trovato molte info ma mai una definitiva, o almeno non l'ho capita io! :stuck_out_tongue:

Il problema è che non riesco a far funzionare il WatchDog sull'arduino mega... lo uso tranquillamente sull'Uno ma sul mega non funziona!
Ho provato anche a fare uno sketch semplicissimo di test e sull'Uno va e sul Mega non succede nulla, lo ignora proprio.

Ecco lo sketch di test:

#include <avr/wdt.h>

int c=0;

void setup()
{
  Serial.begin(9600);
  Serial.println("Prova WatchDog");
  Serial.println("");
  Serial.println("Attendo 10 secondi...");
  Serial.print("10...");
  delay(1000);
  Serial.print("9...");
  delay(1000);
  Serial.print("8...");
  delay(1000);
  Serial.print("7...");
  delay(1000);
  Serial.print("6...");
  delay(1000);
  Serial.print("5...");
  delay(1000);
  Serial.print("4...");
  delay(1000);
  Serial.print("3...");
  delay(1000);
  Serial.print("2...");
  delay(1000);
  Serial.print("1...");
  delay(1000);
  wdt_enable(WDTO_4S);
}

void loop()
{
  Serial.println("Prima del reset... ");
  wdt_reset();
  delay(2000);
  Serial.println("dopo!");
  Serial.print("Counter:");
  Serial.println(c);
  Serial.println();
  c++;
}

Giocando con la durata del delay nel loop posso far itnervenire il WD o meno... in pratica se il delay è superiore a 4000 l'Arduino mi si resetta. L'Uno si il Mega no!!! =(
Perchè?

Illuminatemi vi prego... :* XD

Grazie!!

Premetto che non ho un Arduino mega, domanda stupida: hai scelto la scheda corretta dal menù board? Dovresti controllare nel datasheet se ci sono delle differenze con l'atmega328p

Ciao

Se non selezioni la board giusta non riesci a completare neanche la compilazione dello sketch! :wink:

Riguardo alle specifiche del WDT ho dato un'occhiata ai datasheet delle due CPU e a me sembra proprio identico!

Ho letto molti post in cui si parlava di un bug nel bootloader ma erano tutti di parecchio tempo fa... vorrei sapere ora, a Giugno 2012, come siamo messi...

grazie grazie

Il bug di cui parli non dovrebbe riguardarti.
Se non ho capito male leggendo quelle segnalazioni, il watchdog partiva ma, a causa del fatto che nel codice del bootloader non veniva resettato il flag del reset con watchdog, il bootloader resettava poi la scheda all'infinito. Ma tu invece lamenti il problema che la tua scheda non si resetta neanche una volta, giusto?

Si esatto!
E' per questo che sto continuando a sbatterci la testa.... maroooon come mi sento frustrato!! :smiley:

In realtà non è che non fa nulla, lo sketch si pianta quando faccio il reset... mi ero sconfusionato! XD
Poi provo a fare reset con il pulsante e niente... il Serial Monitor rimane bianco. A questo punto credo che il Mega si resetti in continuo...
Che ne dite?

Ho provato anche con l'ultimissimo IDE 1.0.1 e fa uguale...

Allora sì, il tuo problema è quello descritto nei tanti post. Non mi ricordo la soluzione che hanno adottato, però.

Mi sembra che la soluzione fosse modificare il bootloader del Mega... qualcuno ha il file pronto?

Potresti provare ad applicare le modifiche fatte da Mark Sproul ( Bootloader for Arduino Mega2560 ) e scaricarti il .hex già compilato con alcune modifiche apportate da Mellis ( Arduino-stk500v2-bootloader/stk500boot_v2_mega2560.hex at master · arduino/Arduino-stk500v2-bootloader · GitHub )

OK ma come faccio l'upload del bootloader?
Ho a disposizione vari "arduini" Uno da usare per programmare il Mega... ma non so come....
Ho cercato e googlato ma non ho trovano nulla di esauriente.
Qualche link?

Grassieee

Cerca la guida di Michele Menniti per la programmazione ISP. Carichi lo sketch ArduinoISP sull'UNO, poi colleghi la MEGA e fai la programmazione tramite IDE.

Trovata la guida, collegato il mio Uno al mio Mega, caricato lo sketch ArduinoISP sull'uno, impostato l'IDE su Mega, scelto dal menù Tools "Arduino as ISP" e poi cliccato dallo stesso sulla voce "Burn bootloader".
Lampeggiano per un paio di secondi e poi l'IDE mi restituisce il seguente errore:

avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.

Ma possibile che alla release 3 di Mega ancora ci sia sto problema?? E' uno scandalo!!!!

Ma che IDE usi?
Se hai la 1.0, lo sketch ArduinoISP di quella versione non funziona, devi usare lo sketch ArduinoISP2 che ho modificato io (lo trovi sul forum o sul mio sito, link in calce).

Eggià uso proprio la 1.0!! Li possino.... :smiley:

Grazie Leo, provo subito...

OK ora l'upload dello sketch va a buon fine... ma ricevo un errore quando provo a inviare il bootloader.

Ho un gran dubbio sui collegamenti, quindi ricapitolo un momento la mia situazione così magari chi ha un minuto di tempo può spiegarmi qualcosa in più:

Board programmatore: Arduino Uno R3
Board da programmare: Arduino Mega R3
IDE 1.0 (ho anche le altre versioni, consigliatemi voi...)

Collegamenti:
Arduino Uno Arduino Mega
pin 5V >> pin 5V
pin GND >> pin GND
pin D10 >> pin RESET
pin D11 >> pin D11
pin D12 >> pin D12
pin D13 >> pin D13

Ora ho visto che in testa allo sketch di Leo72 c'è una mappa dei pin diversa per Mega ma da quanto capisco dalla disposizione dei pin è se il Mega fa da programmatore. Il reset slave va sulla board di destinazione. Giusto?

L'errore che ricevo dopo qualche secondo che ho lanciato il "Burn Bootloader" è:
avrdude: stk500_getsync(): not in sync: resp=0x00

Grazie ancora e scusate se sono di coccio :*

Puoi anche scaricare l'IDE 1.0.1