Sunteți pe pagina 1din 72

2.

Organización interna de los


microcontroladores

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.

En particular utilizaremos el ATMega8 o el ATMega16, cuyas


características técnicas se resumen a continuación:
Flash (Kbytes) 8 / 16 TWI Yes

EEPROM (bytes) 512 ISP Yes

SRAM (Bytes) 1024 10-bit A/D (channels) 8

Max I/O Pins 23 / 32 Analog Comparator Yes

F.max (MHz) 16 Watchdog Yes

Vcc (V) 2.7-5.5 On Chip Oscillator Yes

16-bit Timers 1 Hardware Multiplier Yes

8-bit Timer 2 Interrupts 19/21

PWM (channels) 3/4 Ext Interrupts 2/3


RTC Yes Self Program Memory Yes
PDIP 28 TQFP 32 MLF 32 /
Master/Slave SPI 1 Packages
PDIP 40 TQFP 44 MLF 44
USART 1 JTAG Intarface No / Yes

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.

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 aritméticas y lógicas entre registros


o entre un registro y una constante. Aunque también hay
operaciones con un solo registro. Después de una operación
aritmética, el registro de Estado (Status Register) es
actualizado, para reflejar información acerca de la operación.

8
AVR CPU CORE
El Archivo de Registros contiene 32
registros de propósito general de 8 bits,
habilitados para un acceso rápido.

Seis de los 32 registros pueden ser usados


como apuntadores de 16 bits para
direccionamiento indirecto en el espacio de
datos, habilitando cálculos de direcciones
eficientes. Para ello, estos registros se ( XL )

denominan X, Y y Z.
( XH )
( YL )
( YH )
( ZL )
El registro Z también puede usarse como ( ZH )

apuntador a la memoria de programa.

9
AVR CPU CORE

El flujo del programa lo determinan las 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 segmentación de dos etapas. Mientras
una instrucción está siendo ejecutada, la siguiente es
capturada de la memoria de programa. Este concepto
hace que se produzca una instrucción por cada ciclo de
reloj.

10
AVR CPU CORE

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.
11
AVR CPU CORE
Para la ejecución, la duración del ciclo es suficiente para permitir la
lectura de registros, la operación de la ALU y la escritura en el
registro destino.

12
AVR CPU CORE
Mapa de memoria

13
Mapa de Memoria

Flash para Programa SRAM de Datos EEPROM de datos


$000 $0000 $000
Archivo
32
de Registros
$001F
$0020
64 Registros
I/O 8
$005F
$0060 bits
SRAM
Interna
$1FF
8
bits $045F

SRAM
Externa

16 bits (Otros AVRs)

$FFF (ATMega 16)


($1FFF)

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.

La memoria se puede particionar en una sección para aplicación y


una sección de arranque, donde podría manejarse un cargador
para auto programación (Boot Loader Support – Read-While-
Write Self-Programming).

En el espacio de almacenamiento se incluyen a los Vectores de


Interrupciones, iniciando en la dirección $000. El número de
vectores, en la familia AVR, varia de procesador a procesador,
en función de los recursos existentes.

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

El archivo de Registros está optimizado para el repertorio de


instrucciones AVR.

Las instrucciones que operan sobre el Archivo


de Registros tienen acceso casi a todos ellos, y
la mayoría se ejecutan en 1 ciclo de reloj.

Cada registro tienen una dirección que le


permite ser tratado como cualquier otra
localidad de RAM (0x000 – 0x01F), utilizando
instrucciones LD y SD.
( XL )
( XH )
De R26 a R31 pueden usarse como apuntadores ( YL )

para direccionamiento indirecto.


( YH )
( ZL )
( ZH )

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.

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 través de las instrucciones SBIS y SBIC.

21
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 periféricos, se revisarán en sus


correspondientes secciones.
22
Registro de ESTADO (SREG: 0x3F o 0x5F)
Bit

Read/Write
Valor inicial

– I: Habilitador global de Interrupciones,


con un 1 lógico, las interrupciones son habilitadas.

– T: Para respaldo de un bit, con la instrucción BLD para Carga y BST


para Almacenamiento.

– H: Bandera de acarreo de los 4 bits inferiores (Half)

– S: Bit de signo

– V: Bandera de Sobreflujo, en operaciones de complemento a dos.

– N: Bandera de Negativo

– Z: Bandera de Cero Se generan con operaciones


