E' possibile "staccare" il processore oppure acquistarne uno (un ATMEGA8 si acquista in un negozio di elettronica o su web a circa 3€) ed utilizzarlo standalone ovvero senza la nevessità di abbinarlo ad un Arduino.
Vantaggi:
- Dimensioni estremamente compatte (paragonabili ad un Arduino mini)
- Costo decisamente minore rispetto ad un Arduino (3€ rispetto 25€ di un Arduino)
- Consumi minori dovuti a:
- tensioni minori necessarie (dai 3V --due batterie da 1,5V in serie-- ai 5V contro i 5V-9V-12V di un Arduino)
- frequenza di clock minore (8Mhz riducibile anche a 1Mhz contro i 20Mhz di un Arduino)
- Oggetto completamente standalone
- Maggiore spazio a disposizione (dato che non necessita del bootloader inserito in Arduino: il firmware viene flashato direttamente in esadecimale)
- Utilizzo del IDE Arduino e non del linguaggio ASSEMBLY
In questo minitutorial verrà spiegato come usare un Arduino per programmare un ATMEGA.
Passi preliminari
Preparazione dell'Arduino
Prima di tutto è necessario prendere un Arduino e caricare lo sketch presente in questa pagina come si è soliti caricare un qualsiasi sketch:http://code.google.com/p/mega-isp/
Questo firmware permette di usare il nostro Arduino come programmatore del ATMEGA; in pratica, alla fine di questo tutorial è possibile passare un firmware al Arduino e questo, grazie al programma linkato lo trasferisce sul processore.
Successivamente è necessario dissaldare o tagliare in modo netto con un taglierino il jumper del reset presente subito sotto alla porta USB nella seguente immagine:
Questo passaggio è indispensabile per evitare di resettare sia l'ATMEGA sia l'arduino quando si passeranno i firmware.
Preparazione del ATMEGA
A questo punto si prenda l'ATMEGA e lo si sistemi sulla breadboard a cavallo della scanalatura.Collegare Arduino al ATMEGA
L'arduino e l'ATMEGA comunicano con il protocollo ISP che sfrutta le porte MISO, MOSI, SCK, RESET come nello schema seguente
In pratica si colleghino i PIN dell'arduino posti in fondo alla scheda (che nella figura qui sopra si trovano nell'immagine in alto a destra) all'ATMEGA (come indicato nella figura qui sopra in fondo la penultima).
Per maggiore chiarezza riporto una immagine esplicativa rilevata dal sito tinker.it dove si vedono schematicamente le connessioni:
Si tenga conto che la connessione XTAL2 non è necessaria.
Ciò che viene fuori è la seguente figura:
Preparazione software e caricamento sketch
A questo punto tutto è pronto a livello hardware e si può procedere alla parte software.
L'IDE di Arduino contiene il programma avrdude.
Si deve preparare l'ATMEGA a ricevere i comandi. Per fare questo si apra una console, ci si sposti in dir_arduino/hardware/tools e si troverà l'eseguibile avrdude.
Quindi, da shell (per gli utenti windows sarebbe il prompt del dos) si digiti il seguente comando:
avrdude -pm8 -P/dev/ttyUSB0 -cavrisp -b19200
Ora l'ATMEGA è pronto per ricevere gli sketch.
Io ho provato il Blink ed il Fade.
Dall'IDE Arduino si prenda lo sketch desiderato (nel nostro esempio Blink), da Tools->Boards si scelga la scheda Arduino NG or older w/ATMEGA 8. Si compili e si faccia l'upload (questo passaggio genererà un errore ma serve per generare il file .HEX da caricare).
A questo punto ci si sposti nella directory sketckbook/Blink/applet e si digiti il comando:
avrdude -p m8 -c avrisp -U flash:w:/home/enkel/sketchbook/Blink/applet/Blink.hex -P
Dopo una serie di messaggi si dovrebbe ricevere la scritta "Thank you!" e se tutto va bene il nostro LED si accenderà e si spegnerà.
Nel mio caso si è usato un ATMEGA8; se si usasse un 168 o un 328 i comandi contemplerebbero m168 o m328 al posto di m8.
Note: opzioni particolari
E' possibile, tramite varie opzioni, fare in modo che l'ATMEGA funzioni in modalità differenti.
A questo proposito si può seguire il seguente sito:
http://code.rancidbacon.com/LearningAboutArduinoATMega8
Congratulazioni!
RispondiEliminaOttimo How-to.
Jo
Complimenti....Molto utile. ;)
RispondiEliminaSimone.
bella vitto.
RispondiEliminami sembra un buon tutorial.
(é estremamente più sbatti, ma io sono passato dalle foto agli schemi su photoshop. avevi mai provato fritzig?)
bravi
d
ciao...mi daresti una dritta su come usare arduino per sistemi domotici??grazie!
RispondiEliminaCiao,
RispondiEliminadue domande.
1) Dalle foto non riesco a decifrare le connessioni. Ad esempio, la prima foto, quella della preparazione dell'ATmega, serve solo per vedere dove piazzare l'ATmega sulla breadboard oppure bisogna mettere in piedi tutti i collegamenti?
2) Ma l'ATmega standalone funziona sena nessuna circuiteria al contorno? Non serve almeno un quarzo?
Grazie!
Ciao,
RispondiEliminaper quanto riguarda la prima domanda, effettivamente hai ragione: le connessioni non si vedono bene. Per questo ho aggiunto una immagine presa dal sito tinker.it direttamente sul post.
La trovi nel paragrafo "Collegare Arduino al ATMEGA" come seconda immagine: è più chiaro adesso?
Fammi sapere così lo miglioro :-)
Per quanto riguarda la circuiteria al contorno, tieni conto che abbiamo acceso e spento un LED e alimentato con batterie (quindi tensione e corrente stabili nel tempo) per cui non è servita alcuna circuiteria.
Certo, se usi un alimentatore da 220V in AC... ti servono almeno delle resistenze ed un bel condensatore.
Inoltre il quarzo non è necessario se ti "accontenti" di lavorare a 8Mhz. Arduino ha già un quarzo interno a questa velocità; se ti occorre una velocità maggiore allora necessiti effettivamente di un quarzo.
Molte grazie per le risposte.
RispondiEliminaLo schema presentato nella sezione "Collegare Arduino al ATMEGA" è molto chiaro e va proprio bene.
In realtà io mi riferivo alla foto presente nella sezione "Preparazione del ATMEGA" dove si vede l'ATmega sulla breadboard con una serie di connessioni. Immagino la foto volesse soltanto far vedere dove posizionare il processore, le filature rosse e nere devono essere ignorate. E' così?
Relativamente invece alla circuiteria, il fatto di lavorare a 8Mhz, che potrebbe anche andar bene, richiede qualche modifica da apportare al SW per inizializzare opportunamente l'HW?
Grazie nuovamente.
Esatto: quella foto vuol solo far vedere la posizione del processore.
RispondiEliminaIl software per l'8Mhz non deve avere particolari modifiche: cambia solo la stringa avrdude come puoi vedere da questo sito:
http://www.engbedded.com/fusecalc/
Scegli il ATMEGA168 e nel primo menù a tendina che ti appare di conseguenza, puoi scegliere la velocità di clock.
Inizio a capire...
RispondiEliminaPerò la situazione si ingarbuglia. Nel mio caso ho scelto ATmega328P dal menu a tendina, ho lasciato tutti i parametri di default ed ho ottenuto le stringhe:
-U lfuse:w:0x62:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m
Dove e quando utilizzo le stringhe?
Le aggiungo al comando
avrdude -p m8 -c avrisp -U flash:w:/home/enkel/sketchbook/Blink/applet/Blink.hex -P
che diventa:
avrdude -p m8 -c avrisp -U lfuse:w:0x62:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m -U flash:w:/home/enkel/sketchbook/Blink/applet/Blink.hex -P
?
Esatto.
RispondiEliminaA questo punto però non riesco ad esserti di maggiore aiuto anche perchè la mia esperienza in questo campo non è così grande :-P
Vedendolo ad occhio dovrebbe funzionare ma non mi assumo responsabilità in merito ;-)
Ok, grazie mille.
RispondiEliminaNella peggiore delle ipotesi aggiungo un quarzo come quello utilizzato da Arduino.
Luigi
Ciao Vittorio,
RispondiEliminavorrei farti una domanda.
E' possibile programmare un atmega328 privo di bootloader direttamente nella scheda arduino sostituendolo a quello già inserito con bootloader?
Grazie.
Ciao, no non è possibile fare una cosa del genere.
RispondiEliminaL'ATMEGA su Arduino necessita di bootloader.
Non puoi sostituirlo con uno senza questa parte di codice.
Vittorio grazie per aver risposto.
RispondiEliminaVolevo porti un'altra domanda, se possibile.
Seguendo la procedura del tuo mini tutorial, quindi dissaldando il jumper di reset, è poi possibile continuare ad usare la scheda arduino come prima?
P.S. La mia scheda duemilanove aquistata di recente non ha i jumper di reset come nella figura da te esposta.
In realtà nelle ultime schede non dovrebbe nemmeno più essere necessario tagliare il jumper del reset.
RispondiEliminaAd ogni modo si, puoi sempre usare Arduino normalmente. L'unico "inconveniente" è che prima di caricare uno sketch sopra devi resettare manualmente con il pulsante la scheda.
Vittorio sei gentilissimo.
RispondiEliminaQuindi con questa procedura ( da te descritta ) posso programmate tutti i micro della Atmel o solo alcuni modelli?
Rinnovo i grazie.
Questo non te lo so dice.
RispondiEliminaSo che, ad esempio l'ATTiny non si può programmare così ma sicuramente il 168 e 328 si :-)
Ok, grazie mille, Vittorio.
RispondiEliminaMetterò in pratica il tutorial.
Grazie.
Ho disponibile un programmatore ATMEL
RispondiEliminaAVRDRAGON e vorrei programmare un ATMEL ATMEGA 168 per la mia scheda :Arduino Duemilanove dove normalmente è montato un ATMEGA 328.quarzo 16Mhz
Quale file.hex devo usare??
Devo impostare i Fuse manualmente o sono contenuti nel file HEX?
(lo programmo sul AVR DRAGON poi lo trasferisco su Arduino)
FInora quelli che ho programmato non vanno.
Grazie
Fernando
Ciao Fernando,purtroppo non capisco la domanda.
RispondiEliminaTu hai un ATMEGA 168 e vuoi programmarlo con Arduino?
In tal caso non è necessario modificare i FUSE ma attenzione perchè senza il quarzo esterno questo lavorerà al massimo a 8Mhz
ho una scheda arduino2009 senza processore.
RispondiEliminanon ho un chip mega328.
Ho disponibile un chip mega168-20 vuoto.
innanzitutto è compatibile con la board Arduino2009?
se si che firmware debbo mettergli dentro (lo programmo su un'altra board atmel dragon stan alone programmer)
che fuse devo mettere??
--- dalle prove fatte tutti i firmware di arduino2009 ilo programmer mi dice che il programma è troppo grosso per essere contenuto..
ho provato atmegaBoot_168_pro_8Mhz.hex(che ci sta) ma non va
----
Quando viene venduta la scheda originale Atmega380-Arduino2009 che firmware monta??
e ti chiedo ancora i Fuse sono contenuti nel file .HEX come nei pic o vanno messi manualmente nel programmer.
ciao e grazie
Fernando
Seguendo il mio articolo dovresti riuscire a inserire uno sketch direttamente nel tuo chip ATMEGA168 ma necessiti di un secondo arduino (come da articolo) per fare ciò.
RispondiEliminaI FUSE vanno impostati inserendo il clock a 20Mhz e non il default a 8Mhz.
Se al contrario vuoi fare in modo che il tuo 168 venga montato su una Arduino 2009 e funzioni normalmente, devi anche mettere il bootloader: su questo argomento, però, non ti so aiutare; non mi sono mai interessato.
Ciao ragà oltre questa ottima guida potete trovare molto materiale anche sul nostro gruppo di robotica opensource:
RispondiEliminahttp://www.hlrobotx.net/
Ciao volevo farti i complimenti per la chiarezza della guida e porgerti una domanda, premetto che studio questi componenti da qualche giorno, volevo sapere se è possibile fare l'operazione inversa del "flashaggio" del firmware o di programmi all'interno dei MC, in altre parole se è possibile leggere il contenuto di quanto memorizzato ed e eventualmente esaminarlo a parte. Grazie
RispondiEliminaCiao Amedeo, ti ringrazio per il complimento.
RispondiEliminaPer quanto riguarda la tua domanda, però, non so rispondere con esattezza. Purtroppo non sono un guru in materia ma un semplice appassionato.
Da quanto ho capito quello che chiedi non è possibile perchè il tutto viene memorizzato in formato esadecimale dentro il microcontrollore.
Tuttavia non ci metterei la mano sul fuoco :-)
Ciao Vittorio bella guida potresti allargarla anche su Mac?
RispondiEliminagrazie in anticipo.
Ciao, per quanto riguarda il Mac non penso ci siano differenze.
RispondiEliminaI comandi da usare sono senza dubbio gli stessi perchè avrdude è indipendente dalla piattaforma.
Cosa non ti funziona?
ciao
RispondiEliminabellissimo blog, vorrei sapere se ho fatto le connessioni giuste tra la mia Arduino e l ATmega8..ti allego un file postscript
https://docs.google.com/uc?id=0B3XrcvDwvBbaYjdkNDIyYTgtN2FkOC00MGMxLWFiZTItODRmNzM2YTNmYTcy&export=download&hl=en
grazie tantissimo per l aiuto!;)
Ciao tonicooperi, purtroppo non riesco ad aprire il tuo link.
RispondiEliminaRiesci a trovare un'altra collocazione? :-(
L' ho uppato su megaupload
RispondiEliminahttp://www.megaupload.com/?d=IDMLXG7K
volevo sapere se le connessioni che ho disegnato sono giuste..se sì, la 5V e il GND che escono dai pin dell' icsp vanno collegati alle batterie??
oppure se ho sbagliato qualcosa sapresti indicarmi dove?
inoltre, scusa l' igoranza ma il led lo devo collegare all' arduino?
grazie scusa il disturbo
Ciao, i collegamenti sembrano corretti.
RispondiEliminaHo ricontrollato tre volte lo schema ma non sembrano esserci errori.
Il LED va collegato al ATMEGA altrimenti come fai a sapere se funziona o meno :-)
ecco :) e precisamente a quale pin dell ATmega?
RispondiEliminain questo PDF riassumo tutti i miei dubbi :)
RispondiEliminahttp://www.megaupload.com/?d=E9VNNRU3
allora è giusto il collegamento del led al pin 28 dell atmega?
e soprattutto a cosa lo collego l altro polo del led.
grazie ancora:)
Si è corretto al pin 28 e l'altro capo del LED lo collochi a massa :-)
RispondiEliminaGrazie per le dritte che mi hai dato,mi sono state di grande aiuto,ti contattero' in futuro.
RispondiEliminaCiao. Sono uno studente che a comprato da appena una settimana una scheda arduino 2009 con CPU ATMEGA328. ho un piccolo problema. negli ultimi 3 giorni la mia arduino a smesso improvvisamente di funzionare, nel senso che non esegue più i programmi che gli scarico e sullo schermo in basso viene visualizzato l'errore:
RispondiEliminaavrdude: verification error, first mismatch at byte 0x000 0x0c != 0xff
avrdude: verification error; content mismatch
Qualcuno avrebbe voglia di dirmi cosa significa tale errore? non o idea di come fare a risolvere questo broblema.
Grazie
Ciao Vittorio. ho un problema con la mia arduino 2009 ATMEGA328. non riesco più a caricare i miei programmi. questo problema e spuntato d'improvviso 3 giorni fa, la scheda lo comprata una settimana fa e inizialmente funzionava perfettamente. sapresti dirmi qual'è il problema? non ho idea di cosa fare.
RispondiEliminagrazie.
Ciao, sinceramente non saprei quale potrebbe essere il problema.
RispondiEliminaGli arduino sono ultra testati per cui, con un buon 98% escluderei un guasto hardware.
Posso solo consigliarti di controllare le impostazioni dell'IDE: la porta USB (è sempre la stessa?) e il processore. Prova a modificare la porta usb e vedi se riesce a dialogare con l'arduino
Ciao vittorio complimenti per la guida. Volevo solo chiederti se usando un atmega328p standalone(col clock interno da 8mhz e non con quello da 16 dell arduino) come in questa guida sia necessario o meno adattare le istruzioni per la generazione dei PWM, ovvero è possibile continuare ad usare le istruzioni AnalogWrite ?
RispondiEliminaCiao, si è possibile utilizzare AnalogWrite anche se tieni conto che è tutto dimezzato.
RispondiEliminaAttenzione, come scritto, al fatto che il clock risente del cambio di temperatura e quindi non sarà mai troppo preciso...
Ciao Vittorio,
RispondiEliminacomplimenti per la preparazione e per l'ottima organizzazione del forum, sicuramente uno dei migliori.
Ho una domanda da porti: vorrei programmare u micro atmega88 (anche se sinceramente non so se è possibile!) usando il file hex generato dall'IDE di arduino. Il file .hex l'ho trovato nella cartella temporanea nascosta "...\Impostazioni locali\Temp\build2497504785654741464.tmp" (ho win XP) e l'ho caricato il AVR Studio 4. Lancio la programmazione e va tutto ok, solo che...il micro non va!
Tu sapresti dirmi il perchè? Forse devo per forza usare l'atmega328 al posto che l'atmega88? Tieni presente che sulla mia breadboard che ospita l'atmega88 non ho messo il quarzo...potrebbe essere quello?
Ti ringrazio anticipatamente per la disponibilità!
Gian
Ciao Gian, grazie per i complimenti.
RispondiEliminaSinceramente vado a ruota libera... Noi abbiamo usato un ATMEGA8, un 168.
Non abbiamo usato il 328 nè tanto meno l'88...
Probabilmente sono da modificare i parametri della compilazione che mi sembrano la parte più delicata del processo...
Ciao Vittorio,
RispondiEliminagrazie per la veloce risposta! Ma la programmazione degli atmega8 e 168 l'avete fatta caricando l'.hex file generato dall'IDE di arduino con avr studo 4?
Grazie,
Gian
Caricando con avrdure (come descritto nel post) il file .HEX generato dall'IDE.
EliminaAVR Studio non lo conosco :-)
Salve,
RispondiEliminadevo simulare il comportamento e poi programmare un ATmega 168.
Uso la Dragon board, ma il mio problema sorge molto prima dell'uso della Dragon board: vorrei semplicemente scrivere e simulare un piccolo programma con AVR Simulator.
Guardando i tutoriall presenti sul sito ATMEL risulta tutto piuttosto intuitivo, ma io non riesco ad usare ASF (AVR SOFTWARE FRAMEWORK)ovvero non riesco ad aggiungere DRIVER al mio progetto cliccando sul menù Project e scegliendo Select Driver from ASF perchè quest'ultimo menù è disattivato (grigio).
Come posso usare ASF per implementare il mio programma?
Ringrazio anticipatamente chiunque voglia rispondermi.
Saluti a tutti!
Sara
Purtroppo non riesco ad aiutarti. Non ho mai usato questi strumenti ma solo Arduino per la programmazione di un ATMEGA8 e 168.
EliminaMi dispiace, Vittorio
ciao ,scusa ma non mi funziona avrdude.
RispondiEliminaSto cercando di istallare un bootloader su atmega168 avendo però un 328 su scheda arduino. Ho usato le soket sulla sceda arduino direttamente su atmega 168. please help me
Purtroppo ci siamo fermati al 168. Non so se quelli più "potenti" abbiano delle impostazioni di parametri dfferenti.
RispondiElimina