SlideShare una empresa de Scribd logo
1 de 378
Descargar para leer sin conexión
Características:
Microcontrolador AVR de 8 bits de alto rendimiento y bajo consumo.
Arquitectura Avanzada RISC
- 131 instrucciones. La mayoría de un solo ciclo de reloj de ejecución.
- 32 registros de trabajo de 8 bits para propósito general.
- Funcionamiento estático total.
- Capacidad de procesamiento de unos 20 MIPS a 20 MHz.
- Multiplicador por hardware de 2 ciclos
Memorias de programa y de datos no volátiles de alta duración
- 16/32/44 K bytes de FLASH auto programable en sistema
- 512B/1K/2K bytes de EEPROM
- 1/2/4K bytes de SRAM Interna
- Ciclos de escritura/borrado: 10.000 en Flash / 100.000 en EEPROM
- Retención de Datos: 20 años a 85ºC / 100 años a 25ºC
- Sección opcional de código Boot con bits de bloqueo independientes.
Programación en sistema del programa Boot que se encuentra dentro del
mismo chip. Operación de lectura durante la escritura.
- Bloqueo programable para la seguridad del software.
Interfase JTAG
- Capacidades de Boundary Scan de acuerdo con el estándar JTAG
- Soporte Extendido Debug dentro del chip
- Programación de FLASH, EEPROM, fusibles y bits de bloqueo a través
de la interfase JTAG.
Características de los periféricos
- Dos Timer/Contadores de 8 bits con prescalamiento separado y modo
comparación.
- Un Timer/Contador de 16 bits con prescalamiento separado, modo
comparación y modo de captura.
- Contador en Tiempo Real con Oscilador separado
- 6 Canales para PWM
- ADC de 10 bits y 8 canales
Modo Diferencial con ganancia seleccionable a x1, x10 o x200.
- Interfase serie de dos hilos con byte orientado.
- Dos puertos Seriales USART Programables
- Interfaz Serial SPI maestro-esclavo
- Watchdog Timer programable con oscilador independiente, dentro del
mismo chip.
- Comparador Analógico dentro del mismo Chip
- Interrupt and Wake-up on Pin Change
Características especiales del microcontrolador
- Power-on Reset (en el encendido) y detección de Brown-out (pérdida
de polarización) programable.
- Oscilador RC interno calibrado.
- Fuentes de interrupción externas e internas.
- 6 modos de descanso: Idle, Reducción de Ruido ADC, Power-save,
Power-down, Standby y Standby extendido.
Encapsulados para Entradas/Salidas (E/S)
- 32 líneas de E/S programables.
- PDIP de 40 pines, TQFP y QFN/MLF de 44 pines.
Voltajes de Operación
- 1.8 – 5.5V para el ATMEGA 164P/324P/644PV
- 2.7 – 5.5V para el ATMEGA 164P/324P/644P
Velocidad de Funcionamiento
- ATMEGA 164P/324P/644PV: 0 – 4MHz @ 1.8 – 5.5V - 10MHz @ 2.7 –
5.5V
- ATMEGA 164P/324P/644PV: 0 – 10MHz @ 2.7 – 5.5V - 20MHz @ 4.5
– 5.5V
Consumo de energía a 1MHz, 1.8V, 25ºC para el ATMEGA
164P/324P/644P
- Activo: 0.4mA
- Modo Power-down: 0.1uA
- Modo Power-Save: 0.6uA (Incluye RTC de 32 Khz)
1. CONFIGURACIÓN DE PINES
Figura 1-1. Pines de Salida del ATmega164P/324P/644P
TQFP/QFN/MLF
2. Revisión Global
El ATmega164P/324P/644P es un microcontrolador CMOS de 8 bits de bajo
consumo basado en la arquitectura RISC mejorada. Sus instrucciones se
ejecutan en un ciclo de máquina, el ATmega164P / 324P / 644P consigue
transferencia de información alrededor de 1 MIPS por MHz admitido por el
sistema, permitiendo al diseñador del sistema optimizar el consumo de energía
versus la velocidad de procesamiento.
2.1 Diagrama de Bloque
Figura 2 -1. Diagrama de Bloques
El core (núcleo) AVR combina un conjunto de instrucciones RISC con 32
registros para uso de propósito general. Todos los 32 registros están
directamente relacionados con la Unidad Aritmética Lógica (ALU), admitiendo
dos registros independientes al ejecutarse una instrucción en un ciclo de
máquina. El resultado de esta arquitectura es más eficiente, se consigue un
caudal de flujo y transferencia hasta diez veces más rápido que
microcontroladores CISC convencionales.
El ATmega164P / 324P / 644P provee las siguientes características: 16/32 / 64K
bytes en el sistema de Flash Programable con capacidad de lectura y escritura
de 512B/1K/2K bytes en la EEPROM, 1/2/4K bytes en la SRAM, 32 pines de
E/S para propósito general, 32 registros de propósito general, Contador en
Tiempo real (RTC), tres Timer/Contadores flexibles con modo de Comparación
y PWM, 2 USARTs, un byte orientado a la Interfaz Serial de 2 hilos, 8 canales
ADC de 10 bits con opción de entrada Diferencial con ganancia programable,
Watchdog Timer programable con oscilador interno, un Puerto serial SPI,
Interfase de prueba JTAG, también usado para acceder al sistema On-chip
Debug y seis modos de programación seleccionable para ahorro de energía. El
modo Idle detiene al CPU mientras permite a la SRAM, Timer/Contador,
Puerto SPI y al sistema de interrupciones continuar funcionando.
El Modo Power-down guarda el contenido de los registros pero paraliza al
oscilador, desactiva todas las otras funciones de chip hasta la próxima
interrupción o mediante reseteo por hardware. En el Modo Power-save, el reloj
asincrónico continúa corriendo, permitiendo tener actualizado al reloj mientras
el resto de dispositivos están descansando. El Modo de Reducción del Ruido del
ADC detiene al CPU y a todos los módulos de E/S excepto al Reloj Asincrónico
y al ADC, para minimizar el ruido durante la conversión. En el Modo Standby,
el oscilador Cristal/Resonador está corriendo mientras el resto de dispositivos
están descansando. Estos permiten comenzar una rápida combinación con el
consumo de baja energía.
En el Modo de Standby extendido, corre el Oscilador principal y el Reloj
Asincrónico. Este elemento es hecho usando tecnología de alta densidad de
memoria no volátil de ATMEL. El chip interno ISP de la FLASH permite a la
memoria de programa ser reprogramada a través del puerto interno ISP
mediante un programador convencional no volátil o mediante un programa
interno en el dispositivo AVR. El programa de inicialización puede usar
cualquier interfaz para descargar el programa de aplicación en la memoria
flash. El programa en la sección Flash Boot es actualizado mientras continúa
corriendo la sección de aplicaciones de la Flash, proporcionando una escritura-
lectura verdadera de operación. Para combinar un CPU RISC de 8 bits en un
sistema de Flash Auto-programable en un chip monolítico, el
ATmega164P/324P/644P es un poderoso microcontrolador que provee una alta
flexibilidad y solución de costos efectivos para cualquier aplicación de control.
El ATmega164P / 324P / 644P AVR es soportado con un juego completo de
programas y herramientas de desarrollo del sistema incluyendo: compiladores
de C, ensambladores de macro, depurador / simuladores de programa,
emuladores de circuitos y equipos de evaluación.
2.2 Comparación entre el ATmega164P, ATmega324P and ATmega644P
2.3 Descripción de Pines
2.3.1 VCC
Alimentación de Voltaje Digital
2.3.2 GND
Tierra
2.3.3 Puerto A (PA7:PA0)
El puerto A sirve como entradas analógicas para el conversor Análogo Digital.
El puerto A también sirve como un puerto bidireccional de 8 bits con
resistencias internas de pull up (seleccionables para cada bit). Los buffers de
salida del puerto A tienen características simétricas controladas con fuentes de
alta capacidad.
Los pines del puerto A están en tri-estado cuando las condiciones de reset están
activadas o cuando el reloj no este corriendo. El puerto A también sirve para
varias funciones especiales del ATmega164P/324P/644P como la Conversión
Análoga Digital.
2.3.4 Port B (PB7:PB0)
El puerto B es un puerto bidireccional de 8 bits de E/S con resistencias internas
de pull up.
Las salidas de los buffers del puerto B tienen características simétricas
controladas con fuentes de alta capacidad.
Los pines del puesto B están en tri-estado cuando las condiciones de reset están
activadas o cuando el reloj no esté corriendo. El puerto B también sirve para
varias funciones especiales del ATmega164P/324P/644P como se menciona en
las páginas iniciales.
2.3.5 Port C (PC7:PC0)
El puerto C es un puerto bidireccional de 8 bits de E/S con resistencias internas
de pull up (seleccionadas por cada bit). Las salidas de los buffers del puerto C
tienen características simétricas controladas con fuentes de alta capacidad.
Los pines del puesto C están en tri-estado cuando las condiciones de reset están
activadas siempre y cuando el reloj no este corriendo. El puerto C también
sirve para las funciones de Interfaz del JTAG, con funciones especiales del
ATmega164P/324P/644P como se menciona en las páginas iniciales.
2.3.6 Port D (PD7:PD0)
El Puerto D es un puerto bidireccional de entradas y salidas con resistencias
internas de pull up (seleccionadas por cada bit). Las salidas de los buffers del
puerto D tienen características simétricas controladas con sumideros de fuentes
de alta capacidad.
Los pines del Puerto D están en tri-estado cuando llega una condición de reset
activa, siempre y cuando el reloj no esté corriendo.
El puerto D también sirve para varias funciones especiales del
ATmega164P/324P/644P como se menciona en las páginas iniciales.
2.3.7 RESET
Entrada del Reset. Un pulso de nivel bajo en este pin por períodos de pulso
mínimo genera un reset, siempre y cuando el reloj no esté corriendo.
La longitud del pulso mínimo está especificada en las Características y Sistemas
de Reset (Páginas 331 del Data Sheet). Pulsos cortos no son garantizados para
generar un reset.
2.3.8 XTAL1
Entrada para el amplificador del oscilador invertido y entrada para el circuito
de operación del reloj interno.
2.3.9 XTAL2
Salida del Oscilador amplificador de salida.
2.3.10 AVCC
AVCC es la alimentación de voltaje para el pin del Puerto F y el Conversor
Análogo a Digital. Este debe ser conectado externamente a VCC, siempre y
cuando el ADC no sea usado. Si el ADC es usado, este deberá ser conectado a
VCC a través de un filtro paso bajo.
2.3.11 AREF
Está es la referencia para el pin de la conversión Análoga a Digital.
3. Recursos
Un set comprensible de herramientas, notas de aplicación y datasheet se puede
descargar desde http://www.atmel.com/avr.
4. Acerca de los Ejemplos de Código
Este documento contiene unos simples ejemplos de código que brevemente
muestran como usar varias partes del dispositivo. Sea consiente que no todos
los vendedores de compiladores en C incluyen la definición de bits en el
archivo de cabecera y el manejo de interrupciones en el compilador C es
dependiente. Por favor confirme con la documentación del compilador C para
más detalles.
Los ejemplos de código asumen que la parte de archivo de cabecera esta
incluido antes de la compilación. Para las localidades de los registros de E/S en
el mapa extendido de E/S, las instrucciones "IN", "OUT", "SBIS", "SBIC", "CBI",
y "SBI" serían reemplazadas con instrucciones de acceso extendido E/S.
Típicamente "LDS" y "STS" combinadas con "SBRS", "SBRC", "SBR", y "CBR".
5. Retención de Datos
La fiabilidad de la calificación de resultados muestra que la velocidad de falla
de un proyecto es mucho menor que 1 PPM en 20 años a 85°C ó 100 años a
25°C.
6. AVR CPU Core
6.1 VISIÓN GENERAL
Esta sección discute la arquitectura general del AVR. La principal función del
AVR es asegurar la correcta ejecución del programa.
La CPU debe ser capaz de acceder a la memoria, llevar a cabo cálculos, control
de periféricos y atención de interrupciones.
Para maximizar el rendimiento y el paralelismo, el AVR usa una arquitectura de
Hardware con separador de memorias y buses para programa y datos. Las
instrucciones en la memoria de programa son ejecutadas con un simple nivel de
colas. Mientras una instrucción es ejecutada, la siguiente instrucción es
ejecutada desde la memoria de programa. Este concepto permite que las
instrucciones sean ejecutadas en cada ciclo de máquina. La memoria de
programa está en la memoria Flash re-programable.
El Archivo del Registro (Register File) de rápido acceso contiene 32 registros de
propósito general de 8 bits trabajando en un simple ciclo de reloj.
Esto permite una operación de ciclo simple en la Unidad Aritmética lógica. En
una operación típica de la ALU, dos operandos están fuera del Archivo de
Registro, la operación es ejecutada, y el resultado es guardado en el Archivo de
Registro en un ciclo de máquina.
Seis de los 32 registros pueden ser usados como tres registros punteros de 16
bits de dirección, para direccionar los Datos y permitir los cálculos de
direcciones diferentes.
Uno de estos tres punteros puede ser usado como un puntero de direcciones
para tablas en la memoria de programa de la Flash. Estos registros de función
adicionales son el X, Y y Z de 16 bits, descritos después en esta sección. La ALU
soporta operaciones lógicas y aritméticas entre registros o entre constantes y
registros.
Simples operaciones de registros pueden ser ejecutadas en la ALU. Después de
una operación aritmética, el registro de estado es actualizado para reflejar
información acerca de los resultados de la operación. El flujo del programa es
provisto por un salto condicional e incondicional y llamado de interrupciones,
capaz de direccionar espacios de direcciones completamente.
La mayoría de instrucciones del AVR tienen un formato simple de una palabra
de 16 bits. Cada dirección de memoria contiene instrucciones de 16 o 32 bits. El
espacio de memoria en la flash está dividido en dos secciones, la sección Baja
del programa y la sección de aplicación de programa.
Ambas secciones están dedicadas para bloqueo de escritura y protección de
lectura/escritura.
La instrucción SMP que se escribe en la Sección de la memoria Flash debe
residir en la sección Baja del programa.
Durante los llamados de interrupción y subrutinas, la dirección de regreso del
Contador de Programa (CP) es almacenado en la pila (stack).
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
La pila (stack) está localizada efectivamente en la SRAM (RAM estática) de
datos y consecuentemente el tamaño de la pila está limitado solo por el tamaño
total de la SRAM (RAM estática) y su uso.
Todos los programas a usarse deben inicializar en el SP (Stack Pointer) en la
rutina del Reset (antes de que sea ejecutada una interrupción o una subrutina).
El puntero de pila (Stack pointer SP) es la lectura/escritura accesible en el
espacio de E/S. La RAM estática de datos puede ser fácilmente penetrada a
través de los cinco diferentes modos de direccionamiento soportados en la
arquitectura de AVR.
El espacio de memoria en la arquitectura de los mapas de memoria de los AVR
son todos lineales y regulares. Un módulo de interrupción flexible tiene sus
registros de control en los espacios de E/S con una Habilitación de Interrupción
Global en el Registro de Estado.
Todas las interrupciones tienen separado un vector de interrupciones en la tabla
del vector de interrupciones. Las interrupciones tienen prioridad de
conformidad con su vector de interrupciones. La dirección más baja del vector
de interrupciones tiene alta prioridad.
El espacio de memoria de E/S contiene 64 direcciones para las funciones
periféricas de la CPU, el Registro de Control SPI y otras funciones de Entrada y
Salida. La memoria de Entrada y Salida puede ser accedida directamente o
como localidades de espacio de datos siguiendo estos Archivos de Registro:0x20
- 0x5F. En suma, el ATmega164P/324P/644P tiene espacios extendidos de
entrada y salida desde la dirección 0x60 - 0xFF en la SRAM donde solo las
instrucciones ST/STS/STD y LD/LDS/LDD pueden ser usadas.
6.3 Registro de Estado
El registro de estado contiene información acerca de los resultados de las
instrucciones aritméticas más recientes ejecutadas.
Está información puede ser usada para alterar el flujo del programa en el
funcionamiento de operaciones condicionales. Note que el Registro de Estado
es actualizado después de todas las operaciones de la ALU, como
especificaciones en el Set de Instrucciones de Referencia. En algunos casos esto
retira la necesidad de usar comparación de instrucciones dedicadas, resultando
un código más rápido y compacto.
El Registro de estado no es almacenado automáticamente cuando entra una
rutina de interrupción y se restituye cuando regresa de una interrupción.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
6.3.1 SREG – Registro de Estado
El registro de Estado AVR – SREG – está definido por:
• Bit 7 – I: Habilitación de Interrupciones Globales
El bit de habilitación de las interrupciones globales debe estar en uno para
habilitar las interrupciones. La interrupción individual permite que el control
sea llevado a cabo en registros de control distintos. Si el registro de Habilitación
de interrupciones globales es borrado, ninguna de las interrupciones están
activadas independiente de la configuración de una interrupción individual. El
bit I es limpiado por hardware después de que una interrupción ha ocurrido, y
es puesto en uno por la instrucción de RETI para habilitar interrupciones
siguientes. El bit I también puede ser puesto en uno y borrado por la aplicación
con las instrucciones SEI y CLI.
• Bit 6 – T: Bit Copia de almacenamiento
Los bits de instrucción de copia BLD (cargar bit) y BST (almacenar bit) usa el
bit T como una fuente o destino para la operación del bit. Un bit desde los
registros de los Archivos de Registro pueden ser copiados en el bit T mediante
la instrucción SBT y un bit en T puede ser copiado dentro de un registro del
Archivo de registros mediante la instrucción BLD.
• Bit 5 – H: Half Carry Flag
Half Carry es útil en la aritmética BCD.
• Bit 4 – S: Bit de Signo, S = N ⊕ V
El Bit S es una OR exclusiva entre la bandera negativa N y la bandera de
desbordamiento V en Complemento a Dos.
• Bit 3 – V: Bandera de Desbordamiento V en Complemento a Dos
La bandera de desbordamiento en Complemento a Dos soporta el complemento
a dos.
• Bit 2 – N: Bandera Negativa
La Bandera Negativa N indica un resultado negativo en una operación
aritmética o lógica.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
• Bit 1 – Z: Bandera del Cero
La bandera del cero indica si un resultado es cero en una operación aritmética o
lógica.
• Bit 0 – C: Bandera del Carry
La bandera del Carry indica un carry en una operación aritmética o lógica.
Archivo de registros de propósito General
El Archivo de Registros es optimizado por el Juego de instrucciones RISC del
AVR.
Para lograr la actuación y flexibilidad requerida, los esquemas del
entrada/salida se apoyan en los siguientes Archivos de Registros:
• Un operador de salida de 8 bits y una entrada resultante de 8 bits
• Dos operadores de salida de 8 bits y una entrada resultante de 8 bits
• Dos operadores de salida de 8 bits y una entrada resultante de 16 bits
• Un operador de salida de 16 bits y una entrada resultante de 16 bits
La siguiente Figura (6-2) muestra la estructura de los 32 Registros de Propósito
General que trabajan en la CPU.
La mayoría de las operaciones de instrucciones en el Archivo de Registro tiene
acceso directo a todos los registros, y la mayoría de ellos son instrucciones de
un ciclo.
Como se muestra en la figura anterior a cada registro en la memoria de datos se
le asigna una dirección, mapeados estos directamente dentro de las 32
localidades para el uso del espacio de Datos.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
Aunque físicamente no son implementados en las localidades de la SRAM, esta
memoria provee gran organización flexible para el acceso a estos registros,
como los registros punteros X, Y y Z que se usan como índices de cualquier
archivo de registro.
El registro X, el registro Y y el registro Z
Los registros R26… R31 tienen algunas funciones adicionales para uso de
propósito general. Estos registros son punteros de 16 bits de dirección para
direccionar indirectamente al espacio de datos.
Los tres registros de direccionamiento indirecto X, Y y Z están definidos como
se muestra en la figura siguiente.
Figure 6-3. Los registros X, Y y Z
En los modos de direccionamiento directo estos registros de dirección tienen
desplazamientos fijos, incrementos y decrementos automáticos.
6.5 Puntero de Pila (Stack Pointer)
El Stack–Pointer es usado para almacenar información temporal, para
almacenar variables locales y para almacenar direcciones de regreso después de
una interrupción o llamado de subrutinas.
Los registros del Puntero de Pila siempre apuntan a la parte superior de la pila.
Note que la pila es implementada como un crecimiento desde la localidad más
alta a la localidad mas baja de la memoria. Esto implica que un comando PUSH
decrementa el Puntero de Pila.
El puntero de pila para la SRAM es el área donde las interrupciones y
subrutinas son localizadas. Estos espacios de pila en los datos de la SRAM
deben ser definidos por el programa antes de que cualquier llamado de
subrutina sea ejecutado o una interrupción sea habilitada.
El puntero de pila debe estar por encima de la localidad 0x0100. El valor inicial
del puntero de pila es la última dirección de la SRAM interna. El puntero de
pila es decrementado a uno cuando los datos presionan en la pila con la
instrucción PUSH, y este es decrementado por tres cuando los datos llenan la
pila con un regreso desde una subrutina RET o de regreso desde una
interrupción RETI.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
El Puntero de Pila del AVR es implementado como un registro de 8 bits en el
espacio de E/S. El número de bits actualmente usados es dependientemente
implementado. Note que el espacio de datos en algunas implementaciones en la
arquitectura del AVR es tan pequeña que solo necesita el SPL. En este caso, el
registro SPH no esta presente.
6.5.1 SPH y SPL – Puntero de Pila Alto y Puntero de Pila Bajo
Note: 1Valores iniciales respectivamente para el ATmega164P/324P/644P.
6.5.2 RAMPZ – Z Extendido – Registro puntero para ELPM/SPM
Para las instrucciones ELPM/SPM, el puntero Z es una concatenación del
RAMPPZ, ZH y ZL se muestran en la figura siguiente. Note que LPM no es
afectado por la configuración del RAMPZ.
Figura. El puntero Z usado por ELPM y SPM.
El número actual de los bits es dependiente de la implementación. Al no usar
los bits en una implementación se leerán como cero. Para compatibilidad con
dispositivos futuros, asegurar el escribir estos bits como cero.
6.7 Reset e Interrupción Manual
El AVR provee diferentes Fuentes de interrupción. Cada de estas interrupciones
y el Vector Separador de Reset tienen un Vector separador de programa en el
espacio de la memoria de programa. Todas las interrupciones son bits
habilitados de forma individual los cuales deben ser escritos a uno lógico junto
con el bit Habilitador de Interrupciones Globales en el registro de Estado.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
Dependiendo del valor del contador del programa, las interrupciones deben ser
deshabilitadas automáticamente cuando los bits Boot Lock (BLB02 o BLB12) son
programados.
Esta característica mejora la seguridad de software.
La dirección más baja en el espacio de la memoria de programa está definida
por defecto como vectores de Reset e Interrupción.
La lista completa de vectores se muestra en la página 61 del Data Sheet. La lista
también determina los niveles de prioridad de las diferentes interrupciones. El
nivel de prioridad es desde la dirección mas baja a la más alta. El RESET tiene la
prioridad más alta y la siguiente es el pedido de interrupción externa (INTO).
Los vectores de interrupción pueden ser movidos al inicio de la sección de la
parte baja de la Flash por la configuración del bit IVSEL en el MCU del registro
de Control (MCUCR). El vector de Reset también puede ser movido al inicio de
la sección de la parte mas baja por la programación del fusible BOOTRST.
Cuando ocurre una Interrupción, el bit I del Habilitador de Interrupciones
Globales es limpiado y todas las interrupciones son deshabilitadas.
El software del usuario puede escribir uno lógico en el bit I para habilitar de
nuevo las interrupciones.
Todas las interrupciones habilitadas pueden entonces interrumpir las rutinas de
interrupciones. El bit I es puesto en uno automáticamente cuando regresa de
una interrupción al ser ejecutada la instrucción RETI.
Existen básicamente dos tipos de interrupciones. El primer tipo es disparado
por un evento que configura la bandera de interrupción. Para estas
interrupciones, el Contador de Programa es direccionado para el actual Vector
de Interrupción a medida que se ejecuta una rutina de interrupción manual y
limpiada por hardware la correspondiente bandera de interrupción. La bandera
de interrupción puede también ser limpiada por uno lógico para la posición de
la bandera del bit.
Si una condición de interrupción ocurre mientras se habilita el bit de
interrupción correspondiente este es limpiado, la bandera de interrupción será
puesto en uno y la interrupción recordará ser siempre habilitada o la bandera es
limpiada por software.
De igual forma, si una o más condiciones de interrupción ocurren mientras el
bit de interrupción es limpiado, la correspondiente bandera de interrupción
será puesta en uno y la Bandera de Interrupción Global es Habilitada mientras
el bit es uno, y entonces será ejecutada por el orden de prioridad.
El segundo tipo de interrupción será disparada mas larga que la condición de
interrupción actual.
Si la condición de interrupción desaparece antes que la interrupción sea
habilitada, la interrupción no será disparada. Cuando existe una interrupción
en el AVR, esta siempre regresará al programa principal y ejecutará una o más
interrupciones antes de cualquier pedido de interrupción. Note que el Registro
de Estado no es almacenado automáticamente cuando entra una rutina de
interrupción o cuando regresa de la rutina de interrupción. Esto deber ser hecho
manualmente por software. Cuando usa la instrucción CLI para deshabilitar
interrupciones, la interrupción será deshabilitada inmediatamente. Ninguna
interrupción será ejecutada después de la interrupción CLI, Incluso si ocurre
simultáneamente con la instrucción CLI. Los siguientes ejemplos muestran
como esto puede ser usado para evitar interrupciones durante el tiempo de
escritura en la EEPROM.
Ejemplo del Código en Lenguaje Ensamblador
In r16, SREG; almacena el valor en SREG
cli; deshabilita interrupciones durante la secuencia de tiempos
sbi EECR, EEMPE; Comienza la escritura en la EEPROM
sbi EECR, EEPE
Out SREG, r16; almacena el valor del I-bit en el SREG
Ejemplo del Código en C
char cSREG;
cSREG = SREG; almacena el valor en SREG */
/* Deshabilita interrupciones durante la secuencia de tiempos */
__disable_interrupt();
EECR |= (1<<EEMPE); /* Comienza la escritura en la EEPROM */
EECR |= (1<<EEPE);
SREG = cSREG; /* almacena el valor del I-bit en el SREG */
Cuando usa la instrucción SEI para habilitar interrupciones, la siguiente
instrucción SEI será ejecutada antes de cualquier interrupción pendiente, como
muestra el siguiente ejemplo.
Ejemplo del Código en Lenguaje Ensamblador
sei; Habilita la configuración de interrupciones globales
Sleep; ingresa a descansar, espera por la interrupción
; note: ingresa a descansar antes de cualquier pedido de interrupción
__enable_interrupt(); /* Habilita la configuración de interrupciones globales */
__sleep(); /* ingresa a descansar, espera por la interrupción */
/* Note: ingresa a descansar antes de cualquier pedido de interrupción */
6.7.1 Tiempo de respuesta de la Interrupción
La respuesta para la ejecución de interrupción para habilitar todas las
interrupciones del AVR son mínimos cinco ciclos.
Después de cinco ciclos de reloj la dirección del vector de programa para la
rutina manual de interrupción es ejecutada.
Durante este periodo de cinco ciclos, el Contador de Programa es guardado en
el Stack (Pila). El vector es normalmente un salto para la rutina de interrupción,
y este salto toma ciclos de reloj. Si una interrupción ocurre durante la ejecución
de una instrucción de múltiples ciclos, esta instrucción es completada antes de
que la interrupción sea pedida.
Si una interrupción es ejecutada ocurre cuando el MCU esta en modo de
descanso, la interrupción ejecuta tiempos de respuesta en incrementos de cinco
ciclos de reloj. Este incremento llega al iniciar los tiempos desde la selección del
Modo de descanso (sleep).
Un retorno desde una rutina de interrupción manual toma cinco ciclos de reloj.
Durante estos cinco ciclos de reloj, el Contador de Programa (tres bytes) es
abierto desde el Stack, el puntero de Pila es incrementado por tres y el bit I en la
configuración del SREG.
7. Memorias del AVR
7.1 Vista General
Esta sección describe las diferentes memorias en el ATmega164P/324P/644P.
La arquitectura de los AVR tiene dos espacios de memoria principal, la
memoria de datos y el espacio de memoria de programa.
En suma, al ATmega164P/324P/644P le caracteriza una memoria EEPROM
para el almacenamiento de datos.
Todos estos tres espacios de memoria son lineales y regulares.
7.2 Sistema Del Programa de Memoria Flash Reprogramable Interno
El ATmega164P/324P/644P contiene 16/32/64K bytes en el sistema
reprogramable de memoria interno para almacenamiento. Mientras todas las
instrucciones son de un ancho de 16 o 32 bits, la Flash esta organizada como
32/64 x 16. Para seguridad del software, el espacio de memoria de la Flash está
dividido en dos secciones, la sección baja de programa (Boot Program) y la
sección de Aplicación de Programa. La memoria Flash tiene una duración de
más o menos 10.000 ciclos de lectura/escritura. El Contador de Programa del
ATmega164P/324P/644P es de un ancho de 15/16 bits, en consecuencia
direcciona 32/64K localidades en la memoria de programa.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
Figura. Mapa de la memoria de programa
7.3 Memoria De Datos SRAM
La figura de abajo muestra como la memoria SRAM del
ATmega164P/324P/644P esta organizada. El ATmega164P/324P/644P es un
microcontrolador complejo con más unidades periféricas que pueden ser
soportadas entre la localidad 64 reservada en el código para las instrucciones de
entrada y salida.
Para los espacios extendidos de E/S desde la localidad $060 a la $FF en la
SRAM, sola las instrucciones ST/STS/STD y LD/LDS/LDD pueden ser usadas.
Las primeras 4.325 localidades en la Memoria de datos direccionan tanto el
Archivo de Registro, la Memoria de E/S, la Memoria extendida de E/S y la
SRAM de datos interna. Las primeras 32 localidades direccionan el Archivo de
Registro, las 64 siguientes direccionan la SRAM de datos interna. Los cinco
diferentes modos de direccionamiento para cubrir la Memoria de Datos son:
Directo, Indirecto con desplazamiento, Indirecto, Indirecto con Pre-decremento
y el Indirecto con Post incremento.
En el archivo de registro, los registros del R26 al R31 marcan el
direccionamiento indirecto de los punteros de registro.
El modo Indirecto con desplazamiento alcanza 63 localidades de dirección
desde la dirección base dada por los registros Y o Z.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
Cuando usamos los registros en modo de direccionamiento indirecto con pre-
decremento automático y post-incrementos, los registros de dirección X, Y y Z
son decrementados o incrementados.
El trabajo de los 32 registros de propósito general, los64 registros de E/S, los
registros extendidos de E/S y bytes 1024/2048/4096 de la SRAM interna en el
ATmega164P/324P/644P son todos accesibles a través de estos modos de
direccionamiento.
Figura. Mapa de la memoria de datos
7.3.1 Tiempos de Acceso a la Memoria de datos
Esta sección describe los tiempos de acceso generales para el acceso interno a la
memoria. El acceso interno a la SRAM de datos funciona en dos ciclos de la
CPU como se describe en la figura siguiente.
Figura. Ciclos de acceso a la SRAM de datos internos
7.4 Memoria de datos EEPROM
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
El ATmega164P/324P/644P contiene 512B/1K/2K bytes en la memoria de
datos EEPROM. Está organizado como un espacio de datos separado, en el cual
solo los bytes pueden ser leídos y escritos.
La EEPROM tiene una resistencia de más o menos 100.000 ciclos de
escritura/lectura. El acceso entre la EEPROM y la CPU esta descrito en lo
siguiente, especificando Registros de Dirección, Registros de datos de la
EEPROM y el registro de Control de la EEPROM.
Para prevenir escritura unidireccional de la EEPROM, una escritura específica
debe proceder de la siguiente forma. Referirse a la descripción del Registro de
Control de la EEPROM para detalles de este. Cuando la EEPROM es leída, la
CPU es detenida por cuatro ciclos de reloj antes de la siguiente instrucción sea
ejecutada. Cuando la EEPROM es escrita. La CPU es detenida por cuatro ciclos
de reloj antes de que la siguiente instrucción sea ejecutada.
7.4.2 Prevención de Corrupción en la EEPROM
Durante períodos bajos de VCC, los datos de la EEPROM pueden ser
corrompidos porque el voltaje de alimentación es también bajo para la CPU y la
EEPROM opera apropiadamente.
Estos asuntos son los mismos para el nivel del sistema que usa la EEPROM, y la
misma solución del diseño debería ser aplicado. Una alteración de datos en la
EEPROM puede ser causada por dos situaciones cuando el voltaje es demasiado
bajo. Primero, una secuencia de escritura regular a la EEPROM requiere un
mínimo voltaje para operar correctamente. Segundo, la misma CPU puede
ejecutar instrucciones incorrectas, si la alimentación es demasiado baja.
Una alteración de datos en la EEPROM puede ser fácilmente evitada siguiendo
las siguientes recomendaciones:
Durante los periodos con insuficiente alimentación de voltaje poner el RESET
del AVR en nivel bajo.
Esto se puede hacer mediante una habilitación interna del Brown-Out Reset
(BOD).
Si un reset ocurre mientras existe una operación de escritura en progreso, la
operación de escritura será completada suministrando el voltaje de
alimentación necesario.
7.5 Memoria de E/S
Todas las E/S y periféricos del ATmega164P/324P/644P son ubicados en el
espacio de E/S. Todas las localidades de entrada pueden ser accedidas
mediante las instrucciones LD/LDS/LDD y ST/STS/STD, transfiriendo datos
entre los 32 registros de propósito general y los espacios de E/S.
Los Registros de E/S con rango entre 0x00 - 0x1F son direccionadas con las
instrucciones SBI y CBI. En estos registros, el valor de estos bits pueden ser
verificados mediante el uso de las instrucciones SBIS y SBIC.
Cuando usamos los comandos específicos de ENTRADA y SALIDA, las
direcciones de E/S 0x00 a la 0x3F deberían ser usadas.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
Cuando direccionamos los registros de E/S como espacios de datos usando las
instrucciones ST y LD, la localidad 0x20 debe ser añadida a estas direcciones. El
ATmega164P/324P/644P es un microcontrolador complejo con muchas
unidades periféricas que pueden soportar entre las 64 localidades reservadas en
las instrucciones de Entrada y Salida. Para los espacios extendidos de E/S
desde la localidad 0x60 a la 0xFF en la SRAM, solo las instrucciones
ST/STS/STD y LD/LDS/LDD pueden ser usadas.
Para compatibilidad con dispositivos futuros, los bits reservados deberían ser
escritos a cero.
Las direcciones reservadas de E/S nunca deben ser escritas. Algunas de las
banderas de estado son limpiadas por la escritura de un uno lógico en estas.
Note que, a diferencia de otros AVRs, las instrucciones CBI y SBI, solo operan
sobre bits específicos, y pueden además ser usados sobre registros que tienen
tales banderas de estado. Las instrucciones SCI y CBI trabajan con solo con los
registros de la 0x00 a la 0x1F.
Los registros de E/S y periféricos pueden ser usados para almacenar cualquier
información y son particularmente para almacenar variables globales y
banderas de estado.
Los registros de E/S de propósito general están entre los rangos de direcciones
0x00 a la 0x1F y se usa para su acceso las instrucciones SBI, CBI, SBIS y SBIC
7.6 Descripción de Registros
7.6.1 EEARH y EEARL – Los Registros de Dirección de la EEPROM
• Bits 15:12 – Res: Bits Reservados
Estos bits son reservados en el ATmega164P/324P/644P Y siempre se leen
como cero.
• Bits 11:0 – EEAR8:0: Dirección de la EEPROM
Los registros de dirección de la EEPROM –EEARH y EEARL- especifican la
dirección de la EEPROM en los 4K bytes de espacio de la EEPROM. Los bytes
de datos de la EEPROM son direccionables linealmente entre 0 y 4096.
El valor inicial de EEAR no esta definido. Un valor propio debe ser escrito antes
Un valor correcto debe ser escrito antes de que el EEPROM pueda ser accedido.
7.6.2 EEDR – EL Registro de Datos de la EEPROM
• Bits 7:0 – EEDR7:0: Datos de la EEPROM
Para la operación de la escritura en la EEPRM, el registro EEDR contienen los
datos a ser escritos para la EEPROM en las direcciones dadas por el registro
EEAR. Para la operación de lectura de la EEPROM, la EEDR contiene la lectura
de datos fuera de la EEPROM en los registros dados por EEAR.
7.6.3 EECR – El Registro de Control de la EEPROM
• Bits 7:6 – Res: Bits Reservados
Estos bits son reservados en el ATmega164P/324P/644P Y siempre se leen
como cero.
• Bits 5:4 – Los Bits de Modo de Programación de la EEPROM: EEPM1
EEPM0
La configuración del bit de modo de programación de la EEPROM define cual
acción del programa será disparada al EEPE.
Esto es posible para la programación de datos en una operación atómica (borra
el valor antiguo y el nuevo valor del programa) o para dividir la operación de
lectura y escritura en dos diferentes operaciones.
Los tiempos de programación para los diferentes modos se muestran en la
tabla 7-1. Mientras EEPMn está en uno, cualquier escritura en la EEPMn será
ignorada. Durante el reset, los bits de la EEPMn serán reseteados a 0b00 a
menos que el programa de la EPROM este ocupado.
• Bit 3 – EERIE: Habilitación de interrupciones de la EEPROM
Escribiendo a uno el bit EERIE se habilita la interrupción de la EEPROM si el bit
del SREG es uno. Escribiendo cero en EERIE se deshabilita la interrupción. La
interrupción de la EEPROM genera una interrupción constante cuando EEPE es
limpiado.
• Bit 2 – EEMPE: Habilitación del Programa del Maestro de la EEPROM
El bit EEMPE determina si la configuración de EEPE a uno causa que la
EEPROM sea escrita.
Cuando EEMPE es uno, configurando EEPE durante cuatro ciclos del reloj
escribiría el dato a la EEPROM al seleccionar la dirección. Si EEMPE es cero, la
configuración de EEPE no tendría efecto. Cuando EMPE ha sido escrito a uno
por software, hardware limpiamos el bit a cero después de cuatro ciclos de
reloj. Ver la descripción del bit de EEPE para un procedimiento de escritura de
la EEPROM.
• Bit 1 – EEPE: Habilitando la Programación de la EEPROM
La habilitación de escritura de la señal EEPE de la EEPROM es la escritura de la
habilitación de la EEPROM.
Cuando la dirección y el dato son correctamente configurados, el bit EEPE
debería ser escrito a uno para un valor de escritura dentro de la EEPROM. El bit
EEMPE debería ser uno antes de que un uno lógico sea escrito a EEPE, con lo
cuál no tomaría lugar la escritura de la EEPROM. El siguiente procedimiento
sería escribiendo la EEPROM(los pasos 3 y 4 no son esenciales):
1. Esperar hasta que EEPE llegue a ser cero.
2. Esperar hasta que SPMEN en SPMCSR llegue a ser cero.
3. Escribir la nueva dirección de la EEPROM a EEAR (opcional).
4. Escribir el nuevo dato de la EEPROM a EEAR (opcional).
5. Escribir uno lógico al bit EEMPE mientras se escribe cero a EEPE en EECR.
6. Dentro de cuatro ciclos de reloj después configurar EEMPE, escribir uno
lógico a EEPE.
La EEPROM no puede ser programada durante la escritura del CPU a la
memoria Flash. El software chequearía que la programación de la Flash es
completada antes de inicializar la nueva escritura de la EEPROM.
El paso 2 es solo relevante si el software contiene el Boot Loader permitiendo al
CPU la programación de la Flash. Si la Flash nunca comienza la actualización
por el CPU, el paso 2 seria omitido. Ver “Programación de la Memoria” en la
Pág. 293 en el datasheet.
Precaución: Una Interrupción entre los paso 5 y 6 haría que el ciclo de escritura
falle, desde que la EEPROM es interrumpida por otro acceso a la EEPROM, el
Registro EEAR o EEDR seria modificado, causando que el acceso a la
Interrupción de la EEPROM falle. Esto es recomendado para tener la Bandera
Global de Interrupciones limpia durante todos los pasos para evitar estos
problemas.
Cuando el tiempo de acceso a la escritura ha finalizado, el bit EEPE es limpiado
por software. El software del usuario puede esperar por un cero antes de la
escritura del siguiente byte. Cuando EEPE ha sido puesto en uno, el CPU es
Detenido por dos ciclos antes de que la siguiente instrucción es ejecutada.
• Bit 0 – EERE: Habilitación de Lectura de la EEPROM
La lectura de la habilitación de la señal EERE de la EEPROM es leída para
habilitar la EEPROM. Cuando la dirección correcta es configurada en el registro
EEAR, el bit EERE seria escrito con uno lógico en el disparo de lectura de la
EEPROM. El acceso de la lectura de la EEPROM toma una instrucción, y la
respuesta del dato es disponible inmediatamente. Cuando la EEPROM es leída,
la CPU es detenida por cuatro ciclos antes que la siguiente instrucción sea
ejecutada. El usuario debería verificar el bit EEPE antes de empezar la
operación de lectura. Si la escritura de la operación esta en progreso, no sería
posible leer la EEPROM, o cambiar el Registro EEAR-
La Calibración del Oscilador es usada al tiempo de acceso a la EEPROM- La
Tabla 7-2 en la página 25 del datasheet lista el tiempo típico de programación
para el acceso a la EEPROM desde el CPU.
El siguiente código de ejemplo muestra uno en asembler y otro en C para
escritura de la EEPROM. Los ejemplos asumen que las interrupciones son
controladas (por desabilitación de las interrupciones globales). El ejemplo
también asume que la parte baja de la memoria Flash esta presente en el
software. Si cada código esta presente, la EEPROM escribe funciones y también
espera por cualquier comando de finalización SPM.
El siguiente código muestra un ejemplo en assembler y otro en C para lectura
de la EEPROM. Los ejemplos asumen que las interrupciones son controladas
también que las interrupciones no ocurrirían durante la ejecución de estas
funciones.
7.6.4 GPIOR2 – General Purpose I/O Register 2
7.6.5 GPIOR1 – General Purpose I/O Register 1
7.6.6 GPIOR0 – General Purpose I/O Register 0
8. Sistema de Reloj y Opciones de Reloj
8.1 Sistemas de Reloj y sus Distribuciones
La Figura 8-1 presenta los principales sistemas de reloj en el AVR y su
distribución. Todos los relojes no necesitan ser activados a un tiempo dado.
Para reducir el consumo de energía, los relojes de los módulos no empiezan a
ser usados cuando están detenidos por uso de diferentes modos sleep, como se
describe en “Power Management and Sleep Modes” en la página 42 del
datasheet. Los sistemas de relojes se describen a continuación en la figura 8-1.
8.1.1 CPU Clock – clk CPU
El reloj del CPU es dividido en partes del sistema concerniente a la operación
del core AVR.
Los ejemplos de cada módulo son Archivos de Registros de Propósito General,
el Registro de Estado y la memoria de datos sosteniendo el Puntero de Pila.
Deteniendo el reloj del CPU inhibe el core desde el funcionamiento general de
las operaciones y cálculos.
8.1.2 I/O Clock – clk E/S
La E/S de reloj es usada por la mayoría de los módulos de E/S,
Timer/Counter, SPI, y USART.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
El reloj de E/S es también es usado por el modulo de Interrupciones Externas,
pero note que algunas interrupciones externas son detectadas por flancos
asíncronos, permitiendo que cada Interrupción sea detectada si el reloj de E/S
es detenido. También note que la detección de la condición de inicio en el
módulo USI es llevado a cabo asincrónicamente cuando el clk de E/S es
detenido. El reconocimiento de la dirección de TWI en todos los modos sleep.
8.1.3 Flash Clock – clk FLASH
El reloj de la Flash controla la operación de la interfase Flash. El reloj de la Flash
es usualmente activado simultáneamente con el reloj del CPU.
8.1.4 Asynchronous Timer Clock – clkASY
El Asynchronous Timer clock permite al Timer/Counter asíncrono ser contado
directamente desde un reloj de cristal externo de 32 kHz.
El reloj dominante permite usar este Timer/Counter como contador en tiempo
real cuando el dispositivo esta en modo sleep.
8.1.5 Reloj del ADC – clkADC
El ADC es proporcionado con un reloj dominante dedicado. Esto permite
detener el CPU y los relojes de E/S. esto reduce el ruido generado por los
circuitos digitales. Esto da una mayor Presición a la conversión ADC.
8.2 Fuentes de Reloj
El dispositivo tiene las siguientes opciones de fuente de reloj, seleccionando por
bits de Fusible de la Flash como se muestra en la Tabla 8-1. El reloj desde la
fuente de selección es entrada al generador de reloj del AVR.
8.2.1 Fuentes de Reloj por Defecto
Este dispositivo es enviado con un oscilador interno de 8.0 MHz y con los
fusibles CKDIV8 programados, resultando en un sistema de reloj de 1.0 MHz.
El inicio del tiempo es puesto al máximo y el periodo de tiempo fuera
habilitado (CKSEL = "0010", SUT = "10", CKDIV8 = "0"). Las configuraciones por
defecto aseguran que todos los usuarios puedan hacer sus fuentes de reloj
deseadas usando cualquier programación de interfase.
8.2.2 Inicio de la secuencia de Reloj
Cualquier fuente de reloj necesita suficiente Vcc para comenzar la oscilación y
un número mínimo de ciclos de oscilación antes de que pueda considerarse
estable. Para aseguran un suficiente Vcc, el dispositivo envía un reset interno
con un tiempo de demora (t out) después el dispositivo realiza un reset para
todas las otras fuentes de reset. La demora es el tiempo desde el oscilador del
Watchdog y el número de ciclos en demora es puesto por los bits de fusibles
SUTx y CKSELx. La selección de retardos se muestra en la Tabla 8-2. La
frecuencia del Oscilador del Watchdog es el voltaje dependiente como se
muestra en “Características Típicas”.
El propósito general de los retardos es guardar al AVR en reset hasta que
suplido con el mínimo voltaje Vcc. El retardo no monitorea el voltaje actual y
esto requeriría de un retardo mas prolongado que el tiempo de subida de Vcc.
Si esto no es posible, el interno o externo Brown-Out Detection circuit debería
ser usado. El circuito BOD aseguraría suficiente Vcc antes que se realice el reset,
el tiempo de retardo pueda ser deshabilitado. Deshabilitando el retardo sin
utilizar el Brown-Out Detection circuit no sería recomendado. El oscilador
requiere de oscilaciones para un número mínimo de ciclos antes de que el reloj
sea considerado estable. El contador de onda interna monitorea la salida de
reloj del oscilador y guarda el reset interno activado para un número dado de
ciclos de reloj. El reset es luego realizado y el dispositivo empieza a ejecutarse.
El tiempo de inicio recomendado para el oscilador es dependiente del tipo de
reloj y varía desde 6 ciclos aplicados por un reloj externo de 32K para una baja
frecuencia de cristal. La secuencia de inicio para el reloj incluye ambas el tiempo
de retardo y el tiempo de inicio cuando el dispositivo empieza desde reset.
Cuando empieza desde el modo Power-save o Power-down, Vcc es asumido
para estar con el nivel suficiente y solo el tiempo de inicio es incluido.
8.2.3 Conexiones de la Fuente de Reloj
Los pines XTAL1 y XTAL2 son entradas y salidas, respectivamente, de un
amplificador invertido con el cual puede ser configurado para usos como
oscilador On-Chip, como se muestra en la Figura 8-2- Un cristal de quartz o
resonador cerámico puede ser usado.
C1 y C2 debería siempre ser iguales para ambos cristales y resonantes. El valor
optimo de los capacitores de pende del cristal y del resonador usados, la
cantidad de perdida de capacitancia, y el ruido electromagnético del ambiente
Para resonantes cerámicos, el valor del capacitor es dado por el fabricante.
8.3 Oscilador del Cristal de Baja Energía
Este oscilador del Cristal es de baja energía, con voltaje reducido en la salida del
XTAL2. Esto da un bajo consumo de energía, pero no es capaz de manejar otras
salidas de reloj, y puede ser más susceptible al ruido en ambientes ruidosos.
El oscilador de Baja Energía puede operar en tres modos diferentes, cada uno
optimizado para un rango de frecuencia. El modo de operación es seleccionado
por los fusibles CKSEL3. Como se muestra en la figura 8-3.
El fusible CKSEL0 junto con el SUT1…0 seleccionan el inicio de tiempo como se
muestra en la Tabla 8-4.
8.4 Ajuste del Oscilador del Cristal
El Oscilador del cristal es ajustado, con
This Crystal Oscillator is a full swing oscillator, with rail-to-rail swing on the
XTAL2 output.
Este es muy usado para controlar otras salidas de reloj y ambientes ruidosos. El
consumo de corriente es más alto que ”Low Power Crystal Oscillator” en la
página 32 del data sheet.
Note que el ajuste del Oscilador del Cristal solo funciona para Vcc = 2.7 - 5.5
voltios.
Alguna guía inicial para escoger los capacitores para ser usados con el cristal
están dados en la tabla 8.6. El cristal debería ser conectado como se describe en
”Clock Source Connections” en la página 31 del data sheet.
El modo de operación es seleccionado mediante los fusibles CKSEL3..1 como se
muestra en la tabla8-5.
8.5 Oscilador del Cristal de Baja Frecuencia
La baja frecuencia del Oscilador del Cristal es optimizada para usar un cristal
de 32.768 KHz. Cuando seleccionamos el cristal, la capacitancia de carga y la
Resistencia en serie equivalente del cristal, ESR sería tomado en consideración.
Ambos valores son especificados por el fabricante. El oscilador del
ATmega164P/324P/644P es optimizado para muy bajo consumo de energía, y
además cuando seleccionamos los cristales, ver la tabla 8-7, para máximo ESR
se recomienda cristales de 9pF y 12.5 pF.
Los osciladores de baja frecuencia del cristal proporciona una capacitancia de
carga interna de cristales típicos de 8.0 pF. Los cristales con recomendaciones de
8.0 pF pueden ser quitados como se muestra en la figura 8-3.
Los cristales que especifican una capacitancia de carga CL mas alta que 8.0 pF,
requieren capacitores externos como se describe en la figura 8-2.
Para encontrar una capacitancia de carga adecuada para un cristal de 32.768,
por favor consulte el cristal del datasheet. Cuando este oscilador es
seleccionado, empieza el tiempo que es determinado por los fusibles SUT y
CKSEL0 como se muestra en la figura de la Tabla 8-8.
8.6 Calibrar el Oscilador Interno RC
Por defecto, el Oscilador Interno RC proporciona un reloj de aproximadamente
8MHz. Junto con el voltaje y temperatura dependiente, este reloj puede ser
calibrado con mucha precisión por el usuario. Ver la tabla 27-4 “Velocidad del
Oscilador Interno” para mas detalles.
El dispositivo es enviado con el fusible CKDIV8 programado. Ver “Prescalador
del Sistema de Reloj” para más detalles.
Este reloj puede ser seleccionado como sistema de reloj por programación del
fusible CKSEL como se muestra en la Tabla 8-9. Si es seleccionado, esto operaría
con componentes no externos. Durante el reset, el hardware carga el valor de
calibración de la pre-programación en el registro OSCCAL y por eso
automáticamente calibra el oscilador RC. La precisión de esta calibración es
mostrada como calibración de fábrica en la tabla 27-4.
Para cargar el registro OSCCAL desde SW, ver “OSCCAL- Registro de
Calibración del Oscilador” en la página 40 del datasheet, esto es posible para
obtener una mayor precisión de calibración que la usada por fabrica.
La precisión de esta calibración es mostrada como calibración de usuario en la
Tabla 27-4.
Cuando este Oscilador es usado como el reloj del chip, el oscilador del
Watchdog todavía sería usado por el Watchdog Timer para el Reseteo a tiempo
fuera. Para mayor información del valor de calibración en la pre-programación,
ver la sección “Byte de Calibración” en la página 296 del datasheet.
Cuando este Oscilador es seleccionado, empieza tiempos que son determinados
por los fusibles SUT como se muestra en la Tabla 8-10 en la página 36 del
datasheet.
8.7 Oscilador Interno de 128 kHz
El Oscilador Interno de 128 KHz es un oscilador de bajo consumo provisto con
un reloj de 128 KHz. La frecuencia nominal es 3V a 25 °C. Este reloj puede ser
seleccionado como el sistema de reloj programando los fusibles CKSEL a “0011”
como es mostrado en la Tabla 8-11.
Cuando esta fuente de reloj es seleccionada, los tiempos de inicio son
determinados por los fusibles SUT como se muestra en la Tabla 8-12.
8.8 Reloj Externo
Para manejar el dispositivo desde una fuente de reloj externo, XTAL1 debería
ser manejado como se muestra en la Figura 8-4. Para manejar un dispositivo
con reloj externo, los fusibles CKSEL serían programados a “0000”.
Cuando esta fuente de reloj es seleccionada, los tiempos de inicio son
determinados por los fusibles SUT como se muestra en la Tabla 8-14.
Cuando se aplica un reloj externo, es requerido evitar cambios súbitos en la
frecuencia de reloj aplicada para asegurar la estabilidad de operación del MCU.
La variación en frecuencia de más del 2% desde un ciclo de reloj al siguiente
puede tener una conducta impredecible. Si los cambios de más del 2% es
requerido, asegurarse que el MCU es guardado en el Reset durante los cambios.
Note que el Prescalador del Sistema de Reloj puede ser usado para
implementar cambios de ejecución de tiempo de la frecuencia del reloj interno
mientras todavía asegura una operación estable. Referirse a “prescalador del
sistema de Reloj” en la Pág. 38 del datasheet para más detalles.
8.9 Oscilador del Timer/Counter
El ATmega164P/324P/644P usa el mismo tipo de oscilador del cristal para
cristal de baja frecuencia y el oscilador del Timer/Counter. Ver “Oscilador del
Cristal de baja frecuencia” en la página 34 del datasheet para mayores detalles.
El dispositivo puede operar con Timer/Counter desde un cristal con frecuencia
externa de 32.768 KHz o una fuente de reloj externa. Ver “Conexiones del la
Fuente de Reloj” en la página 31 del datasheet para mayores detalles.
Aplicando una fuente de reloj externa a TOSC1 puede ser hecho si EXTCLK en
el Registro ASSR es escrito con uno lógico. Ver “el registro de comparación de
salida B que contiene valores de 8-bit que continuamente compara con el valor
de contador (TCNT2). Esto puede ser usado para generar una Interrupción de
comparación a la salida, o generar una forma de onda a la salida en el pin
OC2B” en la página 157 del datasheet.
8.10 Buffer del Reloj de Salida
El dispositivo puede ser salida del sistema de reloj en el pin CLKO. Al habilitar
la salida, el fusible CKOUT ha sido programado. Este modo es conveniente
cuando el reloj del chip es usado para manejar otros circuitos en el sistema. El
reloj también sería una salida durante el reset, y la operación normal del pin de
E/S sería alterada cuando el fusible es programado. Ninguna fuente de reloj,
incluyendo el Oscilador interno RC, puede ser seleccionado cuando el reloj es
salida en CLKO. Si el prescalador del Sistema de Reloj es usado, esto divide el
sistema de reloj que es salida.
8.11 Prescalador de Sistema de Reloj
El ATmega164P/324P/644P tiene un Prescalador del sistema de reloj y el
sistema de reloj puede ser dividido por configuración de “CLKPR-Registro
Prescalador del reloj” en la página 40 del datasheet. Esto puede ser usado para
decrementar la frecuencia del sistema de reloj y el consumo de energía cuando
el requerimiento para procesamiento en energía es bajo. Esto puede ser usado
con todas las opciones de fuente de reloj, y esto afectaría la frecuencia de reloj
del CPU y todos los periféricos asíncronos clkI/O, clkADC, clkCPU, and clkFLASH son
divididos por factores como se muestra en la Tabla 8-15 en la página 41 del
datasheet.
Cuando se cambia entre las configuraciones del prescalador, el prescalador del
sistema de reloj asegura que no ocurrían fallas técnicas en el sistema de reloj.
Esto también asegura que la frecuencia no es inmediatamente más alta que la
frecuencia de reloj correspondiente a las configuraciones previas, o la frecuencia
correspondiente a configuraciones nuevas.
El contador de onda que implementa el Prescalador corre a la frecuencia no
dividida del reloj, con lo cual puede ser más rápido que la frecuencia de reloj
del CPU. Esto no es posible para determinar el estado del prescalador si esto
sería leíble, y el tiempo exacto que toma el cambio desde una división de reloj
a otra que no puede ser exactamente predefinida. Desde el tiempo que el valor
de CLKPS es escrito, esto toma entre T1 + T2 y T1 + 2*T2 antes de que la nueva
frecuencia de reloj sea activada. En este intervalo, la activación de 2 flancos para
el reloj son producidos. T1 es el periodo previo del reloj, y T2 es el periodo
correspondiente a la configuración del nuevo prescalador.
Para evitar cambios unidireccionales de la frecuencia de reloj, un procedimiento
de escritura especial seria el siguiente para cambiar los bits CLKPS:
1. Escribir en el prescalador del reloj el bit de habilitación de cambio (CLKPCE)
a uno y todos los otros bits en CLKPR a cero.
2. Durante cuatro ciclos, escribir el valor deseado a CLKPS mientras se escribe a
cero CLKPCE.
Las Interrupciones serian deshabilitadas cuando se carga las configuraciones
del Prescalador para estar seguros que el procedimiento de escritura no sea
interrumpido.
8.12 Descripción de Registros
8.12.1 OSCCAL – Registro de Calibración de Oscilador
• Bits 7:0 – CAL7:0: Valor de Calibración del Oscilador
El Registro de Calibración del Oscilador es usado para la calibración del
Oscilador Interno RC y remover la variación de procesos desde la frecuencia del
oscilador. El valor de calibración pre-programado es automáticamente escrito
en este registro durante el reset del chip, dando la frecuencia de calibración del
fabricante como se especifica en la Tabla 27-4 en la página 330 del datasheet. El
software de aplicación puede escribir en este registro para cambiar la frecuencia
del oscilador. El oscilador puede ser calibrado a frecuencias como es especifica
en la Tabla 27-4 en la página 330. La calibración fuera del rango no es
garantizada.
Note que este oscilador es usado al tiempo de acceso de escritura en la
EEPROM y la Flash, y estos tiempos de escritura serían afectados. Si la
EEPROM y la Flash son escritas, no calibrar a más de 8.8 MHz. Por otra parte, la
escritura de la EEPROM o la Flash puede fallar.
El bit CAL7 determina el rango de operación para el oscilador. Configurando
este bit a 0 da el rango de frecuencia más bajo, en otras palabras configurando
OSCCAL = 0x7F da la frecuencia más alta que OSCCAL = 0x80.
Los bits CAL6..0 son usadas para modular la frecuencia dentro del rango
seleccionado. La configuración de 0x00 da la frecuencia más baja en este rango,
y configurando 0x7F da la frecuencia mas alta en el rango.
8.12.2 CLKPR – Registro Prescalador del Reloj
• Bit 7 – CLKPCE: Habilitación de cambio del Prescalador del Reloj
El bit CLKPCE sería escrito a uno lógico al habilitar el cambio de los bits
CLKPS. El bit CLKPCE es solo actualizado cuando los otros bits en CLKPR son
simultáneamente escritos a cero. CLKPCE es limpiado por hardware cuatro
ciclos después de que es escrito o cuando los bits CLKPS son escritos.
Reescribiendo el bit CLKPCE dentro del periodo de tiempo fuera, no limpiaría
el bit CLKPCE.
• Bits 3:0 – CLKPS3:0: Bits de Selección del Prescalador del Reloj 3 – 0
Estos bits definen el factor de división entre la fuente de reloj seleccionada y el
sistema de reloj interno. Estos bits pueden ser escritos corriendo el tiempo o
variando la frecuencia del reloj en las aplicaciones requeridas. Cuando el
divisor divide en entrada del reloj Maestro del MCU, la velocidad para todos
los periféricos asincrónicos son reducidas cuando el factor de división es usado.
Los factores de división están dados en la Tabla 8-15 de la página 41 de
datasheet.
El fusible CKDIV8 determina el valor inicial de los bits CLKPS. Si CKDIV8 es
desprogramado, los bits CLKPS serían reseteados a “0000”. Si CKDIV8 es
programado, los bits CLKPS son reseteados a “0011”, dando un factor de
división de 8 para el inicio. Esto debería ser usado si la fuente de reloj
seleccionada tiene una frecuencia más alta que la máxima frecuencia de los
dispositivos presentes en condiciones de operación.
Note que cualquier valor puede ser escrito en los bits CLKPS indiferentemente
de la configuración de los fusibles CKDIV8. El software de aplicación
aseguraría que un factor de división suficiente sea escogido si la fuente de reloj
seleccionada tiene una frecuencia más alta que la frecuencia máxima de los
dispositivos presentes en condiciones normales. El dispositivo es enviado con el
Fusible CKDIV8 programado.
9. Power Management y Modo Sleep
9.1 Revisión General
El modo sleep habilita la aplicación para cerrar los módulos no usados en el
MCU, por eso ahorra energía.
El AVR proporciona varios modos sleep permitiendo al usuario adaptar el
consumo de energía para la aplicación requerida.
Cuando habilita, el Brown-out Detector (BOD) activa el monitoreo de la
alimentación de voltaje durante los periodos de descanso (sleep).
Además ahorra energía, es posible desactivar el BOD en algunos modos sleep.
9.2 Modo Sleep (Descanso)
La siguiente figura muestra los diferentes sistemas de reloj en el
ATmega164P/324P/644P, y su distribución. La figura es útil en la selección de
un apropiado modo de sleep.
La tabla 9-1 muestra los diferentes modos sleep, su forma de despertarse y la
capacidad de deshabilitar el BOD:
Notas:
1. Solo recomendado con cristal externo o resonador como fuente de reloj.
2. Si el Timer/Contador2 está corriendo en modo asincrónico.
3. Para el INT0, solo interrupción de nivel.
Para entrar a cualquiera de los modos sleep, el bit SE en el SMCR debe ser
escrito en uno lógico y una instrucción SLEEP debe ser ejecutada. Los bits SM2,
SM1, y SM0 en el registro SMCR seleccionan cual modo de descanso será
activado mediante la instrucción SLEEP.
Si ocurre la habilitación de una interrupción mientras el MCU está en modo
sleep, el MCU despierta. El MCU es parado durante cuatro ciclos además del
tiempo de arranque, ejecuta la rutina de interrupción, y retoma la ejecución de
la siguiente instrucción SLEEP.
El contenido del Archivo de Registro y la SRAM son inalterables cuando el
dispositivo despierta del descanso (sleep).
Si ocurre un reset durante el modo sleep, el MCU despierta y ejecuta desde el
Vector de Reset.
9.3 Desabilitación del BOD
Cuando el Brown-out Detector (BOD) es habilitado por los fusibles BODLEVEL,
el BOD es activado para monitorear la alimentación de voltaje durante el
periodo de descanso (sleep). Para ahorrar energía, es posible deshabilitar el
BOD por software para algunos modos sleep. El consumo máximo del modo
sleep estará entonces en el mismo nivel como cuando BOD es deshabilitado
globalmente por los fusibles.
Si el BOD es deshabilitado por software, la función del BOD es apagada
inmediatamente después de entrar en modo de descanso. Una vez que
despierta del modo sleep, el BOD es activado automáticamente otra vez.
Esto asegura el funcionamiento seguro en caso de que el nivel de VCC cae
durante el período de descanso.
Cuando el BOD ha sido deshabilitado, el tiempo de arranque desde el modo de
descanso será aproximadamente 60us para asegurar que el BOD esté trabajando
correctamente antes de que el MCU continúe ejecutando el código.
La desabilitación del BOD es controlada por el bit 6, BODS (BOD Sleep) en el
registro MCUCR. Al escribir uno en este bit se apagará el BOD en el pertinente
modo sleep, mientras el BOD esté en cero este estará activo.
Por defecto el BOD está en cero, por lo que siempre está activado.
9.4 Modo Idle
Cuando los bits SM2..0 son escritos como 000, la instrucción SLEEP hará que el
MCU entre en modo Idle, deteniendo el CPU pero permitiendo que el SPI,
USART, Comparador Análogo, ADC, Interfaz Serial de 2 wire (2 hilos),
Timer/Contador, Watchdog y el sistema de interrupciones continúe
funcionando.
Este modo básicamente detiene el reloj del CPU y el reloj de la Flash, mientras
permite que los otros relojes funcionen.
El modo Idle le permite al MCU que se despierte de las interrupciones
activadas externas así como el desbordamiento del Timer y las interrupciones
de transmisión Completas del USART.
Si despierta desde la interrupción del Comparador Análogo, el Comparador
Analógico puede activarse por configuración del bit ACD en el Control
comparador y Registro de estado – ACSR. Esto reducirá el consumo de energía
en el modo Idle.
SI el ADC es habilitado una conversión comenzará automáticamente cundo se
ingresa a este modo.
9.5 Modo de Reducción de Ruido del ADC
Cuando los bits SM2..0 son escritos como 001, la instrucción SLEEP hace que el
MCU entre en el Modo de Reducción de ruido del ADC, deteniendo al CPU
pero permitiendo al ADC, las interrupciones externas, la Interfaz Serial de 2
hilos(2 wire), Timer/Contador2 y Watchdog continuar funcionando (si es
habilitado). Este modo básicamente detiene el reloj de las entradas y salidas, el
reloj del CPU y el reloj de la FLASH, mientras permite que los otros relojes
estén funcionando.
Esto mejora el ambiente de ruido del ADC, permitiendo alta resolución en las
medidas.
Si el ADC es habilitado, una conversión comienza automáticamente cuando se
entra en este modo. Aparte de la Interrupción de Conversión Completa del
ADC, solo un reset externo, un reset del sistema del Watchdog, una
Interrupción del Watchdog, un reset del Brown-out, una interrupción de la
Interfaz serial de 2 hilos (2 wire), una interrupción externa en INT7:4 o un
cambio de interrupción pueden despertar al MCU desde el modo de reducción
de ruido del ADC.
9.6 Modo Power-down
Cuando los bits SM2..0 son escritos como 010, la instrucción SLEEP hace que el
MCU entre en el Modo Power-down. En este modo, el oscilador externo es
detenido, mientras la interrupción externa, la interfaz serial de 2 wire (2 hilos), y
el Watchdog continúan operando. Solo un reset externo, un reset del Watchdog,
un reset del Brown-out, una interrupción externa en INT7:4, una interrupción
en INT2:0 o un cambio de interrupción pueden despertar al MCU.
Este modo de descanso básicamente detiene todos los relojes generados,
permitiendo operar solo el módulo asincrónico.
Note que si el nivel del disparo de una interrupción es usado para despertar
desde el modo power-down, el nivel cambiado debe sostenerse durante algún
tiempo para despertar al MCU. Cuando despierta del modo Power-down, hay
un retardo antes de despertarse y continúa hasta que despierte totalmente. Esto
permite al reloj reiniciar y llegar a estabilizarse antes de que haya sido detenido.
El periodo para despertarse esta definido por el fusible CKSEL que define el
periodo de reset.
9.7 Modo Power-save
Cuando los bits SM2..0 son escritos como 011, la instrucción SLEEP hace que el
MCU entre en el Modo Power-save. Esto modo es idéntico al modo Power-
down, con una excepción: Si el Timer/contador2 es habilitado, este funcionara
durante el descanso. Este dispositivo puede despertarse desde un
desbordamiento del Timer o una Salida del Comparador desde el
Timer/Contador2 si los bits correspondientes a la interrupción del
Timer/Contador2 son habilitadas en TIMSK2, y el bit en la interrupción global
en SREG es puesta en uno.
Si el Timer /Contador2 no está corriendo, se recomienda usar este modo.
El Timer/Contador2 puede ser contado sincrónicamente y asincrónicamente en
el Modo Power-save. Si el Timer/contador2 no está usando el reloj asincrónico,
el oscilador del Timer/Contador es detenido durante el descanso (sleep). Si el
Timer/contador2 no está usando el reloj sincrónico, la fuente del reloj es
detenido durante el descanso (sleep). Note que aun cuando el reloj síncrono
está corriendo en Power-save, este reloj sólo está disponible para el
Timer/Counter2.
9.8 Modo Standby
Cuando los bits SM2..0 son escritos como 110 y un cristal/resonador externo es
seleccionado, la instrucción SLEEP hace que el MCU entre en Modo Standbye.
Este modo es idéntico al Power-Down con la excepción de que el Oscilador es
kept running. En el modo Standby, el dispositivo se despierta en 6 ciclos de
reloj.
9.9 Modo Standby Extendido
Cuando los bits SM2..0 son escritos como 111 y un cristal/resonador externo es
seleccionado, la instrucción SLEEP hace que el MCU entre en el Modo Standbye
extendido. Este modo es idéntico al modo Power-save con la excepción que el
Oscilador es kept running. En el modo Stanbye Extendido, el dispositivo se
despierta en 6 ciclos de reloj
9.10 Registro Reducción de Energía
El Registro Reducción de Energía (PRR), proporciona un método para detener
los periféricos individuales para reducir el consumo de energía.
El estado de la corriente de los periféricos es congelada y los registros de E/S no
pueden ser leídos o escritos.
Los recursos usados por el periférico cuando el reloj se detiene permanecerán
ocupados, por está razón los periféricos deben en la mayoría de los casos ser
deshabilitados antes de que se detenga el reloj.
Al despertarse un periférico, el cual ha sido limpiado el bit en PRR, pone a los
periféricos en igual estado como antes de cerrarse.
El cierre de los periféricos puede ser usado en modo Idle, Modo Activo para
reducir significantemente el sobre consumo de energía. En otros modos de
descanso, el reloj es ya es detenido.
9.11 Minimización del Consumo de Energía
Hay varios problemas a considerar cuando se trata de minimizar el consumo de
energía en un sistema controlado por un AVR. En general, los modos de
descanso deben ser usados tanto como sea posible, y el modo sleep debe ser
seleccionado dependiendo de la función del dispositivo que este operando.
Todas las funciones no necesitan ser deshabilitadas. En particular, los módulos
siguientes necesitan una consideración especial cuando tratan de obtener el más
bajo consumo posible.
9.11.2 Conversión Análoga a Digital
Si habilitó, el ADC será habilitado en todos los modos de descanso. Para
ahorrar energía, el ADC debe ser deshabitado antes de entrar en cualquier
modo sleep. Cuando el ADC es apagado y encendido otra vez, la siguiente
conversión será una conversión extendida.
9.11.2 Comparador Análogo
Cuando entra en modo Idle, el comparador Análogo debe ser deshabilitado si
no se está usando. Cuando entra en el modo de Reducción de Ruido del ADC,
el comparador Análogo debe ser deshabilitado. En otros modos sleep, el
Comparador Análogo es automáticamente deshabilitado. Sin embargo, si el
Comparador Análogo es configurado para usar la Referencia del Voltaje Interno
como entrada, el Comparador Análogo debe ser deshabilitado en todos los
modos de descanso. De otro modo, la Referencia de voltaje Interna deberá ser
habilitada, independientemente del modo de descanso.
9.11.3 Brown-out Detector
Si el Brown-out Detector no es necesario para la aplicación, este modo debe ser
apagado. Si el Brown-out Detector es habilitado por los fusibles BODLEVEL,
este será habilitado en todos los modos, y además, siempre consume energía.
En el modo sleep más profundo, este contribuirá significantemente para el
consumo total de corriente.
9.11.4 Referencia de Voltaje Interna
La Referencia de Voltaje Interna será habilitada cuando se necesite detectar el
Brown-out, el Comparador Análogo o el ADC. Si estos módulos son
deshabilitados como se describe en la sección de abajo, la referencia de Voltaje
Interna será deshabilitada y esta no consumirá energía.
Cuando se prende otra vez, el usuario debe poner la referencia antes de que sea
usado.
9.11.5 Watchdog Timer
Si el Watchdog Timer no es necesario para la aplicación, el módulo debe ser
apagado. Si el Perro Watchdog Timer es habilitado, este será habilitado en
todos los modos, y además, siempre consumirá energía. En el más profundo de
los descansos (sleep), este contribuirá significantemente al consumo total de
corriente.
9.11.6 Pines del Puerto
Cuando entra en modo sleep, todos los pines del puerto deben ser configurados
para usar la mínima energía. Lo más importante es por lo tanto asegurar que
ningún pin maneje cargas resistivas. En el modo de descanso cuando el reloj de
las E/S y el reloj del ADC son detenidos, los buffers de entrada del dispositivo
serán deshabilitadas. Esto asegura que no exista consumo de energía cuando
una entrada lógica no es necesaria. En algunos casos, la entrada lógica es
necesaria para detectar condiciones de arranque, y entonces esto será
habilitado.
Si el buffer de entrada es habilitado y la señal de entrada es dejada a flote o
tiene una señal análoga en VCC/2, el buffer de entrada usará excesiva energía.
Para los pines de entrada analógica, el buffer de entrada digital debe ser
deshabilitado de todos los tiempos. Una señal análoga para VCC/2 en la
entrada de un pin puede causar lo suficiente de corriente incluso en modo
activo.
Los buffers de entrada digital pueden deshabilitarse escribiendo en el registro
de desabilitación de entradas digitales (DIDR1 y DIDR0).
9.11.7 Sistema On-chip Debug
Si el Sistema On-chip Debug es habilitado por el fusible OCDEN y el chip entra
en modo sleep, la fuente del reloj principal será habilitada, y además, siempre
consumirá energía. En el más profundo de los modos sleep (descanso), este
contribuirá significantemente al consumo total de corriente. Hay tres vías
alternativas para deshabilitar el sistema OCD:
1. Deshabilitar el fusible del OCDEN
2. Deshabilitar el Fusible del JTAGEN
3. Escribir uno en el bit JTD del MCUCR
9.12 Descripción de los Registros
9.12.1 SMCR – Registro de Control para el Modo Sleep
El Registro de Control para el Modo sleep contiene bits para el control de la
energía.
• Bits 3, 2, 1 – SM2:0: Selección de Bits 2, 1, y 0 para el Modo Sleep
Estos bits seleccionan entre los cinco posible modos como muestra la tabla 9-2.
Notas:
1. El modo Standby es solo recomendado para usar con un cristal externo.
• Bit 0 – SE: Habilitación del sleep
El bit SE debe ser escrito a uno lógico para hacer que el MCU entre en modo
sleep cuando la instrucción SLEEP es ejecutada. Para evitar que el MCU entre al
modo sleep es recomendable escribir a uno el bit SE antes de ejecutar la
instrucción SLEEP y para limpiar inmediatamente después de despertarse.
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
9.12.2 MCUCR – Registro de Control MCU
• Bit 6 – BODS: Descanso BOD
El bit BODS deber ser escrito a uno lógico para apagar el BOD durante el
descanso (sleep). Al escribir en el bit BODS, se controla por una secuencia de
tiempos y un bit de habilitación, BODSE en el registro MCUCR. Para
deshabilitar el modo de descanso, el BODS debe ser puesto a uno y el BODSE
debe estar en cero en cuatro ciclos del reloj.
El bit BODS es activado en tres ciclos del reloj después de ser configurado. Una
instrucción SLEEP debe ser ejecutada mientras el BODS es activado para apagar
el BOD para el nuevo modo de descanso. El bit BODS es automáticamente
limpiado después de tres ciclos del reloj.
• Bit 5 – BODSE: Habilitación del sleep (descanso) BOD
El BODSE habilita la configuración del bit de control BODS, como se explica en
la descripción del BODS. La deshabilitación del BOD es controlada por una
secuencia de tiempos.
9.12.3 PRR – Registro Reducción de Energía
• Bit 7 - PRTWI: Reducción de Energía TWI
Al escribir un uno lógico en este bit cierra el TWI mediante la detención del
reloj. Cuando arranque otra vez el TWI, el TWI debe ser reinicializado para
asegurar su correcto funcionamiento.
• Bit 6 –Reducción de Energía del Timer/Countador2 PRTIM2
Al escribir un uno lógico en este bit pone el modulo del Timer/Contador2 en
modo asincrónico (AS2 es 0). Cuando el Timer/Contador2 es habilitado, la
operación continuará como antes de que haya sido cerrado.
• Bit 5 - PRTIM0: Reducción de Energía del Timer/Contador0
Al escribir un uno lógico en este bit se cierra el modulo del Timer Contador0.
Cuando el Timer/Contador0 es habilitado, la operación continuará como antes
de que haya sido cerrado.
• Bit 4 - PRUSART1: Reducción de Energía en el USART1
Al escribir un uno lógico en este bit se cierra el USART1 detenido el reloj del
módulo.
Cuando despierta otra vez el USART1, el USART1 debe reinicializarse para
asegurar su correcto funcionamiento.
• Bit 3 - PRTIM1: Power Reduction Timer/Counter1
Al escribir un uno lógico en este bit se cierra el módulo del Timer/Contador1.
Cuando el Timer/Contador1 es habilitado, la operación continuará como antes
de que haya sido cerrado.
• Bit 2 - PRSPI: Power Reduction Serial Peripheral Interface
Al escribir un uno lógico en este bit se cierra el módulo de Interfaz Periférica
Serial mediante la detención del reloj. Cuando despierta otra vez del SPI, el SPI
debe reinicializarse para asegurar su correcto funcionamiento.
• Bit 1 - PRUSART0: Reducción de Energía del USART0
Al escribir un uno lógico en este bit se cierra el USART0 deteniendo el reloj del
módulo.
Cuando despierta otra vez el USART0, el USART0 debe reinicializarse para
asegurar su correcto funcionamiento.
• Bit 0 - PRADC: Power Reduction ADC
Al escribir un uno lógico en este bit se cierra el ADC. El ADC debe ser
deshabilitado antes de que se cierre el módulo. El comparador análogo no
puede usar el MUX de entrada del ADC cuando el ADC es cerrado.
10. Control del Sistema y Reset
10.0.1 Reset del AVR
Durante el reset, todos los registros de E/S se ponen en su valor inicial, y el
programa empieza a ejecutarse desde el Vector de Reset. La instrucción
localizada en el Vector de Reset debe ser un JMP – Salto Absoluto – instrucción
para reiniciar la rutina manualmente. Si el programa nunca habilita una fuente
de interrupciones, el Vector de interrupciones no es usado, y el código de
programa puede ser ubicado en esta localidad. Es también del caso, si el Vector
de Reset, está en la sección de aplicaciones mientras el Vector de Interrupciones
está en la sección baja del programa (boot), o viceversa. El diagrama del circuito
se muestra en la tabla 10-1 la cual muestra el reset lógico.
Los puertos de E/S de los AVRs son reiniciadas inmediatamente a su estado
inicial cuando una fuente de reset está activa. Esto no requiere que cualquier
fuente de reloj esté corriendo. Después de resetear todas las fuentes ha sido
desactivado, se efectúa un conteo de retardo, alargándose el reset interno. Esto
permite lograr una estabilidad antes de la operación normal de inicio. El
periodo de tiempo para el conteo del retardo está definido por el usuario a
través de los fusibles SUT y CKSEL.
10.0.2 Fuentes de Reset
El ATmega164P/324P/644P tiene cinco Fuentes de reset:
1. Power-on reset. El MCU es reseteado cuando el voltaje de alimentación
está por debajo del umbral del Power-on Reset (VPOT).
2. Reinicio externo. El MCU es reseteado cuando un nivel bajo en el pin de
RESET el cual es mas largo que el pulso mínimo.
3. Reset del Watchdog. El MCU es reseteado cuando el período del Tiempo
del Watchdog termina y el Watchdog es habilitado.
4. Reset del Brown-out. El MCU es reseteado cuando el voltaje de VCC de
alimentación está debajo del Brown-out Reset (VBOT) y el Brown-out
Detector es habilitado.
5. Reset del JTAG. El MCU es reseteado si existe un uno lógico en el
registro del Reset.
10.0.3 Reset del Power-on
Un pulso del Power-on (POR) es generado por un circuito de detención interno
del chip. El circuito del POR está activado cuando el VCC esta por debajo del
nivel de detección. El circuito del POR puede ser usado para disparar el reset,
así como para detectar una falla en el voltaje de alimentación.
El circuito de reset del Power-on asegura que el dispositivo sea reseteado desde
el Power-on. Alcanzar el voltaje umbral del Power-on llama al contador del
programa, el cual determina cuanto tiempo el dispositivo está en reset desde de
subir el VCC. La señal de RESET es activada otra vez, sin ningún retardo,
cuando el VCC decrementa por debajo del nivel de detección.
10.0.4 Reset Externo
Un reset externo es generado por un nivel bajo en el pin de RESET. Los pulsos
de RESET más largos que el ancho del pulso mínimo generan un reset, o si el
reloj no está corriendo. Pulsos cortos no garantizan generar un reset. Cuando la
señal aplicada alcanza el voltaje umbral de Reset – VRST – en su flanco positivo,
el contador de retardos inicia al MCU después de que periodo de tiempo tout ha
terminado.
10.0.5 Detección del Brown-out
El ATmega164P/324P/644P tiene en su interior un circuito detector del Brown-
out (BOD) para monitorear el nivel del VCC durante su operación mediante la
comparación de un nivel de disparo.
El nivel de disparo del BOD puede ser seleccionado por el fusible BODLEVEL.
El nivel de disparo tiene una histéresis para asegurar la detección del Brown-
out. La histéresis en el nivel de detección deben ser interpretados como VBOT+
=VBOT + VHYST/2 y VBOT- = VBOT - VHYST/2.
Cuando el BOD es habilitado, y decrece el VCC a un valor más abajo del nivel
de disparo, el Brown-out Reset es inmediatamente activado.
Cuando incrementa el VCC por encima del nivel de disparo, el contador de
retardos inicia al MCU después de que el periodo de tiempo tTOUT ha terminado.
10.0.6 Reset del Watchdog
Cuando hay un tOUT, esto genera un pulso de reset corto de una duración del
ciclo CK. En el flanco de bajada de este pulso, el tiempo de retardo empieza a
contar el periodo de tiempo del tOUT.
10.1 Referencia del Voltaje Interno
El ATmega164P/324P/644P ofrece una referencia interna. Esta referencia se usa
para Detectar el Brown=out, y puede usarse como una entrada al Comparador
Analógico o al CONVERSOR ANALÓGICO-DIGITAL.
10.1.1 Habilitación de la señal de voltaje interna y tiempo de arranque
La referencia de voltaje tiene un arranque que influencia en la forma en que este
debería usarse. Para ahorrar energía, la referencia no siempre es activada. La
referencia esta activada en las siguientes situaciones:
1. Cuando el BOD es habilitado (por programación del fusible BODLVEL
[2:0]).
2. Cuando la referencia Bandgap es conectada al comparador analógico
(por configuración del bit ACBG en el registro ACSR).
3. Cuando el ADC es habilitado.
Además, cuando el BOD no es habilitado, después de configurar el bit ACBG o
deshabilitar el ADC, el usuario debe siempre iniciar la referencia antes de que la
salida del comparador Análogo sea usada. Para reducir el consumo de energía
en el modo Power-dowm, el usuario puede evitar las tres condiciones de arriba
para asegurar que la referencia sea apagada antes de entrar en el modo Power-
dowm.
10.2 Watchdog Timer
10.2.1 Características:
• Contador desde un Oscilador dentro del chip
• 3 Modos de Operación
– Interrupciones
– Reinicio del Sistema
– Reinicio de Interrupciones y del sistema
• Periodo del Time-out seleccionable desde 16ms to 8s
• Possible Hardware fuse Watchdog always on (WDTON) for fail-safe mode
10.2.2 Vista Global
El ATmega164P/324P/644P tiene un Watchdog timer mejorado (WDT). El
WDT es un contador de ciclos de tiempos de un oscilador separador en el chip
de 128Khz. El WDT produce una interrupción o un reset al sistema cuando el
contador alcanza el valor dado en el time/out. En el modo de operación
normal, esto requiere que el sistema use la instrucción WDR / Watchdog Timer
Reset/ para reiniciar al contador antes de que alcance el valor del time/out.
Si el sistema no reinicia el contador, se producirá una interrupción o se
reiniciara el sistema.
En el modo de interrupción, el WDT produce una interrupción cuando el
tiempo termina. Esta interrupción puede ser usada para despertar al dispositivo
del modo de descanso y también como un contador del sistema general: como
por ejemplo para limitar el tiempo máximo permitido para operaciones seguras,
dando una interrupción cuando funciona mas tiempo de lo esperado.
En el modo de Reset del Sistema, el WDT da un reset cuando termina el tiempo.
Esto es típicamente usado para prevenir desconexiones del sistema en caso de
código runaway.
El tercer modo, Modo de interrupciones y Reset del sistema, combinas los otros
dos modos mediante el primero genera una interrupción y entonces conecta el
modo de Reset del sistema.
Este modo permitirá un cierre seguro por ejemplo ahorrando los parámetros
críticos antes de un reset del sistema.
El Watchdog siempre enciende el fusible WDTON, si programando forzamos al
WDT para entrar en modo de reset del sistema. Cuando el fusible es
programado el bit WCE en el modo de Reset del Sistema y el bit WDIE en el
modo de Interrupción son puestos en 1 y 0 respectivamente.
Para mayor seguridad del programa, el Watchdog debe ser configurado
siguiendo los siguientes pasos:
1. En operaciones similares, escribir un uno lógico para cambiar el bit
WDEN y WDE del Watchdog. Un uno lógico debe ser escrito en el WDE
para un previo valor del bit WDE.
2. Entre las siguientes cuatro ciclos de reloj, escribir en el WDE y en los bits
del prescalador del Watchdog como requiera, pero con el bit WDCE
limpiado. Esto debe ser hecho con una sola operación.
El siguiente código de ejemplo muestra una función en ensamblador y en C
para apagar el Watchdog Timer. El ejemplo asume que las interrupciones son
controladas así que no ocurrirán interrupciones durante la ejecución de estas
funciones.
Nota: Si el Watchdog es habilitado accidentalmente, por ejemplo por un
puntero incontrolable o una condición de brown-out, el dispositivo será
reseteado y el Watchdog Timer permanecerá habilitado.
Si el código no es puesto para controlar el Watchdog, este podría permanecer en
un lazo infinito. Para evitar esta situación, el software de aplicación debe
limpiar siempre a la Bandera del sistema de Reset del Watchdog (WDRF) y al
bit de control WDE en la rutina de inicialización, o si el Watchdog no está en
uso.
El siguiente código muestra un ejemplo uno en ensamblador y otro en C para
cambiar el valor del time-out del Watchdog Timer.
Nota: El Watchdog Timer debe ser reseteado antes de cualquier cambio de los
bits WDP, ya que un cambio en los bits WDP puede resultar un time-out
cuando cambia a un periodo mas corto del time-out.
10.3 Descripción de los Registros
10.3.1 MCUSR – Registro de Estado MCU
El Registro de Estado MCU brinda información las causas por las cuales las
fuentes de reset provocan un reset en el MCU.
• Bit 4 – Banderas del Reset JTRF: JTAG
Este bits es puesto a uno si un reset es cuando por un uno lógico en el Registro
de Reset JTAG seleccionado por la instrucción JTAG AVR_RESET. Este bit es
reseteado por un reset del Power-on, o por un cero lógico en la bandera.
• Bit 3 – WDRF: Bandera del reset del Watchdog
Este bit es puesto a uno si ocurre un Reset del Watchdog. El bit es reseteado por
un Reset del Power-on o por la escritura de un cero lógico en la bandera.
• Bit 2 – BORF: Bandera de reset del Brown-out
Este bit es puesto a uno si ocurre un Reset del Brown-out. El bit es reseteado por
un Reset del Power-on, o por una escritura de un cero lógico en la bandera.
• Bit 1 – EXTRF: Bandera de Reset Externo
Este bit es puesto a uno si ocurre un Reset externo. El bit es reseteado por un
reset del Power-on, o por la escritura de un cero lógico en la bandera.
• Bit 0 – PORF: Bandera de Reset del Power-on
Este bit es puesto a uno si ocurre un Reset del Power-on. El bit es reseteado solo
por una escritura de un cero lógico en la bandera.
Para ser uso de la Bandera de Reset para identificar una condición de reset, el
usuario debe leer y entonces resetear el MCUSR tan pronto sea posible en el
programa. Si el registro es limpiado antes de que ocurra otro reset, la fuente de
reset ser encontrada mediante la revisión de las Banderas de Reset.
10.3.2 WDTCSR – Registro de Control del Watchdog Timer
• Bit 7 - WDIF: Bandera de Interrupción del Watchdog
Este bit es puesto a uno cuando ocurre un time-out en el Watchdog Timer y el
Watchdog Timer es configurado por interrupción. WDIF es limpiado por
hardware cuando se ejecuta el correspondiente vector de interrupción.
Alternativamente, WDIF es limpiado mediante la escritura de un uno lógico en
la bandera.
Cuando el Bit I en el registro de estado es configurado, la interrupción del
Watchdog Timer es ejecutada.
• Bit 6 - WDIE: Habilitación de Interrupción del Watchdog
Cuando este bit es escrito como uno y el bit I en el Registro de estado es
configurado, la interrupción del Watchdog es habilitada. Si WDE es limpiada en
combinación con su configuración, el Watchdog Timer está en modo de
Interrupción, y la interrupción es ejecutada si ocurre un time-out en el
Watchdog Timer.
Si el WDE es configurado, el Watchdog Timer está en modo de Interrupción y
rset del Sistema. El primer time-out en el Watchdog Timer pondrá en uno el
WDIF.
Al ejecutarse el vector de interrupción correspondiente limpiara
automáticamente WDIE y WDIF por hardware. Esto es usado para brindar
seguridad al Watchdog Timer mientras usa la interrupción. Este sin embargo no
debería estar en la misma rutina de interrupción, porque puede comprometer la
seguridad del Sistema de reset del Watchdog. Si la interrupción no es ejecutada
antes del siguiente time-out, un reset del Sistema será aplicado.
• Bit 4 - WDCE: Habilitación de cambio del Watchdog
Este es usado en secuencias de tiempos para cambiar los bits WDE y el
prescalador. Para limpiar el bit WDE, y/o cambiar los bits del prescalador,
WDCE debe ser configurado.
Una vez escrito a uno, por hardware se limpiará WDCE por cuatro ciclos de
reloj.
• Bit 3 - WDE: Habilitación del Sistema de Reset del Watchdog
El WDE es overridden por WDRF en el MCUSR. Esto significa que WDE es
siempre puesto a uno cuando WDRF es configurado. Para limpiar WDE, WDRF
debe ser limpiado primero. Este elemento asegura múltiples resets durante
condiciones que causan problemas, y asegura ante de problemas de arranques.
• Bit 5, 2:0 - WDP3:0: Prescalador 3, 2 ,1 y 0 del
Los bits WDP3:0 determinan los prescaladores (divisores) del Watchdog Timer
cuando el Watchdog Timer está corriendo. Los valores de los diferentes
prescaladores (divisores) y sus correspondientes periodos de time-out se
muestran en la siguiente tabla 10-2.
11. INTERRUPCIONES
11.2 Vectores de Interrupción
ATmega164P/324P/644P
11.3 DESCRIPCION DE REGISTROS
11.3.1 MCUCR –Registro de control MCU
• Bit 1 – IVSEL: Selección del vector de interrupción
Cuando el bit IVSEL es cero, los vectores de interrupción son puestos al
comienzo de la memoria Flash. Cuando este bit es uno, los vectores de
interrupción son movidos al comienzo de la sección Boot Loader de la Flash. La
actual dirección de comienzo de la sección Boot es determinada por los fusibles
BOOTSZ. Para evitar cambios unidireccionales de las tablas de los vectores de
interrupciones se procede a los siguientes cambios en el bit IVSEL:
a. Habilitar el cambio en el vector de interrupción escribiendo uno en el bit
(IVCE).
b. Dentro de cuatro ciclos de reloj, escribir el valor deseado a IVSEL mientras se
escribe cero a IVCE.
Las Interrupciones automáticamente son deshabilitadas mientras la secuencia
es ejecutada. Las interrupciones son deshabilitadas cuando es uno en el ciclo
IVCE, y permanecen deshabilitadas hasta la siguiente instrucción escrita en
Bisel. Si Bisel no es escrita, las interrupciones permanecen deshabilitadas por
cuatro ciclos. El bit-I del registro de estado no es afectado por la desabilitación
automática.
• Bit 0 – IVCE: Habilitación de Cambios del Vector Interrupción
El bit IVCE será escrito con uno lógico al habilitar el cambio del bit IVSEL. IVCE
es puesto en cero por hardware por cuatro ciclos después es escrito o es cero
cuando IVSEL es escrito directamente. Configurando los bits del IVCE
desabitará las interrupciones.
12. INTERRUPCIONES EXTERNAS
12.1 DESCRIPCIÓN DE REGISTROS
12.2.1 EICRA – Registro de Control de Interrupciones A
• Bits 7:6 – Reservados
Estos bits son reservados en el ATmega164P/324P/644P, y siempre son escritos
con cero.
• Bits 5:0 – ISC21, ISC20 – ISC00, ISC00: Interrupciones Externas 2 - 0
Sentido de los Bits de Control
La interrupciones externas 2-0 son activadas por los pin externos INT2:0 si la
bandera I en SREG y la correspondiente mascara de Interrupción en el EIMSK
es uno. El nivel en los pines externos corresponde a uno en el EIMSK. Los
límites de la forma de onda cuadrada en INT2, INT0 son registrados
asincrónicamente.
Los pulsos en INT2:0 son más extensos que el mínimo ancho de pulso dado en
las “Interrupciones Externas” generadas en la interrupción. Pequeños pulsos no
son garantizados para generar una interrupción. Si la interrupción a nivel bajo
es seleccionada, el nivel bajo seria sostenido hasta la realización de la
actualización ejecutando la instrucción para generar la interrupción. Si se
habilita, el nivel activo de interrupción se generará una llamada de la
interrupción hasta que el pin este en bajo. Cuando se cambia el bit, ISCn, la
interrupción puede ocurrir. Por consiguiente, es recomendable primero
deshabitar INTn encerando la habilitación de este bit en el registro EIMSK.
Luego, el bit ISCn puede ser cambiado. Finalmente, la bandera de interrupción
INTn debería ser limpiada por la escritura de uno lógico en este bit de la
bandera de interrupción (INTFn) en el registro EIFR antes de que la
interrupción sea nuevamente habilitada.
Sentido de Control de la Interrupción
ISCn1 ISCn0 Descripción
0 0 El nivel bajo de INTn genera un pedido de interrupción
0 1 Cualquier flanco de INTn genera un pedido de interrupción
asincrónico
1 0 El flanco de bajada de INTn genera un pedido de interrupción
asincrónico
1 1 El flanco de subida de INTn genera un pedido de interrupción
asincrónico
12.2.2 EIMSK – Registro Mascara de Interrupción Externa
• Bits 2:0 – INTF2:0: External Interrupt Flags 2 - 0
Cuando algún flanco o cambio lógico en el pin INT dispara un pedido de
interrupción, INTF2:0 llega hacer uno. Si el bit-I en el SREG y la
correspondiente habilitación de interrupción en el bit, INT2:0 EIMSK, son uno,
el MCU saltara al vector de interrupción. La bandera es limpiada cuando la
rutina de interrupción es ejecutada. Alternativamente, la bandera puede ser
limpiada por la escritura de uno lógico. Estas banderas son siempre limpiadas
cuando INT2:0 son configuradas como nivel de interrupción. Note que cuando
entra en modo sleep con las interrupciones INT2:0 deshabilitadas, los buffers de
entrada en estos pines serian deshabilitados. Esto puede causar un cambio
lógico en las señales internas con uno en las banderas INTF2:0.
12.2.4 PCICR –Registro de Control Cambio del pin de Interrupción
• Bit 3 – PCIE3: Habilitación de la Interrupción 3 cambiada al PIN
Cuando el bit PCIE3 es uno y el bit-I en el Registro de Estado (SREG) es uno, el
cambio de pin de interrupción 3 es habilitado. Cualquier cambio en cualquier
habilitación en los pines PCINT31..24 causará una interrupción.
La correspondiente interrupción demandada al cambio de pin de interrupción
es ejecutada desde el vector de Interrupción PCI3. Los pines PCINT31..24 son
habilitados individualmente por el Registro PCMSK3.
• Bit 2 – PCIE2: Habilitación de la Interrupción 2 cambiada al PIN
Cuando el bit PCIE2 es uno y el bit-I en el Registro de Estado (SREG) es uno, el
cambio de pin de interrupción 2 es habilitado. Cualquier cambio en cualquier
habilitación en los pines PCINT23..16 causara una interrupción.
La correspondiente interrupción demandada al cambio de pin de interrupción
es ejecutada desde el vector de Interrupción PCI1. Los pines PCINT23..16 son
habilitados individualmente por el Registro PCMSK2.
• Bit 1 – PCIE1: Habilitación de la Interrupción 1 cambiada al PIN
Cuando el bit PCIE1 es uno y el bit-I en el Registro de Estado (SREG) es uno, el
cambio de pin de interrupción 1 es habilitado. Cualquier cambio en cualquier
habilitación en los pines PCINT15..8 causara una interrupción.
La correspondiente interrupción demandada al cambio de pin de interrupción
es ejecutada desde el vector de Interrupción PCI1. Los pines PCINT15..8 son
habilitados individualmente por el Registro PCMSK1.
• Bit 0 – PCIE0: Habilitación de la Interrupción 0 cambiada al PIN
Cuando el bit PCIE0 es uno y el bit-I en el Registro de Estado (SREG) es uno, el
cambio de pin de interrupción 0 es habilitado. Cualquier cambio en cualquier
habilitación en los pines PCINT7..0 causará una interrupción.
La correspondiente interrupción demandada al cambio de pin de interrupción
es ejecutada desde el vector de Interrupción PCI1. Los pines PCINT7..0 son
habilitados individualmente por el Registro PCMSK0.
12.2.5 PCIFR – Cambio de Pin en el Registro de banderas de Interrupción
• Bit 3– PCIF3: Cambio de Pin en la Bandera de Interrupción 3
Cuando un cambio lógico en cualquier pin de disparo PCINT31..24 en
demanda de una interrupción, PCIF3 llegara a ser uno. Si el bit-I en el SREG y el
bit PCIE3 en EIMSK son uno, el MCU saltara al correspondiente vector de
interrupción. La bandera es limpiada cuando la rutina de interrupción es
ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de
uno lógico.
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet
A tmega164p guide datashet