Aritméticas y lógicas
– C: Bandera de Acarreo
23
Apuntador de Pila (SP)
$3E
$3D

La pila es implementada en el espacio de propósito general (que es de 1024


bytes).

Es usada para almacenamiento temporal de variables (instrucciones PUSH y


POP) o durante la llamada de subrutinas o el manejo de interrupciones.

El registro SP es el apuntador al tope de la pila. Realmente el 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.

Después 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 válido.

24
Acceso al espacio de Propósito General
Carga (Load)

Almacenamiento (Store)

La arquitectura AVR es del tipo Registro – Registro.


Existen diversas instrucciones para cargas o almacenamientos,
ya sean de manera directa o indirecta.
25
Acceso al espacio de Propósito General

(almacenamiento)

(carga)

Acceso a Memoria Siguiente Instrucción

La etapa de ejecución de un acceso a memoria, ya sea


carga o almacenamiento, requiere de dos ciclos de reloj.
26
Memoria EEPROM para datos
Espacio no volátil para el almacenamiento de datos, cuyo tamaño
varia entre procesadores. Para el ATMega8 y ATMega16 es de
512 bytes.

La memoria EEPROM está en un espacio independiente y se


requiere del uso de 3 registros I/O para su acceso:

EEAR - Para la dirección (0x1F, 0x1E).

EEDR - Para el dato (0x1D)

EECR - Para el control (0x1C)

27
Bits del registro de CONTROL :

– EERIE: EEPROM Ready Interrupt Enable


En alto habilita la interrupción por EEPROM. La EEPROM genera
una interrupción 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á
automáticamente por Hardware.

– EEWE: EEPROM Write Enable


Debe ponerse en alto para dar inicio a un ciclo de escritura. Se
limpiará automáticamente 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 interrupción.

– EERE: EEPROM Read Enable


Debe ponerse en alto para dar inicio a un ciclo de lectura, se
limpiará automáticamente por Hardware. El dato leído está
disponible de manera inmediata. No es posible realizar una
lectura si hay una escritura en proceso.
28
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 dirección
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
29
Función de Escritura en EEPROM :
// Recibe el dato y la dirección a escribir

void EEPROM_write (unsigned char dato, unsigned int direccion )


{
// Asegura que no hay escritura en proceso
while ( EECR & 1 << EEWE )
;

// Establece la dirección
EEAR = direccion;

// Coloca el dato
EEDR = dato;

// Pone en alto al habilitador maestro


EECR |= ( 1 << EEMWE );

// Inicia la escritura
EECR |= ( 1 << EEWE );
}

30
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 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 :

// Regresa el dato leído, se recibe la dirección

unsigned char EEPROM_read(unsigned int direccion)


{
// Asegura que no hay una escritura en proceso
while ( EECR & 1 << EEWE)
;
// Establece la dirección
EEAR = direccion;

// 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

Las funciones alternas se


revisarán conforme se
vayan revisando los
periféricos que las
requieren.

33
Puertos de
Entrada/Salida
en el
ATMega16

Incluye 4 puertos, todas las


terminales con una función
alterna.

• PA – 8 bits
• PB – 8 bits
• PC – 8 bits
• PD – 8 bits

Similarmente, las funciones


alternas se revisarán mas
adelante.

34
Puertos de Entrada/Salida

 Para cada puerto se manejan tres registros, dentro del espacio


de registros I/O

 Un registro de lectura/escritura sobre un lacth, conectado a la


terminal del puerto (PORTx). En este se escribe, cuando el
puerto está configurado como salida.

 Un registro de lectura/escritura que define la dirección del


puerto (DDRx). Las direcciones pueden configurarse de
manera independiente, para cada terminal.
 1 – Salida
 0 – Entrada

 Un registro solo de lectura, para hacer lecturas directas en


las terminales de los puertos (PINx).

35
Registros para el manejo de puertos
Registros en el ATMega8

Registros en el ATMega16

36
Puertos de Entrada/Salida

El bit PUD (Pull-Up


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

37
Puertos de Entrada/Salida

Si en PORTxn se escribe un 1 lógico cuando la terminal es configurada como entrada,


(DDxn, = 0) el resistor de pull-up es activado. Para anular al resistor de pull-up, se debe
escribir un 0 en PORTxn o la terminal se debe configurar como salida (DDxn, = 0).
Suponiendo que el bit PUD tiene 0.

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.

Si en PORTxn se escribe un uno lógico cuando la terminal se configura como salida, en


PINxn se tendrá un nivel alto. Si se escribe un cero, se tendrá un nivel bajo.

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 )

Adecuado para entradas con botones o interruptores.

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

; Inserta nop para sincronización


nop

; Lee las terminales del puerto


in r16,PINB
...
40
Ejemplo en lenguaje C
unsigned char i;
...
// Define pull-ups y ajusta las salidas en alto
// Define direcciones para las terminales del puerto
...
PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);
DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);

