Departament de Microelectrònica i Sistemes Electrònics

FONAMENTS DE COMPUTADORS amb AVR
Enginyeria en Informàtica (ETSE)

Link a UABot

El dia D: la pràctica final

Objectiu d'aquesta plana web

Aquesta plana web ha estat preparada amb l'objectiu d'ajudar als alumnes de la titulació d'Enginyeria en Informàtica que cursen l'assignatura de Fonaments de Computadors i que han d'emprar el microcontrolador ATmega d'Atmel en la realització de les seves pràctiques.

El material que es troba en aquesta pàgina inclou:

- Una introducció als microcontroladors AVR: arquitectura i CPU d'un microcontrolador ATmega
- Una introducció a l'assemblador i el repertori d'instruccions emprat pels microcontroladors AVR
- Exemples d'iniciació a l'assemblador
- Eines de treball i de programació dels microcontroladors ATmega
- Exemples i pràctiques per l'assignatura
- Bibliografia i documentació

L'explicació del funcionament del microcontrolador s'ha basat majoritàriament sobre el microcontrolador ATmega8, un dispositiu simple i potent però molt fàcilment manejable. Alguns exemples, però, estan comprovats sobre el microcontrolador ATmega128. És un component que té més memòria i incorpora alguns perifèrics més, però l'arquitectura és la mateixa i el funcionament, basat en els registres, és pràcticament el mateix. Per això els programes són pràcticament iguals a excepció d'alguns detalls de definició dels components i alguns registres.

Els microcontroladors AVR

