Bootloader Atmega328

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:

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! :slight_smile:

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 :slight_smile:

Hai provato a seguire la mia guida?
--> Usare Arduino Leonardo come programmatore ISP (IDE 1.5.5) - Generale - Arduino Forum

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

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

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?

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 :slight_smile:

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

thanks!

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

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

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!

Figurati, può anche essere che tu abbia ragione, ci vorrebbe un frequenzimetro o un DSO per misurare la frequenza operativa.
Ciao XD

5lash:
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. :sweat_smile:
Potrebbe essere quello il motivo per cui non funziona. Perchè non c'è. :blush:

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!

A circuito alimentato devi misurare tra il pin 8 del micro e gnd

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

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

NewFile0.jpg

Ho una domanda a cui su Internet non ho trovato gran che. Sono da preferire i ceramici a singolo strato o i multistrato? O quello che mi conviene è guardare la tolleranza per giudicarli? Grazie!

Infatti, come ti dicevo in precedenza, hai una frequenza maggiore di 16MHz, anche se la risoluzione della lettura mostrata da tuo DSO è scarsuccia :~ forse devi regolare qualche parametro. Comunque sfruttando la lettura del periodo il calcolo preciso diventa: 1/0,00000006240 = 16025641 Hz quindi 16,025641 MHz, quindi è molto imprecisa.
Il Rigol non è male come DSO e quindi dovrebbe essere attendibile.
Se provi con i 22pF quel 16,03 dovrebbe diminuire sensibilmente.
Per i condensatori sul quarzo ho sempre usato ceramici, non so nemmeno se esistano valori così piccoli in multistrato, ma non mi sono proprio posto il problema, quelli li uso da 100nF in su.