// Inserta nop para sincronización


_NOP();

/* Lee las terminales del puerto */


i = PINB;

41
Sistema de Interrupciones

 Una interrupción es la ocurrencia de una condición – un evento – que


ocasiona la suspensión temporal de un programa mientras se atiende al
evento con otro programa. Una vez que se concluya la atención a la
interrupción, se continúa con la ejecución del programa principal.

 Al utilizar un sistema manejador de interrupciones, se tiene la ilusión de


que se están haciendo diferentes tareas en forma simultánea.

 Al programa que trata con una interrupción se le conoce como rutina de


servicio a la interrupción (ISR) o manejador de interrupción.

 La rutina de atención para una interrupción debe colocarse en una


dirección pre-establecida por Hardware, formando parte de un vector de
interrupciones.

42
Sistema de Interrupciones

Un aspecto importante es que los eventos pueden ocurrir en cualquier


momento, es decir, en forma asíncrona.

Programa sin interrupciones

Programa principal

Tiempo

Programa con interrupciones

Nivel de la RSI RSI RSI


Interrupción

* ** * ** * **
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:

 Por inicialización o Reset

 Dos interrupciones externas (tres en el ATMega16)

 Siete interrupciones por los temporizadores (ocho en el ATMega16),


pueden ser por comparación, captura o esbordamiento.

 Una al completar una transferencia serial (puerto SPI)

 Tres debidas el puerto serie, por transmisión, recepción o


buffer vacío (USRAT)

 Una por el convertidor analógico digital.

 Una al finalizar una escritura en EEPROM.

 Una por el comparador analógico.

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

 Una para la escritura en memoria de programa. 44


Interrupciones en los AVRs
 Las interrupciones no están activas, después de un reset.

 Su activación requiere la puesta en alto del bit I, en el registro de


estado (SREG), además de las habilitaciones individuales para
cada periférico incorporado en el microcontrolador (se revisarán
según se revisen los recursos).

 Además del Reset, se tienen 18 fuentes de interrupción, con


direcciones diferentes, en el vector de interrupciones.

 Al generarse una interrupción, el PC es almacenado en la pila y


toma el valor de una entrada en el vector de interrupciones (según
sea la interrupción). Además de desactivar al bit I para no aceptar
mas interrupciones.

 Una rutina de atención a interrupciones debe terminar con la


instrucción RETI, la cual recupera el valor de la pila para el PC y
ajusta el valor del bit I.

45
Vectores de Interrupción en el ATmega8

Esta es una distribución típica, el ATMega 8 puede ubicar un auto-cargador


en su memoria de programa. Si se utiliza, las ubicaciones van a cambiar. 46
Vectores de Interrupción en el ATmega16

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

; Si fuera necesario, acá estarían otras bifurcaciones


org 0x013
Principal: …… ; Acá estará el código principal
…… ; Debe incluir la activación de las interrupciones
……
; Posterior al código principal, deben situarse las ISRs

Externa_0: ; Respuesta a la interrupción externa 0


…..
…..
RETI ; Debe terminar con RETI

Externa_1: ; Respuesta a la interrupción externa 1


…..
…..
RETI ; Debe terminar con RETI 48
Manejo de Interrupciones
(para el ATMega 16)
; La ejecución de un programa generalmente inicia en la dirección 0
org 0x000
jmp Principal ; Debe evitar el vector de interrupciones
; jmp utiliza 2 palabras, tiene mayor alcance
org 0x002
jmp Externa_0 ; Debe bifurcar a su ISR correspondiente

org 0x004
jmp Externa_1 ; Debe bifurcar a su ISR correspondiente

; Si fuera necesario, acá estarían otras bifurcaciones


org 0x02A
Principal: …… ; Acá estará el código principal
…… ; Debe incluir la activación de las interrupciones
……
; Posterior al código principal, deben situarse las ISRs

