Está en la página 1de 87

2.

ORGANIZACIN INTERNA DE LOS


MICROCONTROLADORES

Microcontroladores

M. C. Felipe Santiago Espinosa

Marzo / 2016

MICROCONTROLADORES AVR DE
ATMEL

Arquitectura RISC de 8 bits.

Arquitectura Harvard, con memoria Flash para


cdigo, SRAM y EEPROM para datos.

Su Arquitectura es Cerrada.

Por la operacin con los datos, la arquitectura es


del tipo Registro-Registro.
2

Tamao

MICROCONTROLADORES AVR DE ATMEL

XMEGA
megaAVR
tinyAVR

ncleo
AVR

Caractersticas

AVR: Alf-Egil Bogen, Vegard Wollan, RISC Processor

LA FAMILIA DE MICROCONTROLADORES AVR


La familia de microcontroladores AVR es muy numerosa, incluye ms
de 70 dispositivos que comparten el ncleo, pero difieren en recursos.
En particular revisaremos el ATMega8, ATMega16 y ATMega328,
cuyas caractersticas tcnicas se resumen a continuacin:
Flash (Kbytes)

8 / 16 / 32

TWI

Si

EEPROM (bytes)

512 / 512 / 1 K

ISP

Si

SRAM de proposito
general (bytes)

1024 / 1024 / 2048

ADC de 10 bits
(canales)

8 (6 en encapsulado
PDIP, M8 y M328)

Max Pines I/O

23 / 32 / 23

Comparador Analgico

Si

F.max (MHz)

20

Watchdog Timer

Si

Vcc (V)

2.7-5.5

Oscilador Interno

Si

16-bit Timers

Multiplicador por Hardware

Si

8-bit Timer

Interrupciones

19 / 21 / 26

PWM (canales)

3/4/6

Int. Externas

2/3/2

RTC

Si

Int. Por cambios en Pines

0/0/3

SPI
Maestro/Esclavo

Autoprogramacin

Si

Debug wire

No / No / Si

USART

Interfaz JTAG

No / Si
4 / No

ASPECTO
EXTERNO
ATMEGA8
Incluye 3 puertos,
todas las terminales
con una funcin
alterna.
PB 8 bits
PC 7 bits
PD 8 bits

ASPECTO
EXTERNO
ATMEGA16
Incluye 4 puertos,
todas las terminales
con una funcin
alterna.
PA 8 bits
PB 8 bits
PC 8 bits
PD 8 bits

ASPECTO
EXTERNO
ATMEGA328
Incluye 3 puertos,
todas las terminales
con ms de una
funcin alterna.
PB 8 bits
PC 7 bits
PD 8 bits

AVR CPU CORE


8

INTERIOR DEL MICROCONTROLADOR (ATMEGA8)

INTERIOR DEL MICROCONTROLADOR (ATMEGA16)

10

INTERIOR DEL MICROCONTROLADOR (ATMEGA328)

11

AVR CPU CORE


12
12

AVR CPU CORE

La funcin principal de la CPU es asegurar la


correcta ejecucin de programas. La CPU debe tener
acceso a las memorias, realizar clculos, controlar
perifricos y manejar interrupciones.
Para maximizar el rendimiento y paralelismo, el AVR
usa una arquitectura Harvard con memorias y
buses separados para instrucciones y datos.
La ALU soporta operaciones aritmticas y lgicas
entre registros o entre un registro y una constante.
Aunque tambin hay operaciones con un solo registro.
Despus de una operacin aritmtica, el registro de
Estado (Status Register) es actualizado, para reflejar
informacin acerca de la operacin.

13

EJECUCIN DE INSTRUCCIONES

El flujo del programa por naturaleza es secuencial.


Puede ser modificado por instrucciones de saltos
condicionales e incondicionales y llamadas a rutinas,
que pueden abarcar completamente el espacio de
direcciones.
Las instrucciones en la memoria de Programa son
ejecutadas con una segmentacin de dos etapas.
Mientras una instruccin est siendo ejecutada, la
siguiente es capturada de la memoria de programa.
Este concepto hace que se produzca una instruccin
por cada ciclo de reloj.
14

EJECUCIN DE INSTRUCCIONES

Con esto aparenta que las instrucciones solo requieren de un ciclo de


reloj (excepto los saltos).
Generando un rendimiento aproximado a 1 MIPS por MHz de la
frecuencia de trabajo del oscilador.

15

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

Tiempo total de Ejecucin


Captura de operandos
Operacin de la ALU
Escritura de resultado

16

ARCHIVO DE REGISTROS

El Archivo de Registros contiene 32


registros de propsito general de 8 bits,
habilitados para un acceso rpido.
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. Para ello, estos
registros se denominan X, Y y Z.
El registro Z tambin puede usarse
como apuntador a la memoria de
programa.
Arquitectura Optimizada para ejecutar
cdigo C compilado.

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

