You are on page 1of 28

Microcontrolador de 8-bits con 8K Bytes de

Memoria de Programa Flash Programable En-Sistema

ATmega8535
ATmega8535L

Página 0
UNIDAD I.- ARQUITECTURA DEL MICROCONTROLADOR ATMEGA8535

Características del microcontrolador


• Microcontrolador AVR ® de 8-Bits de Alto Rendimiento, y Baja Potencia
• Avanzada Arquitectura RISC
- 130 Potentes Instrucciones - La mayoría se ejecutan en un solo ciclo de reloj
- 32 x 8 Registros de Trabajo de Propósito General
- Operación Totalmente Estática
- Rendimiento de Hasta 16 MIPS(Millones de Instrucciones Por Segundo) a 16 MHz
- Chip multiplicador de 2-ciclos

• Memorias de Datos y de Programa No Volátiles


- 8K Bytes de Memoria Flash Auto-programable En-Sistema
Resistencia: 10.000 Ciclos de Escritura / Borrado
- Sección Opcional para Código de Arranque con Bits de Bloqueo Independientes
para Lectura de Código no Autorizada
Programación en Sistema mediante el Programa de Arranque Integrado
Operación Verdadera de Leer-Mientras-Escribe
- 512 Bytes de EEPROM
Resistencia: 100.000 Ciclos de Escritura / Borrado
- 512 Bytes de SRAM interna
- Programación de Bits de Bloqueo para Seguridad del Software

• Características Periféricas
- Dos Temporizadores/Contadores de 8-bits con Divisor separado y Modos de Comparación
- Un Temporizador/Contador de 16-bit con Divisor separado, Modo de comparación y Modo de
Captura
- Contador de Tiempo Real con Oscilador Separado
- Cuatro canales PWM
- Convertidor Análogo Digital de 8-Canales y 10-Bits de Resolución
8 Canales con Referencia a una sola terminal común de tierra (Single-ended)
7 Canales Diferenciales solo para el encapsulado TQFP
2 Canales Diferenciales con Ganancia Programable a 1x, 10x o 200x solo para el encapsulado TQFP
- Interfaz Serial a Dos Hilos tipo “Byte-orientado” (TWI)
- USART Serie Programable
- Interfaz Serie SPI Maestro / Esclavo
- Temporizador de Vigilancia Programable (Timer Watchdog) con Oscilador Separado Integrado en el
Chip
- Comparador Análogo Integrado en el Chip

• Características Especiales del Microcontrolador


- Re Inicialización al Energizarse (Power-On Reset) y Detección Programable de Bajo Voltaje de
Alimentación (Brown –out)
- Oscilador RC Calibrado Interno.
- Fuentes de Interrupciones Externas e Internas.
- Seis Modos de Ahorro de Energía: Inactivo (Idle), Reducción de ruido del ADC, Ahorro de Energía
(Power-save), Reducción de Potencia (Power-down), Modo de Espera (Standby) y Modo de Espera
Extendido (Extended Standby).

• Encapsulados y Terminales de Entrada/Salida (E / S)


- 32 Líneas Programables de E / S
- 40-terminales PDIP, 44-terminales TQFP, 44- terminales PLCC, y 44- terminales QFN / FML

• Voltajes de operación
- 2,7 - 5.5V para el ATmega8535L
- 4.5 - 5.5V para el ATmega8535

• Grados de Velocidad
– 0 - 8 MHz para el ATmega8535L – 0 - 16 MHz para el ATmega8535
Página 1
Configuración y descripción de Terminales

Figura 1. Terminales del ATmega8535

PDIP

(XCK/T0) PB0 1 40 PA0 (ADC0)


(T1) PB1 2 39 PA1 (ADC1)
(INT2/AIN0) PB2 3 38 PA2 (ADC2)
(OC0/AIN1) PB3 4 37 PA3 (ADC3)
(SS) PB4 5 36 PA4 (ADC4)
(MOSI) PB5 6 35 PA5 (ADC5)

ATMEGA8535
(MISO) PB6 7 34 PA6 (ADC6)
(SCK) PB7 8 33 PA7 (ADC7)
RESET 9 32 AREF
Vcc 10 31 GND
GND 11 30 AVCC
XTAL2 12 29 PC7
XTAL1 13 28 PC6
(RXD) PD0 14 27 PC5 (TOSC2)
(TXD) PD1 15 26 PC4 (TOSC1)
(INT0) PD2 16 25 PC3
(INT1) PD3 17 24 PC2
(OC1B) PD4 18 23 PC1 (SDA)
(OC1A) PD5 19 22 PC0 (SCL)
(ICP1) PD6 20 21 PD7 (Oc2)

TQFP/MLF
PLCC
PB2 (INT2/AIN0)
PB3 (OC0/AIN1)

PB0 (XCK/T0)

PB2 (INT2/AIN0)
PB3 (OC0/AIN1)
PA0 (ADC0)
PA1 (ADC1)
PA2 (ADC2)
PA3 (ADC3)

PB0 (XCK/T0)
PB4 (SS)

PB1 (T1)

PA0 (ADC0)
PA1 (ADC1)
PA2 (ADC2)
PA3 (ADC3)
PB4 (SS)

PB1 (T1)
GND
Vcc

GND
Vcc
44
43
42
41
40
39
38
37
36
35
34

2
6
5
4
3

1
44
43
42
41
40

(MOSI) PB5 1 33 PA4 (ADC4) (MOSI) PB5 7 39 PA4 (ADC4)


(MISO) PB6 2 32 PA5 (ADC5) (MISO) PB6 8 38 PA5 (ADC5)
(SCK) PB7 3 31 PA6 (ADC6) (SCK) PB7 9 37 PA6 (ADC6)
RESET 4 30 PA7 (ADC7) RESET 10 36 PA7 (ADC7)
VCC 5 29 AREF VCC 11 35 AREF
GND 6 28 GND GND 12 34 GND
XTAL2 7 27 AVCC XTAL2 13 33 AVCC
XTAL1 8 26 PC7 (TOSC2) XTAL1 14 32 PC7 (TOSC2)
(RXD) PD0 9 25 PC6 (TOSC1) (RXD) PD0 15 31 PC6 (TOSC1)
(TXD) PD1 10 24 PC5 (TXD) PD1 16 30 PC5
(INT0) PD2 11 23 PC4 (INT0) PD2 17 29 PC4
18
19
20
21
22
23
24
25
26
27
28
12
13
14
15
16
17
18
19
20
22
21

