Link Articolo Originale: http://www.grix.it/viewer.php?page=869
Questo tutorial è fatto per tutti quegli hobbisti che vogliono entrare nel mondo di questi fantastici microcontrollori semplici e versatili. Partirei ad analizzare il microcontrollore dell'atmel più completo in modo che includa anche tutti quelli di ordine "inferiore"...questo micro si chiama ATMEGA16. Però prima di parlare in specifico del componente vediamo come costruire il programmatore ed altre "cosette" fondamentali.
1. Il Programmatore
Il programmatore ( creato da G.Cumer professore di laboratorio di sistemi dell'Istituto Tecnico Industriale di Rovereto (TN) ) si collega alla parallela e con la fascetta ( molto più comoda rispetto ad uno zoccolo. Infatti con la fascetta possiamo programmare con il micro direttamente sulla breadboard oppure sul circuito senza doverlo estrarre e rimetterlo. E poi con la fascetta possiamo programmare qualsiasi micro dell'atmel e l'alimentazione la prende da due pin della fascetta) si collega ai piedini di programmazione del micro ( che dopo vedremo ):
come si può vedere dalla foto i componenti sono davvero pochissimi:
- Connettore MASCHIO per porta parallela x1
- Diodo 1N4148 x1
- Strip maschio 7 poli x1
- Resistenza 100KOhm 1/4 W x1
- Zoccolo per integrato a 20 piedini x1
- Integrato CD74HC541E x1
- Una fascetta 14 poli ( ne useremo solo 7 ) x1
il tutto è possibile montarlo su circuito stampato oppure su una semplice millefori. Qui riporto lo schema del programmatore. Poi ogniuno decida come costruirlo ( dato che a me lo ha fornito la scuola non ho niente già pronto...faccio solo per voi lo schema in eagle ;-) ):
Quindi la fascetta prenderà l'alimentazione direttamente dall'applicazione su cui dobbiamo programmare e alimenterà il programmatore. Questo è stato fatto perchè se vediamo la piedinatura del ATMEGA16 i piedini sono tutti in sequenza ( questo non accade per gli altri atmel che invece dobbiamo collegarli "manualmente" come indicato dallo schema).
Per caricare il software con questo programmatore dobbiamo utilizzare un programma chiamato PONYPROG 2000...lo trovate facilmente in internet o qui di seguito. Spiegheremo dopo aver fatto qualche esempio di programma come caricare sul micro il programma.
PONYPROG
2. Software di Programmazione
Per quanto riguarda il vero e proprio software utilizziamo AVR Studio 4. Con questa applicazione creiamo software per ogni micro dell'ATMEL programmando in linguaggio ASSEMBLER. Clicca sul link per scaricare AVR Studio 4 ( bisogna registrarsi gratuitamente al sito per poterlo scaricare!! E' pesantuccio come file...45 MB circa )
3. Il Microcontrollore: "ATMEGA16"
Finalmente ecco qui il nostro fantomatico ATMEGA16...questa è la piedinatura:
Ha parecchie funzioni...per chi vuole qui è possibile scaricare il datasheet ( che è indispensabile dato che indica tutte le caratteristiche elettriche, e le istruzioni per utilizzare le periferiche quali registri ecc ecc )...le funzioni principali le indico qui:
- 4 Porte di uscita ad 8 bit ciascuna ( A B C D )
- 3 Interrupt
- 2 Timer ad 8 bit e 1 a 16 bit
- 4 Canali per PWM
- 8 Canali multiplexati a 10bit ADC
- Comparatore Analogico
- Seriale ( USART )
- Oscillatore interno e possibilità di usarne di esterni
(qui svilupperò programmi esempio per le funzioni base ( porte I/O ) se qualcuno ha bisogno di un programma in particolare mi contatti e vedrò di modificare la pagina aggiungendo il programma in questione)
Ribadisco che il datasheet è assolutamente fondamentale per poter programmare e riuscire a gestire queste periferiche correttamente!!! Quindi scaricatevelo e armatevi di dizionario!!! E tanta pazienza e buona volontà... ;-P...
Per quanto riguarda il collegamento BASE dobbiamo stare attenti a collegare:
PIN 11 - 31 ---> GND
PIN 10 - 32 - 30 ---> +VCC = 4.5 - 5.5 V
poi gli altri collegamenti dipendono ovviamente dalle applicazioni!!! Attenzione che le porte di uscita erogano 40 mA...non tentate di prelevare troppa corrente...pena la fusione dell'integrato...
5. Il Microcontrollore: "AT90S2313-10PC" ( solo per Mikegrix :-p )
per aiutare il mio collega Mikegrix metto una breve descrizione anche di questo atmel...ha meno funzioni rispetto all'ATMEGA16 ma comunque sa il fatto suo ;-):
Allora...Le funzioni ( a grandi linee) sono:
- 2 Porte di I/O --> Porta D 7 Bit, Porta B 8 bit
- 2 Interrupt
- Comparatore analogico
- 1 timer ad 8 bit e uno a 16 bit
- Seriale (USART)
Lo stesso discorso di prima...SCARICATE IL DATASHEET da QUI per vedere più in specifico le varie funzioni!!!
In questo caso i collegamenti fondamentali sono:
PIN 10 --> GND
PIN 20 --> VCC
6. Ok...basta teoria...è arrivato il momento di programmare:
Direi di iniziare con un programma semplicissimo...Premendo un pulsante si accende un led...so che non serve un microcontrollore così per fare un applicazione del genere ma per iniziare a prendere confidenza con questo micro dobbiamo iniziare dal semplice...poi possiamo sbizzarrirci con timer ecc ecc...ma i programmi dovete richiederli voi...io farò il possibile per accontentare le vostre richieste...intanto iniziamo con un programma semplice semplice spiegato davvero PASSO PASSO! Se avete costruito il programmatore ( per ora non è indispensabile dato che il software è possibile simularlo dal pc ) avete installato AVR STUDIO e PONYPROG possiamo partire all'attacco.
ACCENSIONE / SPEGNIMENTO LED
TRAMITE PULSANTE
Per poter sviluppare un software con successo dobbiamo prima di accendere il pc e programmare prendere carta e penna e abbozzare uno schema a blocchi per vedere passo passo le fasi del programma:
CONFIGURAZIONE DELLE PORTE DI INGRESSO E USCITA
(Utilizzeremo il pin PD0 come ingresso e PD1 come uscita)
|
|
V
INIZIALIZZAZIONE DELLE PORTE DI USCITA A 0 E INIZIALIZZAZIONE DEL RELATIVO FLAG DI CONTROLLO
( inizialmente il led è spento e il flag di controllo è a 0, la porta di ingresso ha un PULL-UP quindi di norma è a 1 e il pulsante la tira a massa )
|
|
V
CICLO DI CONTROLLO DEL PULSANTE
( continuo a leggere il PD0 e se va a 0 controllo il flag di controllo e eseguo l'azione ) <---
| |
| PD0 = 1 |
----------------------------------------------------------
| PD0=0
|
V
ORA VALUTO IL FLAG DI CONTROLLO
( se è a 0 voleva dire che il led era spento quindi ora lo accendo, pongo a 1 il flag e torno al ciclo di controllo , se il flag è a 1 vuol dire che il led era acceso quindi lo spengo, pongo a 0 il flag, e torno al ciclo di controllo)
|
|
V
TORNO AL "CICLO DI CONTROLLO DEL PULSANTE" MODIFICANDO IN MANIERA APPROPRIATA IL FLAG DI CONTROLLO
Dato che non sarà subito chiaro a tutti spiego il funzionamento anche a parole...allora...il microcontrollore ha determinate porte ( utilizzo la D perchè è comune sia al ATMEGA16 che al AT90S2313 ) che a priori non si sa se sono di ingresso o di uscita. Quindi la prima operazione da fare è dirgli quale è la sua funzione. Una porta è composta da TOT bit...nel caso dell'ATMEGA16 la porta D ha 8 bit mentre per l'AT90S2313 ne ha 7 bit...ogni bit è possibile configurarlo di ingresso o di uscita ( nel codice vedremo come fare). Dopo aver stabilito se il bit è di input o output ci sono altri due parametri da impostare nella porta...nel caso della porta di uscita dobbiamo stabilire se "sparare" fuori 1 oppure 0...nel nostro caso spariamo 0 perchè vogliamo che il led inizialmente sia spento. Nel caso del bit di ingresso dobbiamo stabilire se vogliamo il PULL UP ( cioè una resistenza interna collegata verso +VCC che manterrà l'ingresso alto ) oppure non la vogliamo. Il PULL UP a mio parere è molto comodo perchè elimina eventuali "falsi ingressi" provocati da cariche elettrostatiche...ovviamente il pulsante dovrà mandare a massa l'ingresso...quindi imposto il pull up nel bit di ingresso. Ora creo un ciclo che continua a leggere il bit sulla porta D....se lo trova ad 1 continua a "ciclare" senza fare nulla...quando lo becca a 0 pum...salta all'istruzione dove deve decidere se accendere o spegnere il led...ma come fa l'atmel a sapere se il led è acceso o spento??Bhè abbiamo predisposto un flag ( un registro a 8 bit...ad esempio R16...lo so che 8 bit sono sprecati per uno solo ma non complichiamoci la vita...;-) ) che tiene memorizzato lo stato...inizialmente lo poniamo a 0 quindi l'atmel quando deve decidere cosa fare vede che il flag è a 0 quindi accende il led alla prima pressione del tasto e pone il flag a 1 di modo che alla seconda pressione l'atmel vede che il flag è a 1 e allora spegne il led e mette a 0 il flag e così via....esistono anche metodi alternativi senza usare un flag ( complemento di un registro...) però questo è il piu semplice e include varie istruzioni di controllo e salto che sono indispensabili....bhè ora accendiamo il pc e partiamo...
Allora...apriamo AVR STUDIO 4... La prima schermata dovrebbe essere questa:
Cliccare su "New Project" e otterrete:
Cliccate su "ATMEL AVR ASSEMBLER" e date un nome al progetto nel campo "Project Name" poi clik su NEXT:
Cliccare nella colonna di sinistra su "AVR Simulator" e cercare nella colonna di destra il microcontrollore che vogliamo programmare poi click su FINISH:
eccoci qua...la parte di sinistra indica le cartelle contenenti i vari files, il simulatore, e eventuali informazioni ( in basso ci sono le linguette per la selezione ), la parte grossa di destra è la zona dove inseriremo il nostro codice, e la striscia bassa contiene messaggi di errori, compilazione ecc ecc..partiamo a scrivere il programma!!
RIPORTO QUI IL PROGRAMMA BEN COMMENTATO E TUTTO...PER LE VARIE ISTRUZIONI ( LDI, OUT, CPI...) VI RIMANDO A DARE UN OCCHIO ALLE ULTIME PAGINE DEL DATASHEET PER CAPIRNE LA FUNZIONE!!!!!!!!!!!!!!!!!!!!!!!
Scarica il programma già per AVR STUDIO
Ogni volta che creiamo un programma dobbiamo compilarlo...per compilarlo PREMIAMO o F7 oppure la penultima icona della seconda fila orizzontale!...in questo modo si crea un file .hex che andrà caricato sul micro con PONYPROG.
Ecco qui i passaggi da fare con ponyprog...( clicca sull'immagine per allargarla)
ecco fatto...adesso collegate un pulsante a massa dal piedino PD0 e un LED al piedino PD1...e provate....fatemi sapere!!!