Más contenido relacionado

La actualidad más candente

Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Hamiltonn Casallas
 
Comunicación serial PIC16F877A
Comunicación serial PIC16F877AComunicación serial PIC16F877A
Comunicación serial PIC16F877ALiliana Rodríguez
 
Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04Hamiltonn Casallas
 
Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Hamiltonn Casallas
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Hamiltonn Casallas
 
Ejercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónEjercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónJaime E. Velarde
 
Curso de microcontroladores capitulo 01
Curso de microcontroladores capitulo 01Curso de microcontroladores capitulo 01
Curso de microcontroladores capitulo 01Hamiltonn Casallas
 
101172 pic16f877-en-espanol1
101172 pic16f877-en-espanol1101172 pic16f877-en-espanol1
101172 pic16f877-en-espanol1grana2810
 
Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12Hamiltonn Casallas
 
Usart PIC config LANDA
Usart PIC config LANDAUsart PIC config LANDA
Usart PIC config LANDAdave
 
Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02Hamiltonn Casallas
 
Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Hamiltonn Casallas
 
Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09Hamiltonn Casallas
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84guestf09168b
 
Curso de microcontroladores capitulo 08
Curso de microcontroladores capitulo 08Curso de microcontroladores capitulo 08
Curso de microcontroladores capitulo 08Hamiltonn Casallas
 

