Sesion 1 Atmega8
Sesion 1 Atmega8
Sesion 1 Atmega8
MICROCONTROLADORES
ATMEGA8
ZENON CUCHO M.
FRERI ORIHUELA Q.
ROLANDO SÁNCHEZ P.
LAUREANO RODRÍGUEZ P.
2007-I
SESIÓN 01
PARTE TEÓRICA
PARTE PRÁCTICA
INTRODUCCION AL MICROCONTROLADOR
1.1 Introducción
Breve Esbozo Histórico. La siguiente es una lista cronológica de los eventos tecnológicos
más recientes que han tenido impacto sobre la aparición y el desarrollo del campo de los
microcontroladores en la electrónica digital.
1971: Intel fabrica el primer microprocesador (el 4004) de tecnología PMOS. Este era un
microprocesador de 4 bits y fue fabricado por Intel a petición de Datapoint Corporation
con el objeto de sustituir la CPU de terminales inteligentes fabricadas en esa fecha por
Datapoint mediante circuitería discreta. El dispositivo fabricado por Intel resultó 10
veces más lento de lo requerido y Datapoint no lo compró, de esta manera Intel
comenzó a comercializarlo. El 4004 podía direccionar sólo 4096 (4k) posiciones de
memoria de 4 bits, reconocía 45 instrucciones y podía ejecutar una instrucción en 20
µseg en promedio.
1972: Las aplicaciones del 4004 estaban muy limitadas por su reducida capacidad y
rápidamente Intel desarrolló una versión más poderosa (el 8008), el cual podía
1973: Intel lanza al mercado el 8080 el primer microprocesador de tecnología 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, además se incrementó la
capacidad de direccionamiento de memoria a 64 kbytes. A partir del 8080 de Intel se
produjo una revolución en el diseño de microomputadoras y varias compañías
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 más poderosos.
En ese mismo año, 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 doméstico y un
caos en la proliferación de lenguajes, sistemas operativos y programas (ningún
producto era compatible con el de otro fabricante).
1976: Surgen las primeras microcomputadoras de un solo chip, que más tarde se denominarán
microcontroladores. Dos de los primeros microcontroladores, son el 8048 de Intel y
el 6805R2 de Motorola.
198x : En la década de los 80's comienza la ruptura entre la evolución tecnológica de los
microprocesadores y la de los microcontroladores, Ya que los primeros han ido
incorporando cada vez más y mejores capacidades para las aplicaciones en donde se
requiere el manejo de grandes volúmenes de información y por otro lado, los segundos
han incorporado más capacidades que les permiten la interacción con el mundo físico
en tiempo real, además de mejores desempeños en ambientes de tipo industrial.
Memoria
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.
Se puede observar claramente que las principales ventajas de esta arquitectura son:
a) que el tamaño de las instrucciones no esta relacionado con el de los datos, y por lo tanto
puede ser optimizado para que cualquier instrucción ocupe una sola posición de memoria de
programa, logrando así mayor velocidad y 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 operación.
Por otro lado, habrá que tener en cuenta la precisión 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 más barata y quizá suficiente es usar librerías para manejar los datos de
alta precisión.
• Entrada/Salida: Se debe identificar la cantidad y tipo de señales a controlar. Una vez
realizado este análisis puede ser necesario añadir periféricos externos o cambiar a otro
microcontrolador más adecuado a ese sistema.
• Consumo: algunos productos que incorporan microcontroladores están alimentados
con baterías, puede ser que el microcontrolador esté trabajando en estado de bajo
consumo pero debe “despertar” ante la activación de una señal (por ejemplo una
interrupción) y ejecutar el programa adecuadamente.
• Memoria: para detectar las necesidades de memoria de una aplicación debemos saber
la cantidad y el tipo de memoria necesaria para esto se debe tener una versión
preliminar (pseudo-código) de la aplicación y escoger el microcontrolador apropiado.
• Ancho de palabra: el criterio de diseño debe ser seleccionar el microcontrolador de
menor ancho de palabra que satisfaga los requerimientos de la aplicación. Usar un
microcontrolador de 4 bits supondrá reducir los costos, mientras que uno de 8 bits
puede ser el más 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).
• Diseño de la placa: la selección de un microcontrolador concreto condicionará el
diseño de la placa de circuitos impresos.
2.1 Introducción
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 alimentación está en el rango de 1.8 a
5.5 voltios. Se presenta en la figura 2.1 sus características principales
La tecnología RISC (Reduced Instruction Set Computing), o sea presentan instrucciones con
complejidad reducida, a diferencia de otros que tienen tecnología CISC (Complex Instrucción
Set Computing), permite una rápida ejecución de las instrucciones que se ejecutan en un solo
ciclo de reloj, el ATMEGA 8L consigue obtener 1 MIPS por Mhz, permitiendo al diseñador
del sistema optimizar su consumo de energía versus la velocidad de procesamiento). Las
instrucciones en la memoria de programas son ejecutados con estructura segmentada
(pipeling), al mismo tiempo que una instrucción es ejecutado, se realiza la búsqueda de la
próxima instrucción. Este concepto permite de habilitar instrucciones paras ser ejecutados con
cada ciclo de reloj.
Las características principales del microcontrolador (Ver el diagrama de bloques de. la
Fig.2.2) son:
• Tiene 32 registros de 8 bits de propósito general. Todos estos registros están
conectados a la unidad aritmética lógica (ALU) para un rápido acceso, una
instrucción es ejecutada con uno solo ciclo de reloj.
• Tipos de Memoria:
SRAM de 1 Kbytes
• Característica de los periféricos internos:
• 2 temporizador/contador de 8 bits con pre-escalador y comparador
• 1 temporizador/contador de 16 bits con pre-escalador, comparador y
capturador
• 8 canales de entrada para cada convertidor A/D (en TQFP y MLF)
6 canales A/D de 10 bits y 2 canales A/D de 8 bits
• 6 canales de entrada para cada convertidor A/D (tipo PDIP)
4 canales A/D de 10 bits
2 canales A/D de 8 bits.
• 1 USART (módulo programable para comunicación serial)
• 1 módulo SPI, para interface serial (master/slave)
• 1 perro guardián
• 1 comparador analógico
• Puertos programables de entrada/salida
• Puerto B, con 8 líneas
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 aritméticas y lógicas entre registros o entre un
registro y una constante. Luego de una operación aritmética, el registro de estados es
modificado para reflejar la información acerca del resultado de una operación.
El flujo de un programa es variado por los saltos condicionales e incondicionales y las
instrucciones de llamada para dirigirse a la nueva dirección en el espacio de memoria. Las
instrucciones del AVR, tiene normalmente un formato de compuesto por una palabra de 16
El registro de estado contiene información acerca del resultado de la mas reciente instrucción
ejecutada. Esta operación puede ser utilizada para alterar el flujo de un programa. El registro
de estados es sobrescrito luego de ejecutarse una operación en la ALU.
Bit 7 6 5 4 3 2 1 0
I T H S V N Z C
Lectura/escritura R/W R/W R/W R/W R/W R/W R/W R/W
Valor inicial 0 0 0 0 0 0 0 0
• 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 XL
7 0 7 0
R27 R26
YH YL
7 0 7 0
R29 R28
ZH ZL
7 0 7 0
R31 R30
Fig.2.6 Los Registros X, Y, Z
Puntero de Pila
Bit 15 14 13 12 11 10 9 8
SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SPH
SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 SPL
7 6 5 4 3 2 1 0
distintos anchos. En cuanto a sus instrucciones es de tipo RISC (Reduced Instrucción Set
Computer), esto permite que el set de instrucciones y el bus de la memoria de programa
pueden diseñarse de manera tal que todas las instrucciones tengan una sola posición de
memoria de programa de la misma longitud. Además, como los buses son independientes, el
CPU del microcontrolador puede estar accediendo a los datos para completar la ejecución de
una instrucción, y al mismo tiempo estar leyendo la próxima instrucción a ejecutar. En
resumen Atmega8, maneja:
Memoria de datos
Los puertos son un conjunto de líneas (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, además tiene 2
diodos de protección 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 de Direcciones de Datos DDRx,
• el Registro de Datos – PORTx, y
• el registro – PINx, .
En el párrafo anterior, “x” puede ser B, C ó D. Es decir, si nos referimos al puerto B, los
registros son DDRB, PORTB y PINB.
Los registros PINx son de sólo 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 función 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 están indicados por los Registros DDRx E/S,
PORTxE/S y PINxE/S.(ver Register Descripción for E/S ports, pagina 63 del manual
Atmega8(L)).
El bit DDxn del Registro DDRx, establece la dirección de este pin. Si DDxn es escrito con
“1” lógico, 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” lógico,
entonces la resistencia pull-up está activada. En cambio si en PORTxn está configurado como
un pin de salida ó es escrito con un “0” lógico, la resistencia pull-up está desactivada.
Si el pin PORTxn está configurado como un pin de salida y es escrito con un “1” lógico, el
pin toma un valor alto, en cambio si es escrito con “0” lógico el pin toma un valor bajo(cero).
PRACTICA N° 1
I. OBJETIVO
Aprender a desarrollar programas con el microcontrolador Atmega8, utilizando instrucciones
básicas.
Aprender a manejar el entorno de desarrollo VMLAB
Aprender a grabar la memoria flash del microcontrolador
II. MATERIALES
• 1 módulo de entrenamiento “AvrPUCP -Mega8”.
• 1 Módulo de entrada/salida.
• 1 Cable de programación
• 1 computadora personal.
• Entorno de desarrollo VMLAB
• Cables de conexión
III. PROCEDIMIENTO
Ejemplo 1
Se desea escribir un programa que permita prender 2 leds, que están conectados a 2 pines
de un puerto del microcontrolador
Planteamiento
Procedimiento:
1er Paso:
Ejecutar el entorno VMLAB, y del menú principal, escoger Proyect, luego la opción New
Proyect, y aparecen las siguientes figuras:
2do.paso:
Defina el proyecto con los parámetros correctos, activando las pestañas respectivas:
5. Una vez completados todos los datos se hace clic en el botón OK, y aparecerá 3 ventanas
de trabajo con líneas de texto predeterminadas (ver figura 4):
3er. Paso:
Para construir nuestro circuito debemos usar la ayuda del menú principal Help, en su contenido
muestra la lista de componentes que conforman toda la librería 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:
Ejemplo:
D1 VDD NODO1 ; el ánodo del diodo está conectado a la fuente VDD y el cátodo 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:
Ejemplo:
X1 ND2 <nodo2><nodo3><nodo4>
Ejemplo para definir una resistencia de 180 ohmios entre 2 nodos N1 y N2:
R1 N1 N2 180.
Para nuestro caso se agrega las siguientes líneas de texto que definen el hardware del proyecto: 2 leds
con 2 resistencias en serie conectados a los pines PB0 y PB1.
D2 VDD N2
R2 N2 PB1 330 ; Diodo led2 conectado a PB1 usando la resistencia R2
Luego de escribir estas líneas 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 líneas de texto que define el Hardware del proyecto y su compilación.
Cuarto Paso:
Quinto Paso:
Para ensamblar el programa presione la tecla F9 ó puede utilizar la opción (haciendo un clic) que se
muestra en la siguiente figura.
Build (F9)
De la barra de herramientas
Figura 9
Paso 1:
Para observar nuestros resultados activaremos las siguientes opciones de la barra de herramientas
View:
Panel de control: Permite observar los leds, interruptores/pulsadores, potenciómetro
I/O ports : Para observar las modificaciones de los puertos B, C y D y sus registros asociados.
Register/flags: Para ver los registros de propósito general (R0 a R31) y de control, Flags, PC
Figura 10. Se observan los leds, los registros y los puertos que presenta el VMLAB
Paso 2:
Podemos simular el funcionamiento del proyecto de 2 maneras:
1) Ejecutando el Programa paso a paso (instrucción por instrucción).
Se utiliza las teclas F6 ó F7.(también 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
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 librería del VMLAB para la sintaxis respectiva.
Figura No.13
Ejemplo No, 2:
Circuito esquemático:
Figura No.14
Programa: De acuerdo a los pasos anteriores, compruebe el funcionamiento del siguiente programa,
creando un nuevo proyecto en el entorno VMLAB:
; ******************************************************
.include "C:\VMLAB\include\m8def.inc";
.cseg
.org $0
rjmp inicio
inicio:
ldi R16,0b00000011 ; Configuro PB0 y PB1 como salida y PB7 como entrada
out DDRB,R16 ;utilizando el registro DDRB
lazo:
in R16,PINB ; Leo los pines del puerto B, pero solo interesa PB7
andi R16,0b10000000 ; ==> Filtro solo el pin PB7.
cpi R16,0b00000000 ; analizo si el interruptor está cerrado ¿PB7=0?
breq SWcerrado ; Si el interruptor esta cerrado, prendo los leds
ldi R16,0b11111111 ; Si el interruptor esta abierto los leds están
;apagados
out PORTB,R16
rjmp lazo ; retorno para una nueva lectura
SWcerrado:
ldi R16,0b11111100 ;Se escribe "0" lógico para prender los leds
out PORTB,R16
rjmp lazo
Ejercicio 2
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 esquemático:
Figura No.15
Diagrama de flujo
;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 R16,0b00000011 ; Configuro PB0 y PB1 como salida
out DDRB,R16 ;utilizando el registro DDRB
ldi R18,0b11111111 ;inicialmente los leds están apagados
out PORTB,R18
PulsadorNoPresionado:
in R20,PINC ;lectura del pulsador, para analizar si está presionado
andi R20,0b00100000 ; ==> Filtro solo el pin PC5.
cpi R20,0 ; analizo el pin 5 (PC5) ¿El Pulsador está presionado?
breq PulsadorNoPresionado ;
;El pulsador está presionado, cuando PC5= 5 voltios (Ver el circuito)
SoltarPulsador:
in r20,PINC ;lectura del pulsador, para ver si soltó el pulsador
andi R20,0b00100000 ; se filtra solo el pin PC5
cpi R20,0 ;¿Soltó el pulsador?
brne SoltarPulsador ; todavía el pulsador sigue presionado
;Se soltó el pulsador