The Arduino IDE 1.0.1 and 1.0.2 introduce a base support to the microcontrollers Atmega644P and Atmega1284P. However, the support offered by the IDE isn’t complete by default: it is necessary to modify some files so that the support is 100% functional and to add the complete pinout of the chips. Another problem is the bootloader. The Atmega1284P has an internal Flash of 128 kB and the actual Optiboot 4.4, available with the Arduino IDE 1.0.1 isn’t able to write over the 64 kB limit.
So I decided to create a couple of mods to add the complete support to these microcontrollers, one for the 1.0.1 IDE and one for the 1.0.2 IDE. To do that I took the version 4.5 of the bootloader, created by WestfW (the author of the Optiboot 4.4) to fully support the 128 kB of Flash of the Atmega1284P, and the pins definition of the microcontrollers, both from the Mighty-1284p core by Maniacbug (many thanks for his good work); after that, I modified some files of the Arduino 1.0.1 core. To complete the work I’ve created some new entries to add the the file boards.txt.
The last problem to fix was an HW bug that afflicts in some productions of the DIP version of the Atmega1284P that interferes with the serial communication, necessary to permit this chip to communicate with other devices or to program it using the bootloader. After a little search over the internet I’ve discovered a solution: we have to add an RC filter on the RX pin (phisical pin 14) using a 10Kohm series resistor and a 100nF parallel capacitor, placed as close as possible to the microcontroller’s pin. To build a standalone circuit you’ll find a simple schematic in the package at the end of this article.
Have fun!
Update:
the IDE 1.0.2 adds a better support to microcontrollers Atmega644P/1284P and now the modifiction of the core files is not necessary anymore. So you just have to download the mod version 1.0.2 and unpack the files in the usual place.
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.