GND

(SDA) PC1
(INT1) PD3
(OC1B) PD4
(OC1A) PD5
(ICP1) PD6
(Oc2) PD7

(SCL) PC0

PC2
PC3
Vcc
GND

(SDA) PC1
(INT1) PD3
(OC1B) PD4
(OC1A) PD5
( ICP1) PD6
(Oc2) PD7

(SCL) PC0

PC2
PC3
Vcc

Página 2
Descripción General.
El ATmega8535 es un microcontrolador CMOS de baja potencia, de 8-bits, basado en la
arquitectura mejorada AVR RISC. Mediante la ejecución de instrucciones en un solo ciclo de
reloj, el ATmega8535 logra acercarse al procesamiento de Un Millón de Instrucciones Por
Segundo (MIPS) por MHz permitiendo al diseñador del sistema optimizar el consumo de
energía versus velocidad de procesamiento.

Diagrama de Bloques

Figura 2. Diagrama de bloques.


PA0-PA7 PC0-PC7
Vcc

PORTA DRIVERS/FUFFERS PORTC DRIVERS/FUFFERS

PORTA DIGITAL INTERFACE PORTC DIGITAL INTERFACE


GND

AVCC
ADC
MUX & ADC INTERFACE TWI

AREF

TIMERS/
PROGRAM STACK OSCILLATOR
COUNTERS
COUNTER POINTER

PROGRAM INTERNAL
SRAM
FLASH OSCILLATOR
XTAL1

INSTRUCTION GENERAL WATCHDOG OSCILLATOR


REGISTER PURPOSE TIMER
REGISTERS
XTAL2
X
INSTRUCTION MCU CTRL.
DECODER Y &TIMING RESET
Z

CONROL INTERNAL
LINES INTERRUPT CALIBRATED
ALU UNIT
OSCILLATOR

AVR CPU STATUS


REGISTER EEPROM

PROGRAMMING SPI USART


LOGIC

+ COMP.
_ INTERFACE

PORTB DRIVERS/FUFFERS PORTD DRIVERS/FUFFERS

PORTB DIGITAL INTERFACE PORTD DIGITAL INTERFACE

PB0-PB7 PD0-PD7

Página 3
El núcleo AVR combina un rico conjunto de instrucciones con 32 registros de trabajo de
propósito general. Los 32 registros están conectados directamente a la unidad aritmética y
lógica (ALU), permitiendo que dos registros independientes sean accesados en una sola
instrucción ejecutada en un ciclo de reloj. La arquitectura resultante genera un código más
eficiente mientras que el logro de procesamiento es de hasta diez veces más rápido que en los
microcontroladores CISC convencionales.

El ATmega8535 proporciona las siguientes características: 8K bytes de Memoria Flash


Programable En-Sistema con capacidad de Escribir-Mientras-Lee, 512 bytes de EEPROM, 512
bytes de SRAM, 32 líneas de E / S de propósito general, 32 registros de trabajo de propósito
general, tres flexibles Temporizadores/Contadores con modos de comparación, interrupciones
internas y externas, un puerto serie programable USART, una interfaz serie byte-orientada de
Dos Hilos, un ADC de 8-canales y 10 bits de resolución con etapa opcional de entrada
diferencial con ganancia programable en encapsulados TQFP, un Temporizador de vigilancia
programable con oscilador interno, un puerto serie SPI, y seis modos de ahorro de energía
seleccionables por software. El modo inactivo (Idle) detiene el CPU pero permite que la SRAM,
los temporizadores/Contadores, el puerto SPI, y el sistema de interrupciones siga funcionando.
El Modo Reducción de Potencia (Power-Down) guarda el contenido de los registros, pero
congela el oscilador, desactivando todas las otras funciones del chip hasta la siguiente
interrupción o un restablecimiento por hardware. En el modo de ahorro de energía (Power-
save), el temporizador asíncrono sigue funcionando, lo que permite al usuario mantener una
base de tiempo, mientras que el resto del dispositivo está durmiendo. El modo reducción de
ruido del ADC, detiene al CPU y a todos los módulos de E/S excepto al temporizador asíncrono
y al ADC, para reducir al mínimo el ruido de conmutación en las conversiones del ADC. En el
modo de espera (Stand-by), el oscilador a cristal/resonador permanece funcionando, mientras
que el resto del dispositivo está durmiendo. Esto permite una muy rápida puesta en marcha en
combinación con un bajo consumo de potencia. En el modo de espera extendido, tanto el
oscilador principal como el temporizador asíncrono seguirán funcionando.

Página 4
Núcleo AVR
Introducción

Esta sección discute de forma general la arquitectura del núcleo AVR. La función
principal del núcleo del CPU es asegurar la correcta ejecución de los programas. El procesador
debe ser capaz de accesar memorias, realizar cálculos, controlar periféricos, y manejar las
interrupciones.

Descripción de la Arquitectura

Figura 3. Diagrama de Bloques de la Arquitectura del MCU AVR.


8-bit Data Bus

Flash Program Status


Program Counter and Control
Memory

Interrupt
32x8 Unit
Instruction General
Register Purpose SPI
Registers Unit

Instruction Watchdog
Decoder
Indirect Addressing

Timer
Direct Addressing

ALU Analog
Control Lines Comparator

I/O Module 1

Data I/O Module 2


SRAM

I/O Module n
EEPROM

I/O Lines

Con el fin de maximizar el rendimiento y el paralelismo, el AVR usa una arquitectura


Harvard - con memorias y buses separados para programas y datos. Las instrucciones en la
memoria de programa se ejecutan con un solo nivel tubular. Mientras que una instrucción se
está ejecutando, la siguiente instrucción es pre-buscada desde la memoria de programa. Este
concepto permite que las instrucciones sean ejecutadas en cada ciclo de reloj. La memoria del
programa es una memoria Flash Re-Programable En Sistema.