17

AVR CPU CORE


Mapa de memoria
18

Memoria de Programa

ATMega8

ATMega16

ATMega328
19

Memoria de Programa

Espacio continuo de memoria Flash cuyo tamao varia entre


procesadores, para el ATMega8 es de 8 Kbytes (4 K x 16 bits),
para el ATMega16 es de 16 Kbytes (8 K x 16 bits) y para el
ATMega328 es de 32 Kbytes (16 K x 16 bits). Soporta hasta
10,000 ciclos de escritura/borrado.

La memoria se puede dividir 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).
En el espacio de almacenamiento se incluyen los Vectores de
Interrupcin, iniciando en la direccin 0x000. El nmero de
vectores, varia de procesador a procesador, en funcin de los
recursos existentes.
20

Memoria de Programa
Vectores de Interrupcin en el ATmega8

21

Memoria de Programa
Vectores de Interrupcin en el ATmega16

22

Vectores de Interrupcin en el ATmega328

23

Memoria de Datos (ATMega8 y ATMega16)


32

Archivo de
Registros

0x000
0x01F
0x020

64

0x000

Registros
I/O
0x05F
0x060

1024

SRAM de
propsito
general
8 bits

8 bits

0x45F

0x1FF

(a)

(b)

SRAM

EEPROM

24

Memoria de Datos (ATMega328)

SRAM

EEPROM

25

Memoria SRAM de Datos (ATMega8 y ATMega16)

Direcciones en el espacio de datos


0x0000
0x0001
0x0002
...

R29
R30
R31
Registros I/O
0x00
0x01
0x02
...

0x001D
0x001E
0x001F

0x3D
0x3E
0x3F

0x005D
0x005E
0x005F
SRAM Interna
0x0060
0x0061
...

Es un espacio de 1120 localidades de 8 bits e


incluyen:

Archivo de Registros
R0
R1
R2
...

Un Archivo de Registros de 32 localidades.


64 Registros I / O.
1024 localidades de propsito general.

0x0020
0x0021
0x0022
...

0x045E
0x045F

En el ATMega328 son 2048 localidades de propsito general ms 160


Registros I/O Extendidos. Para un total de 2304 bytes de SRAM.

26

Archivo de Registros

El repertorio de instrucciones AVR est optimizado para


el archivo de Registros.
7
0
Las instrucciones que operan sobre el
Archivo de Registros tienen acceso a
todos ellos. Las que operan un registro
con una constante slo trabajan con los
registros de R17 a R31.
Cada registro tienen una direccin que
le permite ser tratado como cualquier
otra localidad de RAM (0x000 0x01F),
utilizando instrucciones de Carga (LD)
y almacenamiento (ST).
De R26 a R31 pueden usarse como
apuntadores para direccionamiento
indirecto.

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

27

Registros I/O

Son 64 Registros e incluyen a los Puertos de


Entrada/Salida, as como registros para la configuracin, el
control y el estado de los recursos internos.

Se tiene acceso a los registros I/O 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
las instrucciones LD y ST (direcciones 0x20 - 0x5F).
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.
El ATMega328 tiene ms recursos que los otros dos
dispositivos. A esto se debe la disponibilidad de espacio
para 160 Registros I/O Extendidos.

28

Registros I/O (Parcial)

La lista completa de registros I/O est en las Hojas de Especificaciones.


Los registros I/O para el manejo de perifricos, se revisarn en sus
correspondientes secciones.

El mapa de registros de un ATMega328 es muy diferente al de los otros 29


dispositivos, esto porque en total hay 224 espacios disponibles (aunque
muchos de ellos vacos).

Registro de ESTADO (SREG: 0x3F)


Bit
Read/Write
Valor inicial

I: Habilitador global de Interrupciones,


con un 1 lgico, las interrupciones son habilitadas.
T: Para respaldo de un bit, es usado con la instruccin BLD para
Carga y BST para Almacenamiento.
H: Bandera de acarreo de los 4 bits inferiores (Half)
S: Bit de signo (Mantiene una XOR entre N y V)
V: Bandera de Sobreflujo, en operaciones de complemento a dos.
N: Bandera de Negativo
Z: Bandera de Cero

Se generan con operaciones


Aritmticas y lgicas

30

C: Bandera de Acarreo
30

Apuntador de Pila (SP)


$3E
$3D

La pila est implementada en el espacio de propsito general (que es de


1024 bytes en el M8 y M16 y 2048 en el M328).

Es usada durante la llamada de subrutinas, el manejo de interrupciones


