Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

14
voti

EYATmega Board. Un'altra piccola scheda di valutazione AVR.

Indice

Premessa

Qualche giorno fa frugando nel cassetto dei componenti, ho ritrovato due microcontrollori della Atmel, rispettivamente un ATmega328p ed un ATmega48p. La compera di questi due micro risale principalmente a quando tempo fa ho fritto il regolatore di tensione della scheda Arduino, probabilmente grazie ad un cortocircuito su protoboard mentre la scheda è poi stata riprisitinata cambiando il regolatore, il microcontrollore ed il FT232L, famoso chip comunemente usato per i convertitori USB - 232, il tutto montato di default sulla mia Duemilanove.

Dato che recentemente ho acquistato il programmatore AVRISP MKII, ho così pensato di punto in bianco di costruirmi una piccola evaluation board con cui poter tornare ad allenarmi con i micro AVR e le avrlibc senza dover usare una board Arduino.

È vero che non ne avrei avuto bisogno essendo in possesso di quest'ultima, ma è anche vero che la soddisfazione di farsene una da sè è maggiore di usare una scheda già fatta. Come dire, la pappa fatta sfama ma ... sotto sotto non soddisfa. Perché l'ho fatto oltre a questo motivo? Primo perché uno dei microcontrollori in questione è stato il primo che tutto sommato ho avuto tra le mani e a cui ho potuto dedicare meno tempo dato che la mia piccola esperienza è basata più sui PIC, secondo perché mi piace l'elettronica, mi piace sperimentare ed imparare da tutto questo. Come dire, DIY =) .


Quindi lo scopo di quest'articolo è, oltre a rendere il circuito open source, quello di esporre le possibili problematiche ed il procedimento base per la costruzione di una scheda di valutazione e di apprendimento, dedicato a chi ha pensato almeno una volta di costruirsene una ma non sa da dove cominciare, quindi può essere considerato anche come un piccolo tutorial, o almeno spero.

Primo passo

Prima di cominciare è bene munirsi di un apposito circuito chiamato "programmatore". In questo caso senza di lui non si va da nessuna parte, nemmeno con il circuito montato. Il mio consiglio è quello di comprare, se possibile, il programmatore originale messo in vendita dal fabbricante. Nel nostro caso il programmatore è appunto l'AVRISP MKII (dove ISP si riferisce a "In System Programming"), con cui è possibile programmare tutti i microcontrollori ad 8bit della famiglia Atmel. Fisicamente il programmatore si presenta così:

AVRISP.jpg

AVRISP.jpg

Costa circa 30€ e a mio parere è un prezzo accessibile praticamente a tutti. Putroppo non si può dire lo stesso dell'AVRONE il cui prezzo può tranquillamente superare i 500€.

Dunque, una volta muniti del programmatore, è bene fare la scelta del microcontrollore da usare. Nel mio caso, come ripeto, ho usato un ATmega328p pinout 100% compatibile con un ATmega48p, quindi ho adattato lo schema per ambi. Tra i due cambiano solo le caratteristiche hardware interne, ma a mio parere sono sia l'uno che l'altro due bei "motorini" per cominciare a divertirsi un pò come si deve ed entrare in carreggiata.

Da questo momento in avanti farò riferimento indirettamente a questi due microcontrollori per quanto riguarda la board, ma ciò non toglie che per usare un altro microcontrollore è comunque necessario prendere spunto dai passi a seguire.

Mano al datasheet

La prima cosa da fare, ovviamente dopo essersi muniti del programmatore ed ancor prima di cominciare a progettare uno schema, è cercare il datasheet del microcontrollore per osservarne il pinout, e dargli una bella occhiata e sfogliata.. Il datasheet a cui ho fatto riferimento io per questa board è questo. Si ricorda che il datasheet è il documento in cui si trovano TUTTE le informazioni necessarie che ci servono per conoscere il dispositivo. Eventuali info reperibili esternamente vengono spesso segnalate all'interno del documento facendo riferimento alle Application Note. Qui si può trovare una bella lista di AN messe a disposizione dalla Atmel. Infine, come buona regola generale, il datasheet è il primo documento che si deve consultare quando ci si accinge ad usare un componente elettronico, sia questo un microcontrollore, un diodo o un transistore etc..

Le informazioni di cui abbiamo bisogno, in un primo momento, sono quelle che fanno riferimento alle caratteristiche hardware. Le problematiche relazionate con il firmware vengono sempre a seguire, dato che il funzionamento del circuito a seconda del firmware dipende dall'hardware.