El archivo de registros de rápido acceso contiene 32 registros de trabajo de propósito


general de 8-bits con un tiempo de acceso de un solo ciclo de reloj. Esto permite la operación
de la unidad aritmética lógica (ALU) en un solo ciclo. En una operación típica de la ALU, dos

Página 5
operandos son sacados del Archivo de Registros, la operación es ejecutada, y el resultado se
regresa al Archivo de Registros - en un solo ciclo de reloj.
Seis de los 32 registros pueden ser usados como tres registros apuntadores de 16-bits
en el direccionamiento indirecto para el acceso a direcciones en el Espacio de Datos-
habilitando un eficiente cálculo de direcciones. Uno de estos apuntadores de dirección se puede
utilizar también como un apuntador de dirección para tablas almacenadas en la memoria de
programa (tablas look-up). Estas funciones son añadidas a los registros de 16 bits X, Y y Z-,
que se describe más adelante en esta sección.

La ALU soporta operaciones aritméticas y lógicas entre registros o entre una constante
y un registro. También pueden ser ejecutadas en la ALU operaciones de un solo Registro.
Después de una operación aritmética, el Registro de Estado es actualizado para reflejar la
información sobre el resultado de la operación.

El flujo del Programa es controlado por instrucciones de salto condicional e incondicional,


por instrucciones de llamadas a subrutinas, capaces de abordar directamente todo el espacio
de direcciones. La mayoría de las instrucciones AVR tiene un único formato de una palabra de
16 bits. Cada dirección de memoria de programa contiene una instrucción de 16 - o 32-bits.

La Memoria de Programa Flash está dividida en un espacio de dos secciones, la sección


de arranque del Programa y la sección de programación de aplicaciones. Ambas secciones
tienen bits de bloqueo dedicados para la protección de escritura y protección de
lectura/escritura. La instrucción SPM que escribe en la sección de aplicación de la memoria
Flash debe residir en la sección de arranque del programa.

Durante las interrupciones y llamadas de subrutina, la dirección de retorno del Contador


de Programa (PC) es almacenada en la pila. La Pila está localizada en la memoria de datos de
propósito general SRAM, y en consecuencia, el tamaño de la pila es limitado sólo por el tamaño
total de la SRAM y el uso de la SRAM. Todos los programadores deben inicializar el SP en la
rutina de restablecimiento (antes de ejecutar subrutinas e interrupciones). El apuntador de pila
SP es un registro de lectura/escritura accesible en el espacio de I/O. La memoria de datos
SRAM puede ser fácilmente accesible a través de cinco modos de direccionamiento soportados
en la arquitectura AVR.

Un flexible módulo para interrupciones tiene sus registros de control en el espacio I/O
con un bit adicional de Habilitación Global de Interrupción en el Registro de Estado. Todas las
interrupciones tienen un Vector de Interrupción separado en la tabla de Vectores de
Interrupción. Las interrupciones tienen una prioridad de acuerdo con la posición del Vector de
Interrupción. Cuanto menor sea la dirección del Vector de Interrupción, mayor es la prioridad.

El espacio de memoria de I/O contiene 64 direcciones para funciones periféricas del CPU
así como Registros de Control, SPI, y otras funciones de E/S. La memoria de I/O puede ser
accesada directamente, o como localidades de Espacio de Datos, direcciones 0x20 - 0x5F,
después de las direcciones del Archivo de Registros.

Página 6
Unidad Aritmética y Lógica- ALU

La ALU AVR de alto rendimiento opera en conexión directa con los 32 registros de
trabajo de propósito general. Dentro de un solo ciclo de reloj, son ejecutadas operaciones
aritméticas entre registros de propósito general o entre un registro y un dato inmediato. Las
operaciones de la ALU se dividen en tres categorías principales - aritmética, lógica, y funciones
a nivel de bits. Algunas implementaciones de la arquitectura también proveen un poderoso
multiplicador soportando así multiplicaciones de números con signo o sin signo y además
formato fraccional. Véase "el Conjunto de Instrucciones " para una descripción detallada.

Registros del CPU


El microcontrolador está compuesto por dos áreas principales: área del CPU, y área de
los periféricos. Cada una de estas áreas contiene sus propios registros.

En esta sección solo se describirán los registros del CPU con la finalidad de entender la
separación entre estos, y los registros periféricos.

Registro de Estado
Este Registro también llamado Registro de Banderas contiene información de estado del
resultado de la última instrucción aritmética ejecutada. Esta información puede utilizarse para
alterar el flujo del programa con el fin de realizar operaciones condicionales. Tenga en cuenta
que el Estado de Registro se actualiza después de todas las operaciones de la ALU, tal como
se especifica en la Referencia del Conjunto de Instrucciones. Esto, en muchos casos, elimina la
necesidad de utilizar instrucciones de comparación, resultando un código más compacto y
rápido.

El Registro de Estado no se almacena automáticamente al entrar en una rutina de


interrupción ni es restaurado cuando regresa de una interrupción. Esto debe ser manejado por
programación.

Figura 4. Registro de Estado del MCU AVR.


Bit 7 6 5 4 3 2 1 0
I T H S V N Z C SREG
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Valor Inicial 0 0 0 0 0 0 0 0

Bit 7 - I: Habilitación Global de Interrupción

El bit de Habilitación Global de Interrupción debe ser puesto en uno para habilitar las
interrupciones. El control de habilitación individual de interrupción se realiza en registros
de control por separado. Si el bit de Habilitación Global de Interrupción se borra, ninguna
de las interrupciones se habilitará independiente de que se hayan habilitado las
interrupciones individualmente. El bit-I es borrado por hardware después de que ha
ocurrido una interrupción, y es puesto en uno por la instrucción RETI para habilitar
Página 7
interrupciones posteriores. El bit-I también puede ser borrado o puesto en uno por
programación mediante las instrucciones SEI y CLI, como se describe en la referencia
conjunto de instrucciones.

Bit 6 - T: Bit de Almacenamiento de Copia