o para el almacenamiento temporal de variables (con instrucciones
PUSH y POP).
El registro SP es el apuntador al tope de la pila. Realmente 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 0x045F o 0x08FF),
para que realice un almacenamiento dentro de un espacio vlido.
31
31

ACCESO AL ESPACIO DE PROPSITO GENERAL

Archivo de Registros
R0
R1
R2
...
R29
R30
R31

Carga
(load, LD)

( store, ST)

SRAM Interna
0x0060
0x0061
...
0x045E
0x045F

Almacenamiento

La arquitectura AVR es del tipo Registro Registro.


Existen
diversas
instrucciones
para
cargas
o
almacenamientos, ya sean de manera directa o indirecta.

32

ACCESO AL ESPACIO DE PROPSITO GENERAL


T1

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

La etapa de ejecucin de un acceso a memoria,


ya sea carga o almacenamiento, requiere de dos
ciclos de reloj.

Carga
(Lectura en SRAM)

33

MEMORIA EEPROM PARA DATOS

Espacio no voltil para el almacenamiento de datos, cuyo


tamao varia entre procesadores. Para el ATMega8 y
ATMega16 es de 512 bytes, para el ATMega328 es de 1024
bytes.
La memoria EEPROM est en un espacio independiente y se
requiere de 3 Registros I/O para su acceso:
EEAR - Para el manejo de la direccin.
M8/M16

M328

0x1F

0x22

EEAR9*

EEAR8

EERH

0X1E

0x21

EEAR7

EEAR6

EEAR5

EEAR4

EEAR3

EEAR2

EEAR1

EEAR0

EERL

*EEAR9 no est implementado en el ATMega8 y en el ATMega16.


34

EEDR - Para el dato (0x1D)

M8/M16

M328

0x1D

0x20

5
4
3
2
Registro de datos de la EEPROM

0
EEDR

EECR - Para el control (0x1C)

M8/M16
0x1C

M328
0x1F

EEMP[1:0]

7
-

6
-

5
4
EEPM1* EEPM0*

3
2
1
EERIE EEMWE / EEMPE EEWE / EEPE

0
EERE

EECR

EEPROM Programming Mode


Definen qu accin se realizar en la EEPROM, es posible con
una operacin borrar el viejo valor y escribir el nuevo (operacin
atmica).

EEMP1

EEMP0

Tiempo

Operacin

3.4 mS

Borra y escribe en una operacin

1.8 mS

nicamente borra

1.8 mS

Unicamente escribe

Reservado

Estos bits no estn implementados en el ATMega8 o ATMega16.

35

Bits del registro de CONTROL :


M8/M16
0x1C

M328
0x1F

7
-

6
-

5
4
EEPM1* EEPM0*

3
2
1
EERIE EEMWE / EEMPE EEWE / EEPE

0
EERE

EECR

EERIE:

EEPROM Ready Interrupt Enable


En alto habilita la interrupcin por EEPROM. La EEPROM
genera una interrupcin cuando EEWE/EEPE es limpiado.

EEMWE /
EEMPE :

EEPROM Master Write Enable


Determina si la puesta en alto de EEWE/EEPE producir una
escritura en la EEPROM. Al ponerse en alto, se cuenta con 4
ciclos para iniciar la escritura con EEWE/EEPE, de lo contrario se
limpiar automticamente por Hardware.

EEWE /
EEPE :

EEPROM Write Enable


Debe ponerse en alto para dar inicio a un ciclo de escritura. Se
limpiar automticamente por Hardware al finalizar la escritura.
Un programa de usuario puede monitorear este bit o si se pone en
alto a EERIE se producir una interrupcin.

EERE:

EEPROM Read Enable


Debe ponerse en alto para un ciclo de lectura, se limpiar
automticamente por Hardware. El dato ledo est disponible de
manera inmediata. No es posible realizar una lectura si hay una
escritura en proceso.

36

Rutina de Escritura en EEPROM :


; El dato a escribir est en R16
; Se escribir en las direcciones R18:R17
; comentarios
EEPROM_write:
; para un ATMega328
; Asegura que no hay escritura en proceso
sbic EECR,EEWE
; sbic EECR,EEPE
rjmp EEPROM_write
; Establece la direccin
out EEARH, r18
out EEARL, r17
; Coloca el dato
out EEDR,r16
; Pone en alto al habilitador maestro
sbi EECR,EEMWE
; sbi EECR,EEMPE
; Inicia la escritura
sbi EECR,EEWE
; sbi EECR,EEWE
ret

37

Funcin de Escritura en EEPROM :


// Recibe el dato y la direccin a escribir
void

EEPROM_write (unsigned char dato,


unsigned int direccion )

{
// Asegura que no hay escritura en proceso
while ( EECR & 1 << EEWE ) // 1 << EEPE
;
// Establece la direccin
EEAR = direccion;
// Coloca el dato
EEDR = dato;
// Pone en alto al habilitador maestro
EECR |= ( 1 << EEMWE );
// 1 << EEMPE
// Inicia la escritura
EECR |= ( 1 << EEWE );
}

