Documente Academic
Documente Profesional
Documente Cultură
Arquitectura de Microcomputadoras
Septiembre / 2008
La familia de microcontroladores AVR
La familia de microcontroladores AVR es muy numerosa, incluye 71
dispositivos que comparten el núcleo, pero difieren en recursos.
2
Aspecto
Externo
ATMega8
Incluye 3 puertos,
todas las terminales
con una función
alterna.
PB – 8 bits
PC – 7 bits
PD – 8 bits
3
Aspecto
Externo
ATMega16
Incluye 4 puertos,
todas las terminales
con una función
alterna.
PA – 8 bits
PB – 8 bits
PC – 8 bits
PD – 8 bits
4
Interior del Microcontrolador (ATMega-8)
5
Interior del Microcontrolador (ATMega-16)
6
AVR CPU CORE
7
AVR CPU CORE
La principal función del CPU CORE es asegurar la correcta
ejecución de programas. La CPU debe poder tener acceso a las
memorias, realizar cálculos, controlar periféricos y manejar
interrupciones.
8
AVR CPU CORE
El Archivo de Registros contiene 32
registros de propósito general de 8 bits,
habilitados para un acceso rápido.
denominan X, Y y Z.
( XH )
( YL )
( YH )
( ZL )
El registro Z también puede usarse como ( ZH )
9
AVR CPU CORE
10
AVR CPU CORE
12
AVR CPU CORE
Mapa de memoria
13
Mapa de Memoria
SRAM
Externa
End Address
14
Memoria de Programa
Espacio continuo de memoria Flash cuyo tamaño varia entre
procesadores, para el ATMega 8 es de 8 Kbytes (organizados
como 4 K x 16 bits) y para el ATMega 16 es de 16Kbytes
(organizados como 8 K x 16 bits). Soporta hasta 10,000 ciclos de
escritura/borrado.
15
Memoria de Programa
( $ 1FFF , en ATMega16 )
16
Memoria de Programa
Vectores de Interrupción en el ATmega8
17
Memoria de Programa
Vectores de Interrupción en el ATmega16
18
Memoria SRAM de Datos
Es un espacio de 1120 localidades de 8 bits e incluyen:
- Un Archivo de Registros de 32 localidades.
- 64 Registros I / O.
- 1024 localidades de propósito general.
19
Archivo de Registros
20
Registros I/O
Son 64 Registros e incluyen a los Puertos de Entrada/Salida, así
como registros para la configuración, el control y el estado de
los periféricos con que cuenta el ATmega8.
Los registros I/O pueden ser tratados como memoria, con las
instrucciones LD y ST (direcciones 0x20 - 0x5F).
21
Registros I/O (Parcial)
Read/Write
Valor inicial
– S: Bit de signo
– N: Bandera de Negativo
24
Acceso al espacio de Propósito General
Carga (Load)
Almacenamiento (Store)
(almacenamiento)
(carga)
27
Bits del registro de CONTROL :
EEPROM_write:
; Asegura que no hay escritura en proceso
sbic EECR,EEWE
rjmp EEPROM_write
; Establece la dirección
out EEARH, r18
out EEARL, r17
; Coloca el dato
out EEDR,r16
; Inicia la escritura
sbi EECR,EEWE
ret
29
Función de Escritura en EEPROM :
// Recibe el dato y la dirección a escribir
// Establece la dirección
EEAR = direccion;
// Coloca el dato
EEDR = dato;
// Inicia la escritura
EECR |= ( 1 << EEWE );
}
30
Rutina de Lectura en EEPROM :
EEPROM_read:
; Asegura que no hay una escritura en proceso
sbic EECR,EEWE
rjmp EEPROM_read
; Establece la dirección
out EEARH, r18
out EEARL, r17
; Inicia la lectura
sbi EECR,EERE
; Coloca el dato
in r16, EEDR
ret
31
Función de Lectura en EEPROM :
// Inicia la lectura
EECR |= ( 1 << EERE );
// Regresa el dato
return EEDR;
}
32
Puertos de
Entrada/Salida
en el
ATMega8
Incluye 3 puertos, todas las
terminales con una función
alterna.
• PB – 8 bits
• PC – 7 bits
• PD – 8 bits
33
Puertos de
Entrada/Salida
en el
ATMega16
• PA – 8 bits
• PB – 8 bits
• PC – 8 bits
• PD – 8 bits
34
Puertos de Entrada/Salida
35
Registros para el manejo de puertos
Registros en el ATMega8
Registros en el ATMega16
36
Puertos de Entrada/Salida
37
Puertos de Entrada/Salida
Las terminales están en un tercer estado cuando una condición de reset llega a estar
activa, aún si no haya señal de reloj. Ocurre que {DDxn, PORTxn} = 0b00.
Cuando se conmuta entre un tercer estado ({DDxn, PORTxn} = 0b00) y salida alta
({DDxn, PORTxn} = 0b11), un estado intermedio con pull-up habilitada ({DDxn, PORTxn}
= 0b01) o salida en bajo ({DDxn, PORTxn} = 0b10) debe ocurrir. 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.
Conmutar entre entrada con pull-up y salida en bajo, genera el mismo problema. El
usuario debe usar el tercer estado ({DDxn, PORTxn} = 0b00) o la salida en un estado
alto ({DDxn, PORTxn} = 0b11) como paso intermedio.
38
Puertos de Entrada/Salida
( Configuraciones )
39
Ejemplo en ensamblador
...
; Define pull-ups y ajusta las salidas en alto
; Define direcciones para las terminales del puerto
ldi r16,(1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0)
ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)
out PORTB,r16
out DDRB,r17
41
Sistema de Interrupciones
42
Sistema de Interrupciones
Programa principal
Tiempo
* ** * ** * **
Nivel
Base Principal Principal Principal Principal
Tiempo * Interrupción
** Instrucción de retorno de interrupción
43
Interrupciones en los AVRs
Se tienen diferentes fuentes de Interrupción:
45
Vectores de Interrupción en el ATmega8
47
El ATMega 16 también puede ubicar un auto-cargador en su memoria de programa.
Manejo de Interrupciones
(para el ATMega 8)
; La ejecución de un programa generalmente inicia en la dirección 0
org 0x000
rjmp Principal ; Debe evitar el vector de interrupciones
org 0x001
rjmp Externa_0 ; Debe bifurcar a su ISR correspondiente
org 0x002
rjmp Externa_1 ; Debe bifurcar a su ISR correspondiente
org 0x004
jmp Externa_1 ; Debe bifurcar a su ISR correspondiente
52
Sistema de Inicialización
(Solo en ATMega-16)
53
Sistema de Inicialización
Solo en ATMega-16
Los bits 7 y 6 no son banderas de reset.
En ATMega8 están sin uso.
55
Sistema de Inicialización
58
Sistema del reloj
Se tienen diferentes fuentes para manejar al oscilador interno y a la
vez, la señales de reloj se distribuyen por los diferentes módulos:
59
Sistema del reloj
La fuente de reloj se selecciona con 4 bits de configuración internos
(no corresponden a algún registro). Se tienen las opciones:
Existen otro par de bits (SUT, Set up Time), que junto con los bits
CKSEL, ajustan un retardo inicial en la operación del oscilador, después
de un reset.
60
Ventanas de programación, usando al AVR Studio
y al AVR Dragon.
61
Ventanas de PonyProg
62
Cristal/Resonador Externo
63
Cristal/Resonador Externo
64
Cristal/Resonador de Baja Frecuencia
Para usar un cristal de 32.768 Khz, el cual proporciona la base para un
contador de tiempo real, debe usarse CKSEL = “1001”.
65
Oscilador RC Externo
La frecuencia se determina como f = 1/(3RC).
C debe ser al menos de 22 pF.
66
Oscilador RC Externo
Los tiempos de arranque bajo estas opciones son:
67
Oscilador RC Calibrado Interno
69
Distribución del reloj
70
Administración de la Potencia y modos SLEEP
Los modos SLEEP habilitan a la aplicación a apagar módulos sin usar en
el MCU y por lo tanto, ahorrar energía. El AVR tiene 5 modos SLEEP y
para entrar en alguno de ellos, el bit SE (SLEEP enable) del registro
MCUCR (MCU Control Register) debe ponerse en alto.
Nota: 1. El modo Standby está disponible solo con cristales o resonadores externos. 71
El modo Extended Standby no está disponible en el ATMega8.
Administración de la Potencia y modos SLEEP
72