Sei sulla pagina 1di 6

ATMega328P e Arduino (from http://www.mcmajan.com/mcmajanwpr/?

p=1373)
Dopo tanti articoli spesi su Arduino, potremmo riproporci la primissima domanda fattaci nel primo
articolo: Cos Arduino? Potremmo definire Arduino come una scheda che permette di interfacciare il
suo cervello, lATMega, con il mondo esterno, permettendoci un facile accesso agli ingressi e alle
uscite, fornendo un sistema di alimentazione stabilizzata, permettendo la programmazione e
linterfacciamento con la porta USB. Allhardware si aggiunge il software che svolge per noi tutta una
serie di operazioni che ai pi sono del tutto ignote e che sono ignorabili per i prototipi hobbystici ma
che possono diventare importanti in progetti di pi alto livello. Giusto per citare un esempio molto
semplice, non tutti sanno che lATMega che equipaggia Arduino programmato per funzionare a
16MHz, ma nella realt possibile farlo operare a 1 o 8Mhz nei casi non ci sia necessaria particolare
potenza e si voglia ridurre il consumo energetico del progetto, come possibile portarlo a 20MHz,
innalzando il valore base a cui siamo abituati. I chip ATMega che equipaggiano le varie versioni di
Arduino, sono preprogrammate con un cosi detto bootloader. Questo altro non che un software che
viene avviato non appena alimentiamo il nostro Arduino. Esso permette non solo di lanciare lo scketch
precedentemente inviatogli, ma anche di ricevere nuovi sketch via porta seriale. In assenza di
bootloader ci non sarebbe possibile e per la programmazione sarebbe necessario un programmatore
AVR.

In questo primo articolo di approfondimento su Arduino non ci addentreremo in dettagli troppo tecnici,
ci limitiamo perci ad utilizzare il chip ATMega328 pre-programmato con il bootloader, che potete
trovare sia nelle varie schede Arduino, sia acquistarlo nei vari store online. Come per tutti i chip sinora
studiati, indispensabile capire il pinout del chip stesso. Qui a lato trovate lo schema classico, a prima
vista sembra molto complesso, ma se accostiamo la numerazione dei pin con le classiche uscite /
ingressi di Arduino, vedrete che in realt quel che sembra complesso in realt molto pi semplice di
quanto potreste aspettarvi.
1: RESET: Questo pin serve a resettare lATMega.
2-6: Uscite (o ingressi) digitali dalla 0 alla 4
7: Vcc, +5V
8: GND
9 e 10: XTAL: Pin necessari alla connessione con il quarzo a 16MHz.
11 19: Uscite (o ingressi) digitali dal 5 al 13.
20: Avcc: Analogic reference, tensione di riferimento esterna per gli ingressi analogici
21: Aref: Vcc +5V
22: GND
23-28: Ingressi Analogici

