«

»

Nov 20 2012

Add Atmega644P/1284P support to Arduino IDE 1.0.x (updated)

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.

644P/1284P core for Arduino 1.0.1
644P/1284P core for Arduino 1.0.1
644p_1284p_core_101-001.zip
Version: 101-001
91.0 KiB
743 Downloads
Details...
644P/1284P core for Arduino 1.0.2/1.0.5
644P/1284P core for Arduino 1.0.2/1.0.5
644p_1284_core_102-003.zip
Version: 102-003
85.4 KiB
1116 Downloads
Details...

14 comments

Skip to comment form

  1. mar.conte

    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

  2. Leonardo Miliani

    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.

  3. mar.conte

    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

  4. Leonardo Miliani

    No, nessuna controindicazione. I C da 0.1uC ceramici tra VCC e GND dovrebbero essere sempre messi su qualunque integrato.

  5. mar.conte

    è 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……….

  6. Leonardo Miliani

    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?

  7. mar.conte

    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…

  8. mar.conte

    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

  9. Leonardo Miliani

    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?

  10. mar.conte

    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)

  11. mar.conte

    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)

  12. Leonardo Miliani

    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.

  13. fdalforno

    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

  14. Leonardo Miliani

    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.

Leave a Reply