Vous êtes sur la page 1sur 77

2.

ORGANIZACIN INTERNA DE LOS


MICROCONTROLADORES

Microcontroladores

M. C. Felipe Santiago Espinosa

Marzo / 2015

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 o el ATMega16, cuyas
caractersticas tcnicas se resumen a continuacin:
Flash (Kbytes)

8 / 16

TWI

Si

EEPROM (bytes)

512

ISP

Si

SRAM (Bytes)

1024

10-bit A/D (canales)

Max I/O Pins

23 / 32

Comparador
Analgico

Si

F.max (MHz)

16

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

PWM (canales)

3/4

Int. Externas

2/3

RTC

Si

Autoprogramacin

Si

SPI
Maestro/Esclavo

Encapsulados

USART

Interfaz JTAG

PDIP 28, TQFP 32, MLF 32 /


PDIP 40, TQFP 44, MLF 44
No / Si4

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

AVR CPU CORE


7

INTERIOR DEL MICROCONTROLADOR (ATMEGA-8)

INTERIOR DEL MICROCONTROLADOR (ATMEGA-16)

AVR CPU CORE


10
10

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.

11

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

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.

13

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

14

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

15

AVR CPU CORE


Mapa de memoria
16

Memoria de Programa
0x0000
16 bits
0x000

Seccin de Aplicacin
16 bits
Seccin de Aplicacin

Seccin de Arranque

Seccin de Arranque
0x1FFF

0xFFF
(a)

(b)

17

Memoria de Programa

Espacio continuo de memoria Flash cuyo tamao 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.

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
Interrupciones, iniciando en la direccin 0x000. El nmero de
vectores, en la familia AVR, varia de procesador a procesador,
en funcin de los recursos existentes.
18

Memoria de Programa
Vectores de Interrupcin en el ATmega8

19

Memoria de Programa
Vectores de Interrupcin en el ATmega16

20

Memoria de Datos
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

21

Memoria SRAM de Datos

Archivo de Registros
R0
R1
R2
...

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:

Un Archivo de Registros de 32 localidades.


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

0x0020
0x0021
0x0022
...

0x045E
0x045F

22

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

23

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.

24

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.

25

Registro de ESTADO (SREG: 0x3F o 0x5F)


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

26

C: Bandera de Acarreo
26

Apuntador de Pila (SP)


$3E
$3D

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


1024 bytes).

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), para que
realice un almacenamiento dentro de un espacio vlido.
27
27

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.

28

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)

29

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.
La memoria EEPROM est en un espacio independiente y se
requiere de 3 Registros I/O para su acceso:

EEAR - Para la direccin (0x1F, 0x1E).

EEDR - Para el dato (0x1D)

EECR - Para el control (0x1C)


30

Bits del registro de CONTROL :

EERIE:

EEPROM Ready Interrupt Enable


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

EEMWE: EEPROM Master Write Enable


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

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.

31

Rutina de Escritura en EEPROM :


; El dato a escribir est en R16
; Se escribir en las direcciones R18:R17
EEPROM_write:
; Asegura que no hay escritura en proceso
sbic EECR,EEWE
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
; Inicia la escritura
sbi EECR,EEWE
ret

32

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 )
;
// Establece la direccin
EEAR = direccion;

// Coloca el dato
EEDR = dato;
// Pone en alto al habilitador maestro
EECR |= ( 1 << EEMWE );
// Inicia la escritura
EECR |= ( 1 << EEWE );
}

33

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

34

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;
}

35

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

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

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.

38

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

39
PINA

+ el bit 7 en los registros del Puerto C

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

40
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

41

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.

42

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

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

Interrupciones en los AVRs

Se tienen diferentes fuentes de Interrupcin:

Por inicializacin o Reset

Dos interrupciones externas (tres en el ATMega16)

Siete interrupciones por los temporizadores (ocho en el


ATMega16), pueden ser por comparacin, captura o
desbordamiento.
Una al completar una transferencia serial (puerto SPI).
Tres debidas el puerto serie (USART), por transmisin,
recepcin o buffer vaco.

Una por el convertidor analgico digital.

Una al finalizar una escritura en EEPROM.

Una por el comparador analgico.

Una por la interfaz serial a dos hilos (TWI).

Una para la escritura en memoria de programa.

45

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 y 20 en el ATMega16, 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.

46

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.

47

Vectores de Interrupcin en el ATmega16

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

Manejo de Interrupciones
(para el ATMega 8)
; Un programa generalmente inicia en la direccin 0
org
0x000
rjmp
Principal ; Se evita el vector de interrupciones
org
rjmp

0x001
Externa_0 ; Bifurca a su ISR correspondiente

org
rjmp

0x002
Externa_1 ; Bifurca a su ISR correspondiente

; Si fuera necesario, ac estaran otras bifurcaciones


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

; 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

49

Manejo de Interrupciones
(para el ATMega 16)
; Un programa generalmente inicia en la direccin 0
org
0x000
jmp
Principal ; Se evita el vector de interrupciones
org
jmp

0x002
Externa_0

; Bifurca a su ISR correspondiente

org
jmp

0x004
Externa_1

; Bifurca a su ISR correspondiente

; Si fuera necesario, ac estaran otras bifurcaciones


org
0x02A
Principal: . . .
. . .
. . .

; 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

50

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.

51

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.

52

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

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.

54

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

55

Sistema de Inicializacin

56

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

RESET DEL CONTADOR

RESET
INTERNO

Oscilador del
Watchdog Timer

Generador
de Reloj

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

CLK

Contador de Retardos

TIMEOUT

57

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

58

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

59

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)

60

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

TIME OUT

VBOT-

VBOT+

tOUT

RESET
INTERNO

Dentro de los Bits de configuracin del ATMega8 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

61

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
62

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

63

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.

64

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.

65

Sistema del reloj


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

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.

67

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

68

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
69

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

70

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

71

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

72

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.

73

Administracin de la Potencia y 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 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:

74
Nota: 1. El modo Standby est disponible solo con cristales o resonadores externos.
El modo Extended Standby no est disponible en el ATMega8.

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.

75

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 extendido de espera: 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.

76

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

77

Vous aimerez peut-être aussi