Externa_0: ; Respuesta a la interrupción externa 0


…..
…..
RETI ; Debe terminar con RETI

Externa_1: ; Respuesta a la interrupción externa 1


…..
…..
RETI ; Debe terminar con RETI 49
Manejo de Interrupciones
(Alto Nivel)
#include <avr/io.h> // Biblioteca que define entradas y salidas
#include <avr/interrupt.h> // Necesaria para el manejo de Interrupciones

// Las ISRs se ubican antes del programa principal

ISR (INT0_vect) // Función que da servicio a la interrupción externa 0


{
....
}

ISR (INT1_vect) // Función que da servicio a la interrupción externa 1


{
....
}

int main(void) // Programa Principal


{
..... // Debe incluir la activación de las interrupciones
}
En alto nivel, todas las funciones de atención a interrupciones 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 guión bajo, por ejemplo:
TIMER2_COMP_vect.
50
Sistema de Inicialización
Se tienen las siguientes fuentes de Inicialización (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
mínima 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


reducción 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 lógico en el Registro de Reset, del
sistema JTAG (Solo en ATMega-16).
51
Sistema de Inicialización

52
Sistema de Inicialización

(Solo en ATMega-16)

53
Sistema de Inicialización

En el registro MCUSCR (0x34) se registra la condición de reset,


poniendo al bit correspondiente en alto.

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

JTRF: JTAG Reset Flag

WDRF: Watchdog Reset Flag Tienen Cero después de


suministrar la alimentación
(Power-on Reset)
BORF: Brown-out Reset Flag

EXTRF: External Reset Flag

PORF: Power-on Reset Flag


54
Sistema de Inicialización

Una vez que el MCU se recupera de una condición de Reset, espera


un tiempo de establecimiento (Tout – con un valor típico de 4 ms),
antes de recuperar al sistema, para garantizar que los registros
tienen su valor inicial.

Inicio con Reset conectado a VCC

55
Sistema de Inicialización

Reset extendido de manera externa.

Operación de un reset externo.


56
Inicialización por Brown-out

Se refiere a una inicialización cuando el voltaje de alimentación


(Vcc) cae por debajo de un umbral pre-establecido (VBOT)

Dentro de los Bits de configuración del ATMega8 existen 2 de interés:

- BODEN : Habilita la detección (Brown-out detection)


- BODLEVEL : Sin programar, el umbral es de 2.7 V
Programado, el umbral es de 4.0 V
57
Inicialización por Watchdog

Cuando el temporizador del Watchdog se desborda, genera un pulso


corto con una duración de 1 ciclo de reloj. El flanco de subida
provoca el reset interno y el de caída el inicio del tiempo de
establecimiento.

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:

 Estos bits se deben definir durante el proceso de programación del


microcontrolador.

 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

Nota: PonyProg es una herramienta solo de descarga, puede utilizarse en


conjunción con programadores que aprovechan la programación in-system de los
microcontroladores AVR.

62
Cristal/Resonador Externo

(1) No debe usarse con cristales, solo resonadores cerámicos.

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

 Programando CKOPT se utilizan los capacitores internos. En caso


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

 Los tiempos de arranque bajo estas opciones son:

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

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

 Sus tiempos de arranque:

 Los dispositivos se venden con CKSEL = “0001” y SUT = “10”


68
Reloj Externo

 Sus tiempos de arranque:

69
Distribución del reloj

Tipo de reloj (CLK) Uso

CPU Ruteado al CORE AVR: Incluyendo archivo de


registros, registro de Estado, Memoria de datos,
Stack Pointer, etc.
Flash Controla las funciones relacionadas con la memoria
FLASH, trabaja simultáneamente con la CPU
ADC Trabaja en un dominio dedicado al ADC, con el objetivo
de reducir el ruido generado por interferencia digital y
mejorar las conversiones.
I/O Es usado por los principales módulos I/O:
Temporizadores, SPI y USART. Además de emplearlo
en el módulo de interrupciones externas.
ASY Permite al Timer/Counter asíncrono sincronizarse
directamente desde un cristal externo de 32 kHz. Esta
frecuencia permite usar al Timer/Counter como un
contador de tiempo real aún cuando el dispositivo está
en modo SLEEP.

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.

 Los bits SM2, SM1 y SM0 de MCUCR determinan el modo:

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

S-ar putea să vă placă și