Microcontroladores
Marzo / 2017
MICROCONTROLADORES AVR DE
ATMEL
Su Arquitectura es Cerrada.
2
MICROCONTROLADORES AVR DE ATMEL
Tamao
XMEGA
megaAVR
tinyAVR
ncleo
AVR
Caractersticas
Incluye 3 puertos,
todas las terminales
con ms de una
funcin alterna.
PB 8 bits
PC 7 bits
PD 8 bits
5
AVR CPU CORE
6
INTERIOR DEL MICROCONTROLADOR (ATMEGA328)
7
AVR CPU CORE
T1 T2
CLK CPU
Captura de operandos
Operacin de la ALU
Escritura de resultado
11
ARCHIVO DE REGISTROS
El Archivo de Registros contiene 32 7 0 Dir.
registros de propsito general de 8 bits, R0 0x00
habilitados para un acceso rpido. R1 0x01
R2 0x02
Seis de los 32 registros pueden ser ...
usados como apuntadores de 16 bits R13 0x0D
para direccionamiento indirecto en el R14 0x0E
R15 0x0F
espacio de datos, habilitando clculos de R16 0x10
direcciones eficientes. Para ello, estos R17 0x11
registros se denominan X, Y y Z. ...
R26 (XL) 0x1A
El registro Z tambin puede usarse X {
R27 (XH) 0x1B
como apuntador a la memoria de R28 (YL) 0x1C
Y {
programa. R29 (YH) 0x1D
R30 (ZL) 0x1E
Arquitectura Optimizada para ejecutar Z {
R31 (ZH) 0x1F
cdigo C compilado.
12
AVR CPU CORE
Mapa de memoria
13
Memoria de Programa
SRAM EEPROM 17
Memoria SRAM de Datos
18
Los 32 registros de acceso rpido y los registros I/O tienen
direcciones para ser tratados como SRAM de propsito general.
Archivo de Registros
El repertorio de instrucciones AVR est optimizado para
el archivo de Registros. 7 0 Dir.
R0 0x00
Las instrucciones que operan sobre el R1 0x01
Archivo de Registros tienen acceso a R2 0x02
todos ellos. Las que operan un registro ...
con una constante slo trabajan con los R13 0x0D
R14 0x0E
registros de R17 a R31. R15 0x0F
Cada registro tienen una direccin que R16 0x10
le permite ser tratado como cualquier R17 0x11
...
otra localidad de RAM (0x000 0x01F), R26 (XL) 0x1A
utilizando instrucciones de Carga (LD) X {
R27 (XH) 0x1B
y almacenamiento (ST). Y {
R28 (YL) 0x1C
R29 (YH) 0x1D
De R26 a R31 pueden usarse como R30 (ZL) 0x1E
apuntadores para direccionamiento Z {
R31 (ZH) 0x1F
indirecto.
19
Registros I/O
El ATMega328 cuenta con un espacio para alojar hasta 64
Registros I/O de 8 bits (aunque no todas las direcciones estn
ocupadas).
Los Registros I/O se emplean para la configuracin y el control
de recursos internos, as como para conocer su estado. En este
espacio estn los registros para el manejo de los Puertos de
Entrada/Salida.
El acceso a los Registros I/O se realiza con las instrucciones
IN y OUT, intercambiando datos con el Archivo de Registros.
Con estas instrucciones deben usarse las direcciones 0x00 -
0x3F.
Los Registros I/O pueden ser tratados como memoria, con
instrucciones de carga (LD) y almacenamiento (ST)
(direcciones 0x20 - 0x5F), aunque es menos eficiente.
Los Registros I/O en el rango 0x00 - 0x1F son accesibles por
bit. Para modificarse, con instrucciones SBI y CBI o para
evaluarse, a travs de las instrucciones SBIS y SBIC. 20
Registros I/O Extendidos
El espacio para los Registros I/O Extendidos es de 160
localidades; aunque la mayora estn libres, el espacio est
disponible para compatibilidad con otras versiones de la
familia AVR.
Read/Write
Valor inicial
N: Bandera de Negativo
CLK CPU
Registro IR Captura
ciclos de reloj.
MEMORIA EEPROM PARA DATOS
(dir.) 7 6 5 4 3 2 1 0
0x21 EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 EERL
26
EEDR - Para el dato (0x1D)
(dir.) 7 6 5 4 3 2 1 0
0x20 Registro de datos de la EEPROM EEDR
(dir.) 7 6 5 4 3 2 1 0
0x1F - - EEPM1 EEPM0 EERIE EEMPE EEPE EERE EECR
EEPROM_write:
; Asegura que no hay escritura en proceso
sbic EECR,EEPE
rjmp EEPROM_write
; Establece la direccin
out EEARH, r18
out EEARL, r17
; Coloca el dato
out EEDR,r16
; Inicia la escritura
sbi EECR,EEPE
29
ret
Funcin de Escritura en EEPROM :
// Recibe el dato y la direccin a escribir
// Establece la direccin
EEAR = direccion;
// Coloca el dato
EEDR = dato;
// Inicia la escritura
EECR |= ( 1 << EEPE );
} 30
Rutina de Lectura en EEPROM :
EEPROM_read:
; Asegura que no hay una escritura en proceso
sbic EECR,EEPE
rjmp EEPROM_read
; Establece la direccin
out EEARH, r18
out EEARL, r17
; Inicia la lectura
sbi EECR,EERE
; Coloca el dato
in r16, EEDR
ret 31
Funcin de Lectura en EEPROM :
// Inicia la lectura
EECR |= ( 1 << EERE );
// Regresa el dato
return EEDR;
}
32
PUERTOS DE ENTRADA/SALIDA
7 6 5 4 3 2 1 0
0x0B PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB
0x0A DDRB7 DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB0 DDRB
0x09 PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB
0x08 - PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 PORTC
0x07 - DDRC6 DDRC5 DDRC4 DDRC3 DDRC2 DDRC1 DDRC0 DDRC
0x06 - PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0 PINC
0x05 PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 PORTD
0x04 DDRD7 DDRD6 DDRD5 DDRD4 DDRD3 DDRD2 DDRD1 DDRD0 DDRD
0x03 PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 PIND
35
Puertos de Entrada/Salida
INTERIOR DEL
MICROCONTROLADOR
PUD
DDRxn
Q D
Q
CLR
WDDRx
RESET
RDDRx
BUS DE DATOS
PORTxn
Pxn Q D
Terminal n del Q
CLR
Puerto x WPORTx
RESET
SLEEP
RPORTx
SINCRONIZACIN
El bit PUD (Pull-Up PINxn
RPINx
disable) est en el D Q D Q
PUD
DDRxn PORTxn E/S Pull-Up Comentario
(en SFIOR)
0 0 X Entrada No Sin resistor de Pull-Up
0 1 0 Entrada Si Con resistor de Pull-Up
0 1 1 Entrada No Sin resistor de Pull-Up
1 0 X Salida No Salida en bajo
1 1 X Salida No Salida en alto
37
EJEMPLOS:
38
Sistema de Interrupciones
Programa Principal
tiempo (a)
Nivel de * Interrupcin
Interrupciones ISR ISR ** Retorno de Interrupcin
* ** * **
tiempo (b)
40
Interrupciones en los AVRs
Se tienen diferentes fuentes de Interrupcin:
47
Manejo de Interrupciones
48
Manejo de Interrupciones
49
Sistema de Inicializacin
Se tienen las siguientes fuentes de Inicializacin (Reset):
51
Sistema de Inicializacin
7 6 5 4 3 2 1 0
- - - - WDRF BORF EXTRF PORF MCUSR
52
Reset de Encendido (Power on Reset)
Vcc VPOT
RESET VRST
RESET
INTERNO
53
Reset Externo
Vcc VPOT
RESET
INTERNO
(a) (b)
54
Inicializacin por Brown-out
Se refiere a una inicializacin cuando el voltaje de alimentacin
(Vcc) cae por debajo de un umbral pre-establecido (VBOT)
VBOT- VBOT+
Vcc
RESET
INTERNO
1 ciclo de reloj
Desbordamiento
del Watchdog Timer
RESET
INTERNO
56
Sistema del reloj
Se tienen diferentes fuentes para generar la seal de reloj en el MCU y a
la vez, la seales de reloj se distribuyen por los diferentes mdulos.
57
Seales de reloj en un AVR
59
Sistema del reloj
La fuente de reloj se selecciona con los bits de configuracin CKSEL,
estos no corresponden a algn registro. Se tienen las opciones:
Existen otro par de bits (SUT, Set up Time) para definir el retardo inicial en la
operacin del oscilador, despus de un reset. Trabajan en combinacin con los
60
bits CKSEL.
1. Cristal de Baja Potencia
C2
XTAL2
C1
XTAL1
GND
61
Cristal de Baja Potencia
C2
XTAL2
C1
XTAL1
GND
63
Cristal de Rango Completo
65
4. Oscilador RC Interno de 128 KHz
66
5. Oscilador RC Calibrado Interno
El oscilador RC interno es de 8 MHz, calibrado de fbrica a 3 V y 25 C.
La frecuencia puede variar entre 7.3 y 8.1 MHz, para intervalos de voltaje entre
1.8 y 5.5 V y de temperatura entre -40 a 85 C.
El MCU tiene al fusible CKDIV8, por medio del cual se habilita una divisin entre
8 para que opere a una frecuencia de 1 Mhz, este fusible est programado por
default.
11 Reservado
6. Reloj Externo
PB7 XTAL2
GND
00 14 ck
01 14 ck + 4.1 ms
10 14 ck + 65 ms
11 Reservado
68
Despus de algn modo de bajo consumo,
el retraso es de 6 ciclos de reloj.
Administracin de la Potencia y modos SLEEP
Notas: Para el modo de espera (Standby) se recomienda usar cristales o resonadores externos.
70
Administracin de la Potencia y modos SLEEP
71
Administracin de la Potencia y modos SLEEP
72
Administracin de la Potencia y
modos SLEEP
Reloj Activo Osciladores Eventos que despiertan al MCU
EEPROM, Memoria
de programa lista
cambio en pines
Temporizador 2
Interfaz de dos
Reloj Principal
temporizador
Oscilador del
INT0, INT1 y
hilos (TWI)
Modo de Bajo Consumo
Otros I/O
clkFLASH
clkADC
clkCPU
clkASY
WDT
clkIO
ADC
de Energa
73