Las instrucciones copia de bit BLD (Bit de carga) y BST (Almacenamiento de Bit) utilizan
el bit-T como fuente o destino para la manipulación de algún bit. Un bit de un registro
desde el Archivo de Registros se puede copiar en T por la instrucción BST, y un bit en T
se puede copiar en un registro del archivo de Registros con la instrucción BLD.

Bit 5 - H: Bandera de Medio Cargo

La bandera de medio cargo H indica un medio cargo en algunas operaciones aritméticas.


El medio es usado en aritmética BCD. Consulte la sección "Descripción del conjunto de
instrucciones" para obtener información detallada.

Bit 4 - S: Bit de Signo S = N ⊕ V

El bit-S es siempre una o exclusiva entre la Bandera de Negativo N y el Complemento a


Dos de la Bandera de Sobreflujo V. Véase la "Descripción del conjunto de instrucciones"
para obtener información detallada.

Bit 3 - V: Bandera de Sobreflujo en Complemento a Dos

La Bandera de sobreflujo en complemento a dos V soporta aritmética en complemento a


dos. Ver la "Descripción del conjunto de instrucciones" para obtener información
detallada.

Bit 2 - N: Bandera de Negativo

La Bandera de negativo N indica un resultado negativo en una operación aritmética o


lógica. Ver la "Descripción del conjunto de instrucciones" para obtener información
detallada.

Bit 1 - Z: Bandera de Cero

La Bandera Cero Z indica cero en el resultado de una operación aritmética o lógica.


Véase el "Descripción del conjunto de instrucciones" para obtener información detallada.

Bit 0 - C: Bandera de Cargo

La Bandera de Cargo C indica un cargo en una operación aritmética o lógica. Véase la


"Instrucción Descripción del conjunto "para obtener información detallada.

Página 8
Archivo de Registros

El Archivo de Registros está optimizado para el conjunto de instrucciones RISC del AVR
Mejorado. Con el fin de alcanzar el grado de rendimiento y flexibilidad, los siguientes esquemas
de entrada/salida son soportados por el Archivo de Registros:

• Un operando de salida de 8 bits y un resultado de entrada de 8 bits


• Dos operandos de salida de 8 bits y un resultado de entrada de 8 bits
• Dos operandos de salida de 8 bits y un resultado de entrada de 16 bits
• Un operando de salida de 16 bits y un resultado de entrada de 16 bits

La figura 5 muestra la estructura de los 32 registros de trabajo de propósito general en el CPU.

Figura 5. Registros de Trabajo de Propósito General del CPU AVR

7 0 Dirección
R0 0x00
R1 0x01
R2 0x02
...
R13 0x0D
Registros de R14 0x0E
Trabajo de R15 0x0F
Proposito
General R16 0x10
R17 0x11
...
R26 0x1A Byte Bajo del Registro X
R27 0x1B Byte Alto del Registro X
R28 0x1C Byte Bajo del Registro Y
R29 0x1D Byte Alto del Registro Y
R30 0x1E Byte Bajo del Registro Z
R31 0x1F Byte Alto del Registro Z

La mayoría de las instrucciones operan en el Archivo de Registros teniendo acceso


directo a todos los registros, y la mayoría de estas son instrucciones de un solo ciclo.

Como se muestra en la Figura 5, cada registro se asigna también a una direccione de


memoria de datos, mapeándolos directamente dentro de los primeros 32 lugares del Espacio de
datos del usuario. Aunque no están físicamente implementados como lugares SRAM, esta
organización de la memoria ofrece una gran flexibilidad en el acceso de los registros, tales
como los registros apuntadores de índice X, Y y Z que pueden ser usados para indexar
cualquier registro en el archivo.

Página 9
Los Registros X, Y, y Z

Los registros R26 .. R31 también tienen algunas funciones adicionales para uso de
propósito general. Estos registros son apuntadores de 16 bits para el direccionamiento indirecto
en la memoria de Datos. Los tres registros de direccionamiento indirecto X, Y y Z se definen
como se describe en la Figura 6.

Figura 6. Registros X, Y, y Z
15 XH XL 0
Registro-X 7 0 7 0
R27 (0x1B) R26 (0x1A)

15 YH YL 0
Registro-Y 7 0 7 0
R29 (0x1D) R28 (0x1C)

15 ZH ZL 0
Registro-Z 7 0 7 0
R31 (0x1F) R30 (0x1E)

En los diferentes modos de direccionamiento, estos registros de direccionamiento tienen


funciones tales como desplazamiento fijo, incremento automático y decremento automático
(véase la referencia conjunto de instrucciones para más detalles).

Registro Apuntador de Pila (Stack)

La pila se utiliza principalmente para el almacenamiento temporal de datos, para


almacenar variables locales y para almacenar las direcciones de retorno después de las
interrupciones y llamadas de subrutina. El Registro Apuntador de Pila siempre apunta a la cima
de la pila. Tenga en cuenta que la pila se implementa desde las ubicaciones de memoria
superiores hacia ubicaciones de memoria inferiores. Esto implica que una instrucción PUSH
decrementa el Apuntador de Pila.

El Apuntador de Pila apunta al área de pila en la memoria de datos SRAM en la que se


almacenan o se sacan las direcciones de retorno de subrutina o de retorno de interrupción.
Este espacio de pila en la memoria de datos SRAM debe ser definido por el programador antes
de que se ejecute cualquier llamada de subrutina o de que sean habilitadas las interrupciones.
Se debe de cargar al Registro Apuntador de Pila con una dirección por encima de la dirección
0x60. El apuntador de pila se decrementa en uno cuando los datos se empujan en la pila con la
instrucción PUSH, y se decrementa por dos cuando se empuja en la pila la dirección de retorno
de una llamada de subrutina o interrupción. El Apuntador de Pila se incrementa en uno cuando
los datos se extraen de la pila con la instrucción POP, y se incrementa por dos cuando los datos
se extraen de la pila con la instrucción de retorno de subrutina RET o con la instrucción de
retorno de interrupción RETI.

Página 10
El Apuntador de Pila AVR se implementa como dos registros de 8 bits en el espacio de
I/O. El número de bits utilizados en realidad es dependiente del microcontrolador usado. Tenga
en cuenta que el espacio de datos en algunos microcontroladores AVR es tan pequeño que
sólo se necesita SPL. En este caso, el Registro SPH no estará presente.

