Il web è pieno di progetti di schede di valutazione/sviluppo per microcontrollori.
I microcontrollori ATmega e AT90 ad 8 bit della Atmel sono ottimi oggetti con i quali si possono sviluppare applicazioni notevoli, e molti si sono dati da fare per realizzare schede per hobbisti basate su questi chip. Ad esempio Arduino è una piattaforma open-source per gli ATmega molto diffusa. ElectroYou non può essere da meno quindi ho pensato, nei ritagli di tempo ed approfittando di un progetto che sto sviluppando, di realizzare un circuito di facile costruzione e che servisse per sviluppare programmi su questi microcontrollori. Proprio mentre mi studiavo il datasheet dell' AT90USB sono rimasto incuriosito dal bootloader pre-programmato, ho voluto approfondire la cosa ed ho pensato che forse poteva interessare qualcuno, quindi ho scritto questo articolo. Avendo bisogno di un adattatore per poter realizzare i prototipi, mentre disegnavo il circuito stampato ho pensato bene di inserire un po' di circuito in più ottenendo così una basetta che, oltre a farmi quello che deve fare, si può utilizzare anche come sistema di sviluppo.
Uno dei problemi più grande per chi si avvicina a questi oggetti per la prima volta, è trovare il modo di programmarli, di scrivere il programma nella memoria FLASH. Nel mio articolo Iniziare con AVR ATmega ho illustrato un modo canonico per avvicinarsi a questi oggetti tramite l' uso di un programmatore della Atmel.
Il sistema illustrato in questo articolo non ha bisogno di nessun tipo di programmatore. E' sufficiente scaricare dal sito della Atmel il software (tutto gratuito), realizzare il circuito, montarlo, collegarlo ad una porta USB ed iniziare a scrivere e a provare programmi. Il PIERIN non ha bisogno di nient'altro che di buona volontà, un microcontrollore AT90USB e pochi componenti per la costruzione per essere realizzato. A differenza di Arduino il Pierin non deve neanche essere programmato per la prima volta perchè il microcontrollore utilizzato è venduto dalla Atmel con un suo bootloader pre-programmato in grado di caricare il programma. In pratica si compra il micro, lo si monta e lui funziona! I microcontrollori che si possono utilizzare sono:
- AT90USB646 64KB di flash e 4KB di RAM USB con funzionalità solo device
- AT90USB647 64KB di flash e 4KB di RAM USB con funzionalità device e OTG
- AT90USB1286 128KB di flash e 8KB di RAM USB con funzionalità solo device
- AT90USB1287 128KB di flash e 8KB di RAM USB con funzionalità device e OTG
Come si vede sono micro di tutto rispetto con una quantità di flash notevole, 48 linee di I/O e chiaramente hanno prezzi diversi anche se comunque bassi. Insomma, direi che il divertimento è assicurato.
Iniziare con una macchina semplice ma potente e con parecchia memoria a disposizione può dare molte soddisfazioni. E se a questo aggiungiamo che costano quanto un pacchetto di sigarette e che non serve costruirsi o comprare un programmatore, direi che un pensierino lo si potrebbe fare. Io, dal canto mio, sto sviluppando un progetto che utilizza un microcontrollore AT90USB utilizzando però un programmatore JTAG. E' il mio lavoro e devo sfruttare la macchina al massimo.
Visto che va di moda dare dei nomi ai circuiti ho pensato di dargli il nome con cui mio Papà buon' anima veniva chiamato dai suoi amici più cari. Lui si chiamava Piero, gli amici lo chiamavano Pierin, ed io ho pensato di dedicargli questo circuito che sono sicuro verrà apprezzato da molti hobbisti come lui era apprezzato da chi ha avuto la fortuna di conoscerlo.
Indice |
Programmare gli AVR
Come dicevo prima uno dei problemi più grandi per iniziare a lavorare con i microcontrolori in generale è trovare un programmatore a basso costo. Se è vero che esistono programmi gratis che fanno questo utilizzando la porta parallela o seriale del PC è anche vero che oramai queste porte sono in pratica scomparse. Oggi tutto si collega all' USB e quindi per qualcuno questo può rappresentare un problema. La Atmel ha fatto una cosa estremamente furba: ha pre-programmato un bootloader che funziona con la USB. Diciamo che inizialmente questo bootloader è nato per fare delle modifiche/aggiornamenti sui prodotti già realizzati ma per un hobbista, magari giovane e con pochi soldi da spendere, questo vuol dire molto. E lo so bene perchè quando ero ragazzino risparmiavo continuamente soldini per potermi comperare i componenti elettronici, e quando un mio amico ingegnere mi ha regalato un 8035 spiegandomi come fare per poterlo usare senza spendere centinaia di migliaia di lire, ho fatto i salti di gioia.
Cos' è il bootloader
Quando accendiamo il PC questi effettua il bootstrap. In pratica il microprocessore del PC inizia con l' eseguire un piccolo programma scritto in una memoria di sola lettura (il BIOS), che carica in RAM un altro programma più complesso prendendolo dall' hard disk e facendolo partire. Questo programma, una volta partito, carica il sistema operativo nella RAM. Nei microcontrollori il bootloader fa più o meno la stessa cosa. All' atto dell' accensione (o meglio subito dopo il RESET) il bootloader guarda lo stato di un pin del micro e, se ad esempio questo pin è libero prosegue eseguendo il programma utente caricato nella FLASH, altrimenti esegue un programma che serve per caricare il programma utente attraverso diversi sistemi. L' AT90USB, dopo il reset, guarda lo stato del pin HWB. Se questo è a livello logico 1 fa partire il programma utente mentre se è a livello logico 0 fa partire un programma che permette di auto-programmarsi attraverso l' USB. Questo programma è situato nella parte finale della memoria flash, occupa circa 2 o 4KB e non è cancellabile. Per cancellarlo è necessario utilizzare un programmatore JTAG come il Dragon della Atmel.
Come si usa il PIERIN
Dal punto di vista pratico non ci sono differenze (o meglio, sono molto poche) fra utilizzare un programmatore come l' AVRisp mkII ed il bootloader interno. Esiste qualche limitazione. Non si possono, ad esempio, modificare i fuses ma questo non rappresenta un problema in quanto le funzioni svolte dai fuses si possono implementare da software.
Un' altra limitazione è che il bootloader porta via un po' di memoria (2KB negli AT90USB64x e 4KB negli AT90USB128x) ma, vista la grande quantità di memoria a disposizione, non è affatto un problema.
I programmi si scrivono normalmente senza nessun accorgimento particolare se non quello di far generare il file .hex dal linker, quindi si compilano e poi, invece di caricare il programma tramite il programmatore si usa un software gratuito chiamato FLIP fornito dalla Atmel. La sequenza di operazioni è questa:
- Scrivere il programma in C, ad esempio utilizzando AVR Studio 5
- Fare il build del programma (compilazione completa con linking)
- Collegare il PIERIN alla USB (se non era già collegato)
- Lanciare il programma FLIP (se non era già aperto)
- Entrare nella modalità bootloader tenendo a zero logico la linea HWB/PE2 (il pin 43 del micro) mentre si da il RESET al micro
- Connettere FLIP al micro con l' apposito comando
- Programmare sempre tramite FLIP il file .HEX dentro il micro
A questo punto basta resettare nuovamente il micro ed il programma cha abbiamo scritto partirà immediatamente.
Chi sono gli AVR AT90USB ?
Lo dico senza mezzi termini: sono animali feroci.
Non ostante siano degli 8 bit e quindi più semplici da utilizzare rispetto ai fratelli maggiori a 32 bit sono veloci, con tantissimi I/O e con a bordo di tutto. Una cosa importante è che l' USB può anche funzionare OTG (On The Go). L' OTG può funzionare sia come device (una tastiera, un mouse, una pen drive, un convertitore USB-seriale sono device) che come host il che vuol dire che può anche essere collegato ad esempio, ad una pen drive USB e leggerne il contenuto, o comandare una stampante o ricevere comandi da una tastiera o leggere da un hard disk USB. Nei PIC questa funzione si ritrova solo a partire dai PIC24 mentre i PIC18 possono solo funzionare come device. Ecco un elenco delle caratteristiche salienti:
- Velocita di elaborazione 16 MIPS a 16 MHz.
- 64KB o 128KB di FLASH con 4K/8K di RAM e 2K/4K di EEPROM
- USB 2.0 device e OTG
- 2 timer a 8 bit, ognuno con il suo registro di comparazione e prescaler
- 2 timer a 16 bit, ognuno con il suo registro di comparazione e cattura
- Orologio in tempo reale (RTC) con oscillatore separato
- 6 canali PWM
- 8 canali con ADC a 10 bit
- USART, SPI, ed interfaccia Two Wire
- 48 linee di I/O
Direi che potrebbe essere un ottimo inizio partire con una macchina con i contro...fiocchi. :)
Il circuito
Il circuito è molto semplice ma lo devo postare ... a pezzi per motivi di leggibilità
Nello schema qui sopra troviamo il microcontrollore e, nella parte alta il condensatore C5 da 100nF di bypass dell' alimentazione, C4 invece serve per l' USB. E' infatti collegato al regolatore interno ed il suo valore è quello indicato nel datasheet.
Sulla parte alta troviamo il quarzo che può essere da 8 o 16 MHz. perché il bootloader vuole una di queste due frequenze. La resistenza R1 da 820R in serie al quarzo ci assicura che questo non venga caricato dall' oscillatore, i due condensatori C1 e C2 da 22p sono i classici utilizzati da questo tipo di oscillatore. R9 e LD1 sono un mio vezzo. Metto sempre in qualsiasi circuito un LED che mi indichi la presenza dell' alimentazione, che mi indichi se il circuito è vivo o non è alimentato. Si possono benissimo omettere. R6 e R7 devono esserci per forza (il datasheet lo impone quindi non si discute) mentre JP1, se inserito, fa si che il circuito venga alimentato direttamente dai 5V dell' USB.
RES è il pulsante di RESET mentre BOOT è il pulsante che forza il pin a massa per far partire il bootloader. infatti per farlo partire è necessario premere RES e BOOT contemporaneamente e poi rilasciare il pulsante RES. Così facendo il micro eseguirà il programma di bootloader. Troviamo anche C6 che con i suoi 100n toglie via un po' di disturbi dall' ingresso della tensione di riferimento del convertitore A/D interno.
Ho fatto che inserirci un connettore per JTAG per poterlo programmare tramite un programmatore, che è poi il modo in cui lo utilizzo io. uso il Dragon, un programmatore/debugger che costa poco e funziona molto bene o con il JTAGICE 3 che è migliore anche se costa di più ma non è supportato da AVR Studio4.
Infine, per concludere in bellezza, ho previsto due file laterali di pin con passo 2,54 messi con lo stesso ordine di come si trovano sul chip. Per motivi di disegno la numerazione dei pin J3 corrisponde esattamente a quella del microcontrollore mentre il pin 32 di J4 corrisponde al pin 33 e il pin 1 sempre di J4 corrisponde al pin 64. JP2 invece serve per collegare la linea XTAL2 se questa viene utilizzata come linea di I/O.
In pratica ho solo realizzato una sorta di adattatore a 64 pin con un po' di circuiteria aggiuntiva che mi serve per non dovere sempre montare quarzi, connettore JTAG, connettore USB e menate varie nei prototipi, una questione di mera comodità.
Strumenti di sviluppo
Come strumenti di sviluppo suggerisco di utilizzare l' AVR Studio 5 che si può scaricare da QUI previa registrazione. Per usare il bootloader è anche necessario il programma FLIP 3.4.3 che si può scaricare direttamente QUI. Vedremo più avanti come installarli ed usarli.
Coming soon
Nella prossima parte ne descriverò la costruzione (l' occasione è buona per illustrare il metodo che uso per saldare gli integrati SMD), l' installazione del software e la stesura del primo programmino "Hello World".