Go Down

Topic: Bootloader Atmega328 (Read 3870 times) previous topic - next topic

5lash

Ciao a tutti.
Sto provando a caricare il bootloader di Arduino dentro a degli integrati ATMEGA328P-PU, per poter poi provare a creare dei circuiti stampati che contengano il mio intero progetto, evitando di dipendere dal board di Arduino.

Ho a disposizione Leonardo ed Ethernet, al momento sto usando Leonardo e seguendo questa guida: http://www.instructables.com/id/Arduino-Leonardo-as-Isp/?ALLSTEPS

Ho provato sia la versione senza il clock esterno (quindi usando come board "ATmega328 on a breadboard (8 MHz internal clock)") sia installando sulla breadboard un oscillatore 16mhz con i due condensatori e la resistenza sul pin 1 (come illustrato nella guida) e mettendo come board in questo caso "Arduino Duemilanove w/ATmega328". In entrambi i casi ho prima caricato lo sketch su Leonardo (e ottengo l'heartbeat sul led) ma poi al momento di lanciare "scrivi bootloader" (porta seriale giusta, programmatore Arduino as ISP Leonardo) ottengo un bel rifiuto:

Code: [Select]
avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.

avrdude: Send: Q [51]   [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]

avrdude done.  Thank you.


Ho provato a fare lo stesso con Arduino Ethernet, ma alcuni pin sono occupati dal chip wiznet ed è troppo complesso. Prima di scrivere sul forum ho provato a guardare un po' in giro e ho anche verificato i seguenti passaggi:

Lo sketch Arduino ISP l'ho modificato (pin reset 10)
Ho provato più di un chip 328P PU
Ho smontato tutte le connessioni e rifatte
Ho verificato col tester che non ci siano falsi contatti tra breadboard e pin

Innanzitutto grazie per aver letto, cosa può essere? Mi conviene prendere una board UNO e provare con quella?

Grazie!  :)

5lash

Alla fine ci ho rinunciato, ho comprato un UNO ed il bootloader si scrive in un attimo.
A chiunque volesse fare lo stesso consiglio di usare la board UNO, molti molti meno problemi :)

PaoloP

Hai provato a seguire la mia guida?
--> http://forum.arduino.cc/index.php?topic=208054.0

Mentre per tutte le operazioni di programmazione segui la Guida di Michele Menniti --> http://michelemenniti.it/arduino_burn_bootloader.php

5lash

Ciao Paolo, sì, l'avevo trovata da google ma ero giunto allo stesso identico risultato: Yikes!  Invalid device signature.

Con la stessa breadboard e stesso ATMEGA, collegata però ad UNO (ovviamente con i cablaggi non più sull'icsp ma sui ip 10-13) è andato al primo colpo.

Ora ho un altro problema, gli sketch non vengono caricati sul chip ora dotato di bootloader. Mi dice "avrdude: ser_recv(): programmer is not responding -- avrdude: stk500_recv(): programmer is not responding". Il bootloader è andato okay, quando uso il chip nuovo il led 13 lampeggia. Penso sia una questione dei fuse, pensavo che caricando il bootloader venissero impostati correttamente. Potrebbero essere loro?

Grazie ; )

EDIT: ps grazie per i link, ora mi leggo con calma la guida

PaoloP

Ciao.
Hai guardato la guida di Michele. E' tutto spiegato, anche la configurazione dei fuse.
Se selezioni la board Arduino UNO dovrai utilizzare il quarzo esterno da 16Mhz con condensatori. Se vuoi altre soluzioni dovrai prepararti una board apposita.
Il bootloader della UNO è pensato per funzionare a 16Mhz, se lo mandi ad altre velocità non và.
Nella cartella dell'IDE ci sono già dei bootloader per 328 pensati per funzionare a 8 mhz ad esempio il PRO MINI e il FIO.
Nel preparare lo stand-alone quale schema hai seguito?

5lash

Ciao Paolo, innanzitutto grazie.
Sì, ho preparato la breadboard con un oscillatore da 16mhz e due condensatori da 10pf (stando al suo datasheet della RS components li vuole da 10, spero di non aver sbagliato).
Ho lanciato lo sketch ISP e mi ha dato l'ok come bootloader. Se metto in tensione l'arduino-su-breadboard ottendo il lampeggio del led 13. Quindi penso tutto okay.

Il caricamento degli sketch non va a buon fine: "avrdude: ser_recv(): programmer is not responding - avrdude: stk500_recv(): programmer is not responding".
Se prendo l'ATMEGA che ho preparato io e lo metto dentro arduino UNO (al posto dell'atmega originale) ottengo lo stesso errore. Quindi ho pensato che sia o il bootloader caricato male o questi fuse bits che sto studiando ora che di fabbrica sono registrati dentro l'atmega in maniera errata per funzionare come servono a noi :)

Sì, sto già leggendo la guida :))

thanks!

5lash

Ops. Avevo semplicemente caricato il bootloader sbagliato! Pensavo ce ne fosse uno solo ... !
Grazie per la guida, mi è stata molto utile : )

menniti

I condensatori dovrebbero essere da 22pF, non da 10, sicuro di aver letto giusto sul data-sheet? Potrei sbagliarmi ma, a parte il fatto che anche il team Arduino usa e consiglia 22pF, la cosa me l'ero guardata tempo fa ed avevo avuto conferma. Ad "occhio" con 10pF (ma dipende anche dal quarzo che usi, in genere è il costruttore che ti indica la capacità) sei al limite di funzionamento dell'oscillatore e la frequenza reale dovrebbe essere >16MHz
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

5lash

Ciao Michele, sulla scheda del quarzo c'è indicato "capacità di carico 10pf" e pensavo si riferisse al carico del condensatore da affiancare sui pin. Comunque sì, Arduino su breadboard funziona bene anche con due ceramici da 10, ma mi assicurerò al prossimo ordine di prenderne un po' da 22 allora : ))) Grazie!

menniti

Figurati, può anche essere che tu abbia ragione, ci vorrebbe un frequenzimetro o un DSO per misurare la frequenza operativa.
Ciao XD
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

PaoloP


Se metto in tensione l'arduino-su-breadboard ottendo il lampeggio del led 13. Quindi penso tutto okay.


Ma non è che dopo il bootloader hai caricato il blink sempre con l'ISP?
In quel caso il bootloader viene sovrascritto.  :smiley-sweat:
Potrebbe essere quello il motivo per cui non funziona. Perchè non c'è.  :smiley-red:

5lash

Paolo, caricavo un bootloader 2009 su un integrato che poi avrei usato come UNO. Pensavo che il bootloader fosse unico, ignoranza mia. Comunque ho risolto, grazie! : ))))

Michele, sì, il  cristallo è venduto da RS col codice 547-6288 e come capacità dicono proprio 10pf, comunque ho un modestissimo rigol da 50mhz ed effettivamente non ci avevo pensato a misurarlo, grazie per il consiglio!

menniti

A circuito alimentato devi misurare tra il pin 8 del micro e gnd
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

leo72

Come da tab. 9-5 di pag. 30 del datasheet, la capacità esterna deve avere un valore compreso fra 12 e 22 pF.

5lash

Michele: ho allegato la misurazione. È impostata come average di 256 campioni.

Leo: mi ero fermato alla pagina RS, non avevo letto il datasheet completo. Comprerò i 22pF : )))

grazie a tutti ancora

Go Up