Pagine

Visualizzazione post con etichetta ATMEGA. Mostra tutti i post
Visualizzazione post con etichetta ATMEGA. Mostra tutti i post

giovedì 6 agosto 2009

Mini Tutorial per usare Arduino come programmatore ATMEGA8 / ATMEGA168

Il "cervello" di Arduino è il microprocessore ATMEGA. Partito con la versione ATMEGA8 si è passati al ATMEGA168 e, oggi il ATMEGA328.

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
Il problema fondamentale è riuscire a flashare il firmware all'interno del ATMEGA in modo che questo funzioni correttamente.
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

Note: ATMEGA standalone

La cosa ancora più interessante è vedere lavorare l'ATMEGA senza necessità di essere alimentato dal PC. Nella figura che segue abbiamo preso due batterie da 1,5V collegate in serie e con queste abbiamo alimentato il processore che fa accendere e spegnere in modalità FADE un LED