Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MICROCONTROLADORES
ATMEGA8
ZENON CUCHO M.
FRERI ORIHUELA Q.
ROLANDO SNCHEZ P.
LAUREANO RODRGUEZ P.
JIMMY TARRILLO O.
2007-I
SESIN 01
PARTE TERICA
DESCRIPCION DEL MICROCONTROLADOR ATMEGA 8
MEMORIA DE PROGRAMAS Y ESPACIO DE MEMORIA DE DATOS
DESCRIPCION DE LOS PUERTOS E/S
PARTE PRCTICA
INTRODUCCION AL MICROCONTROLADOR
1.1
Introduccin
Robtica: para control de los motores y captura de seales de los diferentes sensores,
fabricacin de controladores robticos para sistemas automticos, etc.
Planmetro electrnico
Nivelmetro digital
Tacmetro digital
Dispositivos autnomos:
Fotocopiadoras
Mquinas de escribir
Localizador de peces
Telfonos de tarjeta
Telfonos celulares
Cerraduras electrnicas
Sistemas de seguridad
1.2
Principales fabricantes
Atmel
Motorola
Intel
Microchip
NEC
Hitachi
Mitsibishi
Philips
Matsushita
Toshiba
AT&T
Zilog
Siemens
National Semiconductor
etc.
Breve Esbozo Histrico. La siguiente es una lista cronolgica de los eventos tecnolgicos
ms recientes que han tenido impacto sobre la aparicin y el desarrollo del campo de los
microcontroladores en la electrnica digital.
1971: Intel fabrica el primer microprocesador (el 4004) de tecnologa PMOS. Este era un
microprocesador de 4 bits y fue fabricado por Intel a peticin de Datapoint Corporation
con el objeto de sustituir la CPU de terminales inteligentes fabricadas en esa fecha por
Datapoint mediante circuitera discreta. El dispositivo fabricado por Intel result 10
veces ms lento de lo requerido y Datapoint no lo compr, de esta manera Intel
comenz a comercializarlo. El 4004 poda direccionar slo 4096 (4k) posiciones de
memoria de 4 bits, reconoca 45 instrucciones y poda ejecutar una instruccin en 20
seg en promedio.
1972:
Las aplicaciones del 4004 estaban muy limitadas por su reducida capacidad y
rpidamente Intel desarroll una versin ms poderosa (el 8008), el cual poda
1973: Intel lanza al mercado el 8080 el primer microprocesador de tecnologa NMOS, lo cual
permite superar la velocidad de su predecesor (el 8008) por un factor de diez, es decir,
el 8080 puede realizar 500000 operaciones por segundo, adems se increment la
capacidad de direccionamiento de memoria a 64 kbytes. A partir del 8080 de Intel se
produjo una revolucin en el diseo de microomputadoras y varias compaas
fabricantes de circuitos integrados comenzaron a producir microprocesadores. Algunos
ejemplos de los primeros microprocesadores son: el IMP-4 y el SC/MP de National
Semiconductors, el PPS-4 y PPS-8 de Rockwell International, el MC6800 de
Motorola, el F-8 de Fairchild.
1975: Zilog lanza al mercado el Z80, uno de los microprocesadores de 8 bits ms poderosos.
En ese mismo ao, Motorola reduce sus costos con sus microprocesadores 6501 y
6502 (este ltimo adoptado por APPLE para su primera microcomputadora personal).
estos microprocesadores se comercializan en $20 y $25 (dls.USA) respectivamente.
Esto provoca un auge en el mercado de microcomputadoras de uso domstico y un
caos en la proliferacin de lenguajes, sistemas operativos y programas (ningn
producto era compatible con el de otro fabricante).
1976: Surgen las primeras microcomputadoras de un solo chip, que ms tarde se denominarn
microcontroladores. Dos de los primeros microcontroladores, son el 8048 de Intel y
el 6805R2 de Motorola.
198x : En la dcada de los 80's comienza la ruptura entre la evolucin tecnolgica de los
microprocesadores y la de los microcontroladores, Ya que los primeros han ido
incorporando cada vez ms y mejores capacidades para las aplicaciones en donde se
requiere el manejo de grandes volmenes de informacin y por otro lado, los segundos
han incorporado ms capacidades que les permiten la interaccin con el mundo fsico
en tiempo real, adems de mejores desempeos en ambientes de tipo industrial.
1.4
ARQUITECTURA DE UN MICROCONTROLADOR
Segn la arquitectura
Memoria
Bus de direcciones
CPU
Instrucciones
+
Datos
Bus de datos
Existe una variante de esta arquitectura que permite el acceso a la tabla de datos desde
la memoria de programas es la Arquitectura de Harvard Modificada. Esta ltima
arquitectura es la dominante en los microcontroladores actuales ya que la memoria de
programas es usualmente ROM, OTP, EPROM o FLASH, mientras que la memoria de
datos es usualmente RAM. Por ejemplo las tablas de datos pueden estar en la memoria
de programa sin que sean perdidas cada vez que el sistema es apagado.
Memoria de
Bus de direcciones
Instrucciones
de instrucciones
Bus de direcciones
CPU
de datos
Bus de instrucciones
Memoria
de datos
Bus de datos
logrando
as
mayor
velocidad
menor
longitud
de
programa,
b) que el tiempo de acceso a las instrucciones puede superponerse con el de los datos,
logrando una mayor velocidad de operacin.
Memoria ROM con mscara y es de solo lectura, cuyo contenido se graba durante la
fabricacin del chip. Es aconsejable cuando se precisan cantidades superiores a varios
miles de unidades.
Memoria OTP
1.6
Qu microcontrolador elegir?
Sin duda la eleccin del microcontrolador depender de la tarea o proyecto que se tiene
en mente pues los fabricantes como se mencion anteriormente son ms de 50, estos
tienen muchos modelos enfocados a tareas especficas. Esta seleccin deber ir de la
mano con factores econmicos ptimos as como de la idea del controlador incrustado
(embedded controller), el cual es un controlador dedicado a una sola tarea e
incorporado al sistema que gobierna.
Antes de seleccionar un microcontrolador es imprescindible analizar los requisitos de
la aplicacin:
Procesamiento de datos: Cuando se desea realizar clculos complejos en un tiempo
limitado, se debe seleccionar un microcontrolador suficientemente rpido para ello.
Por otro lado, habr que tener en cuenta la precisin de los datos a manejar: si no es
suficiente con un microcontrolador de 8 bits, puede ser necesario acudir a
microcontroladores de 16 32 bits, o incluso a hardware de coma flotante.
Una alternativa ms barata y quiz suficiente es usar libreras para manejar los datos de
alta precisin.
Entrada/Salida: Se debe identificar la cantidad y tipo de seales a controlar. Una vez
realizado este anlisis puede ser necesario aadir perifricos externos o cambiar a otro
microcontrolador ms adecuado a ese sistema.
Consumo: algunos productos que incorporan microcontroladores estn alimentados
con bateras, puede ser que el microcontrolador est trabajando en estado de bajo
consumo pero debe despertar ante la activacin de una seal (por ejemplo una
interrupcin) y ejecutar el programa adecuadamente.
Memoria: para detectar las necesidades de memoria de una aplicacin debemos saber
la cantidad y el tipo de memoria necesaria para esto se debe tener una versin
preliminar (pseudo-cdigo) de la aplicacin y escoger el microcontrolador apropiado.
Ancho de palabra: el criterio de diseo debe ser seleccionar el microcontrolador de
menor ancho de palabra que satisfaga los requerimientos de la aplicacin. Usar un
microcontrolador de 4 bits supondr reducir los costos, mientras que uno de 8 bits
puede ser el ms adecuado si el ancho de los datos es de un byte. Los
microcontroladores de 16 y 32 bits, debido a su elevado costo, deben reservarse para
aplicaciones que requieran altas prestaciones (Entrada/Salida grande o espacio de
direccionamiento muy elevado).
Diseo de la placa: la seleccin de un microcontrolador concreto condicionar el
diseo de la placa de circuitos impresos.
10
II.
2.1
TINY AVR: son microcontroladores de propsito general con memoria flash hasta
2 Kbytes y 128 bytes de memorias SRAM y EEPROM.
11
Mega AVR
Memoria flash hasta 256 Kbytes, 4 Kbytes de memoria EEPROM y SRAM
Los tipos de encapsulado del microcontrolador del ATmega presenta desde 28 pines hasta 100
pines en la forma de DIP, TQFP y MLF y su voltaje de alimentacin est en el rango de 1.8 a
5.5 voltios. Se presenta en la figura 2.1 sus caractersticas principales
12
2.2
La tecnologa RISC (Reduced Instruction Set Computing), o sea presentan instrucciones con
complejidad reducida, a diferencia de otros que tienen tecnologa CISC (Complex Instruccin
Curso de actualizacin de Microcontroladores Atmega8
13
Set Computing), permite una rpida ejecucin de las instrucciones que se ejecutan en un solo
ciclo de reloj, el ATMEGA 8L consigue obtener 1 MIPS por Mhz, permitiendo al diseador
del sistema optimizar su consumo de energa versus la velocidad de procesamiento). Las
instrucciones en la memoria de programas son ejecutados con estructura segmentada
(pipeling), al mismo tiempo que una instruccin es ejecutado, se realiza la bsqueda de la
prxima instruccin. Este concepto permite habilitar instrucciones paras ser ejecutados con
cada ciclo de reloj.
Las caractersticas principales del microcontrolador (Ver el diagrama de bloques de. la
Fig.2.2) son:
Tipos de Memoria:
capturador
14
Velocidad de operacin:
0 8 Mhz (ATMEGA8L)
0-16 MHZ (ATMEGA8)
Voltaje de alimentacin:
2.7 a 5.5 voltios (ATMEGA 8L)
4.5 a 5.5 voltios (ATMEGA8)
Tipo de empaque:
PDIP de 28 pines
TQFP de 32 pines
MLF de 32 pines
Otras caractersticas:
Fuentes de interrupcin internas y externas
Oscilador interno de 1, 2, 4 y 8 Mhz.
Etc.
MHz (Se pide revisar el manual del Atmega8, pagina No. 28),
tambin el
8
15
de
2.3
Puerto B(PB7 .. PB0). Compuesto de 8 bits, a cada pin le corresponde un bit, son
bidireccionales con resistencia interna pull up para cada bit.
Alternativamente, cada pin tiene otras funciones alternativas (ver el manual de
Atmega8(L), pgina 56), por ejemplo PB6 y PB7, permiten la conexin a un cristal
externo.
Puerto C(PC0 .. PC5). Tiene 7 bits, bidireccionales con resistencias internas pull up, para
cada bit.
PC6/RESET. El bit 6, puede ser usado como entrada/salida si los fusibles han sido
programados, en caso contrario, PC6 es usado para la entrada Reset. Un bajo nivel en este
pin generar un reset.
Las otras funciones de cada pin del puerto C, son descritos en la pgina 59, del manual
Atmega8(L).
16
De los 32 registros de 8 bits 6 pueden ser usados como 3 registros de 16 bits para
direccionamiento indirecto apuntando el espacio de memoria de datos. Estos registros
adicionales son X, Y, y Z, de 16 bits.
La ALU, permite realizar las operaciones aritmticas y lgicas entre registros o entre un
registro y una constante. Luego de una operacin aritmtica, el registro de estados es
modificado para reflejar la informacin acerca del resultado de una operacin.
El flujo de un programa es variado por los saltos condicionales e incondicionales y las
instrucciones de llamada para dirigirse a la nueva direccin en el espacio de memoria. Las
instrucciones del AVR, tiene normalmente un formato de compuesto por una palabra de 16
17
2.4
El Registro de estados
El registro de estado contiene informacin acerca del resultado de la mas reciente instruccin
ejecutada. Esta operacin puede ser utilizada para alterar el flujo de un programa. El registro
de estados es sobrescrito luego de ejecutarse una operacin en la ALU.
Bit
Lectura/escritura
Valor inicial
R/W
0
R/W
0
R/W
0
R/W
0
R/W
0
18
La posicin del bit T, permite ser el destino o la fuente de un bit determinado (es como un
lugar temporal para guardar un bit). Para esto se utiliza las instrucciones BLD(bit LoaD) y
BST (Bit Store).
Ejemplo:
Bst
R5,3
Bld
R0,4
S: Sign Bit
N: Negative flag
Z: Zero flag
C: Carry flag
La bandera de acarreo (C) se hace 1 cuando existe acarreo en el bit de mayor significado de
una operacin aritmtica; de lo contrario es cero.
19
2.5
Direccin
0x00
R1
0x01
R2
0x02
...
R13
0x0D
R14
0x0E
R15
0x0F
R16
0x10
R17
0x11
...
R26
0x1A
R27
0x1B
R28
0x1C
R29
0x1D
R30
0x1E
R31
0x1F
Registros X, Y, Z
Los registros R26 y R27 forman el registro X de 16 bits, los registros R28 y R29
forman el registro Y de 16 bits, los registros R30 y R31 forman el registro apuntador
Z de 16 bits.
XH
7
XL
0
R27
R26
YH
YL
20
R29
R28
ZH
ZL
R31
R30
Puntero de Pila
2.6
15
14
13
12
11
10
SP15
SP14
SP13
SP12
SP11
SP10
SP9
SP8
SPH
SP7
SP6
SP5
SP4
SP3
SP2
SP1
SP0
SPL
El microcontrolador ATmega8
utiliza la
consiste simplemente en un esquema en el que el CPU est conectado a dos memorias por
intermedio de dos buses separados. Una de las memorias contiene solamente las instrucciones
del programa, y es llamada Memoria de Programa. La otra memoria solo almacena los datos y
es llamada Memoria de Datos. Ambos buses son totalmente independientes y pueden ser de
Curso de actualizacin de Microcontroladores Atmega8
21
distintos anchos. En cuanto a sus instrucciones es de tipo RISC (Reduced Instruccin Set
Computer), esto permite que el set de instrucciones y el bus de la memoria de programa
pueden disearse de manera tal que todas las instrucciones tengan una sola posicin de
memoria de programa de la misma longitud. Adems, como los buses son independientes, el
CPU del microcontrolador puede estar accediendo a los datos para completar la ejecucin de
una instruccin, y al mismo tiempo estar leyendo la prxima instruccin a ejecutar. En
resumen Atmega8, maneja:
22
Memoria de datos
En la memoria de datos residen los registros de propsito general (R0...R31), los
registros de E/S y los registros de la SRAM interna.
El espacio de EEPROM consta de 512 bytes, donde opcionalmente se pueden guardar
datos que no se pierden al desconectar la alimentacin.
23
24
2.8.
Los puertos son un conjunto de lneas (pines) programables como entrada salida que
dispone el microcontrolador para comunicarse con el mundo exterior.
El microcontrolador Atmega8(L), tiene 3 puertos de E/S (Puertos B, C D). Todos los pines de
cada puerto son programables como entrada o salida de datos
configurando el registro
asociado respectivo.
Cuando se programa el funcionamiento de un puerto como entrada tenemos que habilitar o
deshabilitar las resistencias pull-up internas. Cada pin del puerto tiene independiente su
resistencia pull-up como una resistencia invariante hacia la fuente de voltaje, adems tiene 2
diodos de proteccin uno conectado a Vcc y el otro conectado a GND. (ver figura 4.1)
En resumen, para cada puerto del microcontrolador (puertos B, C y D) existen tres registros de
E/S que permiten configurar cada pin del puerto como entrada o salida, enviar datos a los
pines configurados como salidas, y recibir datos de los pines configurados como entradas.
Estos registros son:
el registro PINx, .
25
Los registros PINx son de slo lectura, mientras que los registros PORTx y DDRx son de
lectura/escritura. Adicionalmente, el bit Pull-up Disable PUD, en el registro SFIOR
inhabilita la funcin Pull-up para todos los pines de todos los puertos cuando es puesto a nivel
alto. (Ver Figura 4.2)
Cada pin del puerto de E/S, est asociado a 3 registros DDxn, PORTxn, y PINxn, cuyas
direcciones en el espacio de memoria estn indicados por los Registros DDRx E/S,
PORTxE/S y PINxE/S.(ver Register Descripcin for E/S ports, pagina 63 del manual
Atmega8(L)).
El bit DDxn del Registro DDRx, establece la direccin de este pin. Si DDxn es escrito con
1 lgico, Pxn es configurado como un pin de salida. Si en DDxn es escrito un 0, Pxn es
configurado como un pin de entrada.
Si el pin PORTxn est configurado como un pin de entrada y es escrito un 1 lgico,
entonces la resistencia pull-up est activada. En cambio si en PORTxn est configurado como
un pin de salida es escrito con un 0 lgico, la resistencia pull-up est desactivada.
Si el pin PORTxn est configurado como un pin de salida y es escrito con un 1 lgico, el
pin toma un valor alto, en cambio si es escrito con 0 lgico el pin toma un valor bajo(cero).
26
PORTxn
PUD
E/S
Pull-up
Comentario
Tri-state
(en SFIOR)
0
Entrada
No
Entrada
Yes
Entrada
No
Tri-state
Salida
No
Salida baja
Salida
No
Salida alta
27
PRACTICA N 1
MANEJO DE PUERTOS ENTRADA/SALIDA
I.
OBJETIVO
Aprender a desarrollar programas con el microcontrolador Atmega8, utilizando instrucciones
bsicas.
Aprender a manejar el entorno de desarrollo VMLAB
Aprender a grabar la memoria flash del microcontrolador
II. MATERIALES
1 mdulo de entrenamiento AvrPUCP -Mega8.
1 Mdulo de entrada/salida.
1 Cable de programacin
1 computadora personal.
Entorno de desarrollo VMLAB
Cables de conexin
III. PROCEDIMIENTO
Ejemplo 1
Se desea escribir un programa que permita prender 2 leds, que estn conectados a 2 pines
de un puerto del microcontrolador
Planteamiento
28
IV.
4.1
1er Paso:
Ejecutar el entorno VMLAB, y del men principal, escoger Proyect, luego la opcin New
Proyect, y aparecen las siguientes figuras:
29
2do.paso:
Defina el proyecto con los parmetros correctos, activando las pestaas respectivas:
1. Project name and location: C:\CursoAtmega8\ejemplo1.prj
2. Luego seleccione el cdigo del microcontrolador: Atmega8
3. Elija el modo estndar de compilacin : Standart micro manufacturer assembler/linker (por
defecto ya est marcado)
4. Aada el archivo ejemplo1.asm en la caja de archivos (Code files list), haciendo clic en
el botn Add this:
5. Una vez completados todos los datos se hace clic en el botn OK, y aparecer 3 ventanas
de trabajo con lneas de texto predeterminadas (ver figura 4):
30
3er. Paso:
Definiendo el hardware del proyecto
Para construir nuestro circuito debemos usar la ayuda del men principal Help, en su contenido
muestra la lista de componentes que conforman toda la librera del hardware (abrir el enlace
Hardware component) y aparece la figura siguiente. ( Debemos abrir el componente en particular y
estudiar la sintaxis respectiva)
Ejemplos:
(a) Para definir el diodo led se debe tener que el nodo siempre est conectado a la fuente VDD.
La sintaxis es la siguiente:
D{1-8} VDD (Nombre del nodo)
Ejemplo:
D1 VDD NODO1 ; el nodo del diodo est conectado a la fuente VDD y el ctodo al nodo 1.
(b) En la lista de componentes no existe la puerta inversora, pero s existe la puerta NAND de 2 entradas
con la cual se formar el inversor. La sintaxis de la compuerta NAND es la siguiente:
Curso de actualizacin de Microcontroladores Atmega8
31
32
Para nuestro caso se agrega las siguientes lneas de texto que definen el hardware del proyecto: 2 leds
con 2 resistencias en serie conectados a los pines PB0 y PB1.
D1 VDD N1
R1 N1 PB0 330
D2 VDD N2
R2 N2 PB1 330
Luego de escribir estas lneas de texto se compila (presionar la tecla F9), apareciendo una carita feliz
en la ventana de mensajes. Si algo no est correcto debemos corregir y compilar otra vez.
Figura 6: Se muestra las lneas de texto que define el Hardware del proyecto y su compilacin.
Cuarto Paso:
EDICIN DEL PROGRAMA
Abra la ventana de trabajo ejemplo1.hex, para escribir el programa
(Antes de escribir el siguiente programa borre todas las lneas de texto que aparecen)
Algoritmo del programa:
Se configura 2 pines del puerto B como salida
Se prende 2 leds con nivel bajo.
A continuacin se muestra el programa con las directivas necesarias del VMLAB, que permitir
compilar y simular su funcionamiento
Curso de actualizacin de Microcontroladores Atmega8
33
Quinto Paso:
ENSAMBLAJE Y DEPURACIN DEL PROGRAMA
Para ensamblar el programa presione la tecla F9 puede utilizar la opcin (haciendo un clic) que se
muestra en la siguiente figura.
Build (F9)
De la barra de herramientas
34
Figura 9
Figura 10. Se observan los leds, los registros y los puertos que presenta el VMLAB
35
Paso 2:
Podemos simular el funcionamiento del proyecto de 2 maneras:
1) Ejecutando el Programa paso a paso (instruccin por instruccin).
Se utiliza las teclas F6 F7.(tambin se puede usar los botones del men (Step Over) (Step
into))
2) Ejecutando todo el programa .
Se utiliza la tecla F5 los botones del men GO/Continue
Go (F5)
De la barra de herramientas
Figura 11
36
Ejercicio 1:
Modifique su programa para prender los leds, cuando los pines de salida del
microcontrolador tienen un nivel alto 1, para esto en el archivo ejemplo1.prj, introduzca
el uso de la compuerta NAND de 2 entradas para simular un inversor y luego haga los
cambios necesarios en el programa. Use la librera del VMLAB para la sintaxis respectiva.
Figura No.13
Ejemplo No, 2:
El objetivo de este proyecto es controlar 2 leds usando un interruptor.
Condiciones:
El interruptor est conectado al pin PB7, usando una resistencia pull up (resistencia a fuente de 5 V.)
Los diodos leds estn conectados a los pines PB0 y PB7. Se prenden cuando se cierra el interruptor.
Circuito esquemtico:
Figura No.14
Programa: De acuerdo a los pasos anteriores, compruebe el funcionamiento del siguiente programa,
creando un nuevo proyecto en el entorno VMLAB:
; ******************************************************
Curso de actualizacin de Microcontroladores Atmega8
37
; *
; ******************************************************
.include "C:\VMLAB\include\m8def.inc";
.cseg
.org $0
rjmp inicio
inicio:
ldi
out
DDRB,R16
in
R16,PINB
andi
cpi
R16,0b00000000 ;
breq
SWcerrado
ldi
out
PORTB,R16
rjmp
lazo
lazo:
; Leo los pines del puerto B, pero solo interesa
PB7
SWcerrado:
ldi
out
PORTB,R16
rjmp
lazo
VDD
N1
R1
N1
PB0
330;
D2
VDD
N2
R2
N2
PB1
330
K0
PB7
VSS
R3
VDD
PB7
latched
10K
38
Ejercicio 2
Ejecute nuevamente el programa pero borre la palabra latched en el archivo *.prj
Con lo que tendremos un pulsador.
Ensamble el programa y compruebe su funcionamiento usando el control panel del VMLAB
Ejemplo No. 3:
El objetivo de este proyecto es controlar 2 diodos leds usando un pulsador. Los leds, se prenden luego
de presionar y soltar un pulsador
Considere:
Entrada:
1 pulsador conectado al pin PC5
Salida:
2 diodos leds conectados a PB0 y PB1
Circuito esquemtico:
Figura No.15
Diagrama de flujo
Dibujar el diagrama de flujo
39
;Programa
; ******************************************************
;El programa prende 2 leds, luego de presionar y soltar un pulsador
;Entrada: 1 pulsador conectado al pin PC5
;Salida: 2 leds conectados a PB0 y PB1
; ******************************************************************
.include "C:\VMLAB\include\m8def.inc";
.cseg
.org $0
rjmp inicio
inicio:
ldi
out
DDRB,R16
ldi
out
PORTB,R18
andi
cpi
R20,0 ;
breq
PulsadorNoPresionado ;
circuito)
SoltarPulsador:
in r20,PINC
;Solt el pulsador?
out
PORTB,R18
;(ver el circuito)
lazo: rjmp
lazo
40
VDD
N1
R1
N1
PB0
D2
VDD
N2
R2
N2
PB1
330
K3
VDD
PC5
R3
PC5
VSS
330;
diodo led D2 conectado a PB1 usando la Resistencia R2 de 330
41