// 1 << EEPE
38

Rutina de Lectura en EEPROM :


; El dato a leer se dejar en R16
; Se leer de las direcciones R18:R17
EEPROM_read:
; Asegura que no hay una escritura en proceso
sbic EECR,EEWE
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

39

Funcin de Lectura en EEPROM :


// Regresa el dato ledo, se recibe la direccin
unsigned char EEPROM_read(unsigned int direccion)
{
// Asegura que no hay una escritura en proceso
while ( EECR & 1 << EEWE)
;
// Establece la direccin
EEAR = direccion;
// Inicia la lectura
EECR |= ( 1 << EERE );

// Regresa el dato
return EEDR;
}

40

PUERTOS DE
ENTRADA/SALIDA
EN EL
ATMEGA8
Incluye 3 puertos, todas
las terminales con una
funcin alterna.
PB 8 bits
PC 7 bits
PD 8 bits
Las funciones alternas
se revisarn conforme
se revisen los perifricos
que las requieren.
41

PUERTOS DE
ENTRADA/SALIDA
EN EL
ATMEGA16
Incluye 4 puertos, todas las
terminales con una funcin
alterna.

PA 8 bits
PB 8 bits
PC 8 bits
PD 8 bits

Similarmente, las funciones


alternas se revisarn mas
adelante.
42

PUERTOS DE
ENTRADA/SALIDA
EN EL

ATMEGA328
Incluye 3 puertos,
todas las terminales
con ms de una
funcin alterna.
PB 8 bits
PC 7 bits
PD 8 bits

43

Puertos de Entrada/Salida

Para cada puerto se manejan tres registros, dentro del


espacio de registros I/O

PORTx: Un registro de lectura/escritura sobre un


lacth, conectado a la terminal del puerto. En este se
escribe, cuando el puerto est configurado como
salida.
DDRx: Un registro de lectura/escritura que define la
direccin del puerto. Las direcciones pueden
configurarse de manera independiente, para cada
terminal.

1 Salida

0 Entrada

PINx: Un registro solo de lectura, para hacer lecturas


directas en las terminales de los puertos.

44

Registros para el manejo de puertos


Registros en el ATMega8
7

0x18

PORTB7

PORTB6

PORTB5

PORTB4

PORTB3

PORTB2

PORTB1

PORTB0

PORTB

0x17

DDRB7

DDRB6

DDRB5

DDRB4

DDRB3

DDRB2

DDRB1

DDRB0

DDRB

0x16

PINB7

PINB6

PINB5

PINB4

PINB3

PINB2

PINB1

PINB0

PINB

0x15

PORTC6

PORTC5

PORTC4

PORTC3

PORTC2

PORTC1

PORTC0

PORTC

0x14

DDRC6

DDRC5

DDRC4

DDRC3

DDRC2

DDRC1

DDRC0

DDRC

0x13

PINC6

PINC5

PINC4

PINC3

PINC2

PINC1

PINC0

PINC

0x12

PORTD7

PORTD6

PORTD5

PORTD4

PORTD3

PORTD2

PORTD1

PORTD0

PORTD

0x11

DDRD7

DDRD6

DDRD5

DDRD4

DDRD3

DDRD2

DDRD1

DDRD0

DDRD

0x10

PIND7

PIND6

PIND5

PIND4

PIND3

PIND2

PIND1

PIND0

PIND

Registros adicionales en el ATMega16


0x1B

PORTA7

PORTA6

PORTA5

PORTA4

PORTA3

PORTA2

PORTA1

PORTA0

PORTA

0x1A

DDRA7

DDRA6

DDRA5

DDRA4

DDRA3

DDRA2

DDRA1

DDRA0

DDRA

0x19

PINA7

PINA6

PINA5

PINA4

PINA3

PINA2

PINA1

PINA0

45
PINA

+ el bit 7 en los registros del Puerto C

Registros en el ATMega328
7

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

Con respecto al ATMega8, slo cambia la direccin de los registros.

46

Puertos de Entrada/Salida
INTERIOR DEL
MICROCONTROLADOR

PUD
DDRxn
Q

CLR

WDDRx
RESET

PORTxn
Pxn

Terminal n del
Puerto x

CLR

WPORTx
RESET

SLEEP

El bit PUD (Pull-Up


disable) est en el
registro SFIOR
(Special Function IO
Register).

BUS DE DATOS

RDDRx

RPORTx

SINCRONIZACIN
RPINx
PINxn
D

47
clk I/O

Puertos de Entrada/Salida
( Configuraciones )

DDRxn PORTxn