Els microcontroladors AVR d'Atmel ofereixen bones prestacions tecnològiques quan s'empren en aplicacions que exigeixen l'ús de microcontroladors de 8 i 16 bits, i inclouen un conjunt de components d'entrada/sortida (timers, comptadors, UARTS, ADCs, ports d'entrada/sortida, etc) que els fan molt versàtils.

Des del punt de vista de l'assignatura de Fonaments de computadors algunes de les prestacions que els fan útils són:

- Es treballa amb una CPU ben estructurada i agradable que permet entendre el funcionament bàsic dels microprocessadors
- Es basen en arquitectures RISC amb un conjunt divers, però petit i consistents, d'instruccions assemblador
- La major part de les instruccions s'executen en un cicle de rellotge
- Eines simples però molt complertes de simulació (AVR Studio), tant en assemblador com en C
- Facilitat de programació en les pràctiques emprant un protocol SPI amb eines simples de programació. Els processadors avançats també admeten la programació JTAG i corresponent depuració

Les sèries que conformen la família AVR de 8 bits són:

La sèrie tinyAVR®: Són microcontroladors de propòsit general amb memòria de programa de fins a 8KBytes de Flash, amb 512 Bytes de SRAM i EEPROM.
La sèrie megaAVR® són microcontroladors d'altes prestacions amb multiplicador hardware. Tenen fins a 256K Bytes de Flash, 4K Bytes de EEPROM i 8K Bytes SRAM.
Sèrie picoPower™ AVR. Microcontroladors amb prestacions de guarda d'energia.
La família més actual és la XMEGA 8/16-bit AVR. Els microcontroladors tenen millors prestacions en l'entrada/sortida, accés a memòria per DMA i prestacions de baix consum.
També hi han sèries orientades a aplicació com ara automoció, dirvers LCD, per xarxes CAN, amb connectivitat USB, control d'accés remot, etc.

En el que segueix es treballarà amb microcontroladors de la sèrie ATmega.

Arquitectura d'un microcontrolador ATmega i CPU

L'arquitectura dels processadors ATmega correspon a una arquitectura RISC tipus Harvard amb implementació d'un pipelining de tres etapes, fet que permet arribar a freqüències d'operació d'una instrucció per cicle de rellotge en la major part d'instruccions, que treballant a freqüències de rellotge de 20 MHz, donen uns acceptables 20 MIPS. Es basa en una arquitectura Harvard (amb busos i memòria separada per dades i instruccions) que treballa amb 32 registres de propòsit general.

La fugyra 1 mostra l'arquitectura de la CPU implementada en el microcontrolador ATmega8, comuna a tots els microcontroladors ATmega.

Figura 1

Els principals mòduls de què es composa són:

- La unitat aritmètico-lògica
- El banc de 32 registres
- El comptador de programes
- El registre d'instruccions i el mòdul descodificador d'instrucció
- El controlador d'interrupcions

Al voltant de la CPU i units pel bus de dades hi ha un conjunt de mòduls que complementen l'operativitat de la CPU:

- La memòria flash que és '¡encarregada de contenir el programa i memòries SRAM i EEPROM per emmagatzemar dades i realitzar el reinici des del microcontrolador
- Timers, generadors de rellotge intern, de sincronisme amb rellotge externs o watchdogs
- Mòduls d'entrada/sortida i comptadors que es comuniquen amb l'exterior mitjançant ports entrada/sortida
- Unitats de comunicació basades en protocols SPI i UART
- I mòduls analògics, com ara comparadors i conversors analògic-digitals

La figura 2 mostra l'arquitectura per blocs funcionals del microcontrolador ATmega128, un microcontrolador amb 128KB de flash.

Figura 2

Tots els microcontroladors de la família ATmega de 8 bits tenen un mateix funcionament però difereixen en el nombre de components i prestacions dels mateixos. Per exemple, la diferència entre els microcontroladors ATmega8 (un dels simples) i ATmega128 (un microcontrolador ja molt complert) no és en el funcionament i prestacions de la CPU sinó en el nombre i forma de funcionar d'alguns dels seus perifèrics, tal com mostra la següent taula:

 
ATmega8
ATmega128
CPU
Microcontrolador AVR de 8 bits d'arquitectura RISC
Microcontrolador AVR de 8 bits d'arquitectura RISC
Memòria flash interna per programació
8K bytes
128K bytes
Memòria EEPROM
512 bytes
4K bytes
Memòria SRAM
1K byte
4K byte
Ports d'E/S de propòsit general
23
53
Timer/counters amb diferents modes de comparació, PWM i interrupció
3
4
USART's
1
2
Ports SPI
1
1
Canals d'E/S analògics, amb ADC de 10 bits
6 (8)
8

A continuació s'explica el funcionament bàsic dels principals components i perifèrics dels microcontroladors ATmega. Cal tenir present que es presenta una informació de funcionament pràctica dels mòduls més usuals, fet que obliga a agafar el full de dades del component quan es vol aprofundir en el seu funcionament, o es volen emprar altres mòduls no comentats.

Per a major simplicitat s'ha agafat el microcontrolador ATmega8 per a introduir el funcionament dels ATmega.

- Composició i funcionament de la CPU
- Memòria

- Entrada/sortida

- Ports d'entrada/sortida
- Interrupcions externes
- Comptadors
- Mòduls analògic/digitals
- Comunicació
- Mòdul UART
- Mòdul SPI
- Rellotge i temporització
- Mòdul de programació

Repertori d'instruccions i assemblador

El codi que s'empra per a fer funcionar el microcontrolador és el codi màquina que queda emmagatzemat en la flash i que, instrucció a instrucció és descodificat i interpretat pel processador. A nivell extern tan sols es veuen les accions, conseqüències de la interpretació del codi emmagatzemat.

Per a poder treballar, però, el programa es realitza a un nivell lleugerament superior, intel·ligible per nosaltres, el que s'en diu assemblador. L'assemblador també és el programa encarregat de transportar el nostre codi assemblador, a codi màquina, que és interpretat pel microcontrolador.

El codi assemblador és aquell llenguatge que està a mig camí entrel hardware de la màquina i el software . Per això, quan es treballa amb l'assemblador cal conèixer el mecanisme intern de la màquina que permet entendre el procés que s'està duent a terme, i treballar amb els recursos que posa a la nostra disposició per programar-lo.

En el moment d'emprar el microcontrolador en el desenvolupament d'aplicacions convé tenir un coneixement adequat dels següents elements:

- Els registres

- Els ports d'entrada/sortida

- La memòria SRAM

- Les interrupcions

- El repertori d'instruccions. El document presenta el conjunt d'instruccions dels microcontroladors AVR. És un document a consultar sempre que es té un dubte subore el funcionament d'una instrucció. Els provessadors AVR té un conjunt equilibrat, potent i simple d'instruccions.

El repertori d'instruccions conté instruccions aritmètico-lògiques, instruccions de càrrega i d'emmagatzemament, instruccions de salt i és potent en instruccions d'entrada/sortida, contenint instruccions que permeten treballar individualment amb cada pin.

L'estructura a seguir en el desenvolupament de programes assemblador amb AVR és la següent:

- Convé posar unes línies comentari sobre l'aplicació, programador, data i versió de programa. Això facilita reconèixer, a posteriori, les diferents versions.

- S'indiquen els fitxers d'especificació de component i biblioteques amb la directiva .INCLUDE.

- S'han d'incloure les redefinicions (directiva .EQU) i especificacions de registres (.DEF).

- Si s'escau es pot especificar l'origen del programa amb les directives .CSEG, .ESEG i .DSEG.

- El programa comença en l'origen de memòria, .ORG 0x00. Tot i que no cal especificar-lo, ja que ho fa per defecte, la seva inclusió referma la idea de què comença el programa. Acte seguit s'ha de posar la instrucció de salt a l'inici de programa.

- Seguint l'adreça 0 s'han de posar totes les etiquetes referents a les rutines de servei d'interrupció, i els corresponents salts a les adreces on s'han inclós aquestes rutines.

- Ja en el programa principal s'inicialitzen tots els components que s'utilitzen del microcontrolador i es posa la rutina principal.

- Segueixen al programa principal les rutines de servei d'interrupció i les subrutines. Convé que les rutines de servei d'interrupció siguin curtes de forma que si arriben noves interrupcions es puguin atendre quan abans millor.

- Finalment, no cal recordar que tot comentari és benvingut quan s'ha d'analitzar el programa a posteriori.

Aquesta estructura s'ha seguit en tots els programes que es presenten en aquesta pàgina.

En el document d'introducció a l'assemblador amb AVR s'hi troba una documentació fàcil de llegir que introdueix a l'ús de l'assemblador amb microcontroladors AVR i proporciona exemples pràctics de treball amb assemblador.

Alguns programes simples addicionals basats en retards es troben en exemples.

El programa motorContínua mostra un exemple complert d'un control de motor de contínua per PWM

Finalment, el document Ús de la USART presenta una petita introducció a l'ús de la UART en el microcontrolador ATmega8 i la seva comunicació amb l'ordinador. L'objectiu fonamental és mostrar la utilitat d'emprar la comunicació asíncrona entre el microcontrolador i l'hyperterminal de l'ordinador com a eina de depuració dels programes.

Treballant amb els ATmega

Per començar a treballar amb microcontroladors s'ha de reconèixer que els ATmega de 8 bits d'Atmel ofereixen unes prestacions d'alt rendiment a un cost econòmic barat i amb un esforç d'aprenentage ràpid. La versatilitat d'aquests microcontroladors permet pensar en treballar tant a partir de plaques de prototipatge ja muntades amb els microcontroladors, fer-se un mateix la placa com, fins i tot, agafar un microcontrolador DIP i treballar sobre una placa de desenvolupament.

En aquest apartat s'expliquen diferents maneres de poder treballar amb ells:

- La més simple i barata. Treballar directament amb els microcontroladors ATmega8, Atmega48, etc. Són uns microntroladors molt barats encapsulats en un DIP de 28 pins que permeten poder treballar amb ells sobre placa de desenvolupament en el laboratori. Donat que ja porten incorporat un rellotge intern d'1MHz, per fer-los treballar només cal connectar-los a alimentació. Es poden programar de forma fácil emprant el port de tres fils ISP .

- També es pot fer una placa de desenvolupament simple per aquests microcontroladors on s'hi pot posar un regulador de tensió per estabilitzar l'alimentació. El document placaATmega8 conté la descripció d'una placa simple amb regulació de tensió, connector de programació amb ISP i expansió de pins.

- Hi ha diferents plaques de baix cost que permeten treballar amb microcontroladors AVR de majors prestacions i a majors velocitats. Per exemple, la placa ET-AVR (Futurlec) treballa amb el microcontrolador ATmega128 amb un rellotge base de 16MHz i inclou diferentes ports de programació. Aquesta placa ve amb dos connectors mascle de 25 pins per connectar-la en una protoboard. Si necessiteu emprar una placa de desenvolupament més petita en el document placaATmega128 hi podeu trobar el disseny d'una placa d'expansió molt simple que encasta la placa ET-AVR en una protoboard pròpia de desenvolupament i proporciona regulació de tensió (a 5V i un connector a 3.3V per si es necessita en qualque aplicació), connector de programació amb ISP, expansió de pins i connexió RS232 cap a ordinador (inclou un MAX232).

Eines de treball i de programació

Entre les eines software bàsiques que existeixen per treballar amb els microcontroladors AVR es pot trobar:

L'entorn de desenvolupament integrat gratuït per escriure i debuggar aplicacions en els entorns Windows 9x/NT/2000/XP que inclou un assemblador i un simulador: AVR Studio 4

El WinAVR (pronunciat "whenever") és una plataforma software oberta que conté eines de desenvolupament pels microprocessador RISC d'Atmel per plataforma Windows. Construida per Eric Weddington inclou el compilador GNU GCC per C i C++ pels AVR.

Per a la programació dels microcontroladors existeixen diferents eines comercialitzades tant per Atmel com per altres empreses. De totes formes, en aquest punt potser val la pena tenir present que aquests microcontroladors ofereixen diferents vies de programació, algunes d'elles molt simples, com ara emprant el port ISP del propi microcontroladors que només requereix d'una connexió amb tres fils (MISO, MOSI i CLK). Així, i de forma freeware, la programació es pot fer a través del port ISP emprant PonyProg, un software amb entorn de programació fàcil disponible per Windows95/98/ME/NT/2000/XP i Intel Linux. La pròpia plana web de PonyProg especifica els dispositius que permeten programar les diferents versions del software així com els diferents canals de programació que es poden utilitzar.

En el que respecte al programador (hardware) emprat per programar els microcontroladors també existeixen diferents solucions, que van des de l'ús de programadors basats en l'estàndard JTAG com el comercialitzat AVR JTAGICE mkII per Atmel (el driver es troba a ET-AVR JTAG_2000_XP.zip). Futurlec ven altres programadors.

Si es fa servir, però, el software de Ponyprog per a programar el microcontrolador hi ha programadors molt simples i barats que permeten programar els microcontroladors. Entre les propostes que es poden trobar en la pròpia pàgina web de Ponyprog hi ha les dues solucions següents:

- A través del port sèrie (Lancos, Olimex)(aquesta versió no l'he provat).

- A través del port paral·lel. D''aquest programador us proporciono un esquemàtic (comprovat) i els layouts de les capes component, soldadura i silkscreen.

De totes formes, si el que es vol és anar per feina i no construir-se un mateix el programador, hi ha distribuidors, com ara Futurlec, que proporcionen uns programadors a molt baix cost, com el ISP-programmer.

Consell: Donat que els microcontroladors AVR disposen d'un conjunt de fusibles interns, alguns d'ells 'delicats', es recomana seguir les recomanacions que es donen en el fitxer programacioPonyprog quan s'empra el PonyProg per a programar el microcontrolador.

Per aquells que disposin d'un programador/debugador USB-JTAG es poden baixar els drivers de ET-AVR JTAG_2000_XP.zip

fc i avr

Microprocessadors i microcontroladors tenen un nucli comú que permet explicar, tot i que amb especificitats molt concretes, el funcionament base del computador.

En aquest sentit es presenten dos fitxers que basant-se en aquesta similitud introdueixen els fonaments de computadors, de forma molt pràctica, basant-se en el funcionament dels microcontroladors ATmega.

- Introducció als fonaments de computadors.
- ATmega i perifèrics.

Pràctiques

El conjunt de pràctiques que es presenten tot seguit estan pensades per a un alumne que s'inicïi en els fonaments de computadors. L'objectiu és que l'alumne aprengui el coneixement bàsic sobre sistemes digitals i fonaments dels computador que li permetin entendre, a posteriori, el funcionament elemental dels diferents mòduls que usa i es programen en el microcontrolador.

Hi ha un conjunt de 8 pràctiques, que comencen amb sistemes digitals i acaben amb la construcció d'un petit programa de control sobre placa amb microcontrolador ATmega128. L'objectiu final és assolir els coneixements sobre hardware que li permeten entendre com funciona el cor del robot RUAB1. Per altra costat, en l'assignatura d'Estructura de dades l'alumne aprofunditza en la programació a alt nivell. El nucli de les pràctiques d'ambdues assignatures és aconseguir una navegació autònoma sense xoc del robot en un laberint entenent què s'està coent en el robot a nivell de hardware i com s'hi actua emprant llenguatges de programació a alt nivell.

Datasheets dels circuits integrats emprats en les pràctiques 1 a 3 -> Datasheets.zip

Pràctica 1. Instrumentació i connectivitat

Primera pràctica que serveix per acabar de comprendre el funcionament de la instrumentació que es farà servir durant el curs i per aprendre els conceptes fonamentals d'interconnectivitat de la lògica digital amb el món exterior. S'aprofita la mateixa pràctica per treballar amb osci·ladors, circuits electrònics que convé entendre el seu funcionament ja que són la base del funcionament de tot circuit digital i amb els que ens haurem de barallar durant el curs. L'índex de la pràctica és:

Instrumentació: font alimentació, generador ones i oscil.loscop
Circuits integrats: nomenclatura full d'especificacions, connectivitat en portes. Exemple amb el ci 4060.
Oscil.ladors. Exemple de construcció amb el ci 4060. Comprovació del funcionament amb oscil.loscop

MATERIAL: 4060, RESISTÈNCIES, CAPS, CRISTALL 32KHZ

Pràctica 2. Optoelectrònica i circuit combinacional

La pràctica introdueix l'alumne en el món de la lògica digital i en la construcció de petits circuits combinacionals. Aixímateix s'introdueixen els circuits optoelectrònics que s'empren habitualment per mostrar la sortida del circuit.

El led: connectivitat
Les portes: semàfor
El 7-segments
El codificador BCD-7segments. Exemple (dibuix) de construcció en portes
Ús del 4774 en el 7segments

MATERIAL: 4774, 7SEGMENT, LEDS, RESISTÈNCIES

Pràctica 3. Circuits seqüencials: el semàfor

La pràctica parteix del coneixement que s'ha adquirit sobre els circuits digitals (combinacionals) i ara aprofundeix en la construcció de circuits seqüencials. L'objectiu de la pràctica és emprar el semàfor com a exemple per la construcció de circuits seqüencials emprant diferents mètodes.

Exemple: construcció d’un semàfor

Part teòrica 1: semàfor a partir de mef
Part teòrica 2: semàfor a partir del comptador 4060
Part pràctica: construcció del semàfor
MATERIAL: 4060, NAND, LEDS, RESISTÈNCIES

Pràctica 4. La màquina elemental: ATMEGA8 i E/S

La pràctica introdueix l'estudiant en l'ús del microcontrolador. Per aquesta pràctica es fa servir el microcontrolador ATmega8, un microcontrolador prou senzill que permet ser emprat sobre placa de prototipatge.
La pràctica es dedica, fonamentalment, a entendre el funcionament de les eines que s'empren i a començar a utilizar els recursos del microcontrolador. L'índex de la pràctica és:

Eines de treball hard/soft: components: atmega8, compàs, ir, leds, etc
Arquitectura de l’atmega8
Instruccions de l’atmega8
Mètode de treball: Diagrama de flux -> Codificació -> Simulació -> Depuració
Programant l’atmega8
Treballant amb E/S. Polling.

MATERIAL: ATMEGA8, PLACA MUNTADA PER PROGRAMAR L'ATMEGA8, LEDS

Pràctica 5. El detector d'obstacles lateral

El RUAB1 porta incorporats un conjunt de sensors que el fan molt pràctic en la navegació. Entre aquests sensors hi ha el detector d'obstacles lateral bassat en un emissor IR i un fotodiode que rep el rebot que es produeix quan el robot xoca amb un obstacle. Aquest detector té una sortida analògica que permet tenir noció de a quina distància es troba el robot de l'obstacle.

Si el que es vol és tractar aquesta distància l'ATmega permet fer-ho emprant una de les entrades analògiques de què disposa. És el que es fa en aquesta pràctica.

MATERIAL: DETECTOR LATERAL D'OBSTACLES, ATMEGA8, PLACA MUNTADA PER PROGRAMAR L'ATMEGA8

Pràctica 6. Comptadors i servomotors

La locomoció dels robots RUAB1 es pot dur a terme emprant servomotors. En aquesta pràctica es veu com es controlen els servomotors a partir de l'aplicació de polsos PWM sobre l'entrada de control del servomotor. Un mètode pràctic que ens proporcionen els microcontroladors ATmega és realitzar aquest control PWM emprant timers/comptadors interns i/o interrupcions.

Ús de comptadors/timers
Emprant interrupcions
MATERIAL: ATMEGA8/ATMEGA128, PLACA PREPARADA, SERVOMOTOR

Pràctica 7. Comunicació RS232

En aquesta darrera pràctica s'introdueix la comunicació RS232 per a què pugui ser usada com a eina de comunicació i depuració dels progames que s'utilitzen. Quan es realiza un programa i es baixa cap a placa sovint es troben dos problemes: el programa funciona, però no se sap del cert si ho fa amb la precisió esperada o, pitjor, el programa no funciona i no se sap per què. En aquests casos tenir una eina de depuració que pugui mostrar què passa en el programa conforme va corrent és molt útil.

Un mètode de depuració molt versàtil es pot aconseguir establint una comunicació entre el microcontrolador i l'ordinador, de manera que en tot moment l'ordinador visualitzi les dades que es tracten en el microcontrolador. Per fer-ho el que es farà és establir una comunicació sèrie entre el microcontrolador i l'ordinador emprant l'hyperterminal d'aquest. Per tant, es veurà:

La comunicació RS232
Visualització de les dades del detector d'obstacles lateral en ’hyperterminal

MATERIAL: DETECTOR LATERAL D'OBSTACLES, ATMEGA128, PLACA RUAB1

Pràctica 8. DIA D: Preparació i demostració final

Aquesta darrera pràctica pretén que l'alumne comprnegui com els diferents perifèrics del microcontrolador són emprats en el RUAB1 en una pràctica de navegació del robot emprant programació d'alt nivell sobre els recursos hardware que s'han treballat durant aquestes pràctiques.

Aquesta pràctica sintetitza la potència que significa saber programar sobre un hardware específic i conegut. En definitiva, sintetitza els coneixements adquirits en les assignatures de Fonaments de computadors i d'Estructura de dades.

La pràctica final s'avalua amb el funcionament correcte del robot que ha de ser capaç de navegar sobre un laberint.

Material d'ajuda

Documentació dels components:

Documentació de l'ATmega8: ATmega8
Documentació de l'ATmega48: ATmega48
Documentació de l'ATmega128: ATmega128
Documentació de l'ATmega128: ATmega644
Instruccions dels microcontroladors AVR: AVR_instruccions

Documents d'aplicació:

Introducció a l'assemblador del AVR: begginner_assembler_AVR
Guia d'usuari de l'assemblador del AVR: AVR_AssemblerUserGuide
Guia d'usuari del AVR Studio: AVRStudioUserGuide
Manual de programació amb ISP: ET-AVR_ISP
Documentació sobre programació ISP dels AVR: AN101
Consideracions de disseny treballant amb microcontroladors AVR: AVR042

Bibliografia

Bibliografia:

J. Morton. AVR: An Introductory Course. Elsevier. 2002. ISBN-13: 978-0-7506-5635-1.
C. Kuhnel. AVR RISC Microcontroller Handbook. 1998. ISBN-13: 978-0-7506-9963-9
A la pàgina web d'Atmel hi ha nombrosa documentació sobre els components i aplicacions que ajuden al desenvolupament de qualsevol producte amb els microcontroladors d'Atmel.

Pàgines web de referència:

Pàgina del fabricant dels microcontroladors AVR, Atmel: http://www.atmel.com
Wikipèdia: informació genèrica sobre AVR: http://en.wikipedia.org/wiki/Atmel_AVR
Pàgina de comunicació dels AVR'freaks: http://www.avrfreaks.net/
Pàgina d'introducció i exemples de programació dels AVR amb assemblador: http://avr-asm.tripod.com/
Pàgina on es pot trobar el programador PonyProg: http://www.lancos.com
Pàgina del simulador WinAVR: http://winavr.sourceforge.net/

Distribuidors de components electrònics:

http://www.futurlec.com
http://www.farnell.com

WcN - WcN - AVR i Fonaments de computadors