Está en la página 1de 25

Microcontroladores de Atmel

Familia AVR

Ing. Marone Jos

Introduccin: Historia
Los AVR son una familia de microcontroladores
RISC de Atmel.
La arquitectura de los AVR fue concebida por
dos estudiantes en el Norwegian Institute of
Technology, y posteriormente refinada y
desarrollada en Atmel Norway, la empresa
subsidiaria de Atmel, fundada por los dos
arquitectos del chip.
El acronimo AVR fue reportado como Advanced
Virtual RISC, pero hay rumores de que se
debe a sus diseadores: Alf and Vegard
[RISC]. Aunque Atmel dice que no se refiere a
nada particular
Mas info sobre la arquitectura

http://doru.info/projects/hdl/pavr/index.html

Introduccin:
El AVR fue diseado desde un comienzo para la ejecucin
eficiente de cdigo C compilado. Por lo tanto, algunas
instrucciones tales como 'suma inmediata' ('add immediate'
en ingls) faltan, ya que la instruccin 'resta inmediata'
('substract immediate' en ingls) con el complemento dos
puede ser usada como alternativa.
El set de instrucciones de los AVR es ms regular que el de la
mayora de los microcontroladores de 8-bit (por ejemplo, los
PIC). Sin embargo, no es completamente ortogonal:
Los registros punteros X, Y y Z tienen capacidades de
direccionamiento diferentes entre s.
Los registros 0 al 15 tienen diferentes capacidades de
direccionamiento que los registros 16 al 31.
Las registros de I/O 0 al 31 tienen distintas caractersticas que las
posiciones 32 al 63.
La instruccin CLR afecta los 'flag', mientras que la instruccin
SER no lo hace, a pesar de que parecen ser instrucciones
complementarias (dejar todos los bits en 1, y dejar todos los bits
en 0 respectivamente).

Familia AVR
La familia de microcontroladores AVR es muy numerosa,
incluye 71 dispositivos que comparten el ncleo, pero
difieren en recursos.
Por ejemplo el atemega8:

Arquitectura - Encapsulados