PUD
(en SFIOR)

E/S

Pull-Up

Comentario

Entrada

No

Sin resistor de Pull-Up

Entrada

Si

Con resistor de Pull-Up

Entrada

No

Sin resistor de Pull-Up

Salida

No

Salida en bajo

Salida

No

Salida en alto

48

EJEMPLOS:
1.

Muestre el cdigo requerido para configurar la


parte alta del puerto B como entradas y la parte
baja como salidas, y habilite los resistores de
Pull-Up de las 2 entradas ms significativas.

2.

Muestre la secuencia de cdigo que configure al


puerto A como entrada y al puerto B como
salida, para luego transferir la informacin del
puerto A al puerto B.

49

Sistema de Interrupciones

Una interrupcin es la ocurrencia de una condicin un


evento generado por un recurso del MCU que ocasiona
la suspensin temporal del programa principal.
El evento es atendido con una rutina de servicio a la
interrupcin (ISR) o un manejador de interrupcin.
La rutina de atencin para una interrupcin debe
colocarse en una direccin pre-establecida por Hardware,
formando parte de un vector de interrupciones.
Al concluir con la ISR, la CPU contina con la ejecucin
del programa principal.
Al utilizar un sistema manejador de interrupciones se
tiene la ilusin de que se estn haciendo diferentes tareas
en forma simultnea.
50

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)
51

Interrupciones en los AVRs

Se tienen diferentes fuentes de Interrupcin:

Por inicializacin o Reset.

Interrupciones externas.

Ante cambios en las terminales.

Interrupciones por los temporizadores,


comparacin, captura o desbordamiento.

pueden

ser

por

Al completar una transferencia serial (puerto SPI).

Ocasionadas por el puerto serie (USART), por transmisin,


recepcin o buffer vaco.

Por el convertidor analgico digital.

Al finalizar una escritura en EEPROM.

Por el comparador analgico.

Por la interfaz serial a dos hilos (TWI).

Al escribir en memoria de programa.


52

El nmero real de interrupciones depende del dispositivo.

Interrupciones en los AVRs

Despus de un reset, las interrupciones no estn activas.

Su activacin requiere la puesta en alto del bit I, en el


registro de estado (SREG), adems de las habilitaciones
individuales para que los recursos puedan interrumpir a
la CPU.
Adems del Reset, se tienen 18 fuentes de interrupcin en
el ATMega8, 20 en el ATMega16 y 25 en el ATMega328,
con direcciones diferentes en el vector de interrupciones.
Al generarse una interrupcin, el PC es almacenado en la
pila y toma el valor de una entrada en el vector de
interrupciones (segn sea la interrupcin). Adems de
desactivar al bit I para no aceptar ms interrupciones.
La ISR debe terminar con la instruccin RETI, la cual
recupera el valor del PC de la pila y ajusta al bit I.

53

Vectores de Interrupcin en el ATmega8

Esta es una distribucin tpica, el ATMega 8 puede contar con un auto-cargador


en su memoria de programa, por lo que el vector puede moverse al espacio
arranque.

54

Vectores de Interrupcin en el ATmega16

55
El ATMega 16 tambin puede ubicar un auto-cargador en su memoria de programa.

Vectores de Interrupcin en el ATmega328

56

Manejo de Interrupciones
(para el ATMega8)
; Un programa generalmente inicia en la direccin 0
.org
0x000
rjmp
Principal ; Se evitan los vectores de interrupcin
rjmp
Externa_0 ; Bifurca a la ISR correspondiente
rjmp
Externa_1 ; Bifurca a la ISR correspondiente
. . .

.org
0x013
Principal: . . .
. . .
. . .

; Ac estaran otras bifurcaciones

; Despus de los vectores de interrupcin


; Ac estar el cdigo principal
; Debe activar las interrupciones

; Posterior al cdigo principal, deben situarse las ISRs


Externa_0:
. . .
RETI
Externa_1:

. . .
RETI

; Respuesta a la interrupcin externa 0


; Debe terminar con RETI
; Respuesta a la interrupcin externa 1
; Debe terminar con RETI

Nota: La instruccin RJMP ocupa una palabra de 16 bits.

57

Manejo de Interrupciones
(para el ATMega16 o el ATMega328)
; Un programa
.org
jmp
jmp
jmp

generalmente inicia en la direccin 0


0x000
Principal ; Evita los vectores de interrupcin
Externa_0 ; Bifurca a su ISR correspondiente
Externa_1 ; Bifurca a su ISR correspondiente

. . .
.org

Principal: . . .
. . .
. . .

0x02A

; Ac estaran otras bifurcaciones


; Despus de los vectores de interrupcin
; 0x034 para el ATMega328
; Ac estar el cdigo principal
; Debe activar las interrupciones