Figura 7. Registro Apuntador de Stack (SP = SPH+SPL)


15 SPH SPL 0
Bit SP9 SP8 SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0

Lectura/Escritura R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W
Valor inicial 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Registro Contador de Programa (PC)

El Registro Contador de Programa es un registro de 16-bits del cual solamente se utilizan


12-bits debido a que la cantidad de localidades de memoria de programa es de 4Kwords, esto
es un arreglo lineal de 4096 palabras, de tal forma que el PC solo contendrá una dirección que
va de 0x000 a 0xFFF (0000-0000-0000-----1111- 1111-1111)

Figura 8. Registro Contador de Programa (PC)


15 PCH PCL 0
PC11 PC10 PC9 PC8 PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0

Estos son los principales registros que controla el procesador, sin embargo existen otros
registros que son transparentes para el usuario.

Registro de Control y Estado del MCU (MCUCSR)

Este Registro provee información acerca de cuál fuente de reset causa un reset al MCU,
y es explicado en la pagina 18.

Sistema de Control y Reset


Durante el Restablecimiento, todos los registros de E/S se establecen a su valor inicial, e
inicia la ejecución del programa en el Vector de Reset. La instrucción situada en el vector de
restablecimiento debe ser una instrucción RJMP para saltar a la rutina de manejo de reset. Si el
programa nunca habilita una fuente de interrupción, los vectores de interrupción no se utilizan, y
regularmente el código de programa se puede colocar en esos lugares. Este es también el caso
si el vector de restablecimiento se encuentra en la sección de aplicaciones mientras que los
vectores de interrupción se encuentran en la sección de arranque, o viceversa. El diagrama del
circuito en la Figura 9 muestra la lógica de restablecimiento. La tabla 1 define los parámetros
eléctricos del circuito de restablecimiento.

Página 11
Los puertos de E/S del AVR se restablecen inmediatamente a su estado inicial, cuando
una fuente de restablecimiento se activa. Esto no requiere que ninguna fuente de reloj este en
funcionamiento.

Después de que todas las fuentes de reset se van a inactivo, se invoca a un contador
de retardo, que extiende el reset interno. Esto permite que la alimentación llegue a un nivel
estable antes de que inicie la operación normal. El periodo de tiempo del contador de retardo
es definido por el usuario a través de los Fusibles CKSEL. Las diferentes selecciones para el
período de retardo se presentan en el tema " Fuentes de Reloj "en la página 19.

Fuentes de Reset

El ATmega8535 tiene cuatro fuentes de Reset:


• Power-on Reset (Reset al Energizarse). El MCU se resetea cuando la tensión de
alimentación es inferior al voltaje de umbral (VPOT).

• External Reset (Restablecimiento Externo). El MCU es reseteado cuando un nivel bajo


está presente en la terminal de reset por un tiempo más largo que el pulso de longitud
mínima.

• Watchdog Reset (Reset por el Timer Watchdog). El MCU se restablece cuando el


período de tiempo establecido por el temporizador de vigilancia expira y si es que el
dispositivo de vigilancia está activado.

• Brown-out Reset (Reset por bajo voltaje). El MCU se reinicia cuando la tensión de
alimentación VCC está por debajo del voltaje de umbral Brown-out Reset (VBOT) si es
que el Detector de Brown-out está habilitado.

Figura 9. Señal del oscilador al encender la fuente


Al alimentarse el microcontrolador el
oscilador empieza a trabajar y al inicio
la señal es inestable y con
variaciones en su amplitud, pero con
el tiempo se estabiliza.

Para evitar que la señal inestable del


reloj tenga una mala influencia en el
comportamiento del microcontrolador,
es necesario mantener al
microcontrolador en un estado de
reset durante la estabilización del
oscilador del reloj.

Página 12
La figura 9 muestra la señal de un oscilador con un cristal de cuarzo al
encender la fuente de alimentación.
Figura 10. Lógica de Reset
DATA BUS

MCU Control and Status


Register (MCUCSR)

PORF
BORF
EXTRF
WDRF
VCC Power-on
Reset Circuit

Brown-out
BODEN Reset Circuit
BODLEVEL

INTERNAL RESET
Pull-up Resistor

RESET Spike Q
Filter Reset Circuit S

COUNTER RESE T
R

Watchdog
Timer

Watchdog
Oscillator

Clock CK Delay Counters


Generator TIMEOUT

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

Página 13
Tabla 1. Características del Reset

Símbolo Parámetro Condición Min(1) Tip(1) Max(1) Unid


Voltaje de Umbral del
1.4 2.3 V
Power-on Reset (rising)
VPOT
Voltaje de Umbral del
1.3 2.3 V
Power-on Reset (falling)(2)
Voltaje de Umbral de la
VRST 0.2 0.9 V
Terminal RESET
Mínimo ancho del pulso en
tRST 1.5 us
La terminal RESET
Voltaje de Umbral del BODLEVEL = 1 2.5 2.7 2.9
VBOT V
Brown-out Reset (3) BODLEVEL = 0 3.6 4.0 4.2
Mínimo período de bajo BODLEVEL = 1 2 us
tBOD voltaje
Para la Deteción Brown-out BODLEVEL = 0 2 us

Histéresis del Detector


VHYST 130 mV
Brown-out

Nota: 1. Los valores son sólo directrices.


2. El Power-on Reset no funcionará a menos que el voltaje de alimentación sea menor a
VPOT (transición negativa).
3. VBOT podrá ser inferior a la tensión nominal mínima de funcionamiento de algunos
dispositivos. Para dispositivos cuando sea el caso, el dispositivo es probado a VCC =
VBOT durante las pruebas de producción. Esto garantiza que ocurra un Brown-out
Reset antes de que VCC caiga a un voltaje donde la operación correcta de los
microcontroladores ya no está garantizada. La prueba se realiza utilizando BODLEVEL
= 1 para el ATmega8535L y BODLEVEL = 0 para el ATmega8535. BODLEVEL = 1 no
es aplicable para el ATmega8535.