La actualidad más candente (20)

Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06
 
Comunicación serial PIC16F877A
Comunicación serial PIC16F877AComunicación serial PIC16F877A
Comunicación serial PIC16F877A
 
Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04
 
Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03
 
Ejercicios 04 cálculo continuación
Ejercicios 04 cálculo continuaciónEjercicios 04 cálculo continuación
Ejercicios 04 cálculo continuación
 
Curso de microcontroladores capitulo 01
Curso de microcontroladores capitulo 01Curso de microcontroladores capitulo 01
Curso de microcontroladores capitulo 01
 
101172 pic16f877-en-espanol1
101172 pic16f877-en-espanol1101172 pic16f877-en-espanol1
101172 pic16f877-en-espanol1
 
Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12Curso de microcontroladores capitulo 12
Curso de microcontroladores capitulo 12
 
Usart PIC config LANDA
Usart PIC config LANDAUsart PIC config LANDA
Usart PIC config LANDA
 
Clase USART
Clase USARTClase USART
Clase USART
 
Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02
 
Programación PIC16F84A
Programación PIC16F84AProgramación PIC16F84A
Programación PIC16F84A
 
Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07Curso de microcontroladores capitulo 07
Curso de microcontroladores capitulo 07
 
Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09Curso de microcontroladores capitulo 09
Curso de microcontroladores capitulo 09
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
 