; Posterior al cdigo principal, deben situarse las ISRs


Externa_0:
. . .
RETI
Externa_1:
. . .
RETI

; Respuesta a la interrupcin externa 0


; Debe terminar con RETI
; Respuesta a la interrupcin externa 1
; Debe terminar con RETI

Nota: La instruccin JMP ocupa dos palabras de 16 bits.

58

Manejo de Interrupciones
(Alto Nivel)
#include <avr/io.h>
#include <avr/interrupt.h>

// Entradas y salidas
// Interrupciones

// Las ISRs se ubican antes del programa principal


ISR (INT0_vect)
{
. . . .
}

// Servicio a la interrupcin externa 0

ISR (INT1_vect)
{
. . . .
}

// Servicio a la interrupcin externa 1

int main(void)
{
. . . . .
}

// Programa Principal
// Debe activar las interrupciones

En C, todas las funciones de atencin a interrupcin se llaman ISR, difieren en el


argumento, que corresponde a la etiqueta proporcionada por el fabricante seguida de la
palabra vect.
Si la etiqueta es de dos palabras, debe usarse el guin bajo, por ejemplo:
TIMER2_COMP_vect.

59

Manejo de Interrupciones

Para que un programa use las interrupciones, se


requiere:
1. Configurar el recurso o recursos para monitorear el
evento o eventos.
2. Habilitar las interrupciones (habilitador individual
y global).
3. Continuar con la ejecucin normal de la aplicacin.

60

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.
61

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.

62

Sistema de Inicializacin
Se tienen las siguientes 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 (trst).
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).

JTAG AVR Reset: El MCU es inicializado tan pronto como hay un uno
lgico en el Registro de Reset, del sistema JTAG (Solo en ATMega-16).

63

Sistema de Inicializacin

64

Sistema de Inicializacin
BUS DE DATOS

JTRF

WDRF

EXTRF

BORF

PORF

Registro de Estado y
Control del MCU (MCUCSR)

Reset de
Encendido

VCC

Reset por nivel


bajo de voltaje
(Brown Out)

BODEN
BODLEVEL
RESISTOR DE
PULL-UP

RESET

Filtro

Circuito de Reset
S

Registro de
Reset por JATG

Watchdog
Timer

(No disponible en
ATMega8 y
tampoco en el
ATMega328)

Oscilador del
Watchdog Timer

Generador
de Reloj

CKSEL[3:0]
SUT[1:0]

RESET DEL CONTADOR

CLK

Contador de Retardos

RESET
INTERNO

TIMEOUT

65

Sistema de Inicializacin
En el registro MCUSCR (0x34) se registra la condicin de reset,
poniendo al bit correspondiente en alto.

Solo en ATMega-16
Los bits 7 y 6 no son banderas de reset.
En ATMega8 estn sin uso.

JTRF: JTAG Reset Flag


WDRF: Watchdog Reset Flag
BORF: Brown-out Reset Flag

Tienen Cero despus de


suministrar la alimentacin
(Power-on Reset)

EXTRF: External Reset Flag

PORF: Power-on Reset Flag

66

Reset de Encendido (Power on Reset)


Una vez que el MCU se recupera de una condicin de Reset, espera
un tiempo de establecimiento (Tout inicialmente es de 65 ms),
antes de recuperar al sistema, para garantizar que los registros
tienen su valor inicial.

Vcc

RESET

TIME OUT

VPOT

VRST

tOUT

RESET
INTERNO

67

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)

68

Inicializacin por Brown-out


Se refiere a una inicializacin cuando el voltaje de alimentacin
(Vcc) cae por debajo de un umbral pre-establecido (VBOT)

Vcc

VBOT-

VBOT+

tOUT

TIME OUT

RESET
INTERNO

Dentro de los Bits de configuracin existen 2 de inters:


- BODEN
: Habilita la deteccin (Brown-out detection)
- BODLEVEL : Sin programar, el umbral es de 2.7 V
Programado, el umbral es de 4.0 V

69

Inicializacin por Watchdog


Cuando el temporizador del Watchdog se desborda, genera un pulso
corto con una duracin de 1 ciclo de reloj. El flanco de subida
provoca el reset interno y el de cada el inicio del tiempo de
establecimiento.
1 ciclo de reloj

Desbordamiento
del Watchdog Timer

TIME OUT

tOUT

RESET
INTERNO
70

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.
Temporizador
Asncrono

Mdulos
Generales I/O

Ncleo
AVR

ADC

Flash y
EEPROM

RAM

clkADC
clkI/O
clkASY

Unidad de
Control del reloj

clkCPU
clkFLASH

Reset Lgico

SUT[1:0]
CKSEL[3:0]

Watchdog
Timer

Oscilador del
Watchdog Timer

CKOPT

