Le versioni 1.0.1 ed 1.0.2 di Arduino introducono il supporto ai microcontrollori Atmega644P/1284P. Di serie, però, l’IDE non permette di utilizzare questi microcontrollori in maniera ottimale: è necessario aggiungere un file per descrivere in modo completo la mappatura dei pin di questi chip nonché anche modificare alcuni file affinché essi siano pienamente supportati in tute le loro funzionalità. Un ulteriore problema è il bootloader. L’Atmega1284P è dotato di 128 kB di Flash e l’attuale Optiboot 4.4 distribuito con l’IDE 1.0.1 non è capace di scrivere oltre i 64 kB.
Ho perciò deciso di creare due mod per poter aggiungere il supporto completo a questi microcontrollori, uno valido per la versone 1.0.1 ed uno per la versione 1.0.2. Ho prelevato il bootloader nella versione 4.5, creato da westfm (l’autore dell’Optiboot) per supportare tutti i 128 kB di Flash del 1284, ed il file delle definizioni dei pin dei microcontrollori dal core Mighty-1284p di maniacbug (che ringrazio per il suo ottimo lavoro), ed ho modificato alcuni file del core Arduino 1.0.1. Ho infine creato delle nuove voci da aggiungere al file boards.txt.
L’ultimo problema da risolvere era un bug HW presente su alcune produzioni dell’Atmega1284P in versione DIP che disturba la comunicazione seriale, necessaria sia per comunicare con altri dispositivi sia per poter programmare il chip usando il bootloader. Cercando su internet ho trovato la soluzione: si tratta di aggiungere un filtro RC all’ingresso del pin RX (piedino fisico n° 14) usando una resistenza da 10 kOhm in serie ed un condensatore da 100 nF in parallelo, posizionati il più vicino possibile al pin del microcontrollore. Trovate lo schema minimale per montare questi chip ed il filtro RC all’interno del pacchetto che potete scaricare in fondo a questo articolo.
Buon divertimento!
Aggiornamento:
l’IDE 1.0.2 migliora il supporto ai microcontrollori Atmega644P/1284P ed ora non è più necessario modificare i file del core. Basta quindi scaricarsi il secondo archivio valido per la versione 1.0.2 e scompattare i file nel solito posto.
Salve, è un mese che la seguo sui vari post dei forum come risolvere il bug degòli atmega1284p, ho iniziato a sperimentare con gli atmega1284p ma da un mese mi sono impazzito con i vari condensatori sulla uart0 da 100pf eccc.
I miei mcu atmega1284 ovviamente erano buggati (ehehe) ma mi è servita questa esperienza per arrivare ad utilizzare i miei mostricciattoli con 16k di ram.
Arrivo al dunque: ho installato i core da lei preparati tutto ok ma solito dramma da voi sviscerato: i sketch su uart0 non si trasferiscono. Le ho provate di tutte ma poi ho trovato un sito che mi ha illuminato, cioè ho cambiato i fuse sul vostro file boards.txt ho scaricato bootloader e come per incanto la uart0 funziona senza resistenza e condensatore da 100pf;
1284_16b.bootloader.low_fuses=0xF7
1284_16b.bootloader.high_fuses=0xD4
1284_16b.bootloader.extended_fuses=0xFD
Ho anche trovato sul sito google code il file hex per abilitare la uart1 nel caso di caricamento sketch dalla uart1
http://code.google.com/p/optiboot/downloads/detail?name=optiboot_atmega1284p-u1.hex ……
Grazie per il vostro aiuto senza il quale non riuscivo ad utilizzare la mia atmega1284p
Grazie per la segnalazione ma con il fuse basso modificato come da esempio (il fuse alto controlla altre cose, non il tipo di sorgente di clock) io personalmente non ho potuto fare l’upload di uno sketch senza usare il filtro RC sul pin RX0.
Secondo lei potrebbe comportare qualche limitazione di prestazioni o malfunzionamenti i fuse che ho modificato? In ogni modo ho notato che se non si mette una alimentazione esterna e i condensatori da 0.1 micro tra i vcc e gnd lo scaricamento degli sketch non avviene grazie a presto
No, nessuna controindicazione. I C da 0.1uC ceramici tra VCC e GND dovrebbero essere sempre messi su qualunque integrato.
è possibile non scaricamento degli sketch e bootloader se ad arduino come isp non si aggiunge alimenazione secondaria? In sostanza ho meso due atmega1284p su una millefori e se non metto alimentazione secondaria e C 0,1 um non funziona nulla ;se metto solo alimentazione secondaria e non C da 0,1 non scarica se metto alimentazione secondaria e C da 0,1 funziona tutto….grazie per l’attenzione a presto……….
Sinceramente non ho notato questa cosa. Ma il circuito su millefori forse consumava più corrente di quella che poteva erogare l’Arduino o era composto solo dal 1284P?
Il circuito è composto solo da due atmega1284p ma solo uno alimentato; noto che se alimento uno dei due che ha le connessioni vicino alla mcu(intendo i jumper) tutto va ok(scaricamento sketch e boot ) ; sempre con alimentazione esterna, se invece alimento la mcu con jumper lontano dalla stessa il download di sketch etc non avviene …..sto diventando matto..provo ad aumentare l’erogazione di corrente dell’alimentazione(uso alimentatore 220ac/12vcc con 1 Amp in uscita).Quando scarico gli sketch non ho attaccato altre periferiche solo cavetti sulla Uarto, alimentazione e condensatori 0,1uf…
Risolto: tutti i difetti i comunicazione sopra menzionati dipendevano da cablaggi errati non stabilì insomma errori da principiante , ora funziona tutto scarico bootloader e sketch alla massima potenza grazie cmq
Io no. Con il bootloader Optiboot non riesco a comunicare senza filtro RC. E non sono il solo. Ma tu stai usando un circuito su PCB oppure su breadboard?
Brevemente:
Ho scaricato il pacchetto bootloader di maniacbug; ho modificato i fuse sul boards.txt 1284_16b.bootloader.low_fuses=0xF7
1284_16b.bootloader.high_fuses=0xD4
1284_16b.bootloader.extended_fuses=0xFD
Così sia su breadboard sia su circuito stampato finito scarico bootloader e sketch su Uart0 senza filtro Rc .
Le ho provate di tutte ma questa ultima che ho esposto ? l’unica strategia funzionante e stabile ( ? un mese che mi gira su circuito stampato senza perdere un colpo)
Brevemente:
Ho scaricato il pacchetto bootloader di maniacbug; ho modificato i fuse sul boards.txt 1284_16b.bootloader.low_fuses=0xF7
1284_16b.bootloader.high_fuses=0xD4
1284_16b.bootloader.extended_fuses=0xFD
Così sia su breadboard sia su circuito stampato finito scarico bootloader e sketch su Uart0 senza filtro Rc .
Le ho provate di tutte ma questa ultima che ho esposto ? l’unica strategia funzionante e stabile ( ? un mese che mi gira su circuito stampato senza perdere un colpo)
Purtroppo non ho risolto e l’unica soluzione valida per me è stata quella di utilizzare il bootloader standard al posto dell’Optiboot con una R da 175K in serie alla linea RX. In questo modo riesco a programmare serialmente il chip senza problemi.
Salve a tutti io sto cercado di programmare un 644PA con il bootloader proposto ma ottengo questo stupendo errore
avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64
avrdude: Send: V [56] @ [40] . [00] . [00] . [0c] [20]
avrdude: Recv:
avrdude: stk500_cmd(): programmer is out of sync
Qualcuno per cortesia mi potrebbe aiutare ?
Grazie mille
Il bootloader non è un rilascio ufficiale e potrebbe dare dei problemi. Prova con il filtro RC consigliato per il 1284P. Se anche così non risolvi, ricontrolla le connessioni e prova a riflashare i fuse.