Solitamente i collegamenti di cui un microcontrollore ha bisogno per essere fatto funzionare principalmente si dividono in due gruppi: alimentazione (VCC e GND) e programmatore (ISP per la famiglia Atmel). Tutto il resto è opzionale o è meglio dire che non è obbligatorio se l'applicazione non lo richiede. Non è comunque detto che tutti i microcontrollori rispettino queste caratteristiche dato che niente al mondo impedisce che un modello diverso richieda qualche collegamento in più.

Riguardo all'alimentazione, la tensione massima è solitamente di 5 V ma non è detto che possa essere inferiore. Ad ogni modo a pag. 313 nella sezione DC Characteristic si può consultare la tabella di riferimento. Per la mia scheda ho scelto una alimentazione stabilizzata tramite un 7805 ed un collegamento per la alimentazione tramite USB per prove di basso consumo.

Riguardo ai collegamenti non obbligatori, durante la mia piccola esperienza ho sempre potuto constatare che il pin di RESET può essere usato come I/O, ed anche che un microcontrollore dispone di un oscillatore interno la cui frequenza è selezionabile tramite un apposito prescaler (come gli ATmega in questione), e di nuovo, i pin dedicati all'oscillatore esterno (nel nostro caso XTAL1 e XTAL2) possono altrettanto essere usati come I/O come appunto si legge a pagina 3:

" Port B (PB7:0) XTAL1/XTAL2/TOSC1/TOSC2 Port B is an 8-bit bi-directional I/O port with internal pull-up resistors (selected for each bit)." Ma i due pin possono anche essere usati diversamente come si può leggere qualche riga più avanti.

A pag. 30 viene rappresentata la tabella con i valori massimi della frequenza dell'oscillatore esterno cosi come i valori dei condensatori consigliati.

Si ricorda che PBx, PDx e PCx sono rispettivamente i pin del PORTB, PORTD e PORTC.

Proseguendo si trova anche la breve descrizione del RESET:

" PC6/RESET If the RSTDISBL Fuse is programmed, PC6 is used as an I/O pin. Note that the electrical char- acteristics of PC6 differ from those of the other pins of Port C. If the RSTDISBL Fuse is unprogrammed, PC6 is used as a Reset input. A low level on this pin for longer than the minimum pulse length will generate a Reset..."

Si conferma quindi che non è obbligatorio, ma lo collegheremo lo stesso ad una rete RC "opzionale" (ossia con jumper). Altrettanto verrà fatto per l'oscillatore esterno.
Per info più dettagliate riguardo ai singoli pin possiamo saltare a pag. 80 "Alternate Port Functions".

Tornando al pinout del microcontrollore qui sotto riproposto

FileATmega328_pinout.png

FileATmega328_pinout.png

Vediamo che il pin 20, 21 e 22 sono contrassegnati rispettivamente come AVCC, AREF e GND. Questi tre pin non possono essere usati come I/O, ma bensì sono la alimentazione, la referenza ed il riferimento del convertitore analogico digitale (A/D Converter), come viene scritto infatti a pagina 4.
AVCC va collegata al polo di alimentazione positivo VCC anche se il convertitore non viene usato. Tuttavia, nel caso di una conversione "critica", a pag. 257 il datasheet raccomanda collegare l'entrata AVCC tramite un filtro passa-basso LC, collegamento che si ripropone a seguire:

Per il mio schema ho scelto la soluzione senza il filtro, dato che penso l'applicazione non ne abbia bisogno, ma ognuno è libero di farlo ovviamente.

Come va collegato invece AREF?
AREF è l'entrata analogica per la tensione di riferimento del convertitore, però, se non viene usata, il datasheet consiglia di accoppiarlo con un condensatore a GND per ridurre eventuali disturbi, ed io ho fatto altrettanto così:

dove C è un condensatore ceramico per un valore di 1μF

Tutte queste soffermazioni passo a passo sono importantissime in quanto sono tutti dettagli utili e fondamentali da conoscere per adattare la scheda a quello che vorremmo fare più avanti.
Se queste cose non vengono lette fin da subito, al momento di voler provare ad esempio il convertitore A/D con circuito fatto ma non abilitato per questo modulo, mi dispiace ma ci si deve arrangiare come si può.
Altro sguardo importante va dato ai pin PD0 e PD1. A pagina 88 si può leggere che PD0 è l'input RX (ricevitore seriale) del modulo USART, mentre PD1 è l'output TX (trasmettitore seriale) dello stesso modulo.
A pagina 181 viene rappresentato il diagramma temporale della comunicazione seriale USART, da cui si può osservare e leggere che lo stato di ricezione o trasmissione inattivo (IDLE) è a stato logico alto.