Curso de microcontroladores capitulo 08
Curso de microcontroladores capitulo 08Curso de microcontroladores capitulo 08
Curso de microcontroladores capitulo 08
 
50824079 datasheet-pic18f4550-espanol
50824079 datasheet-pic18f4550-espanol50824079 datasheet-pic18f4550-espanol
50824079 datasheet-pic18f4550-espanol
 
PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
 
El PIC16F84
El PIC16F84El PIC16F84
El PIC16F84
 

Similar a A tmega164p guide datashet

Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Alejandra Ruiz
 
Microcontroladores pic14f84a
Microcontroladores pic14f84aMicrocontroladores pic14f84a
Microcontroladores pic14f84adanqueas
 
Ud1 4 caracteristicas_pic16_f84a
Ud1 4 caracteristicas_pic16_f84aUd1 4 caracteristicas_pic16_f84a
Ud1 4 caracteristicas_pic16_f84aarnadillo
 
Microprosedador
MicroprosedadorMicroprosedador
Microprosedadordy vc
 
Ud1 3 microcontrolador_pic
Ud1 3 microcontrolador_picUd1 3 microcontrolador_pic
Ud1 3 microcontrolador_picarnadillo
 
Arquitectura y Operación del PIC16F877
 Arquitectura y Operación del PIC16F877 Arquitectura y Operación del PIC16F877