CPU (Core)
Para maximizar el rendimiento y paralelismo, el AVR usa
una arquitectura Harvard con memorias y buses
separados para instrucciones y datos.
Las instrucciones en la memoria de Programa son
ejecutadas con una segmentacin de dos etapas.
Mientras una instruccin est siendo ejecutada, la
siguiente es pre-capturada de la memoria de programa
(fetching).
El Archivo de Registros contiene 32 registros de propsito
general de 8 bits, habilitados para un acceso rpido.
El AVR fue diseado desde un comienzo para la ejecucin
eficiente de cdigo C compilado. Por lo tanto, algunas
instrucciones tales como 'suma inmediata' ('add
immediate' en ingls) faltan, ya que la instruccin 'resta
inmediata' ('substract immediate' en ingls) con el
complemento dos puede ser usada como alternativa.

Arquitectura de la CPU

CPU (Core)
Seis de los 32 registros pueden ser usados como
apuntadores de 16 bits para direccionamiento
indirecto en el espacio de datos, habilitando
clculos de direcciones eficientes. Uno de estos
apuntadores tambin puede usarse como apuntador
para tablas de bsqueda (look up tables) en la
memoria de programa. Para ello, estos registros se
denominan X, Y y Z.
Despus de una operacin aritmtica, el registro de
Estado (Status Register) es actualizado, para
reflejar informacin acerca de la operacin.
La mayora de instrucciones AVR tienen un formato
en una palabra de 16-bits.
En un ciclo de reloj se pueden leer 2 registros que
funcionen como operandos para la ALU, que se
realice la operacin y el resultado quede disponible
para escribirse en uno de esos registros.

CPU (Core)
Para la ejecucin, la duracin del ciclo es suficiente
para permitir la lectura de registros, la operacin de
la ALU y la escritura en el registro destino.

Mapa de Memoria

Desde 1
a 256K

Toda la
memoria de
datos se puede
direccionar
directamente

Mapa de Memoria

Memoria de programa
Espacio continuo de memoria
Flash cuyo tamao varia entre
procesadores, para el ATMega
8 es de 8 Kbytes, organizados
como 4K x 16 bits. Soporta
hasta 10,000 ciclos de
escritura/borrado.
La memoria se puede
particionar en una seccin
para aplicacin y una seccin
de arranque, donde podra
manejarse un cargador para
auto programacin
(Boot Loader Support Read-WhileWrite Self-programming).

Memoria de Programa: (IRQs)


En el espacio de almacenamiento se incluyen a los
Vectores de Interrupciones, iniciando en la
direccin $000.
El nmero de vectores, en la familia AVR, varia de
procesador a procesador, en funcin de los
recursos existentes. Un programa debera iniciar
en una ubicacin, mas all de estos vectores.
(rjmp Reset)

Memoria de dato
Es un espacio de 1120 localidades de 8 bits e incluyen:
- Un conjunto de 32 localidades (Registros).
- 64 Registros I / O (Puertos, configuracin de recursos, etc).
- 1024 localidades de propsito general. (RAM)

Optimizado
para el
repertorio de
instrucciones
AVR.

Son
accedidos
mediante las
instrucciones
IN y
OUT

Memoria de dato (Registros I/O)


La arquitectura asegura el estado de los registros luego
de un reset.
- Mas info en el datasheet
OJO!!! Una rutina de
atencin a
interrupciones debe
terminar con la
instruccin RETI, la cual
recupera el valor de la
pila para el PC .

Memoria de dato (EEPROM)


La memoria EEPROM est en un espacio independiente
y se requiere del uso de 3 registros I/O para su
acceso:

Inicializacin
El ATmega8 tiene cuatro fuentes de Inicializacin
(Reset)
Power-on Reset. El MCU es inicializado cuando el voltaje de la
fuente est por abajo del voltaje de umbral de encendido (VPOT).
Reset Externo. El MCU es inicializado cuando un nivel bajo est
presente en la terminal RESET por un tiempo mayor que la
longitud mnima del pulso.
Watchdog Reset. El MCU es inicializado cuando el Watchdog
Timer est habilitado y su periodo termina.
Brown-out Reset. El MCU es inicializado cuando el detector de
reduccin de voltaje est habilitado y el voltaje VCC de la fuente
va por debajo del umbral establecido (VBOT).

Una vez que el MCU se recupera de una condicin de


Reset, espera un tiempo de establecimiento (Tout
con un valor tpico de 4 ms), antes de recuperar al
sistema, para garantizar que los registros tienen su
valor inicial.

Pila de programa
La pila es implementada en el espacio de propsito general
(RAM).
Es usada para almacenamiento temporal de variables
(instrucciones PUSH y POP) o durante la llamada de
subrutinas o el manejo de interrupciones.
El registro SP es el apuntador al tope de la pila. Realmente el
SP se compone de 2 registros, para la parte alta (SPH) y para
la parte baja (SPL), esto para direccionar al espacio completo
de memoria.
La pila tiene un crecimiento hacia abajo, es decir, de las
direcciones altas de memoria a las direcciones bajas.
Despus de un reset, el apuntador de Pila tiene el valor de
0x0000, por lo que debe ser inicializado dentro del programa
(con 0x0460 para ATMega8), para que realice un
almacenamiento dentro de un espacio vlido.

Registro de Estado

Puertos de Entrada/Salida
Para cada puerto se manejan tres registros,
dentro del espacio de registros I/O:
Un registro de lectura/escritura sobre un lacth,
conectado a la terminal del puerto (PORTx).
Un registro de lectura/escritura que define la
direccin del puerto (DDRx). Las direcciones pueden
configurarse de manera independiente, para cada
terminal.

1 Salida
0 Entrada
Un registro solo de lectura, para hacer
lecturas directas en las terminales de los
puertos (PINx).
Mucho
Cuidado con
el seor PINx
in RD,PINA

Puertos de Entrada/Salida
Si en PORTx.n se escribe un 1 lgico cuando la terminal es
configurada como entrada, el resistor de pull-up es activado. Para
anular al resistor de pull-up, se debe escribir un 0 en PORTx.n o la
terminal se debe configurar como salida (suponiendo que el bit PUD
tiene 0).
Las terminales estn en un treestate cuando una condicin de reset
llega a estar activa, an si no haya seal de reloj.
Si en PORTxn se escribe un uno lgico cuando la terminal se configura
como salida, en PINx.n se tendr un nivel alto. Si se escribe un cero,
se tendr un nivel bajo.
Normalmente, el estado con el pull-up habilitado es aceptable, en un
ambiente de alta impedancia no se notar la diferencia entre un nivel
alto y el pull-up. Si este no es el caso, con el bit PUD del registro
SFIOR se pueden deshabilitar los pull-ups en todos los puertos.
Ver manual para conmutar entre estados treestate y salida en alto.

CLOCK
Se tienen diferentes fuentes para manejar al oscilador interno
y a la vez, la seales de reloj se distribuyen por los diferentes
mdulos:

Consumo/Modos Sleep
Los modos SLEEP habilitan a la aplicacin a apagar
mdulos sin usar en el MCU y por lo tanto, ahorrar
energa.
El AVR tiene 5 o 6 modos SLEEP y para entrar en
alguno de ellos, el bit SE (SLEEP enable) del registro
MCUCR (MCU Control Register) debe ponerse en alto.

Los bits SM2, SM1 y SM0 de MCUCR determinan el modo:

Consumo/Modos Sleep

Referencias y a la Prctica.
Sitio oficial de Atmel:
Pgina de AVR en Atmel

Portales, foros:
AVRFreaks
Guia AVR
Mi recomendado AVRBeginners
Preguntarle a pepe que tiene bocha.

Desarrollo:
Referencias de Wikipedia

También podría gustarte