Reset al Energizarse (Power-on Reset)

A pulso Power-on Reset (POR) es generado por un circuito de detección en el chip. El


nivel de detección se define en la tabla1. El POR se activa cada vez que VCC está por debajo
del nivel de detección. El circuito POR puede ser usado para activar la puesta en marcha del
reset, así como a detectar un fallo en la fuente de alimentación.

El circuito Power-on Reset (POR) asegura que el dispositivo es reiniciado desde el


momento en que se energiza. Alcanzando el voltaje de umbral del Power-on Reset se invoca al

Página 14
contador de retardo, el cual determina cuánto tiempo se mantiene el dispositivo en RESET
después de que se alcanza VCC. La señal de RESET es activada de nuevo, sin retardo,
cuando VCC disminuye por debajo del nivel de detección.

Figura 11. Puesta en Marcha del MCU, y RESET Ligado a Vcc.

Figura 12. Puesta en Marcha del MCU, y RESET Extendido Externamente.

Página 15
Reset Externo (External Reset)

Un Reset Externo es generado por un nivel bajo en la terminal de RESET. Pulsos de


Reset mayores que el mínimo ancho de pulso (véase el tabla 1) generará un reset, incluso si el
oscilador está detenido. Pulsos cortos no garantizan la generación de un reset. Cuando la señal
aplicada alcanza el Voltaje de Umbral de Reset - VRST en su borde positivo, el contador de
retardo arranca al MCU después de que el tiempo de espera tTOUT ha caducado.

Figura 13. Reset Externo Durante la Operación

Reset por bajo Voltaje (Brown-out Rest)

El ATmega8535 tiene un circuito de detección de Brown-out (BOD) para el monitoreo del


nivel de VCC durante el funcionamiento comparándolo con un nivel de disparo fijo. El nivel de
activación para BOD puede ser seleccionado por el fusible BODLEVEL a 2.7V (BODLEVEL no
programado), o 4.0V (BODLEVEL programado). El nivel de activación tiene una histéresis para
garantizar que la detección de Brown-out esté libre de picos parásitos. La histéresis en el nivel
de detección debe ser interpretada como VBOT + = VBOT + VHYST / 2 y VBOT = VBOT- VHYST / 2.

El circuito BOD puede ser habilitado o deshabilitado con el fusible BODEN. Cuando es
habilitado BOD (BODEN programadas), y VCC disminuye a un valor por debajo del nivel de
activación (VBOT- en la Figura 14), y el Reset Brown-out es activado inmediatamente. Cuando
aumenta VCC por encima del nivel de activación (VBOT + en la Figura 14), el contador de retardo
arranca al MCU después de que el periodo de tiempo tTOUT ha caducado.

El circuito BOD sólo detecta una disminución en el voltaje VCC si el voltaje se mantiene
por debajo del nivel de activación por más de un periodo mayor a tBOD indicado en la tabla 1.

Página 16
Figura 14. Reset Brown-out Durante la Operación

Reset generado por el Timer Watchdog (Watchdog Reset)

Cuando el dispositivo de vigilancia se va al tiempo de espera, este generará un breve


pulso de restablecimiento de una duración de un ciclo de CK. En la transición negativa de este
pulso, el timer generador de retardos inicia el conteo del tiempo de espera tTOUT. Consulte la
página 41 del manual del microcontrolador para más detalles sobre la operación del
temporizador de vigilancia.

Figura 15. Reset del Timer Watchdog Durante la Operación

Página 17
Registro de Control y Estado del MCU- MCUCSR

El Registro de Control y Estado del MCU provee información acerca de cuál fuente de
reset causa un reset al MCU

Figura 16. Registro de Control y Estado del MCU


Bit 7 6 5 4 3 2 1 0
ISC2 WDRF BORF EXTRF PORF MCUCSR

Read/Write R/W R/W R R/W R/W R/W R/W R/W


Valor Inicial 0 0 0 Ver Descripción de los Bits

• Bit 3 - WDRF: Bandera Watchdog Reset


Este bit es puesto en uno si se produce un watchdog Reset. Este bit se borra
por un Power-on Reset, o escribiéndole un cero.

• Bit 2 - BORF: Bandera Brown-out Reset


Este bit es puesto en uno si ocurre un Brown-out Reset. Este bit se borra por un
Power-on Reset, o escribiéndole un cero.

• Bit 1 - EXTRF: Bandera de Reset Externo


Este bit es puesto en uno si ocurre un Reset Externo. Este bit se borra por un
Power-on Reset, o escribiéndole un cero.

• Bit 0 - PORF: Bandera de Power-on Reset


Este bit es puesto en uno si ocurre un Power-on Reset. Este bit se borra
solamente escribiéndole un cero.

Para hacer uso de las Banderas de Reset para identificar una condición de reinicio, el
usuario deberá leer y resetear al MCUCSR lo antes posible en el programa. Si el registro se
borra
antes de que ocurra otro reset, la fuente de este reset puede encontrarse mediante el examen
de las Banderas de Reset.

Sistema de Reloj y Opciones de Reloj


Sistema de reloj y su distribución

En la figura 17 se presenta el sistema de reloj principal en el AVR y su distribución

Página 18
Figura 17. Distribución de las Señales de Reloj

CPU Clock-clkCPU
El CPU Clock es enrutado a las partes concernientes a la operación del núcleo del
sistema AVR. Ejemplo de tales módulos son el Archivo de Registros de Propósito General, el
Registro de Estado y la memoria de datos que retiene la dirección indicada por el Apuntador de
Stack. Deteniendo el reloj del CPU se inhibe al núcleo de la ejecución de cálculos y operaciones
generales.

I/O Clock-clkI/O
El reloj de I/O es usado por la mayoría de los módulos de I/O, tales como
Timers/Counters, SPI y USART. El reloj de I/O también es usado por el módulo de
interrupciones externas, pero note que algunas interrupciones externas son detectadas por la
lógica asíncrona permitiendo que tales interrupciones sean detectadas aun si el reloj de I/O es
detenido. También note que el reconocimiento de direcciones en el modulo TWI es llevado a
cabo asincrónicamente cuando el reloj clkI/O es detenido, habilitando la recepción de direcciones
TWI en todos los modos de hibernación.

