Microcontroladores
MICROCONTROLADORES AVR DE
ATMEL
Su Arquitectura es Cerrada.
Tamao
XMEGA
megaAVR
tinyAVR
ncleo
AVR
Caractersticas
32
TWI
Si
EEPROM (bytes)
1K
ISP
Si
SRAM de proposito
general (bytes)
2048
ADC de 10 bits
(canales)
8 (6 en encapsulado
PDIP)
23
Comparador Analgico
Si
F.max (MHz)
20
Watchdog Timer
Si
Vcc (V)
2.7-5.5
Oscilador Interno
Si
16-bit Timers
Si
8-bit Timer
Interrupciones
26
PWM (canales)
Int. Externas
RTC
Si
USART
Autoprogramacin
Si
SPI (Maestro/Esclavo)
Debug wire
Si
4
ASPECTO
EXTERNO
ATMEGA328
Incluye 3 puertos,
todas las terminales
con ms de una
funcin alterna.
PB 8 bits
PC 7 bits
PD 8 bits
EJECUCIN DE INSTRUCCIONES
EJECUCIN DE INSTRUCCIONES
10
EJECUCIN DE INSTRUCCIONES
Para la ejecucin de instrucciones aritmticas y lgicas, la
duracin del ciclo es suficiente para permitir la lectura de
registros, la operacin de la ALU y la escritura en el registro
destino.
T1
T2
CLK CPU
11
ARCHIVO DE REGISTROS
X {
Y {
Z {
0
R0
R1
R2
...
R13
R14
R15
R16
R17
...
R26 (XL)
R27 (XH)
R28 (YL)
R29 (YH)
R30 (ZL)
R31 (ZH)
Dir.
0x00
0x01
0x02
0x0D
0x0E
0x0F
0x10
0x11
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
12
Memoria de Programa
Dir.
Fuente
Descripcin
0x0000
RESET
0x0002
INT0
Interrupcin Externa 0
0x0004
INT1
Interrupcin Externa 1
0x0006
PCINT0
0x0008
PCINT1
0x000A
PCINT2
0x000C
WDT
0x000E
TIMER2_COMPA
0x0010
TIMER2_COMPB
10
0x0012
TIMER2_OVF
11
0x0014
TIMER1_CAPT
12
0x0016
TIMER1_COMPA
13
0x0018
TIMER1_COMPB
14
0x001A
TIMER1_OVF
15
Vect. Dir.
Fuente
Descripcin
15
0x001C
TIMER0_COMPA
16
0x001E
TIMER0_COMPB
17
0x0020
TIMER0_OVF
18
0x0022
SPI_STC
19
0x0024
USART_RX
20
0x0026
USART_UDRE
21
0x0028
USART_TX
22
0x002A
ADC
23
0x002C
EE_READY
24
0x002E
ANALOG_COMP
25
0x0030
TWI
26
0x0032
SPM_READY
16
Memoria de Datos
SRAM
EEPROM
17
18
Archivo de Registros
X {
Y {
Z {
R0
R1
R2
...
R13
R14
R15
R16
R17
...
R26 (XL)
R27 (XH)
R28 (YL)
R29 (YH)
R30 (ZL)
R31 (ZH)
Dir.
0x00
0x01
0x02
0x0D
0x0E
0x0F
0x10
0x11
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
19
Registros I/O
20
22
C: Bandera de Acarreo
22
24
T2
T3
CLK CPU
Registro IR
Captura
Direccin
Calcula direccin
Direccin vlida
Dato a escribir
Datos
Almacenamiento
(Escritura en SRAM)
WR
Dato ledo
Datos
RD
Carga
(Lectura en SRAM)
25
(dir.)
0x22
EEAR9
EEAR8
EERH
0x21
EEAR7
EEAR6
EEAR5
EEAR4
EEAR3
EEAR2
EEAR1
EEAR0
EERL
26
(dir.)
0x20
EEDR
(dir.)
0x1F
7
-
EEMP[1:0]
6
-
5
4
EEPM1 EEPM0
3
2
EERIE EEMPE
1
EEPE
0
EERE
EECR
EEMP1
EEMP0
Tiempo
Operacin
3.4 mS
1.8 mS
nicamente borra
1.8 mS
Unicamente escribe
Reservado
27
7
-
6
-
5
4
EEPM1 EEPM0
3
2
EERIE EEMPE
1
EEPE
0
EERE
EECR
EERIE:
EEMPE :
EEPE :
EERE:
28
; Establece la direccin
out EEARH, r18
out EEARL, r17
; Coloca el dato
out EEDR,r16
; Pone en alto al habilitador maestro
sbi EECR,EEMPE
; Inicia la escritura
sbi EECR,EEPE
ret
29
void
{
// Asegura que no hay escritura en proceso
while ( EECR & 1 << EEPE )
;
// Establece la direccin
EEAR = direccion;
// Coloca el dato
EEDR = dato;
// Pone en alto al habilitador maestro
EECR |= ( 1 << EEMPE );
// Inicia la escritura
EECR |= ( 1 << EEPE );
30
31
// Inicia la lectura
EECR |= ( 1 << EERE );
// Regresa el dato
return EEDR;
}
32
PUERTOS DE ENTRADA/SALIDA
33
Puertos de Entrada/Salida
1 Salida
0 Entrada
34
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
CLR
WDDRx
RESET
PORTxn
Pxn
Terminal n del
Puerto x
CLR
WPORTx
RESET
SLEEP
BUS DE DATOS
RDDRx
RPORTx
SINCRONIZACIN
RPINx
PINxn
D
36
clk I/O
Puertos de Entrada/Salida
( Configuraciones )
DDRxn PORTxn
PUD
(en SFIOR)
E/S
Pull-Up
Comentario
Entrada
No
Entrada
Si
Entrada
No
Salida
No
Salida en bajo
Salida
No
Salida en alto
37
EJEMPLOS:
1.
2.
38
Sistema de Interrupciones
Sistema de Interrupciones
Un aspecto importante es que los eventos pueden ocurrir en
cualquier momento, es decir, en forma asncrona.
Programa Principal
tiempo
(a)
Nivel de
Interrupciones
ISR
*
Nivel
Base
Programa
Principal
tiempo
* Interrupcin
** Retorno de Interrupcin
ISR
**
*
Programa
Principal
**
Programa
Principal
(b)
40
Interrupciones externas.
pueden
ser
por
42
Dir.
Fuente
Descripcin
0x0000
RESET
0x0002
INT0
Interrupcin Externa 0
0x0004
INT1
Interrupcin Externa 1
0x0006
PCINT0
0x0008
PCINT1
0x000A
PCINT2
0x000C
WDT
0x000E
TIMER2_COMPA
0x0010
TIMER2_COMPB
10
0x0012
TIMER2_OVF
11
0x0014
TIMER1_CAPT
12
0x0016
TIMER1_COMPA
13
0x0018
TIMER1_COMPB
14
0x001A
TIMER1_OVF
43
Vect.
Dir.
Fuente
15
0x001C
TIMER0_COMPA
16
0x001E
TIMER0_COMPB
17
0x0020
TIMER0_OVF
18
0x0022
SPI_STC
19
0x0024
USART_RX
20
0x0026
USART_UDRE
21
0x0028
USART_TX
22
0x002A
ADC
23
0x002C
EE_READY
24
0x002E
ANALOG_COMP
25
0x0030
TWI
26
0x0032
SPM_READY
Descripcin
44
Manejo de Interrupciones
; Un programa
.org
jmp
jmp
jmp
. . .
.org
Principal: . . .
. . .
. . .
0x034
45
Manejo de Interrupciones
(Alto Nivel)
#include <avr/io.h>
#include <avr/interrupt.h>
// Entradas y salidas
// Interrupciones
ISR (INT1_vect)
{
. . . .
}
int main(void)
{
. . . . .
}
// Programa Principal
// Debe activar las interrupciones
46
Manejo de Interrupciones
47
Manejo de Interrupciones
Cuando ocurre una interrupcin el MCU realiza:
1. Concluye con la instruccin bajo ejecucin.
2. Desactiva al habilitador global de interrupciones,
para que no pueda recibir una nueva interrupcin,
mientras atiende a la actual.
3. Respalda en la pila al PC (previamente
incrementado).
4. Asigna al PC el valor del vector de interrupciones,
para dar paso a la ISR.
5. Atiende al evento con la ISR.
48
Manejo de Interrupciones
Cuando una ISR termina (con la instruccin RETI, si
se program en ensamblador):
1. Se limpia la bandera del evento que gener la
interrupcin.
2. El habilitador global se activa nuevamente.
3. El PC toma el valor del tope de la pila, para que la
ejecucin contine en el programa principal.
49
Sistema de Inicializacin
Se tienen las siguientes fuentes de Inicializacin (Reset):
Reset de encendido (Power-on Reset). El MCU es
inicializado cuando el voltaje de la fuente est por abajo del
voltaje de umbral de encendido (VPOT, tpico 1.3 V).
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 (trst, tpico 2.5 uS).
Watchdog Reset. El MCU es inicializado cuando el Watchdog
Timer est habilitado y su periodo termina.
Sistema de Inicializacin
51
Sistema de Inicializacin
En el registro MCUSCR (0x34) se registra la condicin de reset,
poniendo al bit correspondiente en alto.
7
-
6
-
5
-
4
-
3
WDRF
2
BORF
1
EXTRF
0
PORF
MCUSR
Vcc
RESET
TIME OUT
VPOT
VRST
tOUT
RESET
INTERNO
53
Reset Externo
Con la terminal externa RESET se inicializa al sistema introduciendo
un nivel bajo de voltaje. (a) Al encender el sistema y (b) en cualquier
instante.
Vcc
VPOT
RESET
VRST
VRST
tOUT
TIME OUT
tOUT
RESET
INTERNO
(a)
(b)
54
VBOT-
Vcc
tOUT
TIME OUT
RESET
INTERNO
BODLEVEL
111
Min
Tip
Max
110
1.7 V
1.8 V
2.0 V
101
2.5 V
2.7 V
2.9 V
100
4.1 V
4.3 V
4.5 V
otras
Reservado
55
1 ciclo de reloj
Desbordamiento
del Watchdog Timer
TIME OUT
tOUT
RESET
INTERNO
56
57
58
59
Bits CKSEL[3:0]
1111 1000
0111 0110
0101 0100
0011
0010
6. Reloj Externo
0000
Reservado
0001
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.
GND
Rango de Frecuencias
(MHz)
CKSEL [3:1]
0.4 0.9
100
0.9 3.0
12 22
101
3.0 8.0
12 22
110
8.0 16.0
12 22
111
61
SUT
[1:0]
00
01
10
11
00
01
10
62
11
GND
Rango de Frecuencias
(MHz)
CKSEL [3:1]
0.4 20
12 22
011
63
SUT
[1:0]
00
01
10
11
00
01
10
64
11
SUT [1:0]
Tiempo
Uso recomendado
00
4 ck
01
4 ck + 4.1 ms
10
4 ck + 65 ms
11
Reservado
65
Despus de reset
00
14 ck
6 ck
01
14 ck + 4 ms
6 ck
10
14 ck + 64 ms
6 ck
11
Reservado
66
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.
SUT [1:0]
00
14 ck
6 ck
01
14 ck + 4.1 ms
6 ck
10
14 ck + 65 ms
6 ck
11
Reservado
67
6. Reloj Externo
PB7
Seal de Reloj
Externa
XTAL2
XTAL1
GND
SUT [1:0]
00
14 ck
01
14 ck + 4.1 ms
10
14 ck + 65 ms
11
Reservado
68
SM1
SM0
Reservado
Reservado
Notas: Para el modo de espera (Standby) se recomienda usar cristales o resonadores externos.
70
71
72
Administracin de la Potencia y
modos SLEEP
clkASY
Reloj Principal
Oscilador del
temporizador
INT0, INT1 y
cambio en pines
Interfaz de dos
hilos (TWI)
Temporizador 2
EEPROM, Memoria
de programa lista
ADC
WDT
Otros I/O
Baja potencia
Ahorro de potencia
clkADC
Reduccin de ruido en el
ADC
Osciladores
clkIO
clkFLASH
clkCPU
Reloj Activo
X
X
X
X
X
X
73