Quando si configura la USART, il pin TX è sempre automaticamente settato come output mentre l'RX è sempre settato automaticamente come input. A quest'ultimo, a mio parere, è sempre meglio collegare una resistenza di pull-up per forzare l'ingresso a IDLE ed evitare eventuali false ricezioni, dato che il bit di start della comunicazione seriale è sempre uno 0 logico.
Nel mio circuito ho messo la resistenza di pull-up pero "opzionale" sempre con un jumper...
I pin PB3(MOSI), PB4(MISO) e PB5(SCK), assieme a PB6(RESET), VCC e GND devono essere collegati al connettore parallelo ISP da interfacciare con il programmatore. Il pinout del connettore AVRISP è questo:

Si ricorda che la scheda deve essere alimentata quando si collega il programmatore al connettore ISP, in quanto il programmatore non alimenta il circuito ma solo ne verifica la corretta polarizzazione.
Per maggiori informazioni sul funzionamento del programmatore si può leggere la AVRISP MKII User Guide Online disponibile in PDF anche a questo indirizzo, mentre per informazioni più dettagliate sull'AVR In System Programming si può leggere la AVR910 Application Note, ugualmente reperibile al link riportato sopra.

Si ricorda che il tipo di collegamento rappresentato è quello standard dell'AVRISP MKII, e qualsiasi eventuale clone potrebbe avere un pinout differente, l'importante è che vengano rispettati collegamenti con i relativi pin.

Anche se le problematiche trattate per la realizzazione della scheda sono poche, il procedimento è lo stesso anche per la progettazione di un qualsiasi schema, in quanto è necessario tenere in conto di qualsiasi dettaglio e prevedere possibili problemi che si possono affrontare, perché infine una scheda di valutazione tutto sommato non è nient'altro che un progetto, seppur piccolo o grande che possa essere.

Schema del circuito

  • C1 = 4.7μF
  • C2 = C3 = C4 = 100nF
  • C5 = C6 = 22pF
  • C7 = 1μF
  • R1 = 470Ω
  • R2 = 4k7 = 1N4007
  • D1 = 1N4007
  • D2 = Red LED
  • D3 = 1N4148
  • XTAL = 16MHz
  • J1 = J2 = J3 = J4 = Jumper

Nota: al posto di saldare direttamente i condensatori C5 e C6 ed il quarzo per l'oscillatore esterno, è possibile saldare due pin femmina ciascuno per poi inserire i componenti, in modo da rendere così opzionale il valore del quarzo a seconda della frequenza voluta, sempre dentro i valori massimi ammessi dal datasheet, in modo da non mandare in overclock il microcontrollore.

Infine, i jumper sono stati posizionati in modo da poter usare i pin come I/O o dedicarli alle funzioni speciali condivise, come appunto il RESET, l'RX USART e l'oscillatore esterno.

La connessione PC >> USART può essere effettuata con un adattatore USB-RS232 o un MAX232. Si ricorda che nel caso di quest'ultimo, nel caso fosse usato ed incluso nella board, deve essere alimentato a 5V (come appunto si può leggere dal datasheet) ed il GND del connettore seriale RS232 deve essere collegato in comune al GND del circuito della scheda. Stesso discorso per l'adattatore USB-RS232.

A seguire si mostra una foto della realizzazione su millefori.

EYAtmegaBoard.JPEG

EYAtmegaBoard.JPEG

La prima prova

Quando ci si accinge a scrivere il primo programma per un microcontrollore che non si conosce, o comunque per un circuito nuovo che monti tale dispositivo, la maniera più semplice per comprovare il suo corretto funzionamento e cominciare a familiarizzare con il dispositivo è quello di provare l'I/O aiutandosi con un LED.

Per una piccola prova pratica ho scelto il codice di Blink2.c, cambiando solo la temporizzazione da 1s a 500ms

Dal CD allegato con il programmatore AVRISP MKII è possibile installare AVR Studio 4 per Windows, così ho provveduto a installarlo, creare il progetto apposito e copiare il codice.

capture1.jpg

capture1.jpg

Per compilare il codice cliccare su "Build" (cerchio rosso), mentre per collegare il programmatore bisogna cliccare su Connection "Dialog" (cerchio verde). Si apre quindi la sottofinestra seguente:

capture2.jpg

capture2.jpg

Quindi bisogna selezionare il programmatore e cliccare su "Connect". A seguire si apre la seguente sottofinestra:

capture3.jpg

capture3.jpg

Prima di cercare il file esadecimale è bene dare uno sguardo al sottomenù "Fuses" per selezionare i fuses di programmazione. Io ho disabilitato il CLKOUT e CLKDIV8 ed ho scelto l'oscillatore esterno come system clock.

Infine, si cerca il file .hex compilato e si programma il microcontrollore :) A seguire si mostra una piccola dimostrazione di qualche secondo.

Conclusioni

Con questo articolo oltre a rendere disponibile la scheda per gli utenti che desiderano cominciare con un microcontrollore e montaggio alla portata di tutti, ho anche voluto rendere evidenti le problematiche che bisogna affrontare prima della progettazione dello schema anche se strettamente relazionate con il mio circuito, che anche se è risultato abbastanza semplice rimangono comunque estremamente importanti e si spera siano un punto di riferimento per altri utenti impegnati in altre realizzazioni simili.

Per una soluzione più accattivante, come al solito si rimanda al PIERINAT90 di TardoFreak. A mio parere è una belva a confronto!

Confronti a parte può risultare una valida alternativa per chi vuole famigliarizzare con questi microcontrollori senza ricorrere ad una scheda già fatta con librerie già pronte. L'apprendimento è assicurato.

Infine, mi sarebbe piaciuto molto parlare un pò delle avr-binutils ed il loro uso sotto l'ambiente Linux, putroppo però non sono ancora riuscito a maturare una esperienza necessaria da scrivere qualcosa di rilevante, causa il poco tempo che ho a disposizione anche per mettere mano a questi microcontrollori come piacierebbe a me.

Spero che comunque l'articolo piaccia ai lettori, che lo trovino utile e possa servire a qualche utente. Per eventuali correzioni, consigli ed eventuali modifiche, qualsiasi commento è ben accettato.

Un saluto, Simone

12

Commenti e note

Inserisci un commento

di ,

Ciao giacky grazie, mi fa piaciere il tuo compimento! Ammetto che avevo fatto un pensierino al seriale, ma la scheda è nata in poche ore nell bel mezzo del trambusto di tutte gli impegni più importanti che ho ultimamente. :) Ti faccio i miei complimenti per il tuo circuito con l'ATmega16 con bootloader! Magari un articolo non ci starebbe mica male! Ciao!

Rispondi

di ,

Ottimo progetto :) Condivido con te il fatto che crearsi una scheda da sè dà una certa soddisfazione. Io per esempio ho un'Atmega16 su breadboard con caricato un Bootloader seriale, in modo da poterlo programmare attraverso una chiavetta USB-TTL senza usare vari programmatori. Devo ammettere che è molto comodo rispetto al programmatore ISP. E poi è DIY :)

Rispondi

di ,

Grazie mille anche a te Paolino. Fa sempre piacere l'apprezzamento degli esperti :) Grazie a tutti.

Rispondi

di ,

Questo sì che è Open Source! :-)

Rispondi

di ,

Grazie Mille per il tuo apprezzamento TardoFreak!! =)

Rispondi

di ,

Farsi la scheda di valutazione/sviluppo da soli è sempre un bene e questi articoli che le descrivono sono un ottimo punto di partenza per gli sperimentatori. Brao! Bell' articolo. Preciso, dettagliato ... un ottimo lavoro. :)

Rispondi

di ,

Grazie a te Zeno ;)

Rispondi

di ,

Ottimo Gohan ok
Scritto con il piacere di chi vuol rivivere e comunicare la soddisfazione di scoprire, imparare, costruire. E' quel qualcosa in più che manca nei manuali (e nei datasheet ;) ), che accende ed alimenta nel lettore il desiderio di cimentarsi a sua volta.

Rispondi

di ,

Grazie anche a te mir! Ho fatto una piccola correzione nel testo: Nel datasheet si trovano TUTTE le informazioni :)

Rispondi

di ,

Bravo, bell'articolo.

Rispondi

di ,

Grazie mille Marco! Più avanti, tempo permettendo, si spera di migliorare senza usare più il solito codice di esempio, però come ripeto il tempo è poco adesso come adesso :(

Rispondi

di ,

Articolo chiaro ed esaustivo ma, sopratutto, alla portata di coloro che vogliono cominciare a fare le prime esperienze con i micro. Bravo gohan.

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.