FLASH Clock-clkFLASH
El reloj para la memoria flash controla la operación de la Interface flash. El reloj flash
usualmente esta activo simultáneamente con el reloj del CPU.

Asynchronous Timer Clock-clkASY


El reloj del timer asíncrono permite al timer/contador asíncrono conectarle directamente
una señal de reloj de 32khz desde un cristal externo. El dominio de este reloj dedicado, permite
que este timer/contador sea usado como un contador de tiempo real aun cuando el dispositivo
este en el modo de hibernación.

Página 19
ADC Clock-clkADC
El ADC es provisto con un reloj dominante dedicado. Esto permite detener al CPU y al
reloj clkI/O a fin de reducir el ruido generado por la circuitería digital. Esto da una mayor
precisión en el resultado de la conversión del ADC.

Fuentes de Reloj
El dispositivo cuenta con las siguientes opciones como fuentes de reloj, seleccionadas
mediante los bits de fusible flash mostrados en la tabla 2. El reloj desde la fuente seleccionada
es introducido al generador de reloj AVR y direccionado hacia el módulo apropiado.

Tabla 2. Opciones de selección de reloj

Nota 1. Para todos los fusibles “1” significa no programado y “0” significa programado

Las diferentes opciones de selección de reloj son dadas más adelante. Cuando el CPU
despierta del modo Power-down o del modo Power-save, la fuente de reloj seleccionada es
usada para generar el tiempo de arranque, asegurando la operación estable del oscilador antes
de que inicie la ejecución de instrucciones. Cuando el CPU inicia desde el reset, hay un retardo
adicional permitiendo que la alimentación alcance un nivel estable antes de que comience la
operación normal. El oscilador watchdog es usado para temporizar esta parte de tiempo real del
tiempo de arranque. El numero de ciclos del oscilador WDT usado para este propósito, es
mostrado en la tabla 3. La frecuencia del oscilador del watchdog es dependiente del voltaje de
alimentación como se muestra en la sección “características típicas del ATmega8535” en la
página 266 del manual.

Tabla 3. Número de ciclos del oscilador watchdog.

Fuente de reloj por default


El dispositivo viene programado de fabrica con CKCEL = “0001” y SUT = “10”. La fuente
de reloj configurada por defecto es por lo tanto el oscilador RC con tiempo de inicio más grande.
Esta configuración predeterminada garantiza que todos los usuarios puedan hacer el ajuste
deseado a su fuente de reloj, usando un programador En-sistema (In-system) o un programador
en paralelo.

Oscilador a Cristal
XTAL1 y XTAL2 son la entrada y salida respectivamente de un amplificador inversor el
cual puede ser configurado para usarse como un oscilador interno, tal como se muestra en la
figura 19. Puede ser usado un oscilador de cuarzo o un resonador cerámico. El fusible CKOPT
selecciona entre dos diferentes modos del amplificador oscilador. Cuando CKOPT es
Página 20
programado, la salida del oscilador oscilara al máximo. Este modo es apropiado cuando se
opera en un ambiente muy ruidoso o cuando desde la salida XTAL2 se maneja un segundo
driver de reloj. Este modo tiene un amplio rango de frecuencia. Cuando CKOPT no es
programado, el oscilador tiene una oscilación de salida muy pequeña. Esto reduce
considerablemente el consumo de energía. Este modo tiene un rango de frecuencia limitado y
este no puede ser usado para manejar otro driver de reloj.

Si se usan resonadores, la máxima frecuencia es de 8Mhz con CKOPT sin programar y


16Mhz con CKOPT programado. C1 y C2 siempre deberán de ser iguales para ambos
resonadores y cristales. El valor optimo de los capacitores depende del cristal o resonador en
uso, la cantidad de capacitancia parásita, y el ruido electromagnético del medio ambiente.
Algunas directrices iníciales para la selección de los condensadores para usar con cristales se
dan en la tabla 4. Para los resonadores cerámicos, se deberá usar los valores proporcionados
por el fabricante.

Figura 19. Conexión del cristal al oscilador.

El oscilador puede operar en tres modos diferentes, cada uno de ellos optimizado para
un rango de frecuencias especifico. El modo de operación es seleccionado con los fusibles
CKCEL3..0 como se muestra en la tabla 4.

Tabla 4. Modos de Operación del Oscilador a Cristal

El fusible CKCEL0 junto con el SUT1..0 seleccionan el tiempo de arranque como se


muestra en la tabla 5.

Página 21
Tabla 5. Selección del tiempo de arranque para osciladores a cristal.

Notas:
1. Estas opciones solo deben utilizarse cuando no operan cerca de la frecuencia máxima del
dispositivo, y solo si la estabilidad de la frecuencia en el tiempo de arranque no es importante
para la aplicación. Estas opciones no son adecuadas para los cristales.

2. Estas opciones están destinadas para el uso con resonadores de cerámica y se garantizará la
estabilidad de la frecuencia en el arranque.

Oscilador a Cristal de Baja frecuencia


Para utilizar un reloj con un cristal de 32.768Khz como fuente de reloj del dispositivo, el
oscilador de baja frecuencia debe ser seleccionado mediante el establecimiento de los fusibles
CKSEL en “1001”. El cristal se debe de conectar como se muestra en la figura 19. Programando
el fusible CKOPT, el usuario habilita la conexión de condensadores internos en XTAL1 y
XTAL2, eliminando así la necesidad de conectar capacitores externos. Los condensadores
internos tienen un valor nominal de 36pf.

Cuando es seleccionado este oscilador, el tiempo de arranque es seleccionado por los


fusibles SUT como se muestra en la tabla 6.

Página 22
Tabla 6. Selección del Tiempo de Arranque cuando se conecta un Oscilador a Cristal de Baja
Frecuencia

Nota: 1. Esta opción deberá ser usada solo si la estabilidad de la frecuencia en el tiempo de
arranque no es importante para la aplicación