Se togliamo tutti gli ingressi ed uscite gran parte dei pin sono gi mappati. Poi abbiamo i pin 22 e 8
posti a massa e 7,20 e 21 che possiamo connettere direttamente ai +5V. Come vedete restano solamente
il pin di reset e quelli da collegare al quarzo oscillatore, per cui a pensarci bene il pinout dellATMega
quasi una banalit. Pensateci bene. Possiamo tranquillamente connettere le uscite / ingressi digitali ed
analogici a delle strip uguali a quelle di Arduino o a dei morsetti o quel che pi vi aggrada, poi
connettiamo le masse e i 5V ed abbiamo quasi pronto un Arduino minimalista. Ora dobbiamo
solamente collegare il quarzo ai pin 9 e 10 e, su ognuno dei due pin, un condensatore ceramico da 22pF
connesso a massa. Aggiungiamo una resistenza da 10K fra il pin di reset e la linea a 5V ed il nostro
Arduino fatto in casa pronto.
Lo schema qui a lato chiarisce quanto descritto, in pi c il pulsante di reset, la presenza di un led con
relativa resistenza sulla linea di alimentazione e un condensatore da 100nF fra +5Ve
massa (condensatore di disaccoppiamento, ne riparleremo in futuro), tutti componenti non
indispensabili. Si noti che rispetto al vero Arduino, si presume luso di una linea di alimentazione a
5V per cui non presente alcun regolatore di tensione. Se riassumiamo il tutto, noteremo che abbiamo
usato un quarzo da 16Mhz, una resistenza da 10k e due condensatori ceramici da 22pF oltre,
ovviamente, allATMega328.
Programmare lArduino standalone
Una piccola riflessione. Normalmente con Arduino inviamo la sketch direttamente attraverso il cavo
USB, ma in questo nostro piccolo Arduino non c alcun connettore o chip che permetta la
comunicazione USB. Come facciamo ad inviare la sketch dentro lATMega328? Ci sono diverse
tecniche per ottenere questo risultato, comunque, visto che il nostro chip dotato di bootloader,
sfruttiamo questo vantaggio per semplificarci la vita. Diamo inoltre per scontato che ci sia il quarzo
esterno a 16Mhz e i due condensatori da 22pF.
Convertitore USB-Seriale (FTDI)
Il bootloader di Arduino, come molte altre schede elettroniche usa lFTDI (di fatto un convertitore
USB->Seriale) per effettuare questa comunicazione
(FTDI lacronimo di una ditta scozzese che produce chip). Purtroppo per ci servir una scheda di
conversione USB-FTDI che bene acquistare in quanto di estrema utilit per chi si dedica a questo tipo
di progetti. Se cercate online troverete una miriade di piccoli convertitori USB-FTDI, io per esempio
ho il 990 che potete vedere nella figura a lato. Quel che balza allocchio che sui vari lati
delladattatore c sono numerosi pin disposti in maniera diversa sui vari lati, infatti non vi uno
standard ben definito sulla loro disposizione e dovrete di volta in volta valutare come utilizzare gli
adattatori in vostro possesso. Ci che ci interessa sapere che da questi adattatori preleviamo Vcc e
GND per alimentare la nostra scheda, poi ci servono RX e TX per la comunicazione seriale ed infine
un pin da collegare al reset, infatti per caricare la sketch, lATMega deve essere resettato e questo pin
permette di automatizzare tutta la procedura senza dover usare il reset manualmente, cosa che diventa
un esercizio di acrobazia visto che deve essere premuto al momento giusto, non troppo presto, ne
troppo tardi. Una cosa importante da notare che lRX delladattatore lo dovete collegare al TX di
Arduino e viceversa non fate, come me a mio tempo, il collegamento RX con RX e TX con TX,
perderete solo tempo inutilmente. Una volta collegata lalimentazione, RX e TX, vi resta il RTS (o
DTR a seconda dei modelli) che appunto deve essere connesso al pin 1 dellATMega con
interposizione di un condensatore ceramico da 100nF. Fatto ci potete programmare il vostro Arduino
esattamente come facevate precedentemente con Arduino UNO, senza particolari accortezze. Nel caso
di circuiti maggiormente complessi in cui alle linee RX-TX di Arduino abbiamo collegati altri chip,
come ad esempio un convertitore seriale, indicata linterposizione di una resistenza da 1K fra il TX
dellFTDI e lRX dellATMega. Nello schema qui sotto vi propongo un pezzo di uno schema in cui ho
collegato un connettore a 6 poli, ho lasciato apposta uno spazio vuoto per poter creare una polarit
del connettore ed impedire inversioni dello stesso. Si notino la resistenza sulla linea di trasmissione
FTDI ed il condensatore sulla linea di reset. Ovviamente finch il circuito su breadboard non ci sono
problemi, ma il circuito definitivo dovr prevedere la presenza di un connettore FTDI o quantomento
avere dei punti facilmente accessibili per connettersi ai vari pin. In alternativa possibile montare
lATMega su uno zoccolo, esattamente come su Arduino, in modo da poter estrarre il chip e
programmarlo separatamente. Tutto dipende dal livello del progetto, con un connettore onboard
infatti possibile andare sulle centraline con un semplice portatile e fare laggiornamento del software
solo connettendo ladattatore FTDI da una parte alla centralina e dallaltra al cavo USB.