Arquitectura y Operación del PIC16F877Aldair Serrano
 
Clase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladoresClase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladoresGabriel Jhonatan
 
Manual pic16 f87x
Manual pic16 f87xManual pic16 f87x
Manual pic16 f87xernestogp22
 
3 microcontroladores
3 microcontroladores3 microcontroladores
3 microcontroladoresProyesa
 
Introduccion al DSC dsPIC30F4013.pptx
Introduccion al DSC dsPIC30F4013.pptxIntroduccion al DSC dsPIC30F4013.pptx
Introduccion al DSC dsPIC30F4013.pptxBrayamMiranda3
 
Instituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxInstituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxJhonRymond2
 
Instituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxInstituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxJhonRymond2
 

Similar a A tmega164p guide datashet (20)

Atmega
AtmegaAtmega
Atmega
 
Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550
 
Microcontroladores pic14f84a
Microcontroladores pic14f84aMicrocontroladores pic14f84a
Microcontroladores pic14f84a
 
Ud1 4 caracteristicas_pic16_f84a
Ud1 4 caracteristicas_pic16_f84aUd1 4 caracteristicas_pic16_f84a
Ud1 4 caracteristicas_pic16_f84a
 
At89c52
At89c52At89c52
At89c52
 
Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
 
Microprosedador
MicroprosedadorMicroprosedador
Microprosedador
 
Ud1 3 microcontrolador_pic
Ud1 3 microcontrolador_picUd1 3 microcontrolador_pic
Ud1 3 microcontrolador_pic
 
Arquitectura y Operación del PIC16F877
 Arquitectura y Operación del PIC16F877 Arquitectura y Operación del PIC16F877
Arquitectura y Operación del PIC16F877
 
Clase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladoresClase 8-intro-a-los-microcontroladores
Clase 8-intro-a-los-microcontroladores
 
Registros del Pic 16F84
Registros del Pic 16F84Registros del Pic 16F84
Registros del Pic 16F84
 
Manual pic16 f87x
Manual pic16 f87xManual pic16 f87x
Manual pic16 f87x
 
3 microcontroladores
3 microcontroladores3 microcontroladores
3 microcontroladores
 
3 microcontroladores
3 microcontroladores3 microcontroladores
3 microcontroladores
 
Introduccion al DSC dsPIC30F4013.pptx
Introduccion al DSC dsPIC30F4013.pptxIntroduccion al DSC dsPIC30F4013.pptx
Introduccion al DSC dsPIC30F4013.pptx
 
07 Familia Atmega
07 Familia Atmega07 Familia Atmega
07 Familia Atmega
 
PIC vs AVR
PIC vs AVRPIC vs AVR
PIC vs AVR
 
Instituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxInstituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptx
 
Instituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptxInstituto Tecnológico Superior.pptx
Instituto Tecnológico Superior.pptx
 
Grabacion de microcontroladores_pic
Grabacion de microcontroladores_picGrabacion de microcontroladores_pic
Grabacion de microcontroladores_pic
 

Último

DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASPersonalJesusGranPod
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCarlosGabriel96
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfXimenaFallaLecca1
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesMIGUELANGEL2658
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesgovovo2388
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajasjuanprv
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Dr. Edwin Hernandez
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMONICADELROCIOMUNZON1
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfdanielJAlejosC
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfvladimirpaucarmontes
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 

Último (20)

DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias locales
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitales
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptx
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdf
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 