Oscilador Externo RC
Para aplicaciones con tiempos insensibles, la configuración externa del circuito RC que
se puede hacer, se muestra en la figura 20. La frecuencia es más o menos estimada por la

ecuación f  . Donde C deberá ser al menos de 22pf. Al programar el fusible CKOPT, el
usuario puede habilitar la conexión de un condensador interno de 36pf entre la terminal XTAL1
y tierra, eliminando así la conexión de un condensador externo. Para obtener más información
sobre el funcionamiento del oscilador y detalles sobre cómo elegir R y C, refiérase a la nota de
aplicación oscilador externo RC.

Figura 20. Configuración Externa RC

El oscilador puede operar en cuatro modos diferentes, cada uno optimizado para un
rango de frecuencia específico. El modo de funcionamiento es seleccionado por los bits de
fusible CKSEL3..0 como se muestra en la tabla 7.

Página 23
Tabla 7. Modos de Operación del Oscilador Externo RC.

Cuando es seleccionado este oscilador, el tiempo de arranque es seleccionado por los fusibles
SUT tal como se muestra en la tabla8.

Tabla8. Selección del Tiempo de Arranque para un Oscilador Externo RC.

Nota: 1. Esta opción no deberá usarse cuando opere cerca de la máxima frecuencia del dispositivo

Oscilador RC Calibrado Interno


El oscilador RC calibrado interno provee una señal de reloj fija de 1.0, 2.0, 4.0 u 8.0 Mhz.
Todas las frecuencias tienen valores nominales a 5V y 25°C. Esta señal de reloj puede ser
seleccionada como la señal de reloj del sistema, programando los fusibles CKSEL como se
muestra en la tabla 9. Si esta opción es seleccionada, no se necesitan componentes externos.
El fusible CKOPT no deberá ser programado cuando se seleccione esta opción. Durante el
Reset, el hardware carga el byte de programación en el registro OSCCAL y de este modo
automáticamente el oscilador RC. La frecuencia del oscilador seleccionada de 1Mhz a 5V y
25°C da una calibración dentro de ±3% de la frecuencia nominal. Utilizando métodos de
calibración en tiempos de ejecución como se describe en las notas de aplicación disponibles en
www.atmel.com/avr es posible lograr una precisión de ±1% a cualquier temperatura y Vcc
dados. Cuando este oscilador es usado como el reloj del chip, el oscilador watchdog se seguirá
usando para el timer watchdog y para el tiempo de restablecimiento (Reset time-out). Para
mayor información del valor de calibración pre programado, vea la sección “calibración de byte”
en la página 239 del manual del microcontrolador.

Página 24
Tabla 9. Modos de Operación del Oscilador RC Calibrado Interno.

Nota: 1. El dispositivo es embarcado con esta opción.

Cuando este oscilador es seleccionado, el tiempo de arranque está determinado por los
fusibles SUT como se muestra en la tabla 10. XTAL1 y XTAL2 deberán de estar
desconectados.

Tabla 10. Selección del tiempo de arranque para el oscilador RC interno calibrado.

Registro de Calibración del Oscilador – OSCCAL

• Bits 7..0 – CAL 7..0: Valor de Calibración del Oscilador.

Escribiendo el byte de calibración en esta dirección, ajustara el oscilador para remover


variaciones en la frecuencia del oscilador. Durante el Reset, el valor de calibración de 1Mhz el
cual es colocado en el byte alto de firma (dirección 0x00) es cargado automáticamente en el
Registro OSCCAL. Si el oscilador RC es usado a otras frecuencias, los valores de calibración
deberán ser cargados manualmente. Esto puede ser hecho leyendo primeramente el byte de
firma mediante un programador, y después almacenando estos valores de calibración en la
Flash o en la EEPROM. Posteriormente estos valores pueden ser leídos por programación y
cargados al Registro OSCCAL.

Página 25
Cuando OSCCAL es cero, es seleccionada la frecuencia más baja disponible. Escribiendo
valores que no sean cero a este registro, se incrementa la frecuencia del Oscilador Interno.
Escribiendo 0xFF a este registro se selecciona la frecuencia más alta disponible. El Oscilador
calibrado es usado para temporizar el acceso a la memoria EEPROM y Flash. Si se escribe en
la Flash o en la EEPROM no calibre a más del 10% arriba de la frecuencia nominal. De otra
manera la escritura a la Flash o a la EEPROM puede fallar. Note que se intenta calibrar al
oscilador a una frecuencia de 1.0, 2.0, 4.0, y 8Mhz. Como se indica en la tabla 11, el ajuste a
otros valores no se garantiza.

Tabla 11. Rango de Frecuencias del Oscilador RC Interno.

Reloj Externo
Para manejar el dispositivo con una fuente de reloj externa, XTAL1 deberá de conectarse
como se muestra en la figura 21. Para arrancar el dispositivo con una fuente de reloj externa,
los fusibles CKSEL deberán de ser programados con “0000”. Programando el fusible CKOPT, el
usuario puede habilitar la conexión del condensador interno de 36pf entre XTAL1 y tierra.

Figura 21. Configuración para el Manejo de una Señal de Reloj Externa.

Cuando esta fuente de reloj es seleccionada, el tiempo de arranque es seleccionado por


los fusibles SUT como se muestra en la tabla 12.

Página 26
Tabla 12. Selección del Tiempo de Arranque con una Fuente de Reloj Externa

Cuando se aplique una fuente de reloj externa, es requerido evitar cambios repentinos en
la frecuencia de reloj aplicada, para asegurar una operación estable del MCU. Variaciones en la
frecuencia por mas del 2%, desde un ciclo de reloj, a otro puede conducir a un comportamiento
impredecible. Es requerido asegurar que el MCU se mantiene reseteado durante los cambios
de la frecuencia de reloj.

Oscilador del Timer/Counter


Para microcontroladores AVR con terminales externas para un oscilador conectado al
Timer/contador (terminales TOSC1 y TOSC2), el cristal es conectado directamente a estas
terminales. No se necesitan condensadores externos. El oscilador es optimizado para usarse
con un cristal de reloj de 32.768 khz. Aplicar una fuente de reloj externa en la terminal TOSC1
no es recomendado.

Página 27

You might also like