Nella breadboard qui sotto ho eliminato sia il led con relativa resistenza che il pulsante di reset per
semplificare il disegno e renderlo pi chiaro e comprensibile. Naturalmente se usate questo tipo di
collegamento solo per programmare il chip, senza che vi siano altri collegamenti, potete eliminare sia
la resistenza R4 che il condensatore di disaccopiamento (fra Vcc e massa), semplificando ulteriormente
il collegamento.
Per farvi capire quanto sia semplice vi propongo qui sotto anche un esempio di pcb, peraltro vi ricordo
nuovamente che facendo un circuito del genere in cui lo scopo solo quello di programmare
lATMega, potete togliere lR4 ed il condensatore di disaccopiamento rendendo lo schema ancora pi
semplice e compatto.

Usare una scheda Arduino
Una seconda possibilit rappresentata dallutilizzo di una scheda Arduino aggiuntiva. LATMega di
questa scheda non deve essere saldato ma deve esssere connesso tramite linterposizione
di uno zoccolo in quanto deve essere
rimosso. Questo perch se non rimuoviamo lATMega dellArduino programmatore sar questo ad
essere programmato anzich quello esterno da noi preparato. Quindi la prima fase rappresentata
dallasportazione dellATMega dallArduino che vogliamo usare come programmatore. Se pensate di
estrarre chip dal loro zoccolo numerose volte, vi consiglio di acquistare un apposito estrattore, una
specie di pinzetta che si aggancia ai due estremi e permette di togliere lIC senza piegare i piedini.
Altrimenti potete usare un piccolo cacciavite per fare leva, in questo caso per fate con molta
delicatezza, alzandolo un po per lato, senza sforzare in quanto molto facile piegare i piedini del chip
e, a lungo andare, si romperanno. Una volta eseguita questa operazione sufficiente fare i medesimi
collegamenti visti prima, colleghiamo RX,TX e Reset dellArduino programmatore (quello senza
ATMega), al nostro nuovo Arduino su breadboard, ricordandoci che il TX dellinviante finisce nellRX
del ricevente e viceversa. Non scordate la resistenza (R3 nello schema di prima) che collega la Vcc 5+
al pin di reset. Ora non dovete far altro che compilare la vostra sketch ed inviarla ad Arduino. Il chip su
breadboard verr programmato e potete poi lasciarlo in loco o spostarlo su un eventuale circuito
definitivo. Anche se dalle spiegazioni non dovrebbero servire nuovi schemi, vi lascio con unimmagine
in cui ho sostituito il connettore FTDI degli schemi precedenti con il collegamento diretto a Arduino.
Ricordo che lIC dellArduino DEVE essere rimosso, inoltre vi ricordo che se state creando un piccolo
circuido ad hoc solamente per la programmazione dellATMega, potete eliminare il condensatore di
decoupling (quello in alto a destra), inoltre, se pensate di usare sempre Arduino e mai un convertitore
FTDI, potete togliere anche il condensatore sulla linea di reset.
Anche se gi detto, vorrei ricordare che queste tecniche funzionano solo ed esclusivamente se
lATMega dotato del bootloader Arduino. In caso contrario non riuscirete ad inviare nessuna sketch
sul vostro IC. In puntate future vedremo come caricare il bootloader se non presente e come
utilizzzare lATMega a 8 o 1MHz per le applicazioni ad alto risparmio energetico oltre alla
programmazione via ICSP e luso del programmatore.
Spero di essere riuscito a mantenere il giusto equilibrio fra semplicit e chiarezza dellargomento, se ci
sono dubbi come sempre lasciate pure i vostri commenti. Vi ricordo a tal proposito che occorre essere
registrati ed il primo commento deve essere autorizzato; tutte misure che ho dovuto adottare per
bloccare lo spam.