Oscilador del
Temporizador

Cristal/Resonador
Externo

Cristal Externo
de baja frecuencia

Reloj Externo

Oscilador RC
Externo

Oscilador RC
Interno

71

Seales de reloj en un AVR


La unidad de control del reloj se encarga de generar diferentes
seales de reloj y distribuirlas a los diferentes mdulos, las
diferentes seales de reloj son:
clkCPU: Ruteado al ncleo AVR, incluyendo al archivo de
registros, registro de Estado, Memoria de datos, apuntador de
pila, etc.
clkFLASH: Seal de reloj suministrada a las memorias FLASH
y EEPROM.

clkADC: Reloj dedicado al ADC, el ADC trabaja a una


frecuencia menor que la CPU con el objetivo de reducir el
ruido generado por interferencia digital y mejorar las
conversiones.

72

Seales de reloj en un AVR

clkI/O: Es la seal de reloj utilizada por los principales mdulos de


recursos: Temporizadores, interfaz SPI y USART. Adems de ser
requerido por el mdulo de interrupciones externas.
clkASY: Esta seal de reloj es asncrona con respeto al resto del
sistema y es empleada para sincronizar al temporizador 2, el
mdulo que genera esta seal est optimizado para manejarse con
un cristal externo de 32.768 kHz. Frecuencia que permite usar al
temporizador como un contador de tiempo real, an cuando el
dispositivo est en algn modo de reposo.

73

Sistema del reloj


(ATMega8 y ATMega16)
La fuente de reloj se selecciona con 4 bits de configuracin internos (no
corresponden a algn registro). Se tienen las opciones:

Opcin para el Reloj del Sistema


Resonador Cermico o Cristal Externo
Cristal de Baja Frecuencia Externo

Bits CKSEL[3:0]
1010 1111
1001

Oscilador RC Externo

0101 1000

Oscilador RC Calibrado Interno

0001 0100

Reloj Externo

0000

Estos bits se deben definir durante el proceso de programacin del


microcontrolador.

Existen otro par de bits (SUT, Set up Time), que junto con los bits
CKSEL, definen un retardo inicial en la operacin del oscilador, despus
de un reset.

74

Resonador Cermico o Cristal Externo


C2
XTAL2
C1
XTAL1

GND

CKOPT

CKSEL [3:1]

Rango de
Frecuencias (MHz)

Valores recomendados
para C1 y C2 (pF)

1 (*)

101

0.4 0.9

110

0.9 3.0

12 22

111

3.0 8.0

12 22

101, 110, 111

1.0

12 22

(*) No debe usarse con cristales, solo resonadores cermicos.

75

Resonador Cermico o Cristal Externo

CKSEL0 SUT [1:0]


0
0
0
0
1
1
1
1

00
01
10
11
00
01
10
11

Establecimiento despus de
un bajo consumo
258 ck
258 ck
1K ck
1K ck
1K ck
16K ck
16K ck
16K ck

Retardo despus de
un reset (VCC = 5 V)
4.1 ms
65 ms
4.1 ms
65 ms
4.1 ms
65 ms

76

Cristal de Baja Frecuencia Externo

Para usar un cristal de 32.768 Khz, el cual proporciona la base para un


contador de tiempo real, debe usarse CKSEL = 1001.

Programando CKOPT se utilizan los capacitores internos. En caso


contrario se recomiendan capacitores con un valor nominal de 36 pF.

Los tiempos de establecimiento para esta opcin son:

SUT [1:0]

Establecimiento despus de un
bajo consumo

Retardo despus de un
reset (VCC = 5 V)

00

1 K ck

4.1 ms

01

1 K ck

65 ms

10

32 K ck

65 ms

11

Reservado
77

Oscilador RC Externo

La frecuencia se determina como f = 1/(3RC).


C debe ser al menos de 22 pF.
Sin
conexin

XTAL2

R
XTAL1
C
GND

CKSEL [3:0]

Rango de Frecuencias (MHz)

0101

0.1 0.9

0110

0.9 3.0

0111

3.0 8.0

1000

8.0 12.0

78

Oscilador RC Externo

Los tiempos de establecimiento bajo estas opciones son:

SUT [1:0]

Establecimiento despus de
un bajo consumo

Retardo despus de un
reset (VCC = 5 V)

00

18 ck

01

18 ck

4.1 ms

10

18 ck

65 ms

11

6 ck

4.1 ms

79

Oscilador RC Calibrado Interno

Se considera un voltaje de 5.0 volts y una temperatura de 25 C.

CKSEL [3:0]
0001
0010
0011
0100

Frecuencia Nominal (MHz)


1.0
2.0
4.0
8.0

Sus tiempos de arranque:

SUT [1:0]

Retardo despus de un reset (VCC = 5 V)

00

01