A tmega164p guide datashet

  • 1. Características: Microcontrolador AVR de 8 bits de alto rendimiento y bajo consumo. Arquitectura Avanzada RISC - 131 instrucciones. La mayoría de un solo ciclo de reloj de ejecución. - 32 registros de trabajo de 8 bits para propósito general. - Funcionamiento estático total. - Capacidad de procesamiento de unos 20 MIPS a 20 MHz. - Multiplicador por hardware de 2 ciclos Memorias de programa y de datos no volátiles de alta duración - 16/32/44 K bytes de FLASH auto programable en sistema - 512B/1K/2K bytes de EEPROM - 1/2/4K bytes de SRAM Interna - Ciclos de escritura/borrado: 10.000 en Flash / 100.000 en EEPROM
  • 2. - Retención de Datos: 20 años a 85ºC / 100 años a 25ºC - Sección opcional de código Boot con bits de bloqueo independientes. Programación en sistema del programa Boot que se encuentra dentro del mismo chip. Operación de lectura durante la escritura. - Bloqueo programable para la seguridad del software. Interfase JTAG - Capacidades de Boundary Scan de acuerdo con el estándar JTAG - Soporte Extendido Debug dentro del chip - Programación de FLASH, EEPROM, fusibles y bits de bloqueo a través de la interfase JTAG. Características de los periféricos - Dos Timer/Contadores de 8 bits con prescalamiento separado y modo comparación. - Un Timer/Contador de 16 bits con prescalamiento separado, modo comparación y modo de captura. - Contador en Tiempo Real con Oscilador separado - 6 Canales para PWM - ADC de 10 bits y 8 canales Modo Diferencial con ganancia seleccionable a x1, x10 o x200. - Interfase serie de dos hilos con byte orientado. - Dos puertos Seriales USART Programables - Interfaz Serial SPI maestro-esclavo - Watchdog Timer programable con oscilador independiente, dentro del mismo chip. - Comparador Analógico dentro del mismo Chip - Interrupt and Wake-up on Pin Change Características especiales del microcontrolador - Power-on Reset (en el encendido) y detección de Brown-out (pérdida de polarización) programable. - Oscilador RC interno calibrado. - Fuentes de interrupción externas e internas. - 6 modos de descanso: Idle, Reducción de Ruido ADC, Power-save, Power-down, Standby y Standby extendido. Encapsulados para Entradas/Salidas (E/S) - 32 líneas de E/S programables. - PDIP de 40 pines, TQFP y QFN/MLF de 44 pines. Voltajes de Operación - 1.8 – 5.5V para el ATMEGA 164P/324P/644PV - 2.7 – 5.5V para el ATMEGA 164P/324P/644P
  • 3. Velocidad de Funcionamiento - ATMEGA 164P/324P/644PV: 0 – 4MHz @ 1.8 – 5.5V - 10MHz @ 2.7 – 5.5V - ATMEGA 164P/324P/644PV: 0 – 10MHz @ 2.7 – 5.5V - 20MHz @ 4.5 – 5.5V Consumo de energía a 1MHz, 1.8V, 25ºC para el ATMEGA 164P/324P/644P - Activo: 0.4mA - Modo Power-down: 0.1uA - Modo Power-Save: 0.6uA (Incluye RTC de 32 Khz) 1. CONFIGURACIÓN DE PINES Figura 1-1. Pines de Salida del ATmega164P/324P/644P TQFP/QFN/MLF
  • 4. 2. Revisión Global El ATmega164P/324P/644P es un microcontrolador CMOS de 8 bits de bajo consumo basado en la arquitectura RISC mejorada. Sus instrucciones se ejecutan en un ciclo de máquina, el ATmega164P / 324P / 644P consigue transferencia de información alrededor de 1 MIPS por MHz admitido por el sistema, permitiendo al diseñador del sistema optimizar el consumo de energía versus la velocidad de procesamiento.
  • 5. 2.1 Diagrama de Bloque Figura 2 -1. Diagrama de Bloques El core (núcleo) AVR combina un conjunto de instrucciones RISC con 32 registros para uso de propósito general. Todos los 32 registros están directamente relacionados con la Unidad Aritmética Lógica (ALU), admitiendo dos registros independientes al ejecutarse una instrucción en un ciclo de máquina. El resultado de esta arquitectura es más eficiente, se consigue un caudal de flujo y transferencia hasta diez veces más rápido que microcontroladores CISC convencionales. El ATmega164P / 324P / 644P provee las siguientes características: 16/32 / 64K bytes en el sistema de Flash Programable con capacidad de lectura y escritura de 512B/1K/2K bytes en la EEPROM, 1/2/4K bytes en la SRAM, 32 pines de E/S para propósito general, 32 registros de propósito general, Contador en Tiempo real (RTC), tres Timer/Contadores flexibles con modo de Comparación y PWM, 2 USARTs, un byte orientado a la Interfaz Serial de 2 hilos, 8 canales ADC de 10 bits con opción de entrada Diferencial con ganancia programable, Watchdog Timer programable con oscilador interno, un Puerto serial SPI, Interfase de prueba JTAG, también usado para acceder al sistema On-chip Debug y seis modos de programación seleccionable para ahorro de energía. El modo Idle detiene al CPU mientras permite a la SRAM, Timer/Contador, Puerto SPI y al sistema de interrupciones continuar funcionando.
  • 6. El Modo Power-down guarda el contenido de los registros pero paraliza al oscilador, desactiva todas las otras funciones de chip hasta la próxima interrupción o mediante reseteo por hardware. En el Modo Power-save, el reloj asincrónico continúa corriendo, permitiendo tener actualizado al reloj mientras el resto de dispositivos están descansando. El Modo de Reducción del Ruido del ADC detiene al CPU y a todos los módulos de E/S excepto al Reloj Asincrónico y al ADC, para minimizar el ruido durante la conversión. En el Modo Standby, el oscilador Cristal/Resonador está corriendo mientras el resto de dispositivos están descansando. Estos permiten comenzar una rápida combinación con el consumo de baja energía. En el Modo de Standby extendido, corre el Oscilador principal y el Reloj Asincrónico. Este elemento es hecho usando tecnología de alta densidad de memoria no volátil de ATMEL. El chip interno ISP de la FLASH permite a la memoria de programa ser reprogramada a través del puerto interno ISP mediante un programador convencional no volátil o mediante un programa interno en el dispositivo AVR. El programa de inicialización puede usar cualquier interfaz para descargar el programa de aplicación en la memoria flash. El programa en la sección Flash Boot es actualizado mientras continúa corriendo la sección de aplicaciones de la Flash, proporcionando una escritura- lectura verdadera de operación. Para combinar un CPU RISC de 8 bits en un sistema de Flash Auto-programable en un chip monolítico, el ATmega164P/324P/644P es un poderoso microcontrolador que provee una alta flexibilidad y solución de costos efectivos para cualquier aplicación de control. El ATmega164P / 324P / 644P AVR es soportado con un juego completo de programas y herramientas de desarrollo del sistema incluyendo: compiladores de C, ensambladores de macro, depurador / simuladores de programa, emuladores de circuitos y equipos de evaluación. 2.2 Comparación entre el ATmega164P, ATmega324P and ATmega644P 2.3 Descripción de Pines 2.3.1 VCC Alimentación de Voltaje Digital
  • 7. 2.3.2 GND Tierra 2.3.3 Puerto A (PA7:PA0) El puerto A sirve como entradas analógicas para el conversor Análogo Digital. El puerto A también sirve como un puerto bidireccional de 8 bits con resistencias internas de pull up (seleccionables para cada bit). Los buffers de salida del puerto A tienen características simétricas controladas con fuentes de alta capacidad. Los pines del puerto A están en tri-estado cuando las condiciones de reset están activadas o cuando el reloj no este corriendo. El puerto A también sirve para varias funciones especiales del ATmega164P/324P/644P como la Conversión Análoga Digital. 2.3.4 Port B (PB7:PB0) El puerto B es un puerto bidireccional de 8 bits de E/S con resistencias internas de pull up. Las salidas de los buffers del puerto B tienen características simétricas controladas con fuentes de alta capacidad. Los pines del puesto B están en tri-estado cuando las condiciones de reset están activadas o cuando el reloj no esté corriendo. El puerto B también sirve para varias funciones especiales del ATmega164P/324P/644P como se menciona en las páginas iniciales. 2.3.5 Port C (PC7:PC0) El puerto C es un puerto bidireccional de 8 bits de E/S con resistencias internas de pull up (seleccionadas por cada bit). Las salidas de los buffers del puerto C tienen características simétricas controladas con fuentes de alta capacidad. Los pines del puesto C están en tri-estado cuando las condiciones de reset están activadas siempre y cuando el reloj no este corriendo. El puerto C también sirve para las funciones de Interfaz del JTAG, con funciones especiales del ATmega164P/324P/644P como se menciona en las páginas iniciales.
  • 8. 2.3.6 Port D (PD7:PD0) El Puerto D es un puerto bidireccional de entradas y salidas con resistencias internas de pull up (seleccionadas por cada bit). Las salidas de los buffers del puerto D tienen características simétricas controladas con sumideros de fuentes de alta capacidad. Los pines del Puerto D están en tri-estado cuando llega una condición de reset activa, siempre y cuando el reloj no esté corriendo. El puerto D también sirve para varias funciones especiales del ATmega164P/324P/644P como se menciona en las páginas iniciales. 2.3.7 RESET Entrada del Reset. Un pulso de nivel bajo en este pin por períodos de pulso mínimo genera un reset, siempre y cuando el reloj no esté corriendo. La longitud del pulso mínimo está especificada en las Características y Sistemas de Reset (Páginas 331 del Data Sheet). Pulsos cortos no son garantizados para generar un reset. 2.3.8 XTAL1 Entrada para el amplificador del oscilador invertido y entrada para el circuito de operación del reloj interno. 2.3.9 XTAL2 Salida del Oscilador amplificador de salida. 2.3.10 AVCC AVCC es la alimentación de voltaje para el pin del Puerto F y el Conversor Análogo a Digital. Este debe ser conectado externamente a VCC, siempre y cuando el ADC no sea usado. Si el ADC es usado, este deberá ser conectado a VCC a través de un filtro paso bajo. 2.3.11 AREF Está es la referencia para el pin de la conversión Análoga a Digital. 3. Recursos Un set comprensible de herramientas, notas de aplicación y datasheet se puede descargar desde http://www.atmel.com/avr.
  • 9. 4. Acerca de los Ejemplos de Código Este documento contiene unos simples ejemplos de código que brevemente muestran como usar varias partes del dispositivo. Sea consiente que no todos los vendedores de compiladores en C incluyen la definición de bits en el archivo de cabecera y el manejo de interrupciones en el compilador C es dependiente. Por favor confirme con la documentación del compilador C para más detalles. Los ejemplos de código asumen que la parte de archivo de cabecera esta incluido antes de la compilación. Para las localidades de los registros de E/S en el mapa extendido de E/S, las instrucciones "IN", "OUT", "SBIS", "SBIC", "CBI", y "SBI" serían reemplazadas con instrucciones de acceso extendido E/S. Típicamente "LDS" y "STS" combinadas con "SBRS", "SBRC", "SBR", y "CBR". 5. Retención de Datos La fiabilidad de la calificación de resultados muestra que la velocidad de falla de un proyecto es mucho menor que 1 PPM en 20 años a 85°C ó 100 años a 25°C. 6. AVR CPU Core 6.1 VISIÓN GENERAL Esta sección discute la arquitectura general del AVR. La principal función del AVR es asegurar la correcta ejecución del programa. La CPU debe ser capaz de acceder a la memoria, llevar a cabo cálculos, control de periféricos y atención de interrupciones.
  • 10. Para maximizar el rendimiento y el paralelismo, el AVR usa una arquitectura de Hardware con separador de memorias y buses para programa y datos. Las instrucciones en la memoria de programa son ejecutadas con un simple nivel de colas. Mientras una instrucción es ejecutada, la siguiente instrucción es ejecutada desde la memoria de programa. Este concepto permite que las instrucciones sean ejecutadas en cada ciclo de máquina. La memoria de programa está en la memoria Flash re-programable. El Archivo del Registro (Register File) de rápido acceso contiene 32 registros de propósito general de 8 bits trabajando en un simple ciclo de reloj. Esto permite una operación de ciclo simple en la Unidad Aritmética lógica. En una operación típica de la ALU, dos operandos están fuera del Archivo de Registro, la operación es ejecutada, y el resultado es guardado en el Archivo de Registro en un ciclo de máquina. Seis de los 32 registros pueden ser usados como tres registros punteros de 16 bits de dirección, para direccionar los Datos y permitir los cálculos de direcciones diferentes. Uno de estos tres punteros puede ser usado como un puntero de direcciones para tablas en la memoria de programa de la Flash. Estos registros de función adicionales son el X, Y y Z de 16 bits, descritos después en esta sección. La ALU soporta operaciones lógicas y aritméticas entre registros o entre constantes y registros. Simples operaciones de registros pueden ser ejecutadas en la ALU. Después de una operación aritmética, el registro de estado es actualizado para reflejar información acerca de los resultados de la operación. El flujo del programa es provisto por un salto condicional e incondicional y llamado de interrupciones, capaz de direccionar espacios de direcciones completamente. La mayoría de instrucciones del AVR tienen un formato simple de una palabra de 16 bits. Cada dirección de memoria contiene instrucciones de 16 o 32 bits. El espacio de memoria en la flash está dividido en dos secciones, la sección Baja del programa y la sección de aplicación de programa. Ambas secciones están dedicadas para bloqueo de escritura y protección de lectura/escritura. La instrucción SMP que se escribe en la Sección de la memoria Flash debe residir en la sección Baja del programa. Durante los llamados de interrupción y subrutinas, la dirección de regreso del Contador de Programa (CP) es almacenado en la pila (stack). Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 11. La pila (stack) está localizada efectivamente en la SRAM (RAM estática) de datos y consecuentemente el tamaño de la pila está limitado solo por el tamaño total de la SRAM (RAM estática) y su uso. Todos los programas a usarse deben inicializar en el SP (Stack Pointer) en la rutina del Reset (antes de que sea ejecutada una interrupción o una subrutina). El puntero de pila (Stack pointer SP) es la lectura/escritura accesible en el espacio de E/S. La RAM estática de datos puede ser fácilmente penetrada a través de los cinco diferentes modos de direccionamiento soportados en la arquitectura de AVR. El espacio de memoria en la arquitectura de los mapas de memoria de los AVR son todos lineales y regulares. Un módulo de interrupción flexible tiene sus registros de control en los espacios de E/S con una Habilitación de Interrupción Global en el Registro de Estado. Todas las interrupciones tienen separado un vector de interrupciones en la tabla del vector de interrupciones. Las interrupciones tienen prioridad de conformidad con su vector de interrupciones. La dirección más baja del vector de interrupciones tiene alta prioridad. El espacio de memoria de E/S contiene 64 direcciones para las funciones periféricas de la CPU, el Registro de Control SPI y otras funciones de Entrada y Salida. La memoria de Entrada y Salida puede ser accedida directamente o como localidades de espacio de datos siguiendo estos Archivos de Registro:0x20 - 0x5F. En suma, el ATmega164P/324P/644P tiene espacios extendidos de entrada y salida desde la dirección 0x60 - 0xFF en la SRAM donde solo las instrucciones ST/STS/STD y LD/LDS/LDD pueden ser usadas. 6.3 Registro de Estado El registro de estado contiene información acerca de los resultados de las instrucciones aritméticas más recientes ejecutadas. Está información puede ser usada para alterar el flujo del programa en el funcionamiento de operaciones condicionales. Note que el Registro de Estado es actualizado después de todas las operaciones de la ALU, como especificaciones en el Set de Instrucciones de Referencia. En algunos casos esto retira la necesidad de usar comparación de instrucciones dedicadas, resultando un código más rápido y compacto. El Registro de estado no es almacenado automáticamente cuando entra una rutina de interrupción y se restituye cuando regresa de una interrupción. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 12. 6.3.1 SREG – Registro de Estado El registro de Estado AVR – SREG – está definido por: • Bit 7 – I: Habilitación de Interrupciones Globales El bit de habilitación de las interrupciones globales debe estar en uno para habilitar las interrupciones. La interrupción individual permite que el control sea llevado a cabo en registros de control distintos. Si el registro de Habilitación de interrupciones globales es borrado, ninguna de las interrupciones están activadas independiente de la configuración de una interrupción individual. El bit I es limpiado por hardware después de que una interrupción ha ocurrido, y es puesto en uno por la instrucción de RETI para habilitar interrupciones siguientes. El bit I también puede ser puesto en uno y borrado por la aplicación con las instrucciones SEI y CLI. • Bit 6 – T: Bit Copia de almacenamiento Los bits de instrucción de copia BLD (cargar bit) y BST (almacenar bit) usa el bit T como una fuente o destino para la operación del bit. Un bit desde los registros de los Archivos de Registro pueden ser copiados en el bit T mediante la instrucción SBT y un bit en T puede ser copiado dentro de un registro del Archivo de registros mediante la instrucción BLD. • Bit 5 – H: Half Carry Flag Half Carry es útil en la aritmética BCD. • Bit 4 – S: Bit de Signo, S = N ⊕ V El Bit S es una OR exclusiva entre la bandera negativa N y la bandera de desbordamiento V en Complemento a Dos. • Bit 3 – V: Bandera de Desbordamiento V en Complemento a Dos La bandera de desbordamiento en Complemento a Dos soporta el complemento a dos. • Bit 2 – N: Bandera Negativa La Bandera Negativa N indica un resultado negativo en una operación aritmética o lógica. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 13. • Bit 1 – Z: Bandera del Cero La bandera del cero indica si un resultado es cero en una operación aritmética o lógica. • Bit 0 – C: Bandera del Carry La bandera del Carry indica un carry en una operación aritmética o lógica. Archivo de registros de propósito General El Archivo de Registros es optimizado por el Juego de instrucciones RISC del AVR. Para lograr la actuación y flexibilidad requerida, los esquemas del entrada/salida se apoyan en los siguientes Archivos de Registros: • Un operador de salida de 8 bits y una entrada resultante de 8 bits • Dos operadores de salida de 8 bits y una entrada resultante de 8 bits • Dos operadores de salida de 8 bits y una entrada resultante de 16 bits • Un operador de salida de 16 bits y una entrada resultante de 16 bits La siguiente Figura (6-2) muestra la estructura de los 32 Registros de Propósito General que trabajan en la CPU. La mayoría de las operaciones de instrucciones en el Archivo de Registro tiene acceso directo a todos los registros, y la mayoría de ellos son instrucciones de un ciclo. Como se muestra en la figura anterior a cada registro en la memoria de datos se le asigna una dirección, mapeados estos directamente dentro de las 32 localidades para el uso del espacio de Datos. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 14. Aunque físicamente no son implementados en las localidades de la SRAM, esta memoria provee gran organización flexible para el acceso a estos registros, como los registros punteros X, Y y Z que se usan como índices de cualquier archivo de registro. El registro X, el registro Y y el registro Z Los registros R26… R31 tienen algunas funciones adicionales para uso de propósito general. Estos registros son punteros de 16 bits de dirección para direccionar indirectamente al espacio de datos. Los tres registros de direccionamiento indirecto X, Y y Z están definidos como se muestra en la figura siguiente. Figure 6-3. Los registros X, Y y Z En los modos de direccionamiento directo estos registros de dirección tienen desplazamientos fijos, incrementos y decrementos automáticos. 6.5 Puntero de Pila (Stack Pointer) El Stack–Pointer es usado para almacenar información temporal, para almacenar variables locales y para almacenar direcciones de regreso después de una interrupción o llamado de subrutinas. Los registros del Puntero de Pila siempre apuntan a la parte superior de la pila. Note que la pila es implementada como un crecimiento desde la localidad más alta a la localidad mas baja de la memoria. Esto implica que un comando PUSH decrementa el Puntero de Pila. El puntero de pila para la SRAM es el área donde las interrupciones y subrutinas son localizadas. Estos espacios de pila en los datos de la SRAM deben ser definidos por el programa antes de que cualquier llamado de subrutina sea ejecutado o una interrupción sea habilitada. El puntero de pila debe estar por encima de la localidad 0x0100. El valor inicial del puntero de pila es la última dirección de la SRAM interna. El puntero de pila es decrementado a uno cuando los datos presionan en la pila con la instrucción PUSH, y este es decrementado por tres cuando los datos llenan la pila con un regreso desde una subrutina RET o de regreso desde una interrupción RETI. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 15. El Puntero de Pila del AVR es implementado como un registro de 8 bits en el espacio de E/S. El número de bits actualmente usados es dependientemente implementado. Note que el espacio de datos en algunas implementaciones en la arquitectura del AVR es tan pequeña que solo necesita el SPL. En este caso, el registro SPH no esta presente. 6.5.1 SPH y SPL – Puntero de Pila Alto y Puntero de Pila Bajo Note: 1Valores iniciales respectivamente para el ATmega164P/324P/644P. 6.5.2 RAMPZ – Z Extendido – Registro puntero para ELPM/SPM Para las instrucciones ELPM/SPM, el puntero Z es una concatenación del RAMPPZ, ZH y ZL se muestran en la figura siguiente. Note que LPM no es afectado por la configuración del RAMPZ. Figura. El puntero Z usado por ELPM y SPM. El número actual de los bits es dependiente de la implementación. Al no usar los bits en una implementación se leerán como cero. Para compatibilidad con dispositivos futuros, asegurar el escribir estos bits como cero. 6.7 Reset e Interrupción Manual El AVR provee diferentes Fuentes de interrupción. Cada de estas interrupciones y el Vector Separador de Reset tienen un Vector separador de programa en el espacio de la memoria de programa. Todas las interrupciones son bits habilitados de forma individual los cuales deben ser escritos a uno lógico junto con el bit Habilitador de Interrupciones Globales en el registro de Estado. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 16. Dependiendo del valor del contador del programa, las interrupciones deben ser deshabilitadas automáticamente cuando los bits Boot Lock (BLB02 o BLB12) son programados. Esta característica mejora la seguridad de software. La dirección más baja en el espacio de la memoria de programa está definida por defecto como vectores de Reset e Interrupción. La lista completa de vectores se muestra en la página 61 del Data Sheet. La lista también determina los niveles de prioridad de las diferentes interrupciones. El nivel de prioridad es desde la dirección mas baja a la más alta. El RESET tiene la prioridad más alta y la siguiente es el pedido de interrupción externa (INTO). Los vectores de interrupción pueden ser movidos al inicio de la sección de la parte baja de la Flash por la configuración del bit IVSEL en el MCU del registro de Control (MCUCR). El vector de Reset también puede ser movido al inicio de la sección de la parte mas baja por la programación del fusible BOOTRST. Cuando ocurre una Interrupción, el bit I del Habilitador de Interrupciones Globales es limpiado y todas las interrupciones son deshabilitadas. El software del usuario puede escribir uno lógico en el bit I para habilitar de nuevo las interrupciones. Todas las interrupciones habilitadas pueden entonces interrumpir las rutinas de interrupciones. El bit I es puesto en uno automáticamente cuando regresa de una interrupción al ser ejecutada la instrucción RETI. Existen básicamente dos tipos de interrupciones. El primer tipo es disparado por un evento que configura la bandera de interrupción. Para estas interrupciones, el Contador de Programa es direccionado para el actual Vector de Interrupción a medida que se ejecuta una rutina de interrupción manual y limpiada por hardware la correspondiente bandera de interrupción. La bandera de interrupción puede también ser limpiada por uno lógico para la posición de la bandera del bit. Si una condición de interrupción ocurre mientras se habilita el bit de interrupción correspondiente este es limpiado, la bandera de interrupción será puesto en uno y la interrupción recordará ser siempre habilitada o la bandera es limpiada por software. De igual forma, si una o más condiciones de interrupción ocurren mientras el bit de interrupción es limpiado, la correspondiente bandera de interrupción será puesta en uno y la Bandera de Interrupción Global es Habilitada mientras el bit es uno, y entonces será ejecutada por el orden de prioridad. El segundo tipo de interrupción será disparada mas larga que la condición de interrupción actual. Si la condición de interrupción desaparece antes que la interrupción sea habilitada, la interrupción no será disparada. Cuando existe una interrupción en el AVR, esta siempre regresará al programa principal y ejecutará una o más interrupciones antes de cualquier pedido de interrupción. Note que el Registro
  • 17. de Estado no es almacenado automáticamente cuando entra una rutina de interrupción o cuando regresa de la rutina de interrupción. Esto deber ser hecho manualmente por software. Cuando usa la instrucción CLI para deshabilitar interrupciones, la interrupción será deshabilitada inmediatamente. Ninguna interrupción será ejecutada después de la interrupción CLI, Incluso si ocurre simultáneamente con la instrucción CLI. Los siguientes ejemplos muestran como esto puede ser usado para evitar interrupciones durante el tiempo de escritura en la EEPROM. Ejemplo del Código en Lenguaje Ensamblador In r16, SREG; almacena el valor en SREG cli; deshabilita interrupciones durante la secuencia de tiempos sbi EECR, EEMPE; Comienza la escritura en la EEPROM sbi EECR, EEPE Out SREG, r16; almacena el valor del I-bit en el SREG Ejemplo del Código en C char cSREG; cSREG = SREG; almacena el valor en SREG */ /* Deshabilita interrupciones durante la secuencia de tiempos */ __disable_interrupt(); EECR |= (1<<EEMPE); /* Comienza la escritura en la EEPROM */ EECR |= (1<<EEPE); SREG = cSREG; /* almacena el valor del I-bit en el SREG */ Cuando usa la instrucción SEI para habilitar interrupciones, la siguiente instrucción SEI será ejecutada antes de cualquier interrupción pendiente, como muestra el siguiente ejemplo. Ejemplo del Código en Lenguaje Ensamblador sei; Habilita la configuración de interrupciones globales Sleep; ingresa a descansar, espera por la interrupción ; note: ingresa a descansar antes de cualquier pedido de interrupción __enable_interrupt(); /* Habilita la configuración de interrupciones globales */ __sleep(); /* ingresa a descansar, espera por la interrupción */ /* Note: ingresa a descansar antes de cualquier pedido de interrupción */ 6.7.1 Tiempo de respuesta de la Interrupción La respuesta para la ejecución de interrupción para habilitar todas las interrupciones del AVR son mínimos cinco ciclos. Después de cinco ciclos de reloj la dirección del vector de programa para la rutina manual de interrupción es ejecutada.
  • 18. Durante este periodo de cinco ciclos, el Contador de Programa es guardado en el Stack (Pila). El vector es normalmente un salto para la rutina de interrupción, y este salto toma ciclos de reloj. Si una interrupción ocurre durante la ejecución de una instrucción de múltiples ciclos, esta instrucción es completada antes de que la interrupción sea pedida. Si una interrupción es ejecutada ocurre cuando el MCU esta en modo de descanso, la interrupción ejecuta tiempos de respuesta en incrementos de cinco ciclos de reloj. Este incremento llega al iniciar los tiempos desde la selección del Modo de descanso (sleep). Un retorno desde una rutina de interrupción manual toma cinco ciclos de reloj. Durante estos cinco ciclos de reloj, el Contador de Programa (tres bytes) es abierto desde el Stack, el puntero de Pila es incrementado por tres y el bit I en la configuración del SREG. 7. Memorias del AVR 7.1 Vista General Esta sección describe las diferentes memorias en el ATmega164P/324P/644P. La arquitectura de los AVR tiene dos espacios de memoria principal, la memoria de datos y el espacio de memoria de programa. En suma, al ATmega164P/324P/644P le caracteriza una memoria EEPROM para el almacenamiento de datos. Todos estos tres espacios de memoria son lineales y regulares. 7.2 Sistema Del Programa de Memoria Flash Reprogramable Interno El ATmega164P/324P/644P contiene 16/32/64K bytes en el sistema reprogramable de memoria interno para almacenamiento. Mientras todas las instrucciones son de un ancho de 16 o 32 bits, la Flash esta organizada como 32/64 x 16. Para seguridad del software, el espacio de memoria de la Flash está dividido en dos secciones, la sección baja de programa (Boot Program) y la sección de Aplicación de Programa. La memoria Flash tiene una duración de más o menos 10.000 ciclos de lectura/escritura. El Contador de Programa del ATmega164P/324P/644P es de un ancho de 15/16 bits, en consecuencia direcciona 32/64K localidades en la memoria de programa. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 19. Figura. Mapa de la memoria de programa 7.3 Memoria De Datos SRAM La figura de abajo muestra como la memoria SRAM del ATmega164P/324P/644P esta organizada. El ATmega164P/324P/644P es un microcontrolador complejo con más unidades periféricas que pueden ser soportadas entre la localidad 64 reservada en el código para las instrucciones de entrada y salida. Para los espacios extendidos de E/S desde la localidad $060 a la $FF en la SRAM, sola las instrucciones ST/STS/STD y LD/LDS/LDD pueden ser usadas. Las primeras 4.325 localidades en la Memoria de datos direccionan tanto el Archivo de Registro, la Memoria de E/S, la Memoria extendida de E/S y la SRAM de datos interna. Las primeras 32 localidades direccionan el Archivo de Registro, las 64 siguientes direccionan la SRAM de datos interna. Los cinco diferentes modos de direccionamiento para cubrir la Memoria de Datos son: Directo, Indirecto con desplazamiento, Indirecto, Indirecto con Pre-decremento y el Indirecto con Post incremento. En el archivo de registro, los registros del R26 al R31 marcan el direccionamiento indirecto de los punteros de registro. El modo Indirecto con desplazamiento alcanza 63 localidades de dirección desde la dirección base dada por los registros Y o Z. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 20. Cuando usamos los registros en modo de direccionamiento indirecto con pre- decremento automático y post-incrementos, los registros de dirección X, Y y Z son decrementados o incrementados. El trabajo de los 32 registros de propósito general, los64 registros de E/S, los registros extendidos de E/S y bytes 1024/2048/4096 de la SRAM interna en el ATmega164P/324P/644P son todos accesibles a través de estos modos de direccionamiento. Figura. Mapa de la memoria de datos 7.3.1 Tiempos de Acceso a la Memoria de datos Esta sección describe los tiempos de acceso generales para el acceso interno a la memoria. El acceso interno a la SRAM de datos funciona en dos ciclos de la CPU como se describe en la figura siguiente. Figura. Ciclos de acceso a la SRAM de datos internos 7.4 Memoria de datos EEPROM Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 21. El ATmega164P/324P/644P contiene 512B/1K/2K bytes en la memoria de datos EEPROM. Está organizado como un espacio de datos separado, en el cual solo los bytes pueden ser leídos y escritos. La EEPROM tiene una resistencia de más o menos 100.000 ciclos de escritura/lectura. El acceso entre la EEPROM y la CPU esta descrito en lo siguiente, especificando Registros de Dirección, Registros de datos de la EEPROM y el registro de Control de la EEPROM. Para prevenir escritura unidireccional de la EEPROM, una escritura específica debe proceder de la siguiente forma. Referirse a la descripción del Registro de Control de la EEPROM para detalles de este. Cuando la EEPROM es leída, la CPU es detenida por cuatro ciclos de reloj antes de la siguiente instrucción sea ejecutada. Cuando la EEPROM es escrita. La CPU es detenida por cuatro ciclos de reloj antes de que la siguiente instrucción sea ejecutada. 7.4.2 Prevención de Corrupción en la EEPROM Durante períodos bajos de VCC, los datos de la EEPROM pueden ser corrompidos porque el voltaje de alimentación es también bajo para la CPU y la EEPROM opera apropiadamente. Estos asuntos son los mismos para el nivel del sistema que usa la EEPROM, y la misma solución del diseño debería ser aplicado. Una alteración de datos en la EEPROM puede ser causada por dos situaciones cuando el voltaje es demasiado bajo. Primero, una secuencia de escritura regular a la EEPROM requiere un mínimo voltaje para operar correctamente. Segundo, la misma CPU puede ejecutar instrucciones incorrectas, si la alimentación es demasiado baja. Una alteración de datos en la EEPROM puede ser fácilmente evitada siguiendo las siguientes recomendaciones: Durante los periodos con insuficiente alimentación de voltaje poner el RESET del AVR en nivel bajo. Esto se puede hacer mediante una habilitación interna del Brown-Out Reset (BOD). Si un reset ocurre mientras existe una operación de escritura en progreso, la operación de escritura será completada suministrando el voltaje de alimentación necesario. 7.5 Memoria de E/S Todas las E/S y periféricos del ATmega164P/324P/644P son ubicados en el espacio de E/S. Todas las localidades de entrada pueden ser accedidas mediante las instrucciones LD/LDS/LDD y ST/STS/STD, transfiriendo datos entre los 32 registros de propósito general y los espacios de E/S. Los Registros de E/S con rango entre 0x00 - 0x1F son direccionadas con las instrucciones SBI y CBI. En estos registros, el valor de estos bits pueden ser verificados mediante el uso de las instrucciones SBIS y SBIC. Cuando usamos los comandos específicos de ENTRADA y SALIDA, las direcciones de E/S 0x00 a la 0x3F deberían ser usadas. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 22. Cuando direccionamos los registros de E/S como espacios de datos usando las instrucciones ST y LD, la localidad 0x20 debe ser añadida a estas direcciones. El ATmega164P/324P/644P es un microcontrolador complejo con muchas unidades periféricas que pueden soportar entre las 64 localidades reservadas en las instrucciones de Entrada y Salida. Para los espacios extendidos de E/S desde la localidad 0x60 a la 0xFF en la SRAM, solo las instrucciones ST/STS/STD y LD/LDS/LDD pueden ser usadas. Para compatibilidad con dispositivos futuros, los bits reservados deberían ser escritos a cero. Las direcciones reservadas de E/S nunca deben ser escritas. Algunas de las banderas de estado son limpiadas por la escritura de un uno lógico en estas. Note que, a diferencia de otros AVRs, las instrucciones CBI y SBI, solo operan sobre bits específicos, y pueden además ser usados sobre registros que tienen tales banderas de estado. Las instrucciones SCI y CBI trabajan con solo con los registros de la 0x00 a la 0x1F. Los registros de E/S y periféricos pueden ser usados para almacenar cualquier información y son particularmente para almacenar variables globales y banderas de estado. Los registros de E/S de propósito general están entre los rangos de direcciones 0x00 a la 0x1F y se usa para su acceso las instrucciones SBI, CBI, SBIS y SBIC 7.6 Descripción de Registros 7.6.1 EEARH y EEARL – Los Registros de Dirección de la EEPROM • Bits 15:12 – Res: Bits Reservados Estos bits son reservados en el ATmega164P/324P/644P Y siempre se leen como cero. • Bits 11:0 – EEAR8:0: Dirección de la EEPROM Los registros de dirección de la EEPROM –EEARH y EEARL- especifican la dirección de la EEPROM en los 4K bytes de espacio de la EEPROM. Los bytes de datos de la EEPROM son direccionables linealmente entre 0 y 4096. El valor inicial de EEAR no esta definido. Un valor propio debe ser escrito antes Un valor correcto debe ser escrito antes de que el EEPROM pueda ser accedido. 7.6.2 EEDR – EL Registro de Datos de la EEPROM
  • 23. • Bits 7:0 – EEDR7:0: Datos de la EEPROM Para la operación de la escritura en la EEPRM, el registro EEDR contienen los datos a ser escritos para la EEPROM en las direcciones dadas por el registro EEAR. Para la operación de lectura de la EEPROM, la EEDR contiene la lectura de datos fuera de la EEPROM en los registros dados por EEAR. 7.6.3 EECR – El Registro de Control de la EEPROM • Bits 7:6 – Res: Bits Reservados Estos bits son reservados en el ATmega164P/324P/644P Y siempre se leen como cero. • Bits 5:4 – Los Bits de Modo de Programación de la EEPROM: EEPM1 EEPM0 La configuración del bit de modo de programación de la EEPROM define cual acción del programa será disparada al EEPE. Esto es posible para la programación de datos en una operación atómica (borra el valor antiguo y el nuevo valor del programa) o para dividir la operación de lectura y escritura en dos diferentes operaciones. Los tiempos de programación para los diferentes modos se muestran en la tabla 7-1. Mientras EEPMn está en uno, cualquier escritura en la EEPMn será ignorada. Durante el reset, los bits de la EEPMn serán reseteados a 0b00 a menos que el programa de la EPROM este ocupado. • Bit 3 – EERIE: Habilitación de interrupciones de la EEPROM
  • 24. Escribiendo a uno el bit EERIE se habilita la interrupción de la EEPROM si el bit del SREG es uno. Escribiendo cero en EERIE se deshabilita la interrupción. La interrupción de la EEPROM genera una interrupción constante cuando EEPE es limpiado. • Bit 2 – EEMPE: Habilitación del Programa del Maestro de la EEPROM El bit EEMPE determina si la configuración de EEPE a uno causa que la EEPROM sea escrita. Cuando EEMPE es uno, configurando EEPE durante cuatro ciclos del reloj escribiría el dato a la EEPROM al seleccionar la dirección. Si EEMPE es cero, la configuración de EEPE no tendría efecto. Cuando EMPE ha sido escrito a uno por software, hardware limpiamos el bit a cero después de cuatro ciclos de reloj. Ver la descripción del bit de EEPE para un procedimiento de escritura de la EEPROM. • Bit 1 – EEPE: Habilitando la Programación de la EEPROM La habilitación de escritura de la señal EEPE de la EEPROM es la escritura de la habilitación de la EEPROM. Cuando la dirección y el dato son correctamente configurados, el bit EEPE debería ser escrito a uno para un valor de escritura dentro de la EEPROM. El bit EEMPE debería ser uno antes de que un uno lógico sea escrito a EEPE, con lo cuál no tomaría lugar la escritura de la EEPROM. El siguiente procedimiento sería escribiendo la EEPROM(los pasos 3 y 4 no son esenciales): 1. Esperar hasta que EEPE llegue a ser cero. 2. Esperar hasta que SPMEN en SPMCSR llegue a ser cero. 3. Escribir la nueva dirección de la EEPROM a EEAR (opcional). 4. Escribir el nuevo dato de la EEPROM a EEAR (opcional). 5. Escribir uno lógico al bit EEMPE mientras se escribe cero a EEPE en EECR. 6. Dentro de cuatro ciclos de reloj después configurar EEMPE, escribir uno lógico a EEPE. La EEPROM no puede ser programada durante la escritura del CPU a la memoria Flash. El software chequearía que la programación de la Flash es completada antes de inicializar la nueva escritura de la EEPROM. El paso 2 es solo relevante si el software contiene el Boot Loader permitiendo al CPU la programación de la Flash. Si la Flash nunca comienza la actualización por el CPU, el paso 2 seria omitido. Ver “Programación de la Memoria” en la Pág. 293 en el datasheet. Precaución: Una Interrupción entre los paso 5 y 6 haría que el ciclo de escritura falle, desde que la EEPROM es interrumpida por otro acceso a la EEPROM, el Registro EEAR o EEDR seria modificado, causando que el acceso a la Interrupción de la EEPROM falle. Esto es recomendado para tener la Bandera Global de Interrupciones limpia durante todos los pasos para evitar estos problemas.
  • 25. Cuando el tiempo de acceso a la escritura ha finalizado, el bit EEPE es limpiado por software. El software del usuario puede esperar por un cero antes de la escritura del siguiente byte. Cuando EEPE ha sido puesto en uno, el CPU es Detenido por dos ciclos antes de que la siguiente instrucción es ejecutada. • Bit 0 – EERE: Habilitación de Lectura de la EEPROM La lectura de la habilitación de la señal EERE de la EEPROM es leída para habilitar la EEPROM. Cuando la dirección correcta es configurada en el registro EEAR, el bit EERE seria escrito con uno lógico en el disparo de lectura de la EEPROM. El acceso de la lectura de la EEPROM toma una instrucción, y la respuesta del dato es disponible inmediatamente. Cuando la EEPROM es leída, la CPU es detenida por cuatro ciclos antes que la siguiente instrucción sea ejecutada. El usuario debería verificar el bit EEPE antes de empezar la operación de lectura. Si la escritura de la operación esta en progreso, no sería posible leer la EEPROM, o cambiar el Registro EEAR- La Calibración del Oscilador es usada al tiempo de acceso a la EEPROM- La Tabla 7-2 en la página 25 del datasheet lista el tiempo típico de programación para el acceso a la EEPROM desde el CPU. El siguiente código de ejemplo muestra uno en asembler y otro en C para escritura de la EEPROM. Los ejemplos asumen que las interrupciones son controladas (por desabilitación de las interrupciones globales). El ejemplo también asume que la parte baja de la memoria Flash esta presente en el software. Si cada código esta presente, la EEPROM escribe funciones y también espera por cualquier comando de finalización SPM.
  • 26. El siguiente código muestra un ejemplo en assembler y otro en C para lectura de la EEPROM. Los ejemplos asumen que las interrupciones son controladas también que las interrupciones no ocurrirían durante la ejecución de estas funciones.
  • 27. 7.6.4 GPIOR2 – General Purpose I/O Register 2 7.6.5 GPIOR1 – General Purpose I/O Register 1 7.6.6 GPIOR0 – General Purpose I/O Register 0
  • 28. 8. Sistema de Reloj y Opciones de Reloj 8.1 Sistemas de Reloj y sus Distribuciones La Figura 8-1 presenta los principales sistemas de reloj en el AVR y su distribución. Todos los relojes no necesitan ser activados a un tiempo dado. Para reducir el consumo de energía, los relojes de los módulos no empiezan a ser usados cuando están detenidos por uso de diferentes modos sleep, como se describe en “Power Management and Sleep Modes” en la página 42 del datasheet. Los sistemas de relojes se describen a continuación en la figura 8-1. 8.1.1 CPU Clock – clk CPU El reloj del CPU es dividido en partes del sistema concerniente a la operación del core AVR. Los ejemplos de cada módulo son Archivos de Registros de Propósito General, el Registro de Estado y la memoria de datos sosteniendo el Puntero de Pila. Deteniendo el reloj del CPU inhibe el core desde el funcionamiento general de las operaciones y cálculos. 8.1.2 I/O Clock – clk E/S La E/S de reloj es usada por la mayoría de los módulos de E/S, Timer/Counter, SPI, y USART. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 29. El reloj de E/S es también es usado por el modulo de Interrupciones Externas, pero note que algunas interrupciones externas son detectadas por flancos asíncronos, permitiendo que cada Interrupción sea detectada si el reloj de E/S es detenido. También note que la detección de la condición de inicio en el módulo USI es llevado a cabo asincrónicamente cuando el clk de E/S es detenido. El reconocimiento de la dirección de TWI en todos los modos sleep. 8.1.3 Flash Clock – clk FLASH El reloj de la Flash controla la operación de la interfase Flash. El reloj de la Flash es usualmente activado simultáneamente con el reloj del CPU. 8.1.4 Asynchronous Timer Clock – clkASY El Asynchronous Timer clock permite al Timer/Counter asíncrono ser contado directamente desde un reloj de cristal externo de 32 kHz. El reloj dominante permite usar este Timer/Counter como contador en tiempo real cuando el dispositivo esta en modo sleep. 8.1.5 Reloj del ADC – clkADC El ADC es proporcionado con un reloj dominante dedicado. Esto permite detener el CPU y los relojes de E/S. esto reduce el ruido generado por los circuitos digitales. Esto da una mayor Presición a la conversión ADC. 8.2 Fuentes de Reloj El dispositivo tiene las siguientes opciones de fuente de reloj, seleccionando por bits de Fusible de la Flash como se muestra en la Tabla 8-1. El reloj desde la fuente de selección es entrada al generador de reloj del AVR. 8.2.1 Fuentes de Reloj por Defecto Este dispositivo es enviado con un oscilador interno de 8.0 MHz y con los fusibles CKDIV8 programados, resultando en un sistema de reloj de 1.0 MHz. El inicio del tiempo es puesto al máximo y el periodo de tiempo fuera habilitado (CKSEL = "0010", SUT = "10", CKDIV8 = "0"). Las configuraciones por defecto aseguran que todos los usuarios puedan hacer sus fuentes de reloj deseadas usando cualquier programación de interfase.
  • 30. 8.2.2 Inicio de la secuencia de Reloj Cualquier fuente de reloj necesita suficiente Vcc para comenzar la oscilación y un número mínimo de ciclos de oscilación antes de que pueda considerarse estable. Para aseguran un suficiente Vcc, el dispositivo envía un reset interno con un tiempo de demora (t out) después el dispositivo realiza un reset para todas las otras fuentes de reset. La demora es el tiempo desde el oscilador del Watchdog y el número de ciclos en demora es puesto por los bits de fusibles SUTx y CKSELx. La selección de retardos se muestra en la Tabla 8-2. La frecuencia del Oscilador del Watchdog es el voltaje dependiente como se muestra en “Características Típicas”. El propósito general de los retardos es guardar al AVR en reset hasta que suplido con el mínimo voltaje Vcc. El retardo no monitorea el voltaje actual y esto requeriría de un retardo mas prolongado que el tiempo de subida de Vcc. Si esto no es posible, el interno o externo Brown-Out Detection circuit debería ser usado. El circuito BOD aseguraría suficiente Vcc antes que se realice el reset, el tiempo de retardo pueda ser deshabilitado. Deshabilitando el retardo sin utilizar el Brown-Out Detection circuit no sería recomendado. El oscilador requiere de oscilaciones para un número mínimo de ciclos antes de que el reloj sea considerado estable. El contador de onda interna monitorea la salida de reloj del oscilador y guarda el reset interno activado para un número dado de ciclos de reloj. El reset es luego realizado y el dispositivo empieza a ejecutarse. El tiempo de inicio recomendado para el oscilador es dependiente del tipo de reloj y varía desde 6 ciclos aplicados por un reloj externo de 32K para una baja frecuencia de cristal. La secuencia de inicio para el reloj incluye ambas el tiempo de retardo y el tiempo de inicio cuando el dispositivo empieza desde reset. Cuando empieza desde el modo Power-save o Power-down, Vcc es asumido para estar con el nivel suficiente y solo el tiempo de inicio es incluido. 8.2.3 Conexiones de la Fuente de Reloj Los pines XTAL1 y XTAL2 son entradas y salidas, respectivamente, de un amplificador invertido con el cual puede ser configurado para usos como oscilador On-Chip, como se muestra en la Figura 8-2- Un cristal de quartz o resonador cerámico puede ser usado. C1 y C2 debería siempre ser iguales para ambos cristales y resonantes. El valor optimo de los capacitores de pende del cristal y del resonador usados, la cantidad de perdida de capacitancia, y el ruido electromagnético del ambiente Para resonantes cerámicos, el valor del capacitor es dado por el fabricante.
  • 31. 8.3 Oscilador del Cristal de Baja Energía Este oscilador del Cristal es de baja energía, con voltaje reducido en la salida del XTAL2. Esto da un bajo consumo de energía, pero no es capaz de manejar otras salidas de reloj, y puede ser más susceptible al ruido en ambientes ruidosos. El oscilador de Baja Energía puede operar en tres modos diferentes, cada uno optimizado para un rango de frecuencia. El modo de operación es seleccionado por los fusibles CKSEL3. Como se muestra en la figura 8-3. El fusible CKSEL0 junto con el SUT1…0 seleccionan el inicio de tiempo como se muestra en la Tabla 8-4.
  • 32. 8.4 Ajuste del Oscilador del Cristal El Oscilador del cristal es ajustado, con This Crystal Oscillator is a full swing oscillator, with rail-to-rail swing on the XTAL2 output. Este es muy usado para controlar otras salidas de reloj y ambientes ruidosos. El consumo de corriente es más alto que ”Low Power Crystal Oscillator” en la página 32 del data sheet. Note que el ajuste del Oscilador del Cristal solo funciona para Vcc = 2.7 - 5.5 voltios. Alguna guía inicial para escoger los capacitores para ser usados con el cristal están dados en la tabla 8.6. El cristal debería ser conectado como se describe en ”Clock Source Connections” en la página 31 del data sheet. El modo de operación es seleccionado mediante los fusibles CKSEL3..1 como se muestra en la tabla8-5.
  • 33. 8.5 Oscilador del Cristal de Baja Frecuencia La baja frecuencia del Oscilador del Cristal es optimizada para usar un cristal de 32.768 KHz. Cuando seleccionamos el cristal, la capacitancia de carga y la Resistencia en serie equivalente del cristal, ESR sería tomado en consideración. Ambos valores son especificados por el fabricante. El oscilador del ATmega164P/324P/644P es optimizado para muy bajo consumo de energía, y además cuando seleccionamos los cristales, ver la tabla 8-7, para máximo ESR se recomienda cristales de 9pF y 12.5 pF.
  • 34. Los osciladores de baja frecuencia del cristal proporciona una capacitancia de carga interna de cristales típicos de 8.0 pF. Los cristales con recomendaciones de 8.0 pF pueden ser quitados como se muestra en la figura 8-3. Los cristales que especifican una capacitancia de carga CL mas alta que 8.0 pF, requieren capacitores externos como se describe en la figura 8-2. Para encontrar una capacitancia de carga adecuada para un cristal de 32.768, por favor consulte el cristal del datasheet. Cuando este oscilador es seleccionado, empieza el tiempo que es determinado por los fusibles SUT y CKSEL0 como se muestra en la figura de la Tabla 8-8. 8.6 Calibrar el Oscilador Interno RC Por defecto, el Oscilador Interno RC proporciona un reloj de aproximadamente 8MHz. Junto con el voltaje y temperatura dependiente, este reloj puede ser calibrado con mucha precisión por el usuario. Ver la tabla 27-4 “Velocidad del Oscilador Interno” para mas detalles. El dispositivo es enviado con el fusible CKDIV8 programado. Ver “Prescalador del Sistema de Reloj” para más detalles. Este reloj puede ser seleccionado como sistema de reloj por programación del fusible CKSEL como se muestra en la Tabla 8-9. Si es seleccionado, esto operaría con componentes no externos. Durante el reset, el hardware carga el valor de calibración de la pre-programación en el registro OSCCAL y por eso automáticamente calibra el oscilador RC. La precisión de esta calibración es mostrada como calibración de fábrica en la tabla 27-4.
  • 35. Para cargar el registro OSCCAL desde SW, ver “OSCCAL- Registro de Calibración del Oscilador” en la página 40 del datasheet, esto es posible para obtener una mayor precisión de calibración que la usada por fabrica. La precisión de esta calibración es mostrada como calibración de usuario en la Tabla 27-4. Cuando este Oscilador es usado como el reloj del chip, el oscilador del Watchdog todavía sería usado por el Watchdog Timer para el Reseteo a tiempo fuera. Para mayor información del valor de calibración en la pre-programación, ver la sección “Byte de Calibración” en la página 296 del datasheet. Cuando este Oscilador es seleccionado, empieza tiempos que son determinados por los fusibles SUT como se muestra en la Tabla 8-10 en la página 36 del datasheet. 8.7 Oscilador Interno de 128 kHz El Oscilador Interno de 128 KHz es un oscilador de bajo consumo provisto con un reloj de 128 KHz. La frecuencia nominal es 3V a 25 °C. Este reloj puede ser seleccionado como el sistema de reloj programando los fusibles CKSEL a “0011” como es mostrado en la Tabla 8-11. Cuando esta fuente de reloj es seleccionada, los tiempos de inicio son determinados por los fusibles SUT como se muestra en la Tabla 8-12.
  • 36. 8.8 Reloj Externo Para manejar el dispositivo desde una fuente de reloj externo, XTAL1 debería ser manejado como se muestra en la Figura 8-4. Para manejar un dispositivo con reloj externo, los fusibles CKSEL serían programados a “0000”. Cuando esta fuente de reloj es seleccionada, los tiempos de inicio son determinados por los fusibles SUT como se muestra en la Tabla 8-14. Cuando se aplica un reloj externo, es requerido evitar cambios súbitos en la frecuencia de reloj aplicada para asegurar la estabilidad de operación del MCU. La variación en frecuencia de más del 2% desde un ciclo de reloj al siguiente puede tener una conducta impredecible. Si los cambios de más del 2% es requerido, asegurarse que el MCU es guardado en el Reset durante los cambios.
  • 37. Note que el Prescalador del Sistema de Reloj puede ser usado para implementar cambios de ejecución de tiempo de la frecuencia del reloj interno mientras todavía asegura una operación estable. Referirse a “prescalador del sistema de Reloj” en la Pág. 38 del datasheet para más detalles. 8.9 Oscilador del Timer/Counter El ATmega164P/324P/644P usa el mismo tipo de oscilador del cristal para cristal de baja frecuencia y el oscilador del Timer/Counter. Ver “Oscilador del Cristal de baja frecuencia” en la página 34 del datasheet para mayores detalles. El dispositivo puede operar con Timer/Counter desde un cristal con frecuencia externa de 32.768 KHz o una fuente de reloj externa. Ver “Conexiones del la Fuente de Reloj” en la página 31 del datasheet para mayores detalles. Aplicando una fuente de reloj externa a TOSC1 puede ser hecho si EXTCLK en el Registro ASSR es escrito con uno lógico. Ver “el registro de comparación de salida B que contiene valores de 8-bit que continuamente compara con el valor de contador (TCNT2). Esto puede ser usado para generar una Interrupción de comparación a la salida, o generar una forma de onda a la salida en el pin OC2B” en la página 157 del datasheet. 8.10 Buffer del Reloj de Salida El dispositivo puede ser salida del sistema de reloj en el pin CLKO. Al habilitar la salida, el fusible CKOUT ha sido programado. Este modo es conveniente cuando el reloj del chip es usado para manejar otros circuitos en el sistema. El reloj también sería una salida durante el reset, y la operación normal del pin de E/S sería alterada cuando el fusible es programado. Ninguna fuente de reloj, incluyendo el Oscilador interno RC, puede ser seleccionado cuando el reloj es salida en CLKO. Si el prescalador del Sistema de Reloj es usado, esto divide el sistema de reloj que es salida. 8.11 Prescalador de Sistema de Reloj El ATmega164P/324P/644P tiene un Prescalador del sistema de reloj y el sistema de reloj puede ser dividido por configuración de “CLKPR-Registro Prescalador del reloj” en la página 40 del datasheet. Esto puede ser usado para decrementar la frecuencia del sistema de reloj y el consumo de energía cuando el requerimiento para procesamiento en energía es bajo. Esto puede ser usado con todas las opciones de fuente de reloj, y esto afectaría la frecuencia de reloj del CPU y todos los periféricos asíncronos clkI/O, clkADC, clkCPU, and clkFLASH son divididos por factores como se muestra en la Tabla 8-15 en la página 41 del datasheet. Cuando se cambia entre las configuraciones del prescalador, el prescalador del sistema de reloj asegura que no ocurrían fallas técnicas en el sistema de reloj. Esto también asegura que la frecuencia no es inmediatamente más alta que la frecuencia de reloj correspondiente a las configuraciones previas, o la frecuencia correspondiente a configuraciones nuevas. El contador de onda que implementa el Prescalador corre a la frecuencia no dividida del reloj, con lo cual puede ser más rápido que la frecuencia de reloj del CPU. Esto no es posible para determinar el estado del prescalador si esto
  • 38. sería leíble, y el tiempo exacto que toma el cambio desde una división de reloj a otra que no puede ser exactamente predefinida. Desde el tiempo que el valor de CLKPS es escrito, esto toma entre T1 + T2 y T1 + 2*T2 antes de que la nueva frecuencia de reloj sea activada. En este intervalo, la activación de 2 flancos para el reloj son producidos. T1 es el periodo previo del reloj, y T2 es el periodo correspondiente a la configuración del nuevo prescalador. Para evitar cambios unidireccionales de la frecuencia de reloj, un procedimiento de escritura especial seria el siguiente para cambiar los bits CLKPS: 1. Escribir en el prescalador del reloj el bit de habilitación de cambio (CLKPCE) a uno y todos los otros bits en CLKPR a cero. 2. Durante cuatro ciclos, escribir el valor deseado a CLKPS mientras se escribe a cero CLKPCE. Las Interrupciones serian deshabilitadas cuando se carga las configuraciones del Prescalador para estar seguros que el procedimiento de escritura no sea interrumpido. 8.12 Descripción de Registros 8.12.1 OSCCAL – Registro de Calibración de Oscilador • Bits 7:0 – CAL7:0: Valor de Calibración del Oscilador El Registro de Calibración del Oscilador es usado para la calibración del Oscilador Interno RC y remover la variación de procesos desde la frecuencia del oscilador. El valor de calibración pre-programado es automáticamente escrito en este registro durante el reset del chip, dando la frecuencia de calibración del fabricante como se especifica en la Tabla 27-4 en la página 330 del datasheet. El software de aplicación puede escribir en este registro para cambiar la frecuencia del oscilador. El oscilador puede ser calibrado a frecuencias como es especifica en la Tabla 27-4 en la página 330. La calibración fuera del rango no es garantizada. Note que este oscilador es usado al tiempo de acceso de escritura en la EEPROM y la Flash, y estos tiempos de escritura serían afectados. Si la EEPROM y la Flash son escritas, no calibrar a más de 8.8 MHz. Por otra parte, la escritura de la EEPROM o la Flash puede fallar. El bit CAL7 determina el rango de operación para el oscilador. Configurando este bit a 0 da el rango de frecuencia más bajo, en otras palabras configurando OSCCAL = 0x7F da la frecuencia más alta que OSCCAL = 0x80. Los bits CAL6..0 son usadas para modular la frecuencia dentro del rango seleccionado. La configuración de 0x00 da la frecuencia más baja en este rango, y configurando 0x7F da la frecuencia mas alta en el rango.
  • 39. 8.12.2 CLKPR – Registro Prescalador del Reloj • Bit 7 – CLKPCE: Habilitación de cambio del Prescalador del Reloj El bit CLKPCE sería escrito a uno lógico al habilitar el cambio de los bits CLKPS. El bit CLKPCE es solo actualizado cuando los otros bits en CLKPR son simultáneamente escritos a cero. CLKPCE es limpiado por hardware cuatro ciclos después de que es escrito o cuando los bits CLKPS son escritos. Reescribiendo el bit CLKPCE dentro del periodo de tiempo fuera, no limpiaría el bit CLKPCE. • Bits 3:0 – CLKPS3:0: Bits de Selección del Prescalador del Reloj 3 – 0 Estos bits definen el factor de división entre la fuente de reloj seleccionada y el sistema de reloj interno. Estos bits pueden ser escritos corriendo el tiempo o variando la frecuencia del reloj en las aplicaciones requeridas. Cuando el divisor divide en entrada del reloj Maestro del MCU, la velocidad para todos los periféricos asincrónicos son reducidas cuando el factor de división es usado. Los factores de división están dados en la Tabla 8-15 de la página 41 de datasheet. El fusible CKDIV8 determina el valor inicial de los bits CLKPS. Si CKDIV8 es desprogramado, los bits CLKPS serían reseteados a “0000”. Si CKDIV8 es programado, los bits CLKPS son reseteados a “0011”, dando un factor de división de 8 para el inicio. Esto debería ser usado si la fuente de reloj seleccionada tiene una frecuencia más alta que la máxima frecuencia de los dispositivos presentes en condiciones de operación. Note que cualquier valor puede ser escrito en los bits CLKPS indiferentemente de la configuración de los fusibles CKDIV8. El software de aplicación aseguraría que un factor de división suficiente sea escogido si la fuente de reloj seleccionada tiene una frecuencia más alta que la frecuencia máxima de los dispositivos presentes en condiciones normales. El dispositivo es enviado con el Fusible CKDIV8 programado. 9. Power Management y Modo Sleep 9.1 Revisión General El modo sleep habilita la aplicación para cerrar los módulos no usados en el MCU, por eso ahorra energía. El AVR proporciona varios modos sleep permitiendo al usuario adaptar el consumo de energía para la aplicación requerida. Cuando habilita, el Brown-out Detector (BOD) activa el monitoreo de la alimentación de voltaje durante los periodos de descanso (sleep). Además ahorra energía, es posible desactivar el BOD en algunos modos sleep.
  • 40. 9.2 Modo Sleep (Descanso) La siguiente figura muestra los diferentes sistemas de reloj en el ATmega164P/324P/644P, y su distribución. La figura es útil en la selección de un apropiado modo de sleep. La tabla 9-1 muestra los diferentes modos sleep, su forma de despertarse y la capacidad de deshabilitar el BOD:
  • 41. Notas: 1. Solo recomendado con cristal externo o resonador como fuente de reloj. 2. Si el Timer/Contador2 está corriendo en modo asincrónico. 3. Para el INT0, solo interrupción de nivel. Para entrar a cualquiera de los modos sleep, el bit SE en el SMCR debe ser escrito en uno lógico y una instrucción SLEEP debe ser ejecutada. Los bits SM2, SM1, y SM0 en el registro SMCR seleccionan cual modo de descanso será activado mediante la instrucción SLEEP. Si ocurre la habilitación de una interrupción mientras el MCU está en modo sleep, el MCU despierta. El MCU es parado durante cuatro ciclos además del tiempo de arranque, ejecuta la rutina de interrupción, y retoma la ejecución de la siguiente instrucción SLEEP. El contenido del Archivo de Registro y la SRAM son inalterables cuando el dispositivo despierta del descanso (sleep). Si ocurre un reset durante el modo sleep, el MCU despierta y ejecuta desde el Vector de Reset. 9.3 Desabilitación del BOD Cuando el Brown-out Detector (BOD) es habilitado por los fusibles BODLEVEL, el BOD es activado para monitorear la alimentación de voltaje durante el periodo de descanso (sleep). Para ahorrar energía, es posible deshabilitar el BOD por software para algunos modos sleep. El consumo máximo del modo sleep estará entonces en el mismo nivel como cuando BOD es deshabilitado globalmente por los fusibles. Si el BOD es deshabilitado por software, la función del BOD es apagada inmediatamente después de entrar en modo de descanso. Una vez que despierta del modo sleep, el BOD es activado automáticamente otra vez. Esto asegura el funcionamiento seguro en caso de que el nivel de VCC cae durante el período de descanso. Cuando el BOD ha sido deshabilitado, el tiempo de arranque desde el modo de descanso será aproximadamente 60us para asegurar que el BOD esté trabajando correctamente antes de que el MCU continúe ejecutando el código. La desabilitación del BOD es controlada por el bit 6, BODS (BOD Sleep) en el registro MCUCR. Al escribir uno en este bit se apagará el BOD en el pertinente modo sleep, mientras el BOD esté en cero este estará activo. Por defecto el BOD está en cero, por lo que siempre está activado. 9.4 Modo Idle Cuando los bits SM2..0 son escritos como 000, la instrucción SLEEP hará que el MCU entre en modo Idle, deteniendo el CPU pero permitiendo que el SPI, USART, Comparador Análogo, ADC, Interfaz Serial de 2 wire (2 hilos),
  • 42. Timer/Contador, Watchdog y el sistema de interrupciones continúe funcionando. Este modo básicamente detiene el reloj del CPU y el reloj de la Flash, mientras permite que los otros relojes funcionen. El modo Idle le permite al MCU que se despierte de las interrupciones activadas externas así como el desbordamiento del Timer y las interrupciones de transmisión Completas del USART. Si despierta desde la interrupción del Comparador Análogo, el Comparador Analógico puede activarse por configuración del bit ACD en el Control comparador y Registro de estado – ACSR. Esto reducirá el consumo de energía en el modo Idle. SI el ADC es habilitado una conversión comenzará automáticamente cundo se ingresa a este modo. 9.5 Modo de Reducción de Ruido del ADC Cuando los bits SM2..0 son escritos como 001, la instrucción SLEEP hace que el MCU entre en el Modo de Reducción de ruido del ADC, deteniendo al CPU pero permitiendo al ADC, las interrupciones externas, la Interfaz Serial de 2 hilos(2 wire), Timer/Contador2 y Watchdog continuar funcionando (si es habilitado). Este modo básicamente detiene el reloj de las entradas y salidas, el reloj del CPU y el reloj de la FLASH, mientras permite que los otros relojes estén funcionando. Esto mejora el ambiente de ruido del ADC, permitiendo alta resolución en las medidas. Si el ADC es habilitado, una conversión comienza automáticamente cuando se entra en este modo. Aparte de la Interrupción de Conversión Completa del ADC, solo un reset externo, un reset del sistema del Watchdog, una Interrupción del Watchdog, un reset del Brown-out, una interrupción de la Interfaz serial de 2 hilos (2 wire), una interrupción externa en INT7:4 o un cambio de interrupción pueden despertar al MCU desde el modo de reducción de ruido del ADC. 9.6 Modo Power-down Cuando los bits SM2..0 son escritos como 010, la instrucción SLEEP hace que el MCU entre en el Modo Power-down. En este modo, el oscilador externo es detenido, mientras la interrupción externa, la interfaz serial de 2 wire (2 hilos), y el Watchdog continúan operando. Solo un reset externo, un reset del Watchdog, un reset del Brown-out, una interrupción externa en INT7:4, una interrupción en INT2:0 o un cambio de interrupción pueden despertar al MCU. Este modo de descanso básicamente detiene todos los relojes generados, permitiendo operar solo el módulo asincrónico. Note que si el nivel del disparo de una interrupción es usado para despertar desde el modo power-down, el nivel cambiado debe sostenerse durante algún
  • 43. tiempo para despertar al MCU. Cuando despierta del modo Power-down, hay un retardo antes de despertarse y continúa hasta que despierte totalmente. Esto permite al reloj reiniciar y llegar a estabilizarse antes de que haya sido detenido. El periodo para despertarse esta definido por el fusible CKSEL que define el periodo de reset. 9.7 Modo Power-save Cuando los bits SM2..0 son escritos como 011, la instrucción SLEEP hace que el MCU entre en el Modo Power-save. Esto modo es idéntico al modo Power- down, con una excepción: Si el Timer/contador2 es habilitado, este funcionara durante el descanso. Este dispositivo puede despertarse desde un desbordamiento del Timer o una Salida del Comparador desde el Timer/Contador2 si los bits correspondientes a la interrupción del Timer/Contador2 son habilitadas en TIMSK2, y el bit en la interrupción global en SREG es puesta en uno. Si el Timer /Contador2 no está corriendo, se recomienda usar este modo. El Timer/Contador2 puede ser contado sincrónicamente y asincrónicamente en el Modo Power-save. Si el Timer/contador2 no está usando el reloj asincrónico, el oscilador del Timer/Contador es detenido durante el descanso (sleep). Si el Timer/contador2 no está usando el reloj sincrónico, la fuente del reloj es detenido durante el descanso (sleep). Note que aun cuando el reloj síncrono está corriendo en Power-save, este reloj sólo está disponible para el Timer/Counter2. 9.8 Modo Standby Cuando los bits SM2..0 son escritos como 110 y un cristal/resonador externo es seleccionado, la instrucción SLEEP hace que el MCU entre en Modo Standbye. Este modo es idéntico al Power-Down con la excepción de que el Oscilador es kept running. En el modo Standby, el dispositivo se despierta en 6 ciclos de reloj. 9.9 Modo Standby Extendido Cuando los bits SM2..0 son escritos como 111 y un cristal/resonador externo es seleccionado, la instrucción SLEEP hace que el MCU entre en el Modo Standbye extendido. Este modo es idéntico al modo Power-save con la excepción que el Oscilador es kept running. En el modo Stanbye Extendido, el dispositivo se despierta en 6 ciclos de reloj
  • 44. 9.10 Registro Reducción de Energía El Registro Reducción de Energía (PRR), proporciona un método para detener los periféricos individuales para reducir el consumo de energía. El estado de la corriente de los periféricos es congelada y los registros de E/S no pueden ser leídos o escritos. Los recursos usados por el periférico cuando el reloj se detiene permanecerán ocupados, por está razón los periféricos deben en la mayoría de los casos ser deshabilitados antes de que se detenga el reloj. Al despertarse un periférico, el cual ha sido limpiado el bit en PRR, pone a los periféricos en igual estado como antes de cerrarse. El cierre de los periféricos puede ser usado en modo Idle, Modo Activo para reducir significantemente el sobre consumo de energía. En otros modos de descanso, el reloj es ya es detenido. 9.11 Minimización del Consumo de Energía Hay varios problemas a considerar cuando se trata de minimizar el consumo de energía en un sistema controlado por un AVR. En general, los modos de descanso deben ser usados tanto como sea posible, y el modo sleep debe ser seleccionado dependiendo de la función del dispositivo que este operando. Todas las funciones no necesitan ser deshabilitadas. En particular, los módulos siguientes necesitan una consideración especial cuando tratan de obtener el más bajo consumo posible. 9.11.2 Conversión Análoga a Digital Si habilitó, el ADC será habilitado en todos los modos de descanso. Para ahorrar energía, el ADC debe ser deshabitado antes de entrar en cualquier modo sleep. Cuando el ADC es apagado y encendido otra vez, la siguiente conversión será una conversión extendida. 9.11.2 Comparador Análogo Cuando entra en modo Idle, el comparador Análogo debe ser deshabilitado si no se está usando. Cuando entra en el modo de Reducción de Ruido del ADC, el comparador Análogo debe ser deshabilitado. En otros modos sleep, el Comparador Análogo es automáticamente deshabilitado. Sin embargo, si el Comparador Análogo es configurado para usar la Referencia del Voltaje Interno como entrada, el Comparador Análogo debe ser deshabilitado en todos los modos de descanso. De otro modo, la Referencia de voltaje Interna deberá ser habilitada, independientemente del modo de descanso.
  • 45. 9.11.3 Brown-out Detector Si el Brown-out Detector no es necesario para la aplicación, este modo debe ser apagado. Si el Brown-out Detector es habilitado por los fusibles BODLEVEL, este será habilitado en todos los modos, y además, siempre consume energía. En el modo sleep más profundo, este contribuirá significantemente para el consumo total de corriente. 9.11.4 Referencia de Voltaje Interna La Referencia de Voltaje Interna será habilitada cuando se necesite detectar el Brown-out, el Comparador Análogo o el ADC. Si estos módulos son deshabilitados como se describe en la sección de abajo, la referencia de Voltaje Interna será deshabilitada y esta no consumirá energía. Cuando se prende otra vez, el usuario debe poner la referencia antes de que sea usado. 9.11.5 Watchdog Timer Si el Watchdog Timer no es necesario para la aplicación, el módulo debe ser apagado. Si el Perro Watchdog Timer es habilitado, este será habilitado en todos los modos, y además, siempre consumirá energía. En el más profundo de los descansos (sleep), este contribuirá significantemente al consumo total de corriente. 9.11.6 Pines del Puerto Cuando entra en modo sleep, todos los pines del puerto deben ser configurados para usar la mínima energía. Lo más importante es por lo tanto asegurar que ningún pin maneje cargas resistivas. En el modo de descanso cuando el reloj de las E/S y el reloj del ADC son detenidos, los buffers de entrada del dispositivo serán deshabilitadas. Esto asegura que no exista consumo de energía cuando una entrada lógica no es necesaria. En algunos casos, la entrada lógica es necesaria para detectar condiciones de arranque, y entonces esto será habilitado. Si el buffer de entrada es habilitado y la señal de entrada es dejada a flote o tiene una señal análoga en VCC/2, el buffer de entrada usará excesiva energía. Para los pines de entrada analógica, el buffer de entrada digital debe ser deshabilitado de todos los tiempos. Una señal análoga para VCC/2 en la entrada de un pin puede causar lo suficiente de corriente incluso en modo activo. Los buffers de entrada digital pueden deshabilitarse escribiendo en el registro de desabilitación de entradas digitales (DIDR1 y DIDR0).
  • 46. 9.11.7 Sistema On-chip Debug Si el Sistema On-chip Debug es habilitado por el fusible OCDEN y el chip entra en modo sleep, la fuente del reloj principal será habilitada, y además, siempre consumirá energía. En el más profundo de los modos sleep (descanso), este contribuirá significantemente al consumo total de corriente. Hay tres vías alternativas para deshabilitar el sistema OCD: 1. Deshabilitar el fusible del OCDEN 2. Deshabilitar el Fusible del JTAGEN 3. Escribir uno en el bit JTD del MCUCR 9.12 Descripción de los Registros 9.12.1 SMCR – Registro de Control para el Modo Sleep El Registro de Control para el Modo sleep contiene bits para el control de la energía. • Bits 3, 2, 1 – SM2:0: Selección de Bits 2, 1, y 0 para el Modo Sleep Estos bits seleccionan entre los cinco posible modos como muestra la tabla 9-2. Notas: 1. El modo Standby es solo recomendado para usar con un cristal externo. • Bit 0 – SE: Habilitación del sleep El bit SE debe ser escrito a uno lógico para hacer que el MCU entre en modo sleep cuando la instrucción SLEEP es ejecutada. Para evitar que el MCU entre al modo sleep es recomendable escribir a uno el bit SE antes de ejecutar la instrucción SLEEP y para limpiar inmediatamente después de despertarse. Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
  • 47. 9.12.2 MCUCR – Registro de Control MCU • Bit 6 – BODS: Descanso BOD El bit BODS deber ser escrito a uno lógico para apagar el BOD durante el descanso (sleep). Al escribir en el bit BODS, se controla por una secuencia de tiempos y un bit de habilitación, BODSE en el registro MCUCR. Para deshabilitar el modo de descanso, el BODS debe ser puesto a uno y el BODSE debe estar en cero en cuatro ciclos del reloj. El bit BODS es activado en tres ciclos del reloj después de ser configurado. Una instrucción SLEEP debe ser ejecutada mientras el BODS es activado para apagar el BOD para el nuevo modo de descanso. El bit BODS es automáticamente limpiado después de tres ciclos del reloj. • Bit 5 – BODSE: Habilitación del sleep (descanso) BOD El BODSE habilita la configuración del bit de control BODS, como se explica en la descripción del BODS. La deshabilitación del BOD es controlada por una secuencia de tiempos. 9.12.3 PRR – Registro Reducción de Energía • Bit 7 - PRTWI: Reducción de Energía TWI Al escribir un uno lógico en este bit cierra el TWI mediante la detención del reloj. Cuando arranque otra vez el TWI, el TWI debe ser reinicializado para asegurar su correcto funcionamiento. • Bit 6 –Reducción de Energía del Timer/Countador2 PRTIM2 Al escribir un uno lógico en este bit pone el modulo del Timer/Contador2 en modo asincrónico (AS2 es 0). Cuando el Timer/Contador2 es habilitado, la operación continuará como antes de que haya sido cerrado. • Bit 5 - PRTIM0: Reducción de Energía del Timer/Contador0 Al escribir un uno lógico en este bit se cierra el modulo del Timer Contador0. Cuando el Timer/Contador0 es habilitado, la operación continuará como antes de que haya sido cerrado.
  • 48. • Bit 4 - PRUSART1: Reducción de Energía en el USART1 Al escribir un uno lógico en este bit se cierra el USART1 detenido el reloj del módulo. Cuando despierta otra vez el USART1, el USART1 debe reinicializarse para asegurar su correcto funcionamiento. • Bit 3 - PRTIM1: Power Reduction Timer/Counter1 Al escribir un uno lógico en este bit se cierra el módulo del Timer/Contador1. Cuando el Timer/Contador1 es habilitado, la operación continuará como antes de que haya sido cerrado. • Bit 2 - PRSPI: Power Reduction Serial Peripheral Interface Al escribir un uno lógico en este bit se cierra el módulo de Interfaz Periférica Serial mediante la detención del reloj. Cuando despierta otra vez del SPI, el SPI debe reinicializarse para asegurar su correcto funcionamiento. • Bit 1 - PRUSART0: Reducción de Energía del USART0 Al escribir un uno lógico en este bit se cierra el USART0 deteniendo el reloj del módulo. Cuando despierta otra vez el USART0, el USART0 debe reinicializarse para asegurar su correcto funcionamiento. • Bit 0 - PRADC: Power Reduction ADC Al escribir un uno lógico en este bit se cierra el ADC. El ADC debe ser deshabilitado antes de que se cierre el módulo. El comparador análogo no puede usar el MUX de entrada del ADC cuando el ADC es cerrado. 10. Control del Sistema y Reset 10.0.1 Reset del AVR Durante el reset, todos los registros de E/S se ponen en su valor inicial, y el programa empieza a ejecutarse desde el Vector de Reset. La instrucción localizada en el Vector de Reset debe ser un JMP – Salto Absoluto – instrucción para reiniciar la rutina manualmente. Si el programa nunca habilita una fuente de interrupciones, el Vector de interrupciones no es usado, y el código de programa puede ser ubicado en esta localidad. Es también del caso, si el Vector de Reset, está en la sección de aplicaciones mientras el Vector de Interrupciones está en la sección baja del programa (boot), o viceversa. El diagrama del circuito se muestra en la tabla 10-1 la cual muestra el reset lógico. Los puertos de E/S de los AVRs son reiniciadas inmediatamente a su estado inicial cuando una fuente de reset está activa. Esto no requiere que cualquier fuente de reloj esté corriendo. Después de resetear todas las fuentes ha sido desactivado, se efectúa un conteo de retardo, alargándose el reset interno. Esto
  • 49. permite lograr una estabilidad antes de la operación normal de inicio. El periodo de tiempo para el conteo del retardo está definido por el usuario a través de los fusibles SUT y CKSEL. 10.0.2 Fuentes de Reset El ATmega164P/324P/644P tiene cinco Fuentes de reset: 1. Power-on reset. El MCU es reseteado cuando el voltaje de alimentación está por debajo del umbral del Power-on Reset (VPOT). 2. Reinicio externo. El MCU es reseteado cuando un nivel bajo en el pin de RESET el cual es mas largo que el pulso mínimo. 3. Reset del Watchdog. El MCU es reseteado cuando el período del Tiempo del Watchdog termina y el Watchdog es habilitado. 4. Reset del Brown-out. El MCU es reseteado cuando el voltaje de VCC de alimentación está debajo del Brown-out Reset (VBOT) y el Brown-out Detector es habilitado. 5. Reset del JTAG. El MCU es reseteado si existe un uno lógico en el registro del Reset.
  • 50. 10.0.3 Reset del Power-on Un pulso del Power-on (POR) es generado por un circuito de detención interno del chip. El circuito del POR está activado cuando el VCC esta por debajo del nivel de detección. El circuito del POR puede ser usado para disparar el reset, así como para detectar una falla en el voltaje de alimentación. El circuito de reset del Power-on asegura que el dispositivo sea reseteado desde el Power-on. Alcanzar el voltaje umbral del Power-on llama al contador del programa, el cual determina cuanto tiempo el dispositivo está en reset desde de subir el VCC. La señal de RESET es activada otra vez, sin ningún retardo, cuando el VCC decrementa por debajo del nivel de detección. 10.0.4 Reset Externo Un reset externo es generado por un nivel bajo en el pin de RESET. Los pulsos de RESET más largos que el ancho del pulso mínimo generan un reset, o si el reloj no está corriendo. Pulsos cortos no garantizan generar un reset. Cuando la señal aplicada alcanza el voltaje umbral de Reset – VRST – en su flanco positivo, el contador de retardos inicia al MCU después de que periodo de tiempo tout ha terminado.
  • 51. 10.0.5 Detección del Brown-out El ATmega164P/324P/644P tiene en su interior un circuito detector del Brown- out (BOD) para monitorear el nivel del VCC durante su operación mediante la comparación de un nivel de disparo. El nivel de disparo del BOD puede ser seleccionado por el fusible BODLEVEL. El nivel de disparo tiene una histéresis para asegurar la detección del Brown- out. La histéresis en el nivel de detección deben ser interpretados como VBOT+ =VBOT + VHYST/2 y VBOT- = VBOT - VHYST/2. Cuando el BOD es habilitado, y decrece el VCC a un valor más abajo del nivel de disparo, el Brown-out Reset es inmediatamente activado. Cuando incrementa el VCC por encima del nivel de disparo, el contador de retardos inicia al MCU después de que el periodo de tiempo tTOUT ha terminado. 10.0.6 Reset del Watchdog Cuando hay un tOUT, esto genera un pulso de reset corto de una duración del ciclo CK. En el flanco de bajada de este pulso, el tiempo de retardo empieza a contar el periodo de tiempo del tOUT.
  • 52. 10.1 Referencia del Voltaje Interno El ATmega164P/324P/644P ofrece una referencia interna. Esta referencia se usa para Detectar el Brown=out, y puede usarse como una entrada al Comparador Analógico o al CONVERSOR ANALÓGICO-DIGITAL. 10.1.1 Habilitación de la señal de voltaje interna y tiempo de arranque La referencia de voltaje tiene un arranque que influencia en la forma en que este debería usarse. Para ahorrar energía, la referencia no siempre es activada. La referencia esta activada en las siguientes situaciones: 1. Cuando el BOD es habilitado (por programación del fusible BODLVEL [2:0]). 2. Cuando la referencia Bandgap es conectada al comparador analógico (por configuración del bit ACBG en el registro ACSR). 3. Cuando el ADC es habilitado. Además, cuando el BOD no es habilitado, después de configurar el bit ACBG o deshabilitar el ADC, el usuario debe siempre iniciar la referencia antes de que la salida del comparador Análogo sea usada. Para reducir el consumo de energía en el modo Power-dowm, el usuario puede evitar las tres condiciones de arriba para asegurar que la referencia sea apagada antes de entrar en el modo Power- dowm. 10.2 Watchdog Timer 10.2.1 Características: • Contador desde un Oscilador dentro del chip • 3 Modos de Operación – Interrupciones – Reinicio del Sistema – Reinicio de Interrupciones y del sistema • Periodo del Time-out seleccionable desde 16ms to 8s • Possible Hardware fuse Watchdog always on (WDTON) for fail-safe mode
  • 53. 10.2.2 Vista Global El ATmega164P/324P/644P tiene un Watchdog timer mejorado (WDT). El WDT es un contador de ciclos de tiempos de un oscilador separador en el chip de 128Khz. El WDT produce una interrupción o un reset al sistema cuando el contador alcanza el valor dado en el time/out. En el modo de operación normal, esto requiere que el sistema use la instrucción WDR / Watchdog Timer Reset/ para reiniciar al contador antes de que alcance el valor del time/out. Si el sistema no reinicia el contador, se producirá una interrupción o se reiniciara el sistema. En el modo de interrupción, el WDT produce una interrupción cuando el tiempo termina. Esta interrupción puede ser usada para despertar al dispositivo del modo de descanso y también como un contador del sistema general: como por ejemplo para limitar el tiempo máximo permitido para operaciones seguras, dando una interrupción cuando funciona mas tiempo de lo esperado. En el modo de Reset del Sistema, el WDT da un reset cuando termina el tiempo. Esto es típicamente usado para prevenir desconexiones del sistema en caso de código runaway. El tercer modo, Modo de interrupciones y Reset del sistema, combinas los otros dos modos mediante el primero genera una interrupción y entonces conecta el modo de Reset del sistema. Este modo permitirá un cierre seguro por ejemplo ahorrando los parámetros críticos antes de un reset del sistema. El Watchdog siempre enciende el fusible WDTON, si programando forzamos al WDT para entrar en modo de reset del sistema. Cuando el fusible es programado el bit WCE en el modo de Reset del Sistema y el bit WDIE en el modo de Interrupción son puestos en 1 y 0 respectivamente. Para mayor seguridad del programa, el Watchdog debe ser configurado siguiendo los siguientes pasos:
  • 54. 1. En operaciones similares, escribir un uno lógico para cambiar el bit WDEN y WDE del Watchdog. Un uno lógico debe ser escrito en el WDE para un previo valor del bit WDE. 2. Entre las siguientes cuatro ciclos de reloj, escribir en el WDE y en los bits del prescalador del Watchdog como requiera, pero con el bit WDCE limpiado. Esto debe ser hecho con una sola operación. El siguiente código de ejemplo muestra una función en ensamblador y en C para apagar el Watchdog Timer. El ejemplo asume que las interrupciones son controladas así que no ocurrirán interrupciones durante la ejecución de estas funciones.
  • 55. Nota: Si el Watchdog es habilitado accidentalmente, por ejemplo por un puntero incontrolable o una condición de brown-out, el dispositivo será reseteado y el Watchdog Timer permanecerá habilitado. Si el código no es puesto para controlar el Watchdog, este podría permanecer en un lazo infinito. Para evitar esta situación, el software de aplicación debe limpiar siempre a la Bandera del sistema de Reset del Watchdog (WDRF) y al bit de control WDE en la rutina de inicialización, o si el Watchdog no está en uso.
  • 56. El siguiente código muestra un ejemplo uno en ensamblador y otro en C para cambiar el valor del time-out del Watchdog Timer. Nota: El Watchdog Timer debe ser reseteado antes de cualquier cambio de los bits WDP, ya que un cambio en los bits WDP puede resultar un time-out cuando cambia a un periodo mas corto del time-out.
  • 57. 10.3 Descripción de los Registros 10.3.1 MCUSR – Registro de Estado MCU El Registro de Estado MCU brinda información las causas por las cuales las fuentes de reset provocan un reset en el MCU. • Bit 4 – Banderas del Reset JTRF: JTAG Este bits es puesto a uno si un reset es cuando por un uno lógico en el Registro de Reset JTAG seleccionado por la instrucción JTAG AVR_RESET. Este bit es reseteado por un reset del Power-on, o por un cero lógico en la bandera. • Bit 3 – WDRF: Bandera del reset del Watchdog Este bit es puesto a uno si ocurre un Reset del Watchdog. El bit es reseteado por un Reset del Power-on o por la escritura de un cero lógico en la bandera. • Bit 2 – BORF: Bandera de reset del Brown-out Este bit es puesto a uno si ocurre un Reset del Brown-out. El bit es reseteado por un Reset del Power-on, o por una escritura de un cero lógico en la bandera. • Bit 1 – EXTRF: Bandera de Reset Externo Este bit es puesto a uno si ocurre un Reset externo. El bit es reseteado por un reset del Power-on, o por la escritura de un cero lógico en la bandera. • Bit 0 – PORF: Bandera de Reset del Power-on Este bit es puesto a uno si ocurre un Reset del Power-on. El bit es reseteado solo por una escritura de un cero lógico en la bandera. Para ser uso de la Bandera de Reset para identificar una condición de reset, el usuario debe leer y entonces resetear el MCUSR tan pronto sea posible en el programa. Si el registro es limpiado antes de que ocurra otro reset, la fuente de reset ser encontrada mediante la revisión de las Banderas de Reset. 10.3.2 WDTCSR – Registro de Control del Watchdog Timer • Bit 7 - WDIF: Bandera de Interrupción del Watchdog
  • 58. Este bit es puesto a uno cuando ocurre un time-out en el Watchdog Timer y el Watchdog Timer es configurado por interrupción. WDIF es limpiado por hardware cuando se ejecuta el correspondiente vector de interrupción. Alternativamente, WDIF es limpiado mediante la escritura de un uno lógico en la bandera. Cuando el Bit I en el registro de estado es configurado, la interrupción del Watchdog Timer es ejecutada. • Bit 6 - WDIE: Habilitación de Interrupción del Watchdog Cuando este bit es escrito como uno y el bit I en el Registro de estado es configurado, la interrupción del Watchdog es habilitada. Si WDE es limpiada en combinación con su configuración, el Watchdog Timer está en modo de Interrupción, y la interrupción es ejecutada si ocurre un time-out en el Watchdog Timer. Si el WDE es configurado, el Watchdog Timer está en modo de Interrupción y rset del Sistema. El primer time-out en el Watchdog Timer pondrá en uno el WDIF. Al ejecutarse el vector de interrupción correspondiente limpiara automáticamente WDIE y WDIF por hardware. Esto es usado para brindar seguridad al Watchdog Timer mientras usa la interrupción. Este sin embargo no debería estar en la misma rutina de interrupción, porque puede comprometer la seguridad del Sistema de reset del Watchdog. Si la interrupción no es ejecutada antes del siguiente time-out, un reset del Sistema será aplicado. • Bit 4 - WDCE: Habilitación de cambio del Watchdog Este es usado en secuencias de tiempos para cambiar los bits WDE y el prescalador. Para limpiar el bit WDE, y/o cambiar los bits del prescalador, WDCE debe ser configurado. Una vez escrito a uno, por hardware se limpiará WDCE por cuatro ciclos de reloj. • Bit 3 - WDE: Habilitación del Sistema de Reset del Watchdog El WDE es overridden por WDRF en el MCUSR. Esto significa que WDE es siempre puesto a uno cuando WDRF es configurado. Para limpiar WDE, WDRF debe ser limpiado primero. Este elemento asegura múltiples resets durante condiciones que causan problemas, y asegura ante de problemas de arranques.
  • 59. • Bit 5, 2:0 - WDP3:0: Prescalador 3, 2 ,1 y 0 del Los bits WDP3:0 determinan los prescaladores (divisores) del Watchdog Timer cuando el Watchdog Timer está corriendo. Los valores de los diferentes prescaladores (divisores) y sus correspondientes periodos de time-out se muestran en la siguiente tabla 10-2.
  • 60. 11. INTERRUPCIONES 11.2 Vectores de Interrupción ATmega164P/324P/644P
  • 61. 11.3 DESCRIPCION DE REGISTROS 11.3.1 MCUCR –Registro de control MCU • Bit 1 – IVSEL: Selección del vector de interrupción Cuando el bit IVSEL es cero, los vectores de interrupción son puestos al comienzo de la memoria Flash. Cuando este bit es uno, los vectores de interrupción son movidos al comienzo de la sección Boot Loader de la Flash. La actual dirección de comienzo de la sección Boot es determinada por los fusibles BOOTSZ. Para evitar cambios unidireccionales de las tablas de los vectores de interrupciones se procede a los siguientes cambios en el bit IVSEL: a. Habilitar el cambio en el vector de interrupción escribiendo uno en el bit (IVCE). b. Dentro de cuatro ciclos de reloj, escribir el valor deseado a IVSEL mientras se escribe cero a IVCE. Las Interrupciones automáticamente son deshabilitadas mientras la secuencia es ejecutada. Las interrupciones son deshabilitadas cuando es uno en el ciclo IVCE, y permanecen deshabilitadas hasta la siguiente instrucción escrita en Bisel. Si Bisel no es escrita, las interrupciones permanecen deshabilitadas por cuatro ciclos. El bit-I del registro de estado no es afectado por la desabilitación automática. • Bit 0 – IVCE: Habilitación de Cambios del Vector Interrupción El bit IVCE será escrito con uno lógico al habilitar el cambio del bit IVSEL. IVCE es puesto en cero por hardware por cuatro ciclos después es escrito o es cero cuando IVSEL es escrito directamente. Configurando los bits del IVCE desabitará las interrupciones.
  • 62. 12. INTERRUPCIONES EXTERNAS 12.1 DESCRIPCIÓN DE REGISTROS 12.2.1 EICRA – Registro de Control de Interrupciones A • Bits 7:6 – Reservados Estos bits son reservados en el ATmega164P/324P/644P, y siempre son escritos con cero. • Bits 5:0 – ISC21, ISC20 – ISC00, ISC00: Interrupciones Externas 2 - 0 Sentido de los Bits de Control La interrupciones externas 2-0 son activadas por los pin externos INT2:0 si la bandera I en SREG y la correspondiente mascara de Interrupción en el EIMSK es uno. El nivel en los pines externos corresponde a uno en el EIMSK. Los límites de la forma de onda cuadrada en INT2, INT0 son registrados asincrónicamente. Los pulsos en INT2:0 son más extensos que el mínimo ancho de pulso dado en las “Interrupciones Externas” generadas en la interrupción. Pequeños pulsos no son garantizados para generar una interrupción. Si la interrupción a nivel bajo es seleccionada, el nivel bajo seria sostenido hasta la realización de la actualización ejecutando la instrucción para generar la interrupción. Si se habilita, el nivel activo de interrupción se generará una llamada de la interrupción hasta que el pin este en bajo. Cuando se cambia el bit, ISCn, la interrupción puede ocurrir. Por consiguiente, es recomendable primero deshabitar INTn encerando la habilitación de este bit en el registro EIMSK. Luego, el bit ISCn puede ser cambiado. Finalmente, la bandera de interrupción INTn debería ser limpiada por la escritura de uno lógico en este bit de la bandera de interrupción (INTFn) en el registro EIFR antes de que la interrupción sea nuevamente habilitada. Sentido de Control de la Interrupción ISCn1 ISCn0 Descripción 0 0 El nivel bajo de INTn genera un pedido de interrupción
  • 63. 0 1 Cualquier flanco de INTn genera un pedido de interrupción asincrónico 1 0 El flanco de bajada de INTn genera un pedido de interrupción asincrónico 1 1 El flanco de subida de INTn genera un pedido de interrupción asincrónico 12.2.2 EIMSK – Registro Mascara de Interrupción Externa • Bits 2:0 – INTF2:0: External Interrupt Flags 2 - 0 Cuando algún flanco o cambio lógico en el pin INT dispara un pedido de interrupción, INTF2:0 llega hacer uno. Si el bit-I en el SREG y la correspondiente habilitación de interrupción en el bit, INT2:0 EIMSK, son uno, el MCU saltara al vector de interrupción. La bandera es limpiada cuando la rutina de interrupción es ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de uno lógico. Estas banderas son siempre limpiadas cuando INT2:0 son configuradas como nivel de interrupción. Note que cuando entra en modo sleep con las interrupciones INT2:0 deshabilitadas, los buffers de entrada en estos pines serian deshabilitados. Esto puede causar un cambio lógico en las señales internas con uno en las banderas INTF2:0. 12.2.4 PCICR –Registro de Control Cambio del pin de Interrupción • Bit 3 – PCIE3: Habilitación de la Interrupción 3 cambiada al PIN Cuando el bit PCIE3 es uno y el bit-I en el Registro de Estado (SREG) es uno, el cambio de pin de interrupción 3 es habilitado. Cualquier cambio en cualquier habilitación en los pines PCINT31..24 causará una interrupción. La correspondiente interrupción demandada al cambio de pin de interrupción es ejecutada desde el vector de Interrupción PCI3. Los pines PCINT31..24 son habilitados individualmente por el Registro PCMSK3. • Bit 2 – PCIE2: Habilitación de la Interrupción 2 cambiada al PIN
  • 64. Cuando el bit PCIE2 es uno y el bit-I en el Registro de Estado (SREG) es uno, el cambio de pin de interrupción 2 es habilitado. Cualquier cambio en cualquier habilitación en los pines PCINT23..16 causara una interrupción. La correspondiente interrupción demandada al cambio de pin de interrupción es ejecutada desde el vector de Interrupción PCI1. Los pines PCINT23..16 son habilitados individualmente por el Registro PCMSK2. • Bit 1 – PCIE1: Habilitación de la Interrupción 1 cambiada al PIN Cuando el bit PCIE1 es uno y el bit-I en el Registro de Estado (SREG) es uno, el cambio de pin de interrupción 1 es habilitado. Cualquier cambio en cualquier habilitación en los pines PCINT15..8 causara una interrupción. La correspondiente interrupción demandada al cambio de pin de interrupción es ejecutada desde el vector de Interrupción PCI1. Los pines PCINT15..8 son habilitados individualmente por el Registro PCMSK1. • Bit 0 – PCIE0: Habilitación de la Interrupción 0 cambiada al PIN Cuando el bit PCIE0 es uno y el bit-I en el Registro de Estado (SREG) es uno, el cambio de pin de interrupción 0 es habilitado. Cualquier cambio en cualquier habilitación en los pines PCINT7..0 causará una interrupción. La correspondiente interrupción demandada al cambio de pin de interrupción es ejecutada desde el vector de Interrupción PCI1. Los pines PCINT7..0 son habilitados individualmente por el Registro PCMSK0. 12.2.5 PCIFR – Cambio de Pin en el Registro de banderas de Interrupción • Bit 3– PCIF3: Cambio de Pin en la Bandera de Interrupción 3 Cuando un cambio lógico en cualquier pin de disparo PCINT31..24 en demanda de una interrupción, PCIF3 llegara a ser uno. Si el bit-I en el SREG y el bit PCIE3 en EIMSK son uno, el MCU saltara al correspondiente vector de interrupción. La bandera es limpiada cuando la rutina de interrupción es ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de uno lógico.