4.1 ms

10

65 ms

11

Reservado

Los dispositivos se venden con CKSEL = 0001 y SUT = 10

80

Reloj Externo
Sin conexin

XTAL2

Seal de Reloj
Externa

XTAL1

GND

Sus tiempos de establecimiento, despus de un reset, son:

SUT [1:0]

Retardo despus de un reset (VCC = 5 V)

00

01

4.1 ms

10

65 ms

11

Reservado

Despus de algn modo de bajo consumo,


el retraso es de 6 ciclos de reloj.

81

Sistema del reloj (ATMega328)

Similar a los otros dispositivos, la seleccin se realiza con los fusibles


CKSEL, teniendo las siguientes opciones:

Opcin para el Reloj del Sistema

Bits CKSEL[3:0]

Cristal de baja potencia

1000 1111

Cristal de oscilacin completa

0110 0111

Cristal de baja frecuencia

0100 0101

Oscilador RC Interno de 128 KHz

0011

Oscilador RC calibrado interno de 8 MHz

0010

Reservado

0001

Reloj externo

0000

El ATMega328 incorpora al fusible CLKDIV8, para dividir la frecuencia


del oscilador entre 8.
Tambin se cuenta con los bits SUT (Set up Time) para el retardo
despus de un reset.
El dispositivo se vende con CKSEL = 0010, SUT = 10, CKDIV8 = 0
(0 es programado). Por lo que inicia trabajando a 1 MHz, con un
retardo inicial de 14CK + 65ms.

82

Administracin de la Potencia y modos SLEEP

Los modos de bajo consumo (SLEEP) habilitan a la aplicacin a apagar


mdulos sin usar en el MCU y por lo tanto, ahorrar energa.

El AVR tiene 5 modos SLEEP y para entrar en alguno de ellos, el bit SE


(SLEEP Enable) debe ponerse en alto.

En el ATMega8 y ATMega16 la configuracin se realiza en el registro


MCUCR (MCU Control Register).

En el ATMega328 la configuracin debe realizarse en el registro SMCR


(Sleep Mode Control Register).

En ambos casos, los bits SM2, SM1 y SM0 determinan el modo. Deben
configurarse antes de ejecutar la instruccin SLEEP, con la que el MCU
es llevado al modo de bajo consumo.

83

Modos de bajo consumo


SM2

SM1

SM0

Modo de bajo consumo

Modo ocioso (Idle)

Modo de reduccin de ruido en el


ADC

Modo de baja potencia

Modo de ahorro de potencia

Reservado

Reservado

Modo de espera (Standby)

Modo de espera extendido

Notas: El modo de espera (Standby) est disponible solo con cristales o resonadores externos.
El modo de espera extendido no est disponible en el ATMega8.
84

Administracin de la Potencia y modos SLEEP


Modo ocioso: Todos los recursos trabajan, la CPU no ejecuta
instrucciones (no tienen seal de reloj). El reloj principal y del
temporizador estn activos. Cualquier evento de los diferentes
recursos provoque una salida del modo de reposo.
Modo de reduccin de ruido en el ADC: nicamente trabaja
el ADC y el oscilador asncrono para el temporizador 2.
Adecuado para aplicaciones que requieren el monitoreo de
parmetros analgicos en periodos preestablecidos de tiempo.
Modo de baja potencia: No hay reloj, es el modo con el menor
consumo de energa. El MCU puede ser reactivado por eventos
en la interfaz de dos hilos o por las interrupciones externas.

85

Administracin de la Potencia y modos SLEEP


Modo de ahorro de potencia: Slo est activo el oscilador
asncrono, se mantiene activo el temporizador 2, sincronizado
con una fuente de reloj externa. Ideal para aplicaciones que
involucren un reloj de tiempo real.
Modo de espera: Este modo es muy similar al modo de baja
potencia, la nica diferencia es que en este modo se mantiene
activo el suministro del reloj principal.
Modo de espera extendido: Este modo es muy similar al
modo de ahorro de potencia, la nica diferencia es que en este
modo tambin est activo el suministro del reloj principal. Este
modo no est disponible en el ATMega8.

86

Administracin de la Potencia y
modos SLEEP

clkASY

Reloj Principal

Oscilador del
temporizador

INT0, INT1, INT2

Interfaz de dos
hilos (TWI)

Temporizador 2

EEPROM, Memoria
de programa lista

ADC

Otros I/O

Baja potencia
Ahorro de potencia

Modo de espera (standby)


Modo de espera extendido

Eventos que despiertan al MCU

clkADC

Reduccin de ruido en el ADC

Oscilador

clkIO

Modo ocioso (idle)

clkFLASH

Modo de Bajo Consumo de


Energa

clkCPU

Reloj Activo

X
X

87

También podría gustarte