Está en la página 1de 378

Caractersticas:

Microcontrolador AVR de 8 bits de alto rendimiento y bajo consumo.



Arquitectura Avanzada RISC
- 131 instrucciones. La mayora de un solo ciclo de reloj de ejecucin.
- 32 registros de trabajo de 8 bits para propsito general.
- Funcionamiento esttico total.
- Capacidad de procesamiento de unos 20 MIPS a 20 MHz.
- Multiplicador por hardware de 2 ciclos

Memorias de programa y de datos no voltiles de alta duracin
- 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
- Retencin de Datos: 20 aos a 85C / 100 aos a 25C
- Seccin opcional de cdigo Boot con bits de bloqueo independientes.
Programacin en sistema del programa Boot que se encuentra dentro del
mismo chip. Operacin de lectura durante la escritura.
- Bloqueo programable para la seguridad del software.

Interfase JTAG
- Capacidades de Boundary Scan de acuerdo con el estndar JTAG
- Soporte Extendido Debug dentro del chip
- Programacin de FLASH, EEPROM, fusibles y bits de bloqueo a travs
de la interfase JTAG.

Caractersticas de los perifricos
- Dos Timer/Contadores de 8 bits con prescalamiento separado y modo
comparacin.
- Un Timer/Contador de 16 bits con prescalamiento separado, modo
comparacin 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 Analgico dentro del mismo Chip
- Interrupt and Wake-up on Pin Change

Caractersticas especiales del microcontrolador
- Power-on Reset (en el encendido) y deteccin de Brown-out (prdida
de polarizacin) programable.
- Oscilador RC interno calibrado.
- Fuentes de interrupcin externas e internas.
- 6 modos de descanso: Idle, Reduccin de Ruido ADC, Power-save,
Power-down, Standby y Standby extendido.

Encapsulados para Entradas/Salidas (E/S)
- 32 lneas de E/S programables.
- PDIP de 40 pines, TQFP y QFN/MLF de 44 pines.

Voltajes de Operacin
- 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 energa a 1MHz, 1.8V, 25C 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. CONFIGURACIN DE PINES
Figura 1-1. Pines de Salida del ATmega164P/324P/644P

TQFP/QFN/MLF



2. Revisin 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 mquina, el ATmega164P / 324P / 644P consigue
transferencia de informacin alrededor de 1 MIPS por MHz admitido por el
sistema, permitiendo al diseador del sistema optimizar el consumo de energa
versus la velocidad de procesamiento.










2.1 Diagrama de Bloque

Figura 2 -1. Diagrama de Bloques


El core (ncleo) AVR combina un conjunto de instrucciones RISC con 32
registros para uso de propsito general. Todos los 32 registros estn
directamente relacionados con la Unidad Aritmtica Lgica (ALU), admitiendo
dos registros independientes al ejecutarse una instruccin en un ciclo de
mquina. El resultado de esta arquitectura es ms eficiente, se consigue un
caudal de flujo y transferencia hasta diez veces ms rpido que
microcontroladores CISC convencionales.

El ATmega164P / 324P / 644P provee las siguientes caractersticas: 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 propsito general, 32 registros de propsito general, Contador en
Tiempo real (RTC), tres Timer/Contadores flexibles con modo de Comparacin
y PWM, 2 USARTs, un byte orientado a la Interfaz Serial de 2 hilos, 8 canales
ADC de 10 bits con opcin de entrada Diferencial con ganancia programable,
Watchdog Timer programable con oscilador interno, un Puerto serial SPI,
Interfase de prueba JTAG, tambin usado para acceder al sistema On-chip
Debug y seis modos de programacin seleccionable para ahorro de energa. 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 prxima
interrupcin o mediante reseteo por hardware. En el Modo Power-save, el reloj
asincrnico contina corriendo, permitiendo tener actualizado al reloj mientras
el resto de dispositivos estn descansando. El Modo de Reduccin del Ruido del
ADC detiene al CPU y a todos los mdulos de E/S excepto al Reloj Asincrnico
y al ADC, para minimizar el ruido durante la conversin. En el Modo Standby,
el oscilador Cristal/Resonador est corriendo mientras el resto de dispositivos
estn descansando. Estos permiten comenzar una rpida combinacin con el
consumo de baja energa.

En el Modo de Standby extendido, corre el Oscilador principal y el Reloj
Asincrnico. Este elemento es hecho usando tecnologa de alta densidad de
memoria no voltil de ATMEL. El chip interno ISP de la FLASH permite a la
memoria de programa ser reprogramada a travs del puerto interno ISP
mediante un programador convencional no voltil o mediante un programa
interno en el dispositivo AVR. El programa de inicializacin puede usar
cualquier interfaz para descargar el programa de aplicacin en la memoria
flash. El programa en la seccin Flash Boot es actualizado mientras contina
corriendo la seccin de aplicaciones de la Flash, proporcionando una escritura-
lectura verdadera de operacin. Para combinar un CPU RISC de 8 bits en un
sistema de Flash Auto-programable en un chip monoltico, el
ATmega164P/324P/644P es un poderoso microcontrolador que provee una alta
flexibilidad y solucin de costos efectivos para cualquier aplicacin 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 evaluacin.




2.2 Comparacin entre el ATmega164P, ATmega324P and ATmega644P



2.3 Descripcin de Pines

2.3.1 VCC
Alimentacin de Voltaje Digital

2.3.2 GND
Tierra

2.3.3 Puerto A (PA7:PA0)

El puerto A sirve como entradas analgicas para el conversor Anlogo Digital.
El puerto A tambin 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 caractersticas simtricas controladas con fuentes de
alta capacidad.

Los pines del puerto A estn en tri-estado cuando las condiciones de reset estn
activadas o cuando el reloj no este corriendo. El puerto A tambin sirve para
varias funciones especiales del ATmega164P/324P/644P como la Conversin
Anloga 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 caractersticas simtricas
controladas con fuentes de alta capacidad.

Los pines del puesto B estn en tri-estado cuando las condiciones de reset estn
activadas o cuando el reloj no est corriendo. El puerto B tambin sirve para
varias funciones especiales del ATmega164P/324P/644P como se menciona en
las pginas 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 caractersticas simtricas controladas con fuentes de alta capacidad.

Los pines del puesto C estn en tri-estado cuando las condiciones de reset estn
activadas siempre y cuando el reloj no este corriendo. El puerto C tambin
sirve para las funciones de Interfaz del JTAG, con funciones especiales del
ATmega164P/324P/644P como se menciona en las pginas 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 caractersticas simtricas controladas con sumideros de fuentes
de alta capacidad.
Los pines del Puerto D estn en tri-estado cuando llega una condicin de reset
activa, siempre y cuando el reloj no est corriendo.
El puerto D tambin sirve para varias funciones especiales del
ATmega164P/324P/644P como se menciona en las pginas iniciales.

2.3.7 RESET

Entrada del Reset. Un pulso de nivel bajo en este pin por perodos de pulso
mnimo genera un reset, siempre y cuando el reloj no est corriendo.

La longitud del pulso mnimo est especificada en las Caractersticas y Sistemas
de Reset (Pginas 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 operacin del reloj interno.

2.3.9 XTAL2

Salida del Oscilador amplificador de salida.

2.3.10 AVCC
AVCC es la alimentacin de voltaje para el pin del Puerto F y el Conversor
Anlogo 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 travs de un filtro paso bajo.

2.3.11 AREF
Est es la referencia para el pin de la conversin Anloga a Digital.

3. Recursos
Un set comprensible de herramientas, notas de aplicacin y datasheet se puede
descargar desde http://www.atmel.com/avr.






4. Acerca de los Ejemplos de Cdigo
Este documento contiene unos simples ejemplos de cdigo que brevemente
muestran como usar varias partes del dispositivo. Sea consiente que no todos
los vendedores de compiladores en C incluyen la definicin de bits en el
archivo de cabecera y el manejo de interrupciones en el compilador C es
dependiente. Por favor confirme con la documentacin del compilador C para
ms detalles.
Los ejemplos de cdigo asumen que la parte de archivo de cabecera esta
incluido antes de la compilacin. 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" seran reemplazadas con instrucciones de acceso extendido E/S.
Tpicamente "LDS" y "STS" combinadas con "SBRS", "SBRC", "SBR", y "CBR".

5. Retencin de Datos
La fiabilidad de la calificacin de resultados muestra que la velocidad de falla
de un proyecto es mucho menor que 1 PPM en 20 aos a 85C 100 aos a
25C.

6. AVR CPU Core

6.1 VISIN GENERAL
Esta seccin discute la arquitectura general del AVR. La principal funcin del
AVR es asegurar la correcta ejecucin del programa.
La CPU debe ser capaz de acceder a la memoria, llevar a cabo clculos, control
de perifricos y atencin 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 instruccin es ejecutada, la siguiente instruccin es
ejecutada desde la memoria de programa. Este concepto permite que las
instrucciones sean ejecutadas en cada ciclo de mquina. La memoria de
programa est en la memoria Flash re-programable.
El Archivo del Registro (Register File) de rpido acceso contiene 32 registros de
propsito general de 8 bits trabajando en un simple ciclo de reloj.
Esto permite una operacin de ciclo simple en la Unidad Aritmtica lgica. En
una operacin tpica de la ALU, dos operandos estn fuera del Archivo de
Registro, la operacin es ejecutada, y el resultado es guardado en el Archivo de
Registro en un ciclo de mquina.

Seis de los 32 registros pueden ser usados como tres registros punteros de 16
bits de direccin, para direccionar los Datos y permitir los clculos 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 funcin
adicionales son el X, Y y Z de 16 bits, descritos despus en esta seccin. La ALU
soporta operaciones lgicas y aritmticas entre registros o entre constantes y
registros.

Simples operaciones de registros pueden ser ejecutadas en la ALU. Despus de
una operacin aritmtica, el registro de estado es actualizado para reflejar
informacin acerca de los resultados de la operacin. El flujo del programa es
provisto por un salto condicional e incondicional y llamado de interrupciones,
capaz de direccionar espacios de direcciones completamente.

La mayora de instrucciones del AVR tienen un formato simple de una palabra
de 16 bits. Cada direccin de memoria contiene instrucciones de 16 o 32 bits. El
espacio de memoria en la flash est dividido en dos secciones, la seccin Baja
del programa y la seccin de aplicacin de programa.

Ambas secciones estn dedicadas para bloqueo de escritura y proteccin de
lectura/escritura.
La instruccin SMP que se escribe en la Seccin de la memoria Flash debe
residir en la seccin Baja del programa.

Durante los llamados de interrupcin y subrutinas, la direccin de regreso del
Contador de Programa (CP) es almacenado en la pila (stack).
La pila (stack) est localizada efectivamente en la SRAM (RAM esttica) de
datos y consecuentemente el tamao de la pila est limitado solo por el tamao
total de la SRAM (RAM esttica) 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 interrupcin o una subrutina).
El puntero de pila (Stack pointer SP) es la lectura/escritura accesible en el
espacio de E/S. La RAM esttica de datos puede ser fcilmente penetrada a
travs 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 mdulo de interrupcin flexible tiene sus
registros de control en los espacios de E/S con una Habilitacin de Interrupcin
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 direccin ms baja del vector
de interrupciones tiene alta prioridad.

El espacio de memoria de E/S contiene 64 direcciones para las funciones
perifricas 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 direccin 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 informacin acerca de los resultados de las
instrucciones aritmticas ms recientes ejecutadas.
Est informacin puede ser usada para alterar el flujo del programa en el
funcionamiento de operaciones condicionales. Note que el Registro de Estado
es actualizado despus 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 comparacin de instrucciones dedicadas, resultando
un cdigo ms rpido y compacto.
El Registro de estado no es almacenado automticamente cuando entra una
rutina de interrupcin y se restituye cuando regresa de una interrupcin.








6.3.1 SREG Registro de Estado

El registro de Estado AVR SREG est definido por:



Bit 7 I: Habilitacin de Interrupciones Globales

El bit de habilitacin de las interrupciones globales debe estar en uno para
habilitar las interrupciones. La interrupcin individual permite que el control
sea llevado a cabo en registros de control distintos. Si el registro de Habilitacin
de interrupciones globales es borrado, ninguna de las interrupciones estn
activadas independiente de la configuracin de una interrupcin individual. El
bit I es limpiado por hardware despus de que una interrupcin ha ocurrido, y
es puesto en uno por la instruccin de RETI para habilitar interrupciones
siguientes. El bit I tambin puede ser puesto en uno y borrado por la aplicacin
con las instrucciones SEI y CLI.

Bit 6 T: Bit Copia de almacenamiento

Los bits de instruccin de copia BLD (cargar bit) y BST (almacenar bit) usa el
bit T como una fuente o destino para la operacin del bit. Un bit desde los
registros de los Archivos de Registro pueden ser copiados en el bit T mediante
la instruccin SBT y un bit en T puede ser copiado dentro de un registro del
Archivo de registros mediante la instruccin BLD.


Bit 5 H: Half Carry Flag
Half Carry es til en la aritmtica 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 operacin
aritmtica o lgica.



Bit 1 Z: Bandera del Cero
La bandera del cero indica si un resultado es cero en una operacin aritmtica o
lgica.

Bit 0 C: Bandera del Carry
La bandera del Carry indica un carry en una operacin aritmtica o lgica.

Archivo de registros de propsito General
El Archivo de Registros es optimizado por el Juego de instrucciones RISC del
AVR.
Para lograr la actuacin 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 Propsito
General que trabajan en la CPU.




La mayora de las operaciones de instrucciones en el Archivo de Registro tiene
acceso directo a todos los registros, y la mayora 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 direccin, mapeados estos directamente dentro de las 32
localidades para el uso del espacio de Datos.



Aunque fsicamente no son implementados en las localidades de la SRAM, esta
memoria provee gran organizacin 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
propsito general. Estos registros son punteros de 16 bits de direccin para
direccionar indirectamente al espacio de datos.
Los tres registros de direccionamiento indirecto X, Y y Z estn 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 direccin tienen
desplazamientos fijos, incrementos y decrementos automticos.

6.5 Puntero de Pila (Stack Pointer)
El StackPointer es usado para almacenar informacin temporal, para
almacenar variables locales y para almacenar direcciones de regreso despus de
una interrupcin 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 ms
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 interrupcin sea habilitada.
El puntero de pila debe estar por encima de la localidad 0x0100. El valor inicial
del puntero de pila es la ltima direccin de la SRAM interna. El puntero de
pila es decrementado a uno cuando los datos presionan en la pila con la
instruccin 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
interrupcin RETI.

El Puntero de Pila del AVR es implementado como un registro de 8 bits en el
espacio de E/S. El nmero de bits actualmente usados es dependientemente
implementado. Note que el espacio de datos en algunas implementaciones en la
arquitectura del AVR es tan pequea 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 concatenacin del
RAMPPZ, ZH y ZL se muestran en la figura siguiente. Note que LPM no es
afectado por la configuracin del RAMPZ.

Figura. El puntero Z usado por ELPM y SPM.


El nmero actual de los bits es dependiente de la implementacin. Al no usar
los bits en una implementacin se leern como cero. Para compatibilidad con
dispositivos futuros, asegurar el escribir estos bits como cero.


6.7 Reset e Interrupcin Manual

El AVR provee diferentes Fuentes de interrupcin. 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 lgico junto
con el bit Habilitador de Interrupciones Globales en el registro de Estado.
Dependiendo del valor del contador del programa, las interrupciones deben ser
deshabilitadas automticamente cuando los bits Boot Lock (BLB02 o BLB12) son
programados.
Esta caracterstica mejora la seguridad de software.

La direccin ms baja en el espacio de la memoria de programa est definida
por defecto como vectores de Reset e Interrupcin.
La lista completa de vectores se muestra en la pgina 61 del Data Sheet. La lista
tambin determina los niveles de prioridad de las diferentes interrupciones. El
nivel de prioridad es desde la direccin mas baja a la ms alta. El RESET tiene la
prioridad ms alta y la siguiente es el pedido de interrupcin externa (INTO).
Los vectores de interrupcin pueden ser movidos al inicio de la seccin de la
parte baja de la Flash por la configuracin del bit IVSEL en el MCU del registro
de Control (MCUCR). El vector de Reset tambin puede ser movido al inicio de
la seccin de la parte mas baja por la programacin del fusible BOOTRST.

Cuando ocurre una Interrupcin, el bit I del Habilitador de Interrupciones
Globales es limpiado y todas las interrupciones son deshabilitadas.
El software del usuario puede escribir uno lgico 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 automticamente cuando regresa de
una interrupcin al ser ejecutada la instruccin RETI.
Existen bsicamente dos tipos de interrupciones. El primer tipo es disparado
por un evento que configura la bandera de interrupcin. Para estas
interrupciones, el Contador de Programa es direccionado para el actual Vector
de Interrupcin a medida que se ejecuta una rutina de interrupcin manual y
limpiada por hardware la correspondiente bandera de interrupcin. La bandera
de interrupcin puede tambin ser limpiada por uno lgico para la posicin de
la bandera del bit.
Si una condicin de interrupcin ocurre mientras se habilita el bit de
interrupcin correspondiente este es limpiado, la bandera de interrupcin ser
puesto en uno y la interrupcin recordar ser siempre habilitada o la bandera es
limpiada por software.

De igual forma, si una o ms condiciones de interrupcin ocurren mientras el
bit de interrupcin es limpiado, la correspondiente bandera de interrupcin
ser puesta en uno y la Bandera de Interrupcin Global es Habilitada mientras
el bit es uno, y entonces ser ejecutada por el orden de prioridad.
El segundo tipo de interrupcin ser disparada mas larga que la condicin de
interrupcin actual.
Si la condicin de interrupcin desaparece antes que la interrupcin sea
habilitada, la interrupcin no ser disparada. Cuando existe una interrupcin
en el AVR, esta siempre regresar al programa principal y ejecutar una o ms
interrupciones antes de cualquier pedido de interrupcin. Note que el Registro
de Estado no es almacenado automticamente cuando entra una rutina de
interrupcin o cuando regresa de la rutina de interrupcin. Esto deber ser hecho
manualmente por software. Cuando usa la instruccin CLI para deshabilitar
interrupciones, la interrupcin ser deshabilitada inmediatamente. Ninguna
interrupcin ser ejecutada despus de la interrupcin CLI, Incluso si ocurre
simultneamente con la instruccin CLI. Los siguientes ejemplos muestran
como esto puede ser usado para evitar interrupciones durante el tiempo de
escritura en la EEPROM.

Ejemplo del Cdigo 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 Cdigo 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 instruccin SEI para habilitar interrupciones, la siguiente
instruccin SEI ser ejecutada antes de cualquier interrupcin pendiente, como
muestra el siguiente ejemplo.

Ejemplo del Cdigo en Lenguaje Ensamblador

sei; Habilita la configuracin de interrupciones globales
Sleep; ingresa a descansar, espera por la interrupcin
; note: ingresa a descansar antes de cualquier pedido de interrupcin

__enable_interrupt(); /* Habilita la configuracin de interrupciones globales */
__sleep(); /* ingresa a descansar, espera por la interrupcin */
/* Note: ingresa a descansar antes de cualquier pedido de interrupcin */

6.7.1 Tiempo de respuesta de la Interrupcin
La respuesta para la ejecucin de interrupcin para habilitar todas las
interrupciones del AVR son mnimos cinco ciclos.

Despus de cinco ciclos de reloj la direccin del vector de programa para la
rutina manual de interrupcin 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 interrupcin,
y este salto toma ciclos de reloj. Si una interrupcin ocurre durante la ejecucin
de una instruccin de mltiples ciclos, esta instruccin es completada antes de
que la interrupcin sea pedida.
Si una interrupcin es ejecutada ocurre cuando el MCU esta en modo de
descanso, la interrupcin ejecuta tiempos de respuesta en incrementos de cinco
ciclos de reloj. Este incremento llega al iniciar los tiempos desde la seleccin del
Modo de descanso (sleep).
Un retorno desde una rutina de interrupcin 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
configuracin del SREG.

7. Memorias del AVR

7.1 Vista General
Esta seccin 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 seccin baja de programa (Boot Program) y la
seccin de Aplicacin de Programa. La memoria Flash tiene una duracin de
ms 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.













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 ms unidades perifricas que pueden ser
soportadas entre la localidad 64 reservada en el cdigo 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 direccin
desde la direccin base dada por los registros Y o Z.
Cuando usamos los registros en modo de direccionamiento indirecto con pre-
decremento automtico y post-incrementos, los registros de direccin X, Y y Z
son decrementados o incrementados.

El trabajo de los 32 registros de propsito 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 travs de estos modos de
direccionamiento.

Figura. Mapa de la memoria de datos



7.3.1 Tiempos de Acceso a la Memoria de datos
Esta seccin 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
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 ledos y escritos.

La EEPROM tiene una resistencia de ms o menos 100.000 ciclos de
escritura/lectura. El acceso entre la EEPROM y la CPU esta descrito en lo
siguiente, especificando Registros de Direccin, Registros de datos de la
EEPROM y el registro de Control de la EEPROM.

Para prevenir escritura unidireccional de la EEPROM, una escritura especfica
debe proceder de la siguiente forma. Referirse a la descripcin del Registro de
Control de la EEPROM para detalles de este. Cuando la EEPROM es leda, la
CPU es detenida por cuatro ciclos de reloj antes de la siguiente instruccin sea
ejecutada. Cuando la EEPROM es escrita. La CPU es detenida por cuatro ciclos
de reloj antes de que la siguiente instruccin sea ejecutada.

7.4.2 Prevencin de Corrupcin en la EEPROM
Durante perodos bajos de VCC, los datos de la EEPROM pueden ser
corrompidos porque el voltaje de alimentacin es tambin 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 solucin del diseo debera ser aplicado. Una alteracin 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
mnimo voltaje para operar correctamente. Segundo, la misma CPU puede
ejecutar instrucciones incorrectas, si la alimentacin es demasiado baja.
Una alteracin de datos en la EEPROM puede ser fcilmente evitada siguiendo
las siguientes recomendaciones:
Durante los periodos con insuficiente alimentacin de voltaje poner el RESET
del AVR en nivel bajo.
Esto se puede hacer mediante una habilitacin interna del Brown-Out Reset
(BOD).
Si un reset ocurre mientras existe una operacin de escritura en progreso, la
operacin de escritura ser completada suministrando el voltaje de
alimentacin necesario.

7.5 Memoria de E/S
Todas las E/S y perifricos 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 propsito 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 especficos de ENTRADA y SALIDA, las
direcciones de E/S 0x00 a la 0x3F deberan ser usadas.
Cuando direccionamos los registros de E/S como espacios de datos usando las
instrucciones ST y LD, la localidad 0x20 debe ser aadida a estas direcciones. El
ATmega164P/324P/644P es un microcontrolador complejo con muchas
unidades perifricas 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 deberan 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 lgico en estas.
Note que, a diferencia de otros AVRs, las instrucciones CBI y SBI, solo operan
sobre bits especficos, y pueden adems 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 perifricos pueden ser usados para almacenar cualquier
informacin y son particularmente para almacenar variables globales y
banderas de estado.
Los registros de E/S de propsito general estn entre los rangos de direcciones
0x00 a la 0x1F y se usa para su acceso las instrucciones SBI, CBI, SBIS y SBIC

7.6 Descripcin de Registros

7.6.1 EEARH y EEARL Los Registros de Direccin 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: Direccin de la EEPROM
Los registros de direccin de la EEPROM EEARH y EEARL- especifican la
direccin 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 operacin 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 operacin 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 Programacin de la EEPROM: EEPM1
EEPM0
La configuracin del bit de modo de programacin de la EEPROM define cual
accin del programa ser disparada al EEPE.
Esto es posible para la programacin de datos en una operacin atmica (borra
el valor antiguo y el nuevo valor del programa) o para dividir la operacin de
lectura y escritura en dos diferentes operaciones.
Los tiempos de programacin 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 sern reseteados a 0b00 a
menos que el programa de la EPROM este ocupado.





Bit 3 EERIE: Habilitacin de interrupciones de la EEPROM

Escribiendo a uno el bit EERIE se habilita la interrupcin de la EEPROM si el bit
del SREG es uno. Escribiendo cero en EERIE se deshabilita la interrupcin. La
interrupcin de la EEPROM genera una interrupcin constante cuando EEPE es
limpiado.

Bit 2 EEMPE: Habilitacin del Programa del Maestro de la EEPROM

El bit EEMPE determina si la configuracin de EEPE a uno causa que la
EEPROM sea escrita.

Cuando EEMPE es uno, configurando EEPE durante cuatro ciclos del reloj
escribira el dato a la EEPROM al seleccionar la direccin. Si EEMPE es cero, la
configuracin de EEPE no tendra efecto. Cuando EMPE ha sido escrito a uno
por software, hardware limpiamos el bit a cero despus de cuatro ciclos de
reloj. Ver la descripcin del bit de EEPE para un procedimiento de escritura de
la EEPROM.

Bit 1 EEPE: Habilitando la Programacin de la EEPROM

La habilitacin de escritura de la seal EEPE de la EEPROM es la escritura de la
habilitacin de la EEPROM.
Cuando la direccin y el dato son correctamente configurados, el bit EEPE
debera ser escrito a uno para un valor de escritura dentro de la EEPROM. El bit
EEMPE debera ser uno antes de que un uno lgico sea escrito a EEPE, con lo
cul no tomara lugar la escritura de la EEPROM. El siguiente procedimiento
sera 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 direccin de la EEPROM a EEAR (opcional).
4. Escribir el nuevo dato de la EEPROM a EEAR (opcional).
5. Escribir uno lgico al bit EEMPE mientras se escribe cero a EEPE en EECR.
6. Dentro de cuatro ciclos de reloj despus configurar EEMPE, escribir uno
lgico a EEPE.
La EEPROM no puede ser programada durante la escritura del CPU a la
memoria Flash. El software chequeara que la programacin 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 programacin de la Flash. Si la Flash nunca comienza la actualizacin
por el CPU, el paso 2 seria omitido. Ver Programacin de la Memoria en la
Pg. 293 en el datasheet.
Precaucin: Una Interrupcin entre los paso 5 y 6 hara 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
Interrupcin 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 instruccin es ejecutada.

Bit 0 EERE: Habilitacin de Lectura de la EEPROM
La lectura de la habilitacin de la seal EERE de la EEPROM es leda para
habilitar la EEPROM. Cuando la direccin correcta es configurada en el registro
EEAR, el bit EERE seria escrito con uno lgico en el disparo de lectura de la
EEPROM. El acceso de la lectura de la EEPROM toma una instruccin, y la
respuesta del dato es disponible inmediatamente. Cuando la EEPROM es leda,
la CPU es detenida por cuatro ciclos antes que la siguiente instruccin sea
ejecutada. El usuario debera verificar el bit EEPE antes de empezar la
operacin de lectura. Si la escritura de la operacin esta en progreso, no sera
posible leer la EEPROM, o cambiar el Registro EEAR-
La Calibracin del Oscilador es usada al tiempo de acceso a la EEPROM- La
Tabla 7-2 en la pgina 25 del datasheet lista el tiempo tpico de programacin
para el acceso a la EEPROM desde el CPU.

El siguiente cdigo de ejemplo muestra uno en asembler y otro en C para
escritura de la EEPROM. Los ejemplos asumen que las interrupciones son
controladas (por desabilitacin de las interrupciones globales). El ejemplo
tambin asume que la parte baja de la memoria Flash esta presente en el
software. Si cada cdigo esta presente, la EEPROM escribe funciones y tambin
espera por cualquier comando de finalizacin SPM.



El siguiente cdigo muestra un ejemplo en assembler y otro en C para lectura
de la EEPROM. Los ejemplos asumen que las interrupciones son controladas
tambin que las interrupciones no ocurriran durante la ejecucin 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
distribucin. Todos los relojes no necesitan ser activados a un tiempo dado.
Para reducir el consumo de energa, los relojes de los mdulos no empiezan a
ser usados cuando estn detenidos por uso de diferentes modos sleep, como se
describe en Power Management and Sleep Modes en la pgina 42 del
datasheet. Los sistemas de relojes se describen a continuacin 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 operacin
del core AVR.
Los ejemplos de cada mdulo son Archivos de Registros de Propsito 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 clculos.

8.1.2 I/O Clock clk E/S
La E/S de reloj es usada por la mayora de los mdulos de E/S,
Timer/Counter, SPI, y USART.

El reloj de E/S es tambin es usado por el modulo de Interrupciones Externas,
pero note que algunas interrupciones externas son detectadas por flancos
asncronos, permitiendo que cada Interrupcin sea detectada si el reloj de E/S
es detenido. Tambin note que la deteccin de la condicin de inicio en el
mdulo USI es llevado a cabo asincrnicamente cuando el clk de E/S es
detenido. El reconocimiento de la direccin de TWI en todos los modos sleep.

8.1.3 Flash Clock clk FLASH
El reloj de la Flash controla la operacin de la interfase Flash. El reloj de la Flash
es usualmente activado simultneamente con el reloj del CPU.

8.1.4 Asynchronous Timer Clock clkASY

El Asynchronous Timer clock permite al Timer/Counter asncrono 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 Presicin a la conversin 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 seleccin 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 mximo 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 programacin de interfase.
8.2.2 Inicio de la secuencia de Reloj
Cualquier fuente de reloj necesita suficiente Vcc para comenzar la oscilacin y
un nmero mnimo de ciclos de oscilacin antes de que pueda considerarse
estable. Para aseguran un suficiente Vcc, el dispositivo enva un reset interno
con un tiempo de demora (t out) despus el dispositivo realiza un reset para
todas las otras fuentes de reset. La demora es el tiempo desde el oscilador del
Watchdog y el nmero de ciclos en demora es puesto por los bits de fusibles
SUTx y CKSELx. La seleccin de retardos se muestra en la Tabla 8-2. La
frecuencia del Oscilador del Watchdog es el voltaje dependiente como se
muestra en Caractersticas Tpicas.



El propsito general de los retardos es guardar al AVR en reset hasta que
suplido con el mnimo voltaje Vcc. El retardo no monitorea el voltaje actual y
esto requerira 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 debera
ser usado. El circuito BOD asegurara 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 sera recomendado. El oscilador
requiere de oscilaciones para un nmero mnimo 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 nmero 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 vara 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 cermico puede ser usado.
C1 y C2 debera 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 electromagntico del ambiente
Para resonantes cermicos, el valor del capacitor es dado por el fabricante.




8.3 Oscilador del Cristal de Baja Energa
Este oscilador del Cristal es de baja energa, con voltaje reducido en la salida del
XTAL2. Esto da un bajo consumo de energa, pero no es capaz de manejar otras
salidas de reloj, y puede ser ms susceptible al ruido en ambientes ruidosos.
El oscilador de Baja Energa puede operar en tres modos diferentes, cada uno
optimizado para un rango de frecuencia. El modo de operacin es seleccionado
por los fusibles CKSEL3. Como se muestra en la figura 8-3.


El fusible CKSEL0 junto con el SUT10 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 ms alto que Low Power Crystal Oscillator en la
pgina 32 del data sheet.
Note que el ajuste del Oscilador del Cristal solo funciona para Vcc = 2.7 - 5.5
voltios.
Alguna gua inicial para escoger los capacitores para ser usados con el cristal
estn dados en la tabla 8.6. El cristal debera ser conectado como se describe en
Clock Source Connections en la pgina 31 del data sheet.
El modo de operacin 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 sera tomado en consideracin.
Ambos valores son especificados por el fabricante. El oscilador del
ATmega164P/324P/644P es optimizado para muy bajo consumo de energa, y
adems cuando seleccionamos los cristales, ver la tabla 8-7, para mximo 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 tpicos 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 precisin 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 ms detalles.
Este reloj puede ser seleccionado como sistema de reloj por programacin del
fusible CKSEL como se muestra en la Tabla 8-9. Si es seleccionado, esto operara
con componentes no externos. Durante el reset, el hardware carga el valor de
calibracin de la pre-programacin en el registro OSCCAL y por eso
automticamente calibra el oscilador RC. La precisin de esta calibracin es
mostrada como calibracin de fbrica en la tabla 27-4.
Para cargar el registro OSCCAL desde SW, ver OSCCAL- Registro de
Calibracin del Oscilador en la pgina 40 del datasheet, esto es posible para
obtener una mayor precisin de calibracin que la usada por fabrica.
La precisin de esta calibracin es mostrada como calibracin de usuario en la
Tabla 27-4.

Cuando este Oscilador es usado como el reloj del chip, el oscilador del
Watchdog todava sera usado por el Watchdog Timer para el Reseteo a tiempo
fuera. Para mayor informacin del valor de calibracin en la pre-programacin,
ver la seccin Byte de Calibracin en la pgina 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 pgina 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 debera
ser manejado como se muestra en la Figura 8-4. Para manejar un dispositivo
con reloj externo, los fusibles CKSEL seran 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 sbitos en la
frecuencia de reloj aplicada para asegurar la estabilidad de operacin del MCU.
La variacin en frecuencia de ms del 2% desde un ciclo de reloj al siguiente
puede tener una conducta impredecible. Si los cambios de ms 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 ejecucin de tiempo de la frecuencia del reloj interno
mientras todava asegura una operacin estable. Referirse a prescalador del
sistema de Reloj en la Pg. 38 del datasheet para ms 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 pgina 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 pgina 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 lgico. Ver el registro de comparacin 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 Interrupcin de
comparacin a la salida, o generar una forma de onda a la salida en el pin
OC2B en la pgina 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 tambin sera una salida durante el reset, y la operacin normal del pin de
E/S sera 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 configuracin de CLKPR-Registro
Prescalador del reloj en la pgina 40 del datasheet. Esto puede ser usado para
decrementar la frecuencia del sistema de reloj y el consumo de energa cuando
el requerimiento para procesamiento en energa es bajo. Esto puede ser usado
con todas las opciones de fuente de reloj, y esto afectara la frecuencia de reloj
del CPU y todos los perifricos asncronos clkI/O, clkADC, clkCPU, and clkFLASH son
divididos por factores como se muestra en la Tabla 8-15 en la pgina 41 del
datasheet.
Cuando se cambia entre las configuraciones del prescalador, el prescalador del
sistema de reloj asegura que no ocurran fallas tcnicas en el sistema de reloj.
Esto tambin asegura que la frecuencia no es inmediatamente ms 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 ms rpido que la frecuencia de reloj
del CPU. Esto no es posible para determinar el estado del prescalador si esto
sera leble, y el tiempo exacto que toma el cambio desde una divisin 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 activacin de 2 flancos para
el reloj son producidos. T1 es el periodo previo del reloj, y T2 es el periodo
correspondiente a la configuracin 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 habilitacin 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 Descripcin de Registros
8.12.1 OSCCAL Registro de Calibracin de Oscilador



Bits 7:0 CAL7:0: Valor de Calibracin del Oscilador
El Registro de Calibracin del Oscilador es usado para la calibracin del
Oscilador Interno RC y remover la variacin de procesos desde la frecuencia del
oscilador. El valor de calibracin pre-programado es automticamente escrito
en este registro durante el reset del chip, dando la frecuencia de calibracin del
fabricante como se especifica en la Tabla 27-4 en la pgina 330 del datasheet. El
software de aplicacin 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 pgina 330. La calibracin 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 seran afectados. Si la
EEPROM y la Flash son escritas, no calibrar a ms de 8.8 MHz. Por otra parte, la
escritura de la EEPROM o la Flash puede fallar.
El bit CAL7 determina el rango de operacin para el oscilador. Configurando
este bit a 0 da el rango de frecuencia ms bajo, en otras palabras configurando
OSCCAL = 0x7F da la frecuencia ms alta que OSCCAL = 0x80.
Los bits CAL6..0 son usadas para modular la frecuencia dentro del rango
seleccionado. La configuracin de 0x00 da la frecuencia ms 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: Habilitacin de cambio del Prescalador del Reloj
El bit CLKPCE sera escrito a uno lgico al habilitar el cambio de los bits
CLKPS. El bit CLKPCE es solo actualizado cuando los otros bits en CLKPR son
simultneamente escritos a cero. CLKPCE es limpiado por hardware cuatro
ciclos despus de que es escrito o cuando los bits CLKPS son escritos.
Reescribiendo el bit CLKPCE dentro del periodo de tiempo fuera, no limpiara
el bit CLKPCE.

Bits 3:0 CLKPS3:0: Bits de Seleccin del Prescalador del Reloj 3 0
Estos bits definen el factor de divisin 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 perifricos asincrnicos son reducidas cuando el factor de divisin es usado.
Los factores de divisin estn dados en la Tabla 8-15 de la pgina 41 de
datasheet.
El fusible CKDIV8 determina el valor inicial de los bits CLKPS. Si CKDIV8 es
desprogramado, los bits CLKPS seran reseteados a 0000. Si CKDIV8 es
programado, los bits CLKPS son reseteados a 0011, dando un factor de
divisin de 8 para el inicio. Esto debera ser usado si la fuente de reloj
seleccionada tiene una frecuencia ms alta que la mxima frecuencia de los
dispositivos presentes en condiciones de operacin.
Note que cualquier valor puede ser escrito en los bits CLKPS indiferentemente
de la configuracin de los fusibles CKDIV8. El software de aplicacin
asegurara que un factor de divisin suficiente sea escogido si la fuente de reloj
seleccionada tiene una frecuencia ms alta que la frecuencia mxima de los
dispositivos presentes en condiciones normales. El dispositivo es enviado con el
Fusible CKDIV8 programado.

9. Power Management y Modo Sleep

9.1 Revisin General

El modo sleep habilita la aplicacin para cerrar los mdulos no usados en el
MCU, por eso ahorra energa.
El AVR proporciona varios modos sleep permitiendo al usuario adaptar el
consumo de energa para la aplicacin requerida.
Cuando habilita, el Brown-out Detector (BOD) activa el monitoreo de la
alimentacin de voltaje durante los periodos de descanso (sleep).
Adems ahorra energa, 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 distribucin. La figura es til en la seleccin 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 asincrnico.
3. Para el INT0, solo interrupcin de nivel.

Para entrar a cualquiera de los modos sleep, el bit SE en el SMCR debe ser
escrito en uno lgico y una instruccin SLEEP debe ser ejecutada. Los bits SM2,
SM1, y SM0 en el registro SMCR seleccionan cual modo de descanso ser
activado mediante la instruccin SLEEP.
Si ocurre la habilitacin de una interrupcin mientras el MCU est en modo
sleep, el MCU despierta. El MCU es parado durante cuatro ciclos adems del
tiempo de arranque, ejecuta la rutina de interrupcin, y retoma la ejecucin de
la siguiente instruccin 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 Desabilitacin del BOD

Cuando el Brown-out Detector (BOD) es habilitado por los fusibles BODLEVEL,
el BOD es activado para monitorear la alimentacin de voltaje durante el
periodo de descanso (sleep). Para ahorrar energa, es posible deshabilitar el
BOD por software para algunos modos sleep. El consumo mximo 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 funcin del BOD es apagada
inmediatamente despus de entrar en modo de descanso. Una vez que
despierta del modo sleep, el BOD es activado automticamente otra vez.
Esto asegura el funcionamiento seguro en caso de que el nivel de VCC cae
durante el perodo 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 contine ejecutando el cdigo.
La desabilitacin 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 instruccin SLEEP har que el
MCU entre en modo Idle, deteniendo el CPU pero permitiendo que el SPI,
USART, Comparador Anlogo, ADC, Interfaz Serial de 2 wire (2 hilos),
Timer/Contador, Watchdog y el sistema de interrupciones contine
funcionando.
Este modo bsicamente 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 transmisin Completas del USART.
Si despierta desde la interrupcin del Comparador Anlogo, el Comparador
Analgico puede activarse por configuracin del bit ACD en el Control
comparador y Registro de estado ACSR. Esto reducir el consumo de energa
en el modo Idle.

SI el ADC es habilitado una conversin comenzar automticamente cundo se
ingresa a este modo.

9.5 Modo de Reduccin de Ruido del ADC

Cuando los bits SM2..0 son escritos como 001, la instruccin SLEEP hace que el
MCU entre en el Modo de Reduccin 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 bsicamente detiene el reloj de las entradas y salidas, el
reloj del CPU y el reloj de la FLASH, mientras permite que los otros relojes
estn funcionando.
Esto mejora el ambiente de ruido del ADC, permitiendo alta resolucin en las
medidas.
Si el ADC es habilitado, una conversin comienza automticamente cuando se
entra en este modo. Aparte de la Interrupcin de Conversin Completa del
ADC, solo un reset externo, un reset del sistema del Watchdog, una
Interrupcin del Watchdog, un reset del Brown-out, una interrupcin de la
Interfaz serial de 2 hilos (2 wire), una interrupcin externa en INT7:4 o un
cambio de interrupcin pueden despertar al MCU desde el modo de reduccin
de ruido del ADC.


9.6 Modo Power-down

Cuando los bits SM2..0 son escritos como 010, la instruccin SLEEP hace que el
MCU entre en el Modo Power-down. En este modo, el oscilador externo es
detenido, mientras la interrupcin externa, la interfaz serial de 2 wire (2 hilos), y
el Watchdog continan operando. Solo un reset externo, un reset del Watchdog,
un reset del Brown-out, una interrupcin externa en INT7:4, una interrupcin
en INT2:0 o un cambio de interrupcin pueden despertar al MCU.
Este modo de descanso bsicamente detiene todos los relojes generados,
permitiendo operar solo el mdulo asincrnico.
Note que si el nivel del disparo de una interrupcin es usado para despertar
desde el modo power-down, el nivel cambiado debe sostenerse durante algn
tiempo para despertar al MCU. Cuando despierta del modo Power-down, hay
un retardo antes de despertarse y contina 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 instruccin SLEEP hace que el
MCU entre en el Modo Power-save. Esto modo es idntico al modo Power-
down, con una excepcin: 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 interrupcin del
Timer/Contador2 son habilitadas en TIMSK2, y el bit en la interrupcin 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 sincrnicamente y asincrnicamente en
el Modo Power-save. Si el Timer/contador2 no est usando el reloj asincrnico,
el oscilador del Timer/Contador es detenido durante el descanso (sleep). Si el
Timer/contador2 no est usando el reloj sincrnico, la fuente del reloj es
detenido durante el descanso (sleep). Note que aun cuando el reloj sncrono
est corriendo en Power-save, este reloj slo 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 instruccin SLEEP hace que el MCU entre en Modo Standbye.
Este modo es idntico al Power-Down con la excepcin 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 instruccin SLEEP hace que el MCU entre en el Modo Standbye
extendido. Este modo es idntico al modo Power-save con la excepcin que el
Oscilador es kept running. En el modo Stanbye Extendido, el dispositivo se
despierta en 6 ciclos de reloj






9.10 Registro Reduccin de Energa

El Registro Reduccin de Energa (PRR), proporciona un mtodo para detener
los perifricos individuales para reducir el consumo de energa.
El estado de la corriente de los perifricos es congelada y los registros de E/S no
pueden ser ledos o escritos.
Los recursos usados por el perifrico cuando el reloj se detiene permanecern
ocupados, por est razn los perifricos deben en la mayora de los casos ser
deshabilitados antes de que se detenga el reloj.
Al despertarse un perifrico, el cual ha sido limpiado el bit en PRR, pone a los
perifricos en igual estado como antes de cerrarse.

El cierre de los perifricos puede ser usado en modo Idle, Modo Activo para
reducir significantemente el sobre consumo de energa. En otros modos de
descanso, el reloj es ya es detenido.

9.11 Minimizacin del Consumo de Energa

Hay varios problemas a considerar cuando se trata de minimizar el consumo de
energa 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 funcin del dispositivo que este operando.
Todas las funciones no necesitan ser deshabilitadas. En particular, los mdulos
siguientes necesitan una consideracin especial cuando tratan de obtener el ms
bajo consumo posible.

9.11.2 Conversin Anloga a Digital

Si habilit, el ADC ser habilitado en todos los modos de descanso. Para
ahorrar energa, el ADC debe ser deshabitado antes de entrar en cualquier
modo sleep. Cuando el ADC es apagado y encendido otra vez, la siguiente
conversin ser una conversin extendida.


9.11.2 Comparador Anlogo

Cuando entra en modo Idle, el comparador Anlogo debe ser deshabilitado si
no se est usando. Cuando entra en el modo de Reduccin de Ruido del ADC,
el comparador Anlogo debe ser deshabilitado. En otros modos sleep, el
Comparador Anlogo es automticamente deshabilitado. Sin embargo, si el
Comparador Anlogo es configurado para usar la Referencia del Voltaje Interno
como entrada, el Comparador Anlogo 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 aplicacin, este modo debe ser
apagado. Si el Brown-out Detector es habilitado por los fusibles BODLEVEL,
este ser habilitado en todos los modos, y adems, siempre consume energa.
En el modo sleep ms 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 Anlogo o el ADC. Si estos mdulos son
deshabilitados como se describe en la seccin de abajo, la referencia de Voltaje
Interna ser deshabilitada y esta no consumir energa.

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 aplicacin, el mdulo debe ser
apagado. Si el Perro Watchdog Timer es habilitado, este ser habilitado en
todos los modos, y adems, siempre consumir energa. En el ms 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 mnima energa. Lo ms importante es por lo tanto asegurar que
ningn 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
sern deshabilitadas. Esto asegura que no exista consumo de energa cuando
una entrada lgica no es necesaria. En algunos casos, la entrada lgica es
necesaria para detectar condiciones de arranque, y entonces esto ser
habilitado.

Si el buffer de entrada es habilitado y la seal de entrada es dejada a flote o
tiene una seal anloga en VCC/2, el buffer de entrada usar excesiva energa.
Para los pines de entrada analgica, el buffer de entrada digital debe ser
deshabilitado de todos los tiempos. Una seal anloga 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 desabilitacin 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 adems, siempre
consumir energa. En el ms profundo de los modos sleep (descanso), este
contribuir significantemente al consumo total de corriente. Hay tres vas
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 Descripcin 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
energa.


Bits 3, 2, 1 SM2:0: Seleccin 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: Habilitacin del sleep

El bit SE debe ser escrito a uno lgico para hacer que el MCU entre en modo
sleep cuando la instruccin SLEEP es ejecutada. Para evitar que el MCU entre al
modo sleep es recomendable escribir a uno el bit SE antes de ejecutar la
instruccin SLEEP y para limpiar inmediatamente despus de despertarse.


9.12.2 MCUCR Registro de Control MCU


Bit 6 BODS: Descanso BOD

El bit BODS deber ser escrito a uno lgico 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 habilitacin, 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 despus de ser configurado. Una
instruccin SLEEP debe ser ejecutada mientras el BODS es activado para apagar
el BOD para el nuevo modo de descanso. El bit BODS es automticamente
limpiado despus de tres ciclos del reloj.

Bit 5 BODSE: Habilitacin del sleep (descanso) BOD

El BODSE habilita la configuracin del bit de control BODS, como se explica en
la descripcin del BODS. La deshabilitacin del BOD es controlada por una
secuencia de tiempos.

9.12.3 PRR Registro Reduccin de Energa



Bit 7 - PRTWI: Reduccin de Energa TWI
Al escribir un uno lgico en este bit cierra el TWI mediante la detencin del
reloj. Cuando arranque otra vez el TWI, el TWI debe ser reinicializado para
asegurar su correcto funcionamiento.

Bit 6 Reduccin de Energa del Timer/Countador2 PRTIM2
Al escribir un uno lgico en este bit pone el modulo del Timer/Contador2 en
modo asincrnico (AS2 es 0). Cuando el Timer/Contador2 es habilitado, la
operacin continuar como antes de que haya sido cerrado.

Bit 5 - PRTIM0: Reduccin de Energa del Timer/Contador0
Al escribir un uno lgico en este bit se cierra el modulo del Timer Contador0.
Cuando el Timer/Contador0 es habilitado, la operacin continuar como antes
de que haya sido cerrado.

Bit 4 - PRUSART1: Reduccin de Energa en el USART1
Al escribir un uno lgico en este bit se cierra el USART1 detenido el reloj del
mdulo.
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 lgico en este bit se cierra el mdulo del Timer/Contador1.
Cuando el Timer/Contador1 es habilitado, la operacin continuar como antes
de que haya sido cerrado.


Bit 2 - PRSPI: Power Reduction Serial Peripheral Interface
Al escribir un uno lgico en este bit se cierra el mdulo de Interfaz Perifrica
Serial mediante la detencin del reloj. Cuando despierta otra vez del SPI, el SPI
debe reinicializarse para asegurar su correcto funcionamiento.

Bit 1 - PRUSART0: Reduccin de Energa del USART0

Al escribir un uno lgico en este bit se cierra el USART0 deteniendo el reloj del
mdulo.
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 lgico en este bit se cierra el ADC. El ADC debe ser
deshabilitado antes de que se cierre el mdulo. El comparador anlogo 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 instruccin
localizada en el Vector de Reset debe ser un JMP Salto Absoluto instruccin
para reiniciar la rutina manualmente. Si el programa nunca habilita una fuente
de interrupciones, el Vector de interrupciones no es usado, y el cdigo de
programa puede ser ubicado en esta localidad. Es tambin del caso, si el Vector
de Reset, est en la seccin de aplicaciones mientras el Vector de Interrupciones
est en la seccin baja del programa (boot), o viceversa. El diagrama del circuito
se muestra en la tabla 10-1 la cual muestra el reset lgico.

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. Despus de resetear todas las fuentes ha sido
desactivado, se efecta un conteo de retardo, alargndose el reset interno. Esto
permite lograr una estabilidad antes de la operacin normal de inicio. El
periodo de tiempo para el conteo del retardo est definido por el usuario a
travs 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 alimentacin
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 mnimo.

3. Reset del Watchdog. El MCU es reseteado cuando el perodo 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
alimentacin 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 lgico en el
registro del Reset.






10.0.3 Reset del Power-on

Un pulso del Power-on (POR) es generado por un circuito de detencin interno
del chip. El circuito del POR est activado cuando el VCC esta por debajo del
nivel de deteccin. El circuito del POR puede ser usado para disparar el reset,
as como para detectar una falla en el voltaje de alimentacin.
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 seal de RESET es activada otra vez, sin ningn retardo,
cuando el VCC decrementa por debajo del nivel de deteccin.





10.0.4 Reset Externo

Un reset externo es generado por un nivel bajo en el pin de RESET. Los pulsos
de RESET ms largos que el ancho del pulso mnimo generan un reset, o si el
reloj no est corriendo. Pulsos cortos no garantizan generar un reset. Cuando la
seal aplicada alcanza el voltaje umbral de Reset VRST en su flanco positivo,
el contador de retardos inicia al MCU despus de que periodo de tiempo tout ha
terminado.


10.0.5 Deteccin 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 operacin mediante la
comparacin de un nivel de disparo.
El nivel de disparo del BOD puede ser seleccionado por el fusible BODLEVEL.
El nivel de disparo tiene una histresis para asegurar la deteccin del Brown-
out. La histresis en el nivel de deteccin 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 ms 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 despus 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 duracin 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
Analgico o al CONVERSOR ANALGICO-DIGITAL.

10.1.1 Habilitacin de la seal de voltaje interna y tiempo de arranque
La referencia de voltaje tiene un arranque que influencia en la forma en que este
debera usarse. Para ahorrar energa, la referencia no siempre es activada. La
referencia esta activada en las siguientes situaciones:

1. Cuando el BOD es habilitado (por programacin del fusible BODLVEL
[2:0]).
2. Cuando la referencia Bandgap es conectada al comparador analgico
(por configuracin del bit ACBG en el registro ACSR).
3. Cuando el ADC es habilitado.

Adems, cuando el BOD no es habilitado, despus de configurar el bit ACBG o
deshabilitar el ADC, el usuario debe siempre iniciar la referencia antes de que la
salida del comparador Anlogo sea usada. Para reducir el consumo de energa
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 Caractersticas:

Contador desde un Oscilador dentro del chip
3 Modos de Operacin
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 interrupcin o un reset al sistema cuando el
contador alcanza el valor dado en el time/out. En el modo de operacin
normal, esto requiere que el sistema use la instruccin 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 interrupcin o se
reiniciara el sistema.



En el modo de interrupcin, el WDT produce una interrupcin cuando el
tiempo termina. Esta interrupcin puede ser usada para despertar al dispositivo
del modo de descanso y tambin como un contador del sistema general: como
por ejemplo para limitar el tiempo mximo permitido para operaciones seguras,
dando una interrupcin 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 tpicamente usado para prevenir desconexiones del sistema en caso de
cdigo runaway.
El tercer modo, Modo de interrupciones y Reset del sistema, combinas los otros
dos modos mediante el primero genera una interrupcin y entonces conecta el
modo de Reset del sistema.
Este modo permitir un cierre seguro por ejemplo ahorrando los parmetros
crticos 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 Interrupcin 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 lgico para cambiar el bit
WDEN y WDE del Watchdog. Un uno lgico 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 operacin.

El siguiente cdigo de ejemplo muestra una funcin en ensamblador y en C
para apagar el Watchdog Timer. El ejemplo asume que las interrupciones son
controladas as que no ocurrirn interrupciones durante la ejecucin de estas
funciones.






Nota: Si el Watchdog es habilitado accidentalmente, por ejemplo por un
puntero incontrolable o una condicin de brown-out, el dispositivo ser
reseteado y el Watchdog Timer permanecer habilitado.
Si el cdigo no es puesto para controlar el Watchdog, este podra permanecer en
un lazo infinito. Para evitar esta situacin, el software de aplicacin debe
limpiar siempre a la Bandera del sistema de Reset del Watchdog (WDRF) y al
bit de control WDE en la rutina de inicializacin, o si el Watchdog no est en
uso.


El siguiente cdigo 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 Descripcin de los Registros

10.3.1 MCUSR Registro de Estado MCU
El Registro de Estado MCU brinda informacin 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 lgico en el Registro
de Reset JTAG seleccionado por la instruccin JTAG AVR_RESET. Este bit es
reseteado por un reset del Power-on, o por un cero lgico 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 lgico 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 lgico 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 lgico 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 lgico en la bandera.
Para ser uso de la Bandera de Reset para identificar una condicin 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 revisin de las Banderas de Reset.


10.3.2 WDTCSR Registro de Control del Watchdog Timer



Bit 7 - WDIF: Bandera de Interrupcin del Watchdog
Este bit es puesto a uno cuando ocurre un time-out en el Watchdog Timer y el
Watchdog Timer es configurado por interrupcin. WDIF es limpiado por
hardware cuando se ejecuta el correspondiente vector de interrupcin.
Alternativamente, WDIF es limpiado mediante la escritura de un uno lgico en
la bandera.
Cuando el Bit I en el registro de estado es configurado, la interrupcin del
Watchdog Timer es ejecutada.

Bit 6 - WDIE: Habilitacin de Interrupcin del Watchdog
Cuando este bit es escrito como uno y el bit I en el Registro de estado es
configurado, la interrupcin del Watchdog es habilitada. Si WDE es limpiada en
combinacin con su configuracin, el Watchdog Timer est en modo de
Interrupcin, y la interrupcin es ejecutada si ocurre un time-out en el
Watchdog Timer.
Si el WDE es configurado, el Watchdog Timer est en modo de Interrupcin y
rset del Sistema. El primer time-out en el Watchdog Timer pondr en uno el
WDIF.
Al ejecutarse el vector de interrupcin correspondiente limpiara
automticamente WDIE y WDIF por hardware. Esto es usado para brindar
seguridad al Watchdog Timer mientras usa la interrupcin. Este sin embargo no
debera estar en la misma rutina de interrupcin, porque puede comprometer la
seguridad del Sistema de reset del Watchdog. Si la interrupcin no es ejecutada
antes del siguiente time-out, un reset del Sistema ser aplicado.



Bit 4 - WDCE: Habilitacin 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: Habilitacin 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 mltiples 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 Interrupcin
ATmega164P/324P/644P






11.3 DESCRIPCION DE REGISTROS
11.3.1 MCUCR Registro de control MCU

Bit 1 IVSEL: Seleccin del vector de interrupcin
Cuando el bit IVSEL es cero, los vectores de interrupcin son puestos al
comienzo de la memoria Flash. Cuando este bit es uno, los vectores de
interrupcin son movidos al comienzo de la seccin Boot Loader de la Flash. La
actual direccin de comienzo de la seccin 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 interrupcin 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 automticamente son deshabilitadas mientras la secuencia
es ejecutada. Las interrupciones son deshabilitadas cuando es uno en el ciclo
IVCE, y permanecen deshabilitadas hasta la siguiente instruccin 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 desabilitacin
automtica.

Bit 0 IVCE: Habilitacin de Cambios del Vector Interrupcin
El bit IVCE ser escrito con uno lgico al habilitar el cambio del bit IVSEL. IVCE
es puesto en cero por hardware por cuatro ciclos despus es escrito o es cero
cuando IVSEL es escrito directamente. Configurando los bits del IVCE
desabitar las interrupciones.


















12. INTERRUPCIONES EXTERNAS
12.1 DESCRIPCIN 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 Interrupcin en el EIMSK
es uno. El nivel en los pines externos corresponde a uno en el EIMSK. Los
lmites de la forma de onda cuadrada en INT2, INT0 son registrados
asincrnicamente.
Los pulsos en INT2:0 son ms extensos que el mnimo ancho de pulso dado en
las Interrupciones Externas generadas en la interrupcin. Pequeos pulsos no
son garantizados para generar una interrupcin. Si la interrupcin a nivel bajo
es seleccionada, el nivel bajo seria sostenido hasta la realizacin de la
actualizacin ejecutando la instruccin para generar la interrupcin. Si se
habilita, el nivel activo de interrupcin se generar una llamada de la
interrupcin hasta que el pin este en bajo. Cuando se cambia el bit, ISCn, la
interrupcin puede ocurrir. Por consiguiente, es recomendable primero
deshabitar INTn encerando la habilitacin de este bit en el registro EIMSK.
Luego, el bit ISCn puede ser cambiado. Finalmente, la bandera de interrupcin
INTn debera ser limpiada por la escritura de uno lgico en este bit de la
bandera de interrupcin (INTFn) en el registro EIFR antes de que la
interrupcin sea nuevamente habilitada.


Sentido de Control de la Interrupcin
ISCn1 ISCn0 Descripcin
0 0 El nivel bajo de INTn genera un pedido de interrupcin
0 1 Cualquier flanco de INTn genera un pedido de interrupcin
asincrnico
1 0 El flanco de bajada de INTn genera un pedido de interrupcin
asincrnico
1 1 El flanco de subida de INTn genera un pedido de interrupcin
asincrnico



12.2.2 EIMSK Registro Mascara de Interrupcin Externa

Bits 2:0 INTF2:0: External Interrupt Flags 2 - 0
Cuando algn flanco o cambio lgico en el pin INT dispara un pedido de
interrupcin, INTF2:0 llega hacer uno. Si el bit-I en el SREG y la
correspondiente habilitacin de interrupcin en el bit, INT2:0 EIMSK, son uno,
el MCU saltara al vector de interrupcin. La bandera es limpiada cuando la
rutina de interrupcin es ejecutada. Alternativamente, la bandera puede ser
limpiada por la escritura de uno lgico. Estas banderas son siempre limpiadas
cuando INT2:0 son configuradas como nivel de interrupcin. 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
lgico en las seales internas con uno en las banderas INTF2:0.



12.2.4 PCICR Registro de Control Cambio del pin de Interrupcin



Bit 3 PCIE3: Habilitacin de la Interrupcin 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 interrupcin 3 es habilitado. Cualquier cambio en cualquier
habilitacin en los pines PCINT31..24 causar una interrupcin.
La correspondiente interrupcin demandada al cambio de pin de interrupcin
es ejecutada desde el vector de Interrupcin PCI3. Los pines PCINT31..24 son
habilitados individualmente por el Registro PCMSK3.


Bit 2 PCIE2: Habilitacin de la Interrupcin 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 interrupcin 2 es habilitado. Cualquier cambio en cualquier
habilitacin en los pines PCINT23..16 causara una interrupcin.
La correspondiente interrupcin demandada al cambio de pin de interrupcin
es ejecutada desde el vector de Interrupcin PCI1. Los pines PCINT23..16 son
habilitados individualmente por el Registro PCMSK2.

Bit 1 PCIE1: Habilitacin de la Interrupcin 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 interrupcin 1 es habilitado. Cualquier cambio en cualquier
habilitacin en los pines PCINT15..8 causara una interrupcin.
La correspondiente interrupcin demandada al cambio de pin de interrupcin
es ejecutada desde el vector de Interrupcin PCI1. Los pines PCINT15..8 son
habilitados individualmente por el Registro PCMSK1.

Bit 0 PCIE0: Habilitacin de la Interrupcin 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 interrupcin 0 es habilitado. Cualquier cambio en cualquier
habilitacin en los pines PCINT7..0 causar una interrupcin.
La correspondiente interrupcin demandada al cambio de pin de interrupcin
es ejecutada desde el vector de Interrupcin 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 Interrupcin





Bit 3 PCIF3: Cambio de Pin en la Bandera de Interrupcin 3
Cuando un cambio lgico en cualquier pin de disparo PCINT31..24 en
demanda de una interrupcin, 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
interrupcin. La bandera es limpiada cuando la rutina de interrupcin es
ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de
uno lgico.

Bit 2 PCIF2: Cambio de Pin en la Bandera de Interrupcin 2
Cuando un cambio lgico en cualquier pin de disparo PCINT23..16 en
demanda de una interrupcin, PCIF2 llegara a ser uno. Si el bit-I en el SREG y el
bit PCIE2 en EIMSK son uno, el MCU saltara al correspondiente vector de
interrupcin. La bandera es limpiada cuando la rutina de interrupcin es
ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de
uno lgico.

Bit 1 PCIF1: Cambio de Pin en la Bandera de Interrupcin 1
Cuando un cambio lgico en cualquier pin de disparo PCINT15..8 en demanda
de una interrupcin, PCIF1 llegara a ser uno. Si el bit-I en el SREG y el bit PCIE1
en EIMSK son uno, el MCU saltara al correspondiente vector de interrupcin.
La bandera es limpiada cuando la rutina de interrupcin es ejecutada.
Alternativamente, la bandera puede ser limpiada por la escritura de uno lgico.

Bit 0 PCIF0: Cambio de Pin en la Bandera de Interrupcin 0
Cuando un cambio lgico en cualquier pin de disparo PCINT7..0 en demanda
de una interrupcin, PCIF0 llegara a ser uno. Si el bit-I en el SREG y el bit PCIE0
en EIMSK son uno, el MCU saltara al correspondiente vector de interrupcin.
La bandera es limpiada cuando la rutina de interrupcin es ejecutada.
Alternativamente, la bandera puede ser limpiada por la escritura de uno lgico.

12.2.6 PCMSK3 Cambio de Pin en el Registro Mascara 3



Bit 7:0 PCINT31:24: Cambio de Pin en el Registro Mascara 31:24
Cada seleccin de los bits PCINT31:24 si el cambio de pines de interrupcin son
habilitados en las correspondientes pines de E/S. Si PCINT31:24 es uno y el bit
PCIE2 en PICICR es uno, el cambio de pines de interrupcin es habilitado en la
correspondiente pin E/S. Si PCINT31..24 es limpiado, el cambio de pin de
interrupcin en el correspondiente pin de E/S es deshabilitado.


12.2.7 PCMSK2 Cambio de Pin en el Registro Mascara 2


Bit 7:0 PCINT23:16: Cambio de Pin en el Registro Mascara 23..16
Cada seleccin de los bits PCINT23:16 si el cambio de pines de interrupcin son
habilitados en las correspondientes pines de E/S. Si PCINT23:16 es uno y el bit
PCIE2 en PICIR es uno, el cambio de pines de interrupcin es habilitado en la
correspondiente pin E/S. Si PCINT23..16 es limpiado, el cambio de pin de
interrupcin en el correspondiente pin de E/S es deshabilitado.


12.2.8 PCMSK1 Cambio de Pin en el Registro Mascara 1

Bit 7:0 PCINT15:8: Cambio de Pin en el Registro Mascara 15..8
Cada seleccin de los bits PCINT15:8 si el cambio de pines de interrupcin son
habilitados en las correspondientes pines de E/S. Si PCINT15:8 es uno y el bit
PCIE1 en EIMSK es uno, el cambio de pines de interrupcin es habilitado en la
correspondiente pin E/S. Si PCINT15..8 es limpiado, el cambio de pin de
interrupcin en el correspondiente pin de E/S es deshabilitado.


12.2.9 PCMSK0 Cambio de Pin en el Registro Mascara 0


Bit 7:0 PCINT7:0: Cambio de Pin en el Registro Mascara 7..0
Cada seleccin de los bits PCINT7:0 si el cambio de pines de interrupcin son
habilitados en las correspondientes pines de E/S. Si PCINT7:0 es uno y el bit
PCIE0 en PCICR es uno, el cambio de pines de interrupcin es habilitado en la
correspondiente pin E/S. Si PCINT7..0 es limpiado, el cambio de pin de
interrupcin en el correspondiente pin de E/S es deshabilitado.






























13. Prticos de E/S
Todos los Prtico del AVR tienen una verdadera modificacin de lectura-
escritura cuando son usados como prticos generales digitales. Esto significa
que la direccin de un pin de un prtico puede ser cambiado sin intencin
cargando la direccin de cualquier otro pin con las instrucciones SBI y CBI. Los
mismo se aplica cambiando el valor manejado (si configuramos como salida) o
habilitacin/desabilitacin de las resistencias pull-up (si se configura como
entrada)- Cada buffer de salida tendra un manejo similar de las caractersticas
con la capacidad de ambas fuentes. El pin manejado es habilitado fuertemente
al manejar LED displays directamente. Todos los pines del prtico tienen pull-
up que pueden ser seleccionados individualmente con una fuente de voltaje de
resistencia invariante. Todos lo pines E/S tienen diodos de proteccin ambos a
Vcc y Tierra como se indica en la figura.

13.1
Esquema Equivalente de los Pines de E/S

Todos los registros y bits referidos en estas acciones son escritos en forma
general. La letra minscula x representa el nmero para el prtico, y la letra
minscula n representa el nmero de bit. Sin embargo, cuando usamos el
registro o los bits definidos en el programa, se usara adecuadamente. Por
ejemplo, para el bit 3 en el prtico PORTB3, este documento lo denota como
PORTxn.
Tres de localidades de direccin de memoria de E/S son localizadas por cada
prtico, cada una para el Registro de Datos- PORTx, Registro de Direccin de
Datos DDRx, y los Pines de Entrada al Prtico-PINx. Los Pines de Entrada al
Prtico de E/S son solo de lectura, mientras que el Registro de datos y el
Registro de Direcciones son de lectura/escritura. Si embargo, escribiendo uno
lgico en el bit del registro PINx, resultara una inversin en el correspondiente
bit en el Registro de Datos. Adicionalmente, las Pull-up deshabilitadas- bit PUD
en MCUCR deshabilita la funcin de las pull-up para todos los pines en todos
los prticos cuando son uno.




La mayora de los pines de los prticos son multiplexados con funciones
alternativas para los dispositivos.
Note que habilitando las funciones alternativas de algunos de los prticos no
afectara al uso de otros pines en el prtico como E/S generales digitales.

13.2 Prticos como E/S Generales Analgicas
Los prticos son E/S bi-direccionales con pull-up internas opcionales. La
siguiente figura muestra la descripcin de funcionamiento de un pin de E/S,
generalmente llamado Pxn:


13.2.1 Configurando el Pin
Cada pin del prtico esta compuesto de tres registros: DDxn, PORTxn, y PINxn,
los bits DDXn son accesos a la direccin del DDRx E/S, los bits PORTxn
direccional al PORTx E/S, y los bits del PINnx direccional al PINx E/S.
El bit DDxn en el registro DDRx selecciona la direccin de este pin. Si DDxn es
escrito a uno lgico Pxn es configurado como un pin de salida. Si DDxn es
escrito con cero lgico, Pxn es configurado como un pin de entrada.
Si PORTxn es escrito como uno lgico cuando el pin es configurado como un
pin de entrada, las resistencias pull-up son activadas.

Para cambiar a apagar las resistencias pull-up, el PORTxn tuvo que ser escrito
con cero lgico o el pin tubo que ser configurado como pin de salida. Los pines
del prtico son de declarados cuando la condicin reset llega hacer activada.
Incluso si el reloj no esta corriendo.
Si el PORTxn es escrito con uno cuando el pin es configurado como un pin de
salida, el pin del prtico es manejado con uno. Si el PORTxn es escrito con cero
lgico cuando el pin es configurado como salida, el pin del prtico es manejado
con cero.

13.2.2 Invirtiendo el Pin
Escribiendo uno lgico en el PINxn, se invierte el valor de PORTxn,
independientemente del valor de DDRxn.
Note que la instruccin SBI pude ser usada para invertir un pin de un prtico
de manera sencilla.

13.2.3 Cambiando entre Entrada y Salida
Cuando cambiamos entre ({DDxn, PORTxn} = 0b00) y la salida en alto ({DDxn,
PORTxn}= 0b11), e inmediatamente con la habilitacin de las pull-up {DDxn,
PORTxn} = 0b01) o la salida en bajo ({DDxn, PORTxn} = 0b10) ocurrira.
Normalmente, la habilitacin de las pull-up es aceptable, como una alta-
impedancia no seria la diferencia entre un fuerte manejo en alto y la pull-up. Si
este no es el caso, el bit PUD en el registro MCUCR puede ser uno y
deshabilitar todas la pull-up en todos los prticos. Cambiando entre la entrada
con pull-up y la salida en bajo genera el mismo problema. Al usar el tri-state
({DDxn, PORTxn} = 0b00) o la salida en high state ({DDxn, PORTxn}
= 0b11) como en el paso inmediato.

Configuracin de los Pines del Prtico
DDxn PORTxn PUD (en
MCUCR)
E/S Pull-
up
Comentario
0 0 X Entrada No Tri-State (Alta-Z)
0 1 0 Entrada SI Pxn corriente en la fuente
si existe pulled low
0 1 1 Entrada No Tri-State (Alta-Z)
1 0 X Salida No Salida en Bajo
1 1 X Salida No Salida en Alto (Fuente)

13.2.4 Lectura del Valor del Pin
Independientemente de la configuracin del bit de Direccin de Datos DDxn, el
pin del prtico puede ser ledo a travs del bit del registro PINxn, el bit del
registro PINxn y el latch forman una sincronizacin. Esto es necesario para
evitar la metastability si el pin fsicamente cambia de valor cerca del lmite del
reloj interno, pero esto tambin introduce un retardo. La mxima y mnima
propagacin retardada son denotados como tpd, max y tpd, min
respectivamente.







Sincronizacin cuando es aplicado un valor de lectura externa

Considerando el periodo de reloj comenzando corto y despus el primer flanco
de bajada del sistema de reloj. El latch es cerrado cuando el reloj esta en bajo, y
va transparentando cuando el reloj esta en alto, como indica la regin
sombreada en la seal del SYNC LATCH. El valor de la seal es habilitado
cuando el sistema de reloj va en bajo. Este reloj dentro del PINxn. Registrando
lo que sucede en el flanco posito del reloj. Como indican las dos flechas
tpd,max y tpd,min, una simple transicin de la seal en el pin ser demorada
entre y 1 periodos de reloj dependiendo en el tiempo de asercin. Cuando
leemos el valor de atrs asignado por software al pin, una instruccin NOP
ser insertada. En este caso, la demora tpd a travs de la sincronizacin 1
periodo de ciclo de reloj.







Sincronizacin cuando el valor ledo al Pin es asignado por software







13.2.5 Habilitacin de Entrada Digital y Modo Sleep
La seal de entrada digital puede ser sujetada alrededor de la entrada schmitt-
trigger. La seal denotada SLEEP, es uno por el Controlador MCU Sleep en
modo de Bajo consumo (Power-Down), Modo seguro de energa y Modo de
Espera evita el alto consumo de energa si algunas seales de entrada estn
flotando a la izquierda, o tienen un nivel de seal analgica a Vcc/2-
SLEEP es barrido por habilitacin del pin del prtico como un pin de
interrupcin. Si la interrupcin externa demandada no es habilitada, SLEEP es
activada tambin por estos pines. SLEEP es tambin barrida por varias otras
funciones alternativas. Si un nivel lgico alto (uno) es presentada en un pin de
interrupcin asincrnica externa configurada como Interrupcin con Flanco de
Subida, Flanco de Bajada, o cualquier cambio lgico al pin mientras la
interrupcin externa no es habilitada, la correspondiente bandera de
interrupcin seria uno cuando resumimos desde el Modo Sleep mencionado
anteriormente, como al activar en este Modo Sleep produce un cambio lgico de
nivel.

13.2.6 Pines no Conectados
Si algunos pines no son usados, es recomendable asegurarse que estos pines
tengan definido un nivel. Incluso a travs de la mayora de la entradas digitales
son deshabilitadas en profundo Modo Sleep como se describi anteriormente,
las entradas flotantes deberan ser evitadas (Reset, Modo Activo, y Modo Idle)
El mtodo ms simple para asegurar la definicin de un nivel lgico para un
pin que no se usa es habilitar las pull-up internas. En este caso, las pull-up
serian deshabilitadas durante el reset. Si bajo consumo de energa durante el
reset es importante, es recomendable usar pull-up o pull-down. Conectando
pines que no se utilizan directamente a Vcc o Tierra no es recomendable, esto
pude causar excesivas corrientes si el pin es accidentalmente configurado como
salida.


13.3 Funciones Alternativas de los Prticos
La mayora de los pines del prtico tienen funciones alternativas adicionales
haciendo E/S generales digitales. El barrido de la seal puede ser no
presentada en todos los prticos, la siguiente figura muestra una descripcin
general aplicable a todos los pines del prtico de la familia de los
microcontroladores AVR.


Funciones Alternativas del Prtico



Nombre
de la
Seal
Nombre
Completo
Descripcin
PUOE Habilitacin Pull-
up overriddes
Si esta seal es uno, la habilitacin pull up es
controlada por la seal PUOV. Si esta seal es
cero la pull up es habilitada cuando {DDxn,
PORTxn, PUD} = 0b010.
PUOV Valor Pull-up Si PUOE es uno, la pull-up es
habilitada/rehabilitada cuando PUOV es
uno/cero, indiferente de la configuracin del
DDxn, PORTxn y los bits del registro PUD.
DDOE Habilitacin
Direccin de
Datos
Si esta seal es uno, el control de habilitacin de
salida es controlado por la seal DDOV. Si esta
seal es cero, el manejo de la salida es habilitado
por el bit del registro DDxn.
DDOV Habilitacin del
valor de
Direccin de
Datos
Si DDOE es uno, manejo de la salida es
habilitado/deshabilitado cuando DDOV es
uno/cero, indiferente de la configuracin del bit
del registro DDxn.
PVOE Habilitacin del
valor del prtico
Si esta seal es uno y el manejo de la salida es
habilitado, el valor del prtico es manejado por
la seal PVOE. Si PVOE es cero y el manejo de
la salida es habilitado, el valor del prtico es
controlado por el bit del registro DDxn.
PVOV Si PVOE es uno, el valor del prtico es uno a
PVOE, indiferentemente de la configuracin del
bit del registro PORTxn.
PTOE Si PTOE es uno, el bit del Registro del PORTxn
es invertido.
DIEOE Si este bit es uno, la habilitacin de Entrada
Digital es controlada por la seal DIEOV. Si esta
seal es cero, la habilitacin de la Entrada
Digital es determinada por el estado MCU
(Modo Normal, Modo Sleep)
DI Entrada Digital Esta Entrada Digital con funciones alternativas.
En la figura, la seal es conectada a las salida de
la Schmitt trigger pero antes de la
sincronizacin. A menos que la entrada digital
sea usada como fuente de reloj, el modulo con la
funcin alternativa usara estos propios
sincronizadores.
AIO Entrada/Salida
Analgica
Esto es la Entrada/salida analgica para
funciones alternativas. Puede ser usada
bidireccionalmente.








13.3.1 Funciones Alternativas Prtico A

Pin del Prtico Funcin Alternativa
PA7 ADC7 (Entrada canal 7 ADC)
PCINT7 (Cambio de pin Interrupcin 7)
PA6 ADC6 (Entrada canal 7 ADC)
PCINT6 (Cambio de pin Interrupcin 6)
PA5 ADC5 (Entrada canal 5 ADC)
PCINT5 (Cambio de pin Interrupcin 5)
PA4 ADC4 (Entrada canal 4 ADC)
PCINT4 (Cambio de pin Interrupcin 4)
PA3 ADC3 (Entrada canal 3 ADC)
PCINT3 (Cambio de pin Interrupcin 3)
PA2 ADC2 (Entrada canal 2 ADC)
PCINT2 (Cambio de pin Interrupcin 2)
PA1 ADC1 (Entrada canal 1 ADC)
PCINT1 (Cambio de pin Interrupcin 1)
PA0 ADC0(Entrada canal 0 ADC)
PCINT0 (Cambio de pin Interrupcin 0)



13.3.2 Funciones Alternativas Prtico B
Pin del Prtico Funcin Alternativa
PB7 SCK (SPI Bus de entrada reloj maestro)
PCINT15 (Cambio de pin interrupcin 15)
PB6 MISO (SPI Bus Maestro Salida Entrada/ esclavo)
PCINT14 (Cambio de pin Interrupcin 14)
PB5 MOSI (SPI Bus Maestro Salida Entrada/ esclavo)
PCINT13 (Cambio de pin Interrupcin 13)
PB4
SS (SPI Seleccin de entrada Esclavo)
OC0B (Timer/Contador0 Salida de comparacin B)
PCINT12 (Cambio de pin Interrupcin 12)
PB3 AIN1(Entrada Comparador Analgico Negativo)
OC0A (Timer/Contador0 Salida de comparacin A)
PCINT11 (Cambio de pin Interrupcin 11)
PB2 AIN0 (Entrada Comparador Analgico Positivo)
INT2 (Entrada de Interrupcin Externa 2)
PCINT10 (Cambio de pin Interrupcin 10)
PB1 T1 (Timer/Contador 1 Entrada Contador Externo)
CLK0 Sistema de divisin del reloj de salida
PCINT9 (Cambio de pin Interrupcin 9)
PB0 T0 (Timer/Contador 0 Entrada Contador Externo)
XCK0 (USART0 Reloj Externo de Entrada/Salida)
PCINT8 (Cambio de pin Interrupcin 8)


SCK/PCINT15 Portico B, Bit 7
SCK: Reloj Maestro de Salida, Reloj esclavo de entrada para canal SPI. Cuando
el SPI es habilitado como esclavo, este pin es configurado como entrada
indiferentemente de la configuracin del DDB7. Cuando el SPI0 es habilitado
como maestro, la direccin de datos de estos pines es controlada por DDB7.
Cuando el pin es forzado para ser una entrada, la pull up puede todava ser
controlada por el bit del PORTB7.

PCINT15, Cambio del pin de fuente de interrupcin 15: El pin PB7 puede servir
como fuente de interrupcin externa.


MISO/PCINT14 Portico B, Bit 6
MISO: Entrada de Datos Maestro, Pin de salida de datos esclavo para canal SPI.
Cuando SPI es habilitada como maestro, este pin es configurado como entrada
indiferentemente de la configuracin de DDB6. Cuando el SPI es habilitado
como esclavo, la direccin de datos de estos pines es controlada por DDB6.
Cuando el pin es forzado para ser una entrada, la pull up puede todava ser
controlada por el bit del PORTB6.

PCINT14, Cambio del pin de fuente de interrupcin 14: El pin PB6 puede servir
como fuente de interrupcin externa.

MOSI/PCINT13 Portico B, Bit 5
MOSI: SPI salida de datos maestro, entrada de datos esclavo para canal SPI.
Cuando SPI es habilitada como maestro, este pin es configurado como entrada
indiferentemente de la configuracin de DDB5. Cuando el SPI es habilitado
como maestro, la direccin de datos de estos pines es controlada por DDB5.
Cuando el pin es forzado para ser una entrada, la pull up puede todava ser
controlada por el bit del PORTB5.

PCINT3, Cambio del pin de fuente de interrupcin 13: El pin PB5 puede servir
como fuente de interrupcin externa.


SS /OC0B/PCINT12 Portico B, Bit 4
SS : Seleccin del prtico de entrada esclavo. Cuando SPI es habilitada como
esclavo, este pin es configurado como entrada indiferentemente de la
configuracin de DDB4. Cuando el SPI es habilitado como maestro, la direccin
de datos de estos pines es controlada por DDB4.

OC0B, salida de comparacin B: El pin PB4 puede servir como una salida
(DDB4 uno) al servir esta funcin. El pin OC0B es tambin la salida del pin
para la PWM Modo Timer.

PCINT12, Cambio de pin de fuente de interrupcin 12: El PB4 puede servir
como una fuente de interrupcin externa.

AIN1/OC0A/PCINT11, Bit 3
AIN1, Entrada Negativa del Comparador Analgico. Este pin es conectado
directamente a la entrada negativa del comparador analgico.

OC0A, Salida del punto de comparacin A: El pin PB3 puede servir como una
salida externa para el Timer/contador0 comparacin a la salida. El pin tiene
que ser configurado como salida (DDB3 uno) al sacar esta funcin. El pin OC0A
es tambin la salida del pin para la PWM funcionando en modo Timer

PCINT11, Cambio de pin de fuente de interrupcin 11: El pin PB3 puede servir
como una fuente de interrupcin externa.



AIN0/INT2/PCINT10, Bit 2
AIN1, Entrada Positiva del Comparador Analgico. Este pin es conectado
directamente a la entrada positiva del comparador analgico.

INT2, Fuente de interrupcin externa 2- El pin PB2 puede servir como una
fuente de interrupcin externa del MCU.

PCINT10, Cambio de pin de fuente de interrupcin 10: El pin PB2 puede servir
como una fuente de interrupcin externa.

T1/CLKO/PCINT9, Bit 1
T1, Fuente contador Timer/contador 1

CLKO, Sistema de divisin del reloj: El sistema de divisin del reloj puede ser
salida del pin PB1. El sistema de divisin del reloj seria salida si el fusible

CKOUT es programado, implcitamente de la configuracin del PORTB1. Esto
tambin seria salida durante el Reset.

PCINT10, Cambio de pin de fuente de interrupcin 9: El pin PB1 puede servir
como una fuente de interrupcin externa.













T0/XCK0/PCINT8, Bit 0

T0, Fuente contador Timer/contador0.

XCK, USART reloj externo. El registro de direccin de datos (DDB0) controla si
el reloj es salida (DDD uno) o entrada (DDD0 cero). El pin XCK0 es activado
solo cuando el USART0 opera en modo sncrono.

PCINT8, Cambio de pin de fuente de interrupcin 8: El pin PB0 puede servir
como una fuente de interrupcin externa.


13.3.3 Funciones Alternativas del Prtico C
Pin del Prtico Funciones Alternativas
PC7 TOSC2 (Timer Oscilador Pin 2)
PCINT23 (Cambio del pin de interrupcin 23)
PC6 TOSC1 (Timer Oscilador Pin 1)
PCINT22 (Cambio del pin de interrupcin 22)
PC5 TDI (JTAG Entrada testeo de datos)
PCINT21 (Cambio del pin de interrupcin 21)
PC4 TDO (JTAG Salida testeo de datos)
PCINT20 (Cambio del pin de interrupcin 20)
PC3 TMS (JTAG Modo seleccin de testeo)
PCINT19 (Cambio del pin de interrupcin 19)
PC2 TCK (JTAG testeo de reloj)
PCINT17 (Cambio del pin de interrupcin 18)
PC1 SDA (2-alambres Bus de datos serial lnea de Entrada/Salida)
PCINT18 (Cambio del pin de interrupcin 17)
PC0 SCL (2-alambres Bus serial lnea de reloj)
PCINT16 (Cambio del pin de interrupcin 16)

TOSC2/PCINT23 Prtico C, Bit7
TOSC2, Oscilador de Tiempo pin 2. El pin PC7 puede servir como una
interrupcin externa al MCU.

PCINT23, Cambio del pin de de fuente de interrupcin 23: El pin PC7 puede
servir como una fuente de interrupcin externa

TOSC1/PCINT22 Portico C, Bit 6
TOSC1, Oscilador de Tiempo pin 1. El pin PC6 puede servir como una
interrupcin externa al MCU.

PCINT22, Cambio del pin de de fuente de interrupcin 23: El pin PC6 puede
servir como una fuente de interrupcin externa

TDI/PCINT21 Portico C, Bit 5
TDI, JTAG Test Data Input.

PCINT22, Cambio del pin de de fuente de interrupcin 21: El pin PC5 puede
servir como una fuente de interrupcin externa


TDO/PCINT20 Port C, Bit 4
TDO, JTAG Test Data Output.

PCINT20, Cambio del pin de de fuente de interrupcin 20: El pin PC4 puede
servir como una fuente de interrupcin externa.


TMS/PCINT19 Port C, Bit 3
TMS, JTAG Test Mode Select.

PCINT19, Cambio del pin de de fuente de interrupcin 19: El pin PC3 puede
servir como una fuente de interrupcin externa.

TCK/PCINT18 Port C, Bit 2
TCK, JTAG Test Clock.

PCINT18, Cambio del pin de de fuente de interrupcin 18: El pin PC2 puede
servir como una fuente de interrupcin externa.

SDA/PCINT17 Port C, Bit 1
SDA, 2-wire Serial Bus Data Input/Output Line.

PCINT17, Cambio del pin de de fuente de interrupcin 17: El pin PC1 puede
servir como una fuente de interrupcin externa.

SCL/PCINT16 Port C, Bit 0
SCL, 2-wire Serial Busk Clock Line.

PCINT23, Cambio del pin de de fuente de interrupcin 16: El pin PC0 puede
servir como una fuente de interrupcin externa.







13.3.4 Funciones Alternativas Prtico D

Pin del Prtico Funcin Alternativa
PD7 OC2A (Timer/Contador2 Salida de punto de comparacin A)
PCINT31 (Cambio de pin de Interrupcin 31)
PD6 ICP1 (Timer /Contador 1 Entrada de captura Trigger)
OC2B (Timer/Contador 2 Salida al punto de comparacin B)
PCINT30 (Cambio de pin de Interrupcin 30)
PD5 OC1A (Timer/Contador1 Salida de punto de comparacin A)
PCINT29 (Cambio de pin de Interrupcin 29)
PD4 OC1B (Timer/Contador1 Salida de punto de comparacin B)
XCK1 (USART1 Reloj Externo Entrada/Salida)
PCINT28 (Cambio de pin de interrupcin28 )
PD3 INT1 (Entrada de Interrupcin Externa 1)
TXD1 (USART1 Pin de transmisin)
PCINT27 (Cambio de pin de interrupcin27 )
PD2 INT0 (Entrada de Interrupcin Externa 1)
RXD1 (USART1 Pin de recepcin)
PCINT26 (Cambio de pin de interrupcin26 )
PD1 TXD0 (USART Pin de Transmisin)
PCINT25 (Cambio de pin de interrupcin25 )
PD0 RXD0 (USART Pin de Recepcin)
PCINT24 (Cambio de pin de interrupcin24 )



OC2A/PCINT31 Portico D, Bit 7
OC2A, Salida del punto de comparacin A: EL pin PD7 puede servir como una
salida externa del Timer/Contador2 salida de comparacin A. El pin tiene que
ser configurado como salida (DDD7 uno). El pin OC2A es tambin la salida de
la PWM Modo de funcin de tiempo.

PCINT31, cambio de pin de fuente de fuente de interrupcin 31: El pin PD7
puede ser una fuente de interrupcin externa.

ICP1/OC2B/PCINT30 Port D, Bit 6
ICP1, Pin de captura de entrada 1: El pin PD6 puede actuar como un pin de
captura de entrada para el Timer/Contador 1.

OC2B, Salida de punto de comparacin B: El pin PD6 puede servir como una
interrupcin externa del Timer/contador2 salida de comparacin B. El pin tiene
que ser configurado como (DDD6 uno). El pin OC2B es tambin el pin de salida
para la PWM Modo funcin Timer.

PCINT30, Cambio del pin de de fuente de interrupcin 30: El pin PD6 puede
servir como una fuente de interrupcin externa.
OC1A/PCINT29 Port D, Bit 5
OC1A, salida de punto de comparacin A: El pin PB5 puede servir como una
interrupcin externa del Timer/contador1 salida de comparacin A. El pin tiene
que ser configurado como (DDD5 uno). El pin OC1A es tambin el pin de salida
para la PWM Modo funcin Timer.

PCINT29, Cambio del pin de de fuente de interrupcin 29: El pin PD5 puede
servir como una fuente de interrupcin externa.


OC1B/XCK1/PCINT28 Port D, Bit 4
OC1A, salida de punto de comparacin B: El pin PB4 puede servir como una
interrupcin externa del Timer/contador1 salida de comparacin B. El pin tiene
que ser configurado como (DDD4 uno). El pin OC1B es tambin el pin de salida
para la PWM Modo funcin Timer.

XCK1, USART1 Reloj externo. El registro de direccin de datos (DDD4) controla
si el reloj es salida (DD4 uno) o salida (DDD4 cero). El pin XCK4 es activado
solo cuando USART1 opera en modo sncrono.

PCINT28, Cambio del pin de de fuente de interrupcin 28: El pin PD4 puede
servir como una fuente de interrupcin externa.


INT1/TXD1/PCINT27 Port D, Bit 3
INT1, Fuente de Interrupcin Externa 1. El pin PD3 puede servir como una
fuente de interrupcin externa del MCU.

TXD1, Transmisin de Datos (Pin de Salida de Datos para el USART1). Cuando
la transmisin del USART1 es habilitada, este pin es configurado como salida
indiferentemente del valor de DDD3.

PCINT27, Cambio del pin de de fuente de interrupcin 27: El pin PD3 puede
servir como una fuente de interrupcin externa.


INT0/RXD1/PCINT26 Port D, Bit 2
INT0, Fuente de Interrupcin Externa 0. El pin PD2 puede servir como una
fuente de interrupcin externa del MCU.

RXD1, RXD0, Recepcin de Datos (Pin de Entrada de Datos para el USART1).
Cuando la transmisin del USART1 es habilitada, este pin es configurado como
salida indiferentemente del valor de DDD2. Cuando el USART fuerza este pin
seria una entrada, las pull up pueden ser controladas por el bit del PORTD2.

PCINT26, Cambio del pin de de fuente de interrupcin 26: El pin PD1 puede
servir como una fuente de interrupcin externa.


TXD0/PCINT25 Port D, Bit 1
TXD0, Transmisin de Datos (Pin de Salida de Datos para el USART0). Cuando
la transmisin del USART0 es habilitada, este pin es configurado como salida
indiferentemente del valor de DDD1.

PCINT25, Cambio del pin de de fuente de interrupcin 25: El pin PD1 puede
servir como una fuente de interrupcin externa.


RXD0/PCINT24 Port D, Bit 0
RXD0, Recepcin de Datos (Pin de Entrada de Datos para el USART0). Cuando
la transmisin del USART0 es habilitada, este pin es configurado como salida
indiferentemente del valor de DDD0. Cuando el USART fuerza este pin seria
una entrada, las pull up pueden ser controladas por el bit del PORTD0.

PCINT24, Cambio del pin de de fuente de interrupcin 24: El pin PD0 puede
servir como una fuente de interrupcin externa.

DESCRIPCIN DE REGISTROS
13.3.5 MCUCR Registro de Control MCU

Bit 4 PUD: Desabilitacin Pull-up
Cuando este bit es escrito con uno, las pull up en los prticos de E/S son
deshabilitados si los registros DDxn y PORTxn son configurados para habilitar
las pull up ({DDxn, PORTxn} = 0b01).

13.3.6 PORTA Registro de Datos del prtico A


13.3.7 DDRA Registro de Direccin de Datos del prtico A

13.3.8 PINA Direccin de los pines de salida del prtico A




13.3.9 PORTB Registro de Datos del prtico B


13.3.10 DDRB Registro de Direccin de Datos del prtico B


13.3.11 PINB Direccin de los pines de salida del prtico B


13.3.12 PORTC Registro de Datos del prtico C


13.3.13 DDRC Registro de Direccin de Datos del prtico C



13.3.14 PINC Direccin de los pines de salida del prtico C


13.3.15 PORTD Registro de Datos del prtico D

13.3.16 DDRD Registro de Direccin de Datos del prtico D


13.3.17 PIND Direccin de los pines de salida del prtico D











































14. Timer/Contador0 con PWM 8-bits

14.1 Especificaciones:

Dos unidades de comparacin diferenciales
Registros de comparacin con doble Buffer de salida
Recarga Automtica en los modos Clear Timer y punto de comparacin
(Compare Match)
Modulacin de ancho de Pulso (PWM)
Periodo variable PWM
Generador de Frecuencia
Tres Fuentes de Interrupcin Externa (TOV0, OCF0A y OCF0B)

14.2 Diagrama de Bloques Timer/Contador 0 8-bits




14.7 Modos de Operacin
En el modo de operacin, la conducta del Timer/Contador y los Pines de
comparacin a la salida, son definidos por la combinacin del modo de
Generador de Forma de onda (WGM02:0) y el Modo de Comparacin de Salida
(COM0x1:0). Los bits en el Modo de Comparacin a la salida no afectan la
secuencia de conteo, mientras q los bits del Modo Generador de Forma de Onda
lo hacen. Los bits COM0x1:0 controlan si la salida de la PWM generada debera
ser invertida o no (PWM invertida o no). Para Modo no-PWM los bits
COM0x1:0 controlan si la salida debera ser uno, cero, o invertida al punto de
comparacin.

14.7.1 Modo Normal

El modo ms simple de operacin es el Modo Normal (WGM02:0 = 0). En este
modo la direccin del contador siempre se encuentra incrementando, y el
contador no se pone en cero. El contador simplemente deja de contar con un
valor mximo a 8 bits (TOP=0xFF) y luego inicia desde tope bajo (0x00). En
operacin normal la Bandera de desbordamiento del Timer/Contador ser uno
al mismo tiempo que el ciclo de mquina como el TCNT0 llegan a ser cero. La
bandera TOV0 en este caso se comporta como un noveno bit, excepto que est
solo en uno. Sin embargo, combinado con la interrupcin de desbordamiento
del timer que automticamente limpia la bandera TOV0, la resolucin del timer
puede incrementarse por software. No hay casos especiales a considerar en el
Modo Normal, el valor del nuevo contador puede ser escrito a cualquier
instante.
La salida de comparacin unitaria puede ser usada para generar interrupciones
en algn tiempo dado. Usar la salida de comparacin para generar Formas de
Onda en modo Normal no es recomendada, ya que ocupa mucho tiempo en el
CPU.

14.7.2 Modo Clear Timer y Punto de Comparacin (CTC)
En el modo Clear Time y Punto de Comparacin o CTC (WGM02:0 = 2), el
registro OCR0A es usado para manipular la resolucin del contador. En el
modo CTC el contador es puesto en cero cuando el valor del contador (TCNT0)
se combina con OCR0A. El OCR0A define el valor mximo del contador, por
lo tanto tambin su resolucin. Este modo permite un control ms grande de la
frecuencia de salida en el punto de comparacin. Estos tambin simplifican la
operacin de contador de eventos externos.

El diagrama de tiempos para el CTC se muestra a continuacin. El valor de
contador (TCNT0) incrementa mientras ocurre una comparacin entre TCNT0 y
OCR0A, y el contador (TCNT0) es limpiado.




Una interrupcin puede ser generada cada vez que el valor del contador llega al
mximo valor usando la bandera del OCF0A. Si la interrupcin es habilitada, la
rutina de interrupcin puede ser usada para actualizar el valor mximo. Sin
embargo, cambia de valor mximo a la direccin 0x00 cuando el contador est
corriendo sin ningn prescalador o con valores bajos de prescalador, el valor
debe ser tomado con cuidado ya que el modo CTC no tiene una caracterstica de
doble buffer. Si el nuevo valor escrito en OCR0A es ms bajo que el valor
corriente de TCNT0, el contador perder el punto de comparacin. El contador
entonces contar hasta su mximo valor (0xFF) y vuelve a empezar desde la
direccin 0x00 antes de que ocurra un punto de comparacin.
Para generar formas de ondas cuadradas a la salida en el Modo CTC, la salida
del OC0A puede estar en uno o invertido su valor lgico en cada punto de
comparacin por los bits del Modo Comparador de Salida (COM0A1:0 = 1). El
valor del OC0A no debe ser visible en los pines del prtico a menos que la
direccin del dato del pin de salida est en uno. La forma de Onda cuadrada
generada tendr una frecuencia mxima de fOC2A = fclk_I/O/2 cuando OCR0A
es puesto en la direccin (0x00). La frecuencia de la forma de onda est definida
por la siguiente ecuacin:





La variable N representa el factor del prescalador (1, 8, 32, 64, 128, 256, 1024).
En cuanto al modo Normal de operacin, la bandera del TOV2 es seteada en el
mismo ciclo del reloj del timer cuando el contador cuenta del mximo valor a la
direccin 0x00.

Modo de Rpida PWM

El modo de Rpida PWM (WGM02:0=3 o7) proporciona una opcin de
generacin de forma de onda PWM a alta frecuencia. La rpida PWM difiere de
otra opcin de PWM por la simple pendiente de operacin (diente de sierra). El
contador cuenta desde el 0x00 hasta el Tope luego inicia desde 0x00. El tope es
definido como 0xFF cuando WGM2:0 = 3, y OCR0A cuando WGM2:0 = 7. En
Modo de comparacin de salida no invertido, la salida de comparacin (OCOx)
es limpiada en el punto de comparacin entre TCNT0 y OCR0x, y pone en uno
a la direccin 0x00. En Modo de Comparacin de salida Invertida, la salida es
puesta en uno en el punto de comparacin y es limpiada en la direccin 0x00,
en simple pendiente de operacin, la frecuencia de operacin en modo rpida
PWM puede estar dos veces en alto como en el modo de fase correcta PWM
que usa doble pendiente de operacin (onda triangular). Esta alta frecuencia
hace que el modo Rpida PWM pueda ser usada para reguladores de voltaje,
rectificadores, y aplicaciones DAC. Para alta frecuencia se tiene fsicamente
pequeos tamaos de componentes externos (capacitores), y reduce el costo
total del sistema.

14.7.3 Diagrama de Tiempos en Modo Rpida PWM

La bandera de desbordamiento (TOV0) del Timer/Contador es puesta en uno
cada vez que la cuenta llega al Tope. Si la interrupcin es habilitada, la rutina de
interrupcin puede ser usada para actualizar el valor de comparacin. En modo
de Rpida PWM, la comparacin unitaria permite la generacin de formas de
onda PWM en el pin OC0x. Configurando los bits del COM0x1:0 a dos
producirn una PWM no invertida y una PWM invertida de salida q puedes ser
generada por configuracin del COM0x1:0 con tres: Configurando los bits
COM0A1:0 con uno permitiendo la inversin del pin OC0A en el punto de
comparacin si el bit WGM02 es uno. Esta opcin no es valida para el pin
OC0B. El valor actual OC0x solo ser visible en el pin del prtico si la direccin
del dato para el pin del prtico es uno como salida. La forma de onda PWM es
generada por la configuracin del registro OC0x al tiempo que el contador del
ciclo de mquina es limpiado (cambio desde el Tope hasta 0x00). La frecuencia
para la salida de la PWM puede ser calculada por la siguiente ecuacin:
256
/
N
f
f
o I clk
OCnxPWM
=
La variable N representa el factor prescalador (1,8, 64, 256 o1024). El valor
extremo para el OCR0A es igual a uno en 0X00, la salida ser un pico estrecho
para cada MAX+1 del ciclo de mquina del reloj. Configurando el OCR0A igual
al MAX (0xFF)) resulta una constante en alto o bajo de la salida (dependiendo
de la polaridad de la salida ser uno por los bits COM0A1:0). A frecuencia (50
%) salida de la forma de onda en Modo de Rpida PWM puede archivado por
la configuracin del OC0x para invertir esto con un nivel lgico en cada punto
de comparacin (COM0x1:0 = 1). La generacin de la forma de onda tendr una
mxima frecuencia de = fclk_I/O/2 cuando OCR0A va de uno a cero. Esta
caracterstica es similar al del OC0A invertido en modo CTC, excepto a la
caracterstica del doble buffer de la comparacin a la salida el uno es el
habilitador del modo de Rpida PWM

14.7.4 Modo de Fase Correcta del PWM
El Modo de Fase Correcta de PWM (WGM02:0 = 1 o 5) provee una alta
resolucin en la opcin para la Generacin de Formas de Ona de fase correcta.
El Modo de operacin de fase correcta est basado en la operacin dual-
slope(onda triangular).
El contador cuenta repetidamente desde el valor mnimo 0x00 hasta el valor
mximo y desde el valor mximo al valor mnimo. El valor mximo est
definido como 0x00 cuando WGM2:0=1 y cuando WGM2:0=5. En Modo de
comparacin no invertida, la comparacin de salida (OC0x) es limpiada en el
punto de comparacin entre TCNT0 y OCR0x mientras cuenta
ascendentemente y pone uno mientras el punto de comparacin cuanta hacia
abajo. En el Modo de comparacin invertida, la operacin es invertida. La
operacin dual-slope tiene una frecuencia de operacin ms baja que la
mxima en simple operacin slope. Sin embargo, debido a los modos de
simetra de la pendiente doble de PWM, estos modos son preferidos para
aplicaciones de control de motor.
En fase correcta de PWM el contador es incrementado mientras el valor del
contador llega a su valor mximo. Cuando el contador alcanza su valor
mximo, este contador cambia de direccin. El valor del TCNT0 ser igual al
valor mximo para un ciclo de mquina del Timer.
En la figura siguiente se muestra el diagrama de tiempos para el modo de
operacin Correcta PWM para ilustrar la operacin dual slope (doble
pendiente). El diagrama incluye las salidas invertidas y no invertidas del PWM.
La lnea pequea horizontal marcada en el TCNT0 representa comparacin
entre OCR0x y TCNT0.





La bandera de desbordamiento del Timer/Counter (TOV0) es puesta en uno
cada vez que el contador llega a su valor mnimo (0x00).
La bandera de interrupcin puede ser usada para generar un tiempo de
interrupcin cada vez que contador llega al valor mnimo.
En Modo de Fase Correcta, la unidad de comparacin permite generar formas
de onda cuadrada de PWM en el pin OC0x. Configurando los dos bits
COM0x1:0 como dos en binario producir una PWM no invertida. Una salida
de PWM invertida puede ser generada configurando los dos bits COM0x1:0
como tres en binario. El valor mximo es definido como OxFF cuando
WGM2:0=3, y cuando MGM2:0=7.

El valor actual del OC0x no debe ser visible en los pines del prtico a menos
que la direccin del dato del pin de salida est en uno. La forma de Onda
cuadrada por el registro OC0x en el punto de comparacin entre OCR0x y
TCNT0 cuando ocurren incrementos. La frecuencia de la PWM en Modo de
Fase Correcta puede ser calculada por la siguiente ecuacin:



La variable N representa el factor del prescalador (1, 8, 32, 64, 128, 256, or 1024).
Los valores extremos para el Registro OCR0A representan casos especiales
cuando genera una forma de onda cuadrada de salida PWM cuando est en
modo de fase correcta. Si el pin OCR0A es igual que el valor mnimo, la salida
estar continuamente en bajo y si es igual al valor mximo la salida
permanecer en alto para Modo no invertido de la PWM. Para la salida de la
PWM invertida se tendr valores de niveles lgicos opuestos.
En el inicio del segundo periodo de la figura anterior en OCnx se tiene una
transicin de alto a bajo siempre y cuando no este en Punto de Comparacin. El
punto de esta transicin es para garantizar simetra cerca del valor mnimo.
Existen dos casos para dar una transicin sin Punto De Comparacin.

1. Cuando el OCR0A cambia su valor mximo como en la figura anterior.
Cuando el valor del OCR0A es el mximo, el valor del pin OCn es igual
como resultado de la cuenta descendente en el Punto de Comparacin.
Para asegurar la simetra en la parte inferior el valor del OCn debe
corresponder al resultado de la cuenta ascendente en el punto de
Comparacin.

2. El timer empieza a contar desde un valor mas alto que el uno en el
OCR0A, y por esta razn se pierde el Punto de Comparacin y por lo
tanto el ONc cambia si hubiese contado ascendentemente.








14.9 DESCRIPCIN DE REGISTROS

14.9.1 TCCR0A Registro de Control A Timer /Contador





Bits 7:6 COM0A1:0: Modo de Comparacin de Salida A

Estos bits controlan el comportamiento del pin de comparacin-salida (OC0A).
Si uno o ambos bits del COM0A1:0 estn en uno, la salida del OC0A
proporciona el normal funcionamiento de los pines de I/O cuando estn
conectados. Sin embargo, note que el bit del Registro de Direccin de datos
(DDR) corresponde al pin OC0A el cual debe estar en uno conforme a la
habilitacin de salida del controlador.
Cuando el OC0A es conectado al pin, la funcionalidad de los bits del
COMOA1:0 depende de los bits puestos en WGM02:0. La siguiente tabla
muestra la funcionalidad de los bits del COM0A1:0 cuando los bits del
WGM02:0 estn en uno.

Modo de Comparacin de Salida, Modo no PWM
COM0A1 COM0A0 Descripcin
0 0 Prtico en operacin normal, OC0A desconectado.
0 1 Invierte OC0A en Modo Comparacin
1 0 Pone cero OC0A en Modo Comparacin
1 1 Pone uno OC0A en Modo Comparacin


Modo de Comparacin de Salida, Modo rpida PWM
COM0A1 COM0A0 Descripcin
0 0 Modo en operacin normal, OC0A desconectado.
0 1 WGM02=0: Modo en operacin Normal, OCA
desconectado
WGM02=1: Invierte OC0A en Modo Comparacin
1 0 Pone cero OC0A en Modo Comparacin, Poner en uno
OC0A con el Botn.
1 1 Pone uno OC0A en Modo Comparacin, Poner cero
OC0A con el Botn.


Modo de Comparacin de Salida, Modo fase correcta PWM
COM0A1 COM0A0 Descripcin
0 0 Modo en operacin normal, OC0A desconectado.
0 1 WGM02=0:Modo en operacin Normal, OCA
desconectado
WGM02=1: Invierte OC0A en Modo Comparacin
1 0 Pone cero OC0A en Modo Comparacin cuando cuenta
de subida. Pone en uno OC0A en Modo Comparacin
cuando cuenta de bajada.
1 1 Pone uno OC0A en Modo Comparacin cuando cuenta
de subida. Pone en cero OC0A en Modo Comparacin
cuando cuenta de bajada.

Bits 5:4 COM0B1:0: Modo de Comparacin de Salida B

Estos bits controlan el comportamiento del pin de comparacin-salida (OC0B).
Si uno o ambos bits del COM0B1:0 estn en uno, la salida del OC0B
proporciona el normal funcionamiento de los pines de I/O cuando estn
conectados. Sin embargo, note que el bit del Registro de Direccin de datos
(DDR) corresponde al pin OC0B el cual debe estar en uno conforme a la
habilitacin de salida del controlador.
Cuando el OC0B es conectado al pin, la funcionalidad de los bits del
COMOB1:0 depende de los bits puestos en WGM02:0. La siguiente tabla
muestra la funcionalidad de los bits del COM0B1:0 cuando los bits del
WGM02:0 estn en uno.

Modo de Comparacin de Salida, Modo no PWM
COM0A1 COM0A0 Descripcin
0 0 Prtico en operacin normal, OC0B desconectado.
0 1 Invierte OC0B en Modo Comparacin
1 0 Pone cero OC0B en Modo Comparacin
1 1 Pone uno OC0B en Modo Comparacin

Modo de Comparacin de Salida, Modo rpida PWM
COM0A1 COM0A0 Descripcin
0 0 Prtico en operacin normal, OC0B desconectado.
0 1 Reservado
1 0 Pone cero OC0B en Modo Comparacin, Poner en uno
OC0B con el Botn.
1 1 Pone uno OC0B en Modo Comparacin, Poner cero
OC0B con el Botn.


Modo de Comparacin de Salida, Modo fase correcta PWM
COM0A1 COM0A0 Descripcin
0 0 Prtico en operacin normal, OC0B desconectado.
0 1 Reservado
1 0 Pone cero OC0B en Modo Comparacin cuando cuenta
de subida. Pone en uno OC0B en Modo Comparacin
cuando cuenta de bajada.
1 1 Pone uno OC0B en Modo Comparacin cuando cuenta
de subida. Pone en cero OC0B en Modo Comparacin
cuando cuenta de bajada.



Bits 3:2-Bits Reservados
Estos bits son reservados en el ATmega 164P/324P/644P y siempre sern ledos
como cero.

Bits 1:0- WGM01:0: Modo generador de Forma de Onda

Combinado con el bit WGM02 encontrado en el registro TCCR0B, estos bits de
control la secuencia de cuenta de contador, la fuente para el mximo valor del
contador (TOP), y que tipo de forma de onda va hacer usada. Estos modos de
operacin son soportador por Timer/Contador uno: Modo normal (contador),
modo CTC y dos tipos de pulso del modulador de ancho de pulso (PWM)


Descripcin del Bit Modo Generador de Forma de Onda

MOD
O
WGM
2
WGM
1
WGM
0
Timer/Conta
dor
Modo de
Operacin
TOP Actualizaci
n OCRx
Bande
ra
TOV
0 0 0 0 Normal 0xFF Inmediato MAX
1 0 0 1 PWM, fase
Correcta
0xFF TOP Parte
Inferio
r
2 0 1 0 CTC OCR
A
Inmediato MAX
3 0 1 1 Rpida PWM 0xFF Botn MAX
4 1 0 0 Reservado - - -
5 1 0 1 PWM, fase
correcta
OCR
A
TOP Parte
Inferio
r
6 1 1 0 reservado - - -
7 1 1 1 Rpida, PWM OCR
A
Botn TOP

NOTES:
1. MAX: 0xFF
2. Parte Inferior: 0x00

14.9.2 TCCR0B Registro de Control Timer/Contador B



Bit 7 FOC0A: Comparacin Forzada a la salida A
El bit FOC0A solo se activa cuando los bits WGM son especificados como Modo
no PWM. Sin embargo, para asegurar la compatibilidad con futuros
dispositivos, este bit seria cero cuando TCCR0B es escrito cuando opera en
Modo PWM. Cuando se escribe uno lgico en el bit FOC0A, inmediatamente la
comparacin es forzada a la generacin de una forma de onda. La salida OC0A
es cambiada acorde los bits COM0A1:0 son puestos. Note que el bit FOC0A es
implementado como un estroboscopio.
Por consiguiente es el presente de valor en los bits COM0A1:0 que determina el
efecto de la comparacin forzada.
Una habilitacin del FOC0A no generar ninguna interrupcin, ni pondr en
uno el timer en el modo CTC usando OCR0A como TOPE. El bit FOC0A
siempre se lee como cero.

Bit 6 FOC0B: Comparacin Forzada a la salida B
El bit FOC0B solo se activa cuando los bits WGM son especificados como Modo
no PWM. Sin embargo, para asegurar la compatibilidad con futuros
dispositivos, este bit seria cero cuando TCCR0B es escrito cuando opera en
Modo PWM. Cuando se escribe uno lgico en el bit FOC0B, inmediatamente la
comparacin es forzada a la generacin de una forma de onda. La salida OC0B
es cambiada acorde los bits COM0A1:0 son puestos. Note que el bit FOC0B es
implementado como un estroboscopio.
Por consiguiente es el presente de valor en los bits COM0A1:0 que determina el
efecto de la comparacin forzada.
La habilitacin de FOC0B no generar ninguna interrupcin, ni pondr en uno
el timer en el modo CTC usando OCR0B como TOPE
El bit FOC0A siempre se lee como cero.

Bits 5:4 Res: Bits Reservados
Estos bits son reservados y siempre se leen como cero.

Bit 3 WGM02: Modo Generacin de Forma de Onda
Ver la descripcin en el TCCR0A- Timer /Contador Registro de Control A

Bits 2:0 CS02:0: Selector de Reloj
Los tres bits de seleccin de la fuente de reloj son usados por el
Timer/Contador.

Descripcin de los bits de seleccin del Reloj
CS02 CS01 CS00 Descripcin
0 0 0 Sin fuente de Reloj(Timer/Contador parados)
0 0 1 Clk I/O (Sin prescalador)
0 1 0 Clk I/O /8(Prescalador)
0 1 1 Clk I/O /64(Prescalador)
1 0 0 Clk I/O /256(Prescalador)
1 0 1 Clk I/O /1024(Prescalador)
1 1 0 Fuente de Reloj Externo pin T0. Reloj con flanco de bajada
1 1 1 Fuente de Reloj Externo pin T0. Reloj con flanco de subida



Si se usan los modos del pin para el Timer/Counter0, las transiciones en el pin
T0 contaran aun cuando el pin se configura como una salida. Esto permite el
mando del software del Contador.

14.9.3 TCNT0 Registro Timer/Contador



El Registro Timer/Contador da el acceso directo, ambos para el funcionamiento
de lectura y escritura en el Timer/Contador uno, contador de 8-bits.
Escribiendo a los bloques de Registro TCNT0 (removidos) en modo de
comparacin en el siguiente tiempo de reloj. Modificando al contador (TCNT0)
mientras el contador est corriendo, introduce un riesgo de perder el modo de
comparacin entre el TCNT0 y los Registros del OCR0x.


14.9.4 OCR0A Registro de comparacin de Salida A





El Registro Comparador de Salida A contiene 8-bits cuyo valor es
continuamente comparado con el valor del contador (TCNT0). Match puede ser
usado para generar una interrupcin de comparacin de salida, o generar una
forma de onda en la salida del pin OC0A


14.9.5 OCR0B Registro de comparacin de Salida B


El Registro Comparador de Salida B contiene 8-bits cuyo valor es
continuamente comparado con el valor del contador (TCNT0). Match puede ser
usado para generar una interrupcin de comparacin de salida, o generar una
forma de onda en la salida del pin OC0B


14.9.6 TIMSK0 Registro mascara de Interrupcin Timer/Contador

Bits 7:3 Res: Bits Reservados
Estos bits son reservados y siempre sern ledos como cero.

Bit 2 OCIE0B: Habilitacin de Interrupciones a la salida de la
comparacin B
Cuando el bit OCIE0B es escrito con uno, y el bit-I en el registro de Estado es
uno, en el Timer/Contador en modo comparador se habilitada la interrupcin.
La correspondiente interrupcin es ejecutada si el modo comparacin en el
Timer/Contador ocurre, cuando el bit OCF0B esta en uno en el registro de
interrupcin de Banderas TIFR0 en el Timer/Contador.

Bit 1 OCIE0A: Habilitacin de Interrupciones a la salida de la
comparacin B Timer/Contador 0
Cuando el bit OCIE0A es escrito con uno, y el bit-I en el registro de Estado es
uno, en el Timer/Contador0 en modo comparador A se habilitada la
interrupcin. La correspondiente interrupcin es ejecutada si el modo
comparacin en el Timer/Contador0 ocurre, cuando el bit OCF0A esta en uno
en el registro de interrupcin de Banderas TIFR0 en el Timer/Contador.

Bit 0 TOIE0: Habilitacin de Interrupciones por desbordamiento
Timer/Contador0
Cuando el bit TOIE0 es escrito con uno, el bit-I en el Registro de Estado es uno,
el Timer/Contador0 interrupcin por desbordamiento es habilitada. La
correspondiente interrupcin es ejecutada si el desbordamiento en el
Timer/Contador ocurre, cuando el bit TOV0 en el registro de banderas de
interrupcin TIFR0 es uno en el Timer/Contador0


14.9.7 TIFR0 Registro de Interrupcin de Banderas Timer/Contador0

Bits 7:3 Res: Bits Reservados
Estos bits son reservados en el ATmega164P/324P/644P y siempre sern ledas
como cero.

Bit 2 OCF0B: Modo de comparacin B de la bandera a la salida
Timer/Contador 0
El bit OCF0B es uno cuando el modo de Comparacin ocurre entre el
Timer/Contador y el dato en OCR0B- Registro de salida de comparacin 0 B.
OCF0B esta en cero por hardware cuando esta ejecutando la correspondiente
interrupcin. Alternativamente, OCF0B esta en cero por escribir uno lgico en
la bandera- Cuando el bit-I en el SREG, OCIE0B (Habilitacin de interrupciones
Timer/Contador Modo de comparacin B), y OCF0B esta en uno, el
timer/contador en modo de comparacin es ejecutado.

Bit 1 OCF0A: Modo de comparacin A de la bandera a la salida
Timer/Contador 0
El bit OCF0A es uno cuando el modo de Comparacin ocurre entre el
Timer/Contador y el dato en OCR0A- Registro de salida de comparacin 0 B.
OCF0A esta en cero por hardware cuando esta ejecutando la correspondiente
interrupcin. Alternativamente, OCF0B esta en cero por escribir uno lgico en
la bandera- Cuando el bit-I en el SREG, OCIE0A (Habilitacin de interrupciones
Timer/Contador0 Modo de comparacin), y OCF0A esta en uno, el
timer/contador0 en modo de comparacin es ejecutado.


Bit 0 TOV0: Desbordamiento de Bandera Timer/Counter0
El bit TOV0 esta en uno cuando ocurre un desbordamiento en el
Timer/Counter0. TOV0 esta en cero por hardware cuando esta ejecutando el
correspondiente vector de interrupcin. Alternativamente, TOV0 esta en cero
cuando se escribe uno lgico por la bandera. Cuando el bit-I del SREG, TOIE0
(Habilitacin de Interrupcin por desbordamiento Timer/Contador0), y TOV0
esta en uno, la interrupcin por desbordamiento del Timer/Contador0 es
ejecutada.
La configuracin de esta bandera es dependiente del bit WGM02:0














15. Timer/Counter1 con PWM 16-Bits
15.1 Especificaciones

Diseado para 16 bits PWM
Dos salidas independientes de comparacin unitaria
Registros comparadores con doble salida de Buffer
Entrada de captura unitaria
Entrada de captura y cancelacin de ruido
Recarga Automtica en los modos Clear Timer y Compare Match
Modulador de ancho de Pulso (PWM)
Periodo Variable PWM
Generador de frecuencia
Contador de eventos externos
Cuatro Fuentes independientes de interrupcin (TOV1, OCF1A, OCF1B, y
ICF1)


15.2 Revisin General
Diagrama de bloque Timer/Contador1 16 -bits


15.9 Modos de Operacin
El modo de operacin, la conducta del Timer/Contador y los Pines de
comparacin a la salida, son definidos por la combinacin del modo de
Generador de Forma de onda (WGMn3:0) y el Modo de Comparacin de Salida
(COMnx1:0). Los bits en el Modo de Comparacin a la salida no afectan la
secuencia de conteo, mientras q los bits del Modo Generador de Forma de Onda
lo hacen. Los bits COM0x1:0 controlan si la salida de la PWM generada debera
ser invertida o no (PWM invertida o no). Para Modo no-PWM los bits
COMnx1:0 controlan si la salida debera ser uno, cero, o invertida al punto de
comparacin.

15.9.1 Modo Normal
El modo ms simple de operacin es el Modo Normal (WGMn3:0 = 0). En este
modo la direccin del contador siempre se encuentra incrementando, y el
contador no se pone en cero. El contador simplemente deja de contar con un
valor mximo a 16 bits (MAX=0xFFFF) y luego inicia desde tope bajo (0x0000).
En operacin normal la Bandera de desbordamiento del Timer/Contador
(TOVn) sern uno al mismo tiempo que el ciclo de mquina como el TCNTn
llegan a ser cero. La bandera TOVn en este caso se comporta como un dcimo
sptimo bit, excepto que est solo en uno. Sin embargo, combinado con la
interrupcin de desbordamiento del timer que automticamente limpia la
bandera TOVn, la resolucin del timer puede incrementarse por software. No
hay casos especiales a considerar en el Modo Normal, el valor del nuevo
contador puede ser escrito a cualquier instante.
La salida de comparacin unitaria puede ser usada para generar interrupciones
a un tiempo dado. Usar la salida de comparacin para generar formas de onda
en modo normal no es recomendado.

15.9.2 Modo Clear Timer on Compare Match (CTC)
En el modo Clear Time y Punto de Comparacin o CTC (WGMn3:0 = 4 o 12), el
registro OCRnA o ICRn es usado para manipular la resolucin del contador. En
el modo CTC el contador es puesto en cero cuando el valor del contador
(TCNTn) se combina con el OCRnA (EGMn3:0=4) o el ICRn (WGMn3:0=12). El
OCRnA define el valor mximo del contador, por lo tanto tambin su
resolucin. Este modo permite un control ms grande de la frecuencia de salida
en el punto de comparacin. Estos tambin simplifica la operacin de contador
de eventos externos.

El diagrama de tiempos para el CTC se muestra a continuacin. El valor de
contador (TCNTn) incrementa mientras ocurre una comparacin entre TCNTn
y OCRnA, y el contador (TCNTn) es limpiado.




Una interrupcin puede ser generada cada vez que el valor del contador llega al
mximo valor usando la bandera del OCFnA o ICFn. Si la interrupcin es
habilitada, la rutina de interrupcin puede ser usada para actualizar el valor
mximo. Sin embargo, cambia de valor mximo a la direccin 0x0000 cuando el
contador est corriendo sin ningn prescalador o con valores bajos de
prescalador, el valor debe ser tomado con cuidado ya que el modo de CTC no
tiene una caracterstica de doble buffer. Si el nuevo valor escrito en el OCRnA o
ICRn es ms bajo que el valor corriente del TCNTn, el contador perder el
punto de comparacin. El contador entonces contar hasta su mximo valor
(0xFFFF) y vuelve a empezar desde la direccin 0x0000 antes de que ocurra un
punto de comparacin.
Para generar formas de ondas cuadradas a la salida en el Modo CTC, la salida
del OCnA puede estar en uno o invertido su valor lgico en cada punto de
comparacin por los bits del Modo Comparador de Salida (COMnA1:0 = 1). El
valor del OCnA no debe ser visible en los pines del prtico a menos que la
direccin del dato del pin de salida est en uno (DDR_OCnA=1). La forma de
Onda cuadrada generada tendr una frecuencia mxima de fOCnA =
fclk_I/O/2 cuando OCRnA es puesto en la direccin (0x0000). La frecuencia de
la forma de onda est definida por la siguiente ecuacin:


La variable N representa el factor prescalador (1, 8, 64, 256, o 1024).
Como para el modo de operacin normal, la bandera TOVn esta en uno al
mismo tiempo del ciclo de reloj y el contador desde MAX (0xFFFF) hasta 0x0000


15.9.3 Modo de Rpida PWM

El modo de Rpida PWM (WGMn3:0=5, 6, 7, 14 o 15) proporciona una opcin
de generacin de forma de onda PWM a alta frecuencia. La rpida PWM difiere
de otra opcin de PWM por la simple pendiente de operacin (diente de sierra).
El contador cuenta desde el 0x0000 hasta el Tope luego inicia desde 0x0000.. En
Modo de comparacin de salida no invertido, la salida de comparacin (OCnx)
es limpiada en el punto de comparacin entre TCNTn y OCRnx, y pone en uno
a la direccin 0x0000. En Modo de Comparacin de salida Invertida, la salida es
puesta en uno en el punto de comparacin y es limpiada en la direccin 0x0000,
en simple pendiente de operacin, la frecuencia de operacin en modo rpida
PWM puede estar dos veces en alto como en el modo de fase correcta PWM
que usa doble pendiente de operacin (onda triangular). Esta alta frecuencia
hace que el modo Rpida PWM pueda ser usada para reguladores de voltaje,
rectificadores, y aplicaciones DAC. Para alta frecuencia se tiene fsicamente
pequeos tamaos de componentes externos (capacitores), y reduce el costo
total del sistema.
La resolucin de la PWM por rpida PWM puede ser arreglada a 8, 9 o 10bitsm
o definiendo ICRn o OCRnA. La mnima resolucin es 2-bit (ICRn o OCRnA en
uno a 0x00003), y la mxima resolucin es 16-bits (ICRn o OCRnA en uno a
0xFFFF). La resolucin e la PWM en bits puede ser calculada usando la
siguiente ecuacin:

En modo rpida PWM el contador es incrementado mientras es limpiado en el
siguiente ciclo de reloj. El diagrama de tiempos mostrado a continuacin
muestra el modo de rpida PWM cuando OCRnA o ICRn es usada para definir
el Tope. El valor de TCNTn es mostrado en el diagrama de tiempos para
ilustracin del (single slope operation). El diagrama incluye la salida de PWM
invertida y no invertida. Una pequea lnea horizontal marca el TCNTn y
marca la comparacin entre OCRnx y TCNTn. La bandera de interrupcin
OCnx ser uno cuando llegue al punto de comparacin.


Diagrama de tiempos de la Rpida PWM

La bandera de desbordamiento del Timer/Counter (TOVn) es puesta en uno
cada vez que el contador llega a su valor mnimo (0x0000). Adicionalmente la
bandera OCnA o ICFn es uno al mismo tiempo que el ciclo de reloj como
TOVm estn en uno cuando OCRnA o ICRn es usada para definir el valor
TOPE. Si una de las interrupciones son habilitadas la rutina puede ser usada
para actualizar el valor TOPE de comparacin. Cuando se esta cargando el
valor TOPE el programa debe asegurarse que el nuevo valor TOPE es alto o
igual al valor de tos los registros de comparacin. Si el valor TOPE es bajo que
cualquier registro de comparacin, el punto de comparacin nunca ocurrir
entre el TCNTn y el OCTnx. Note que cuando se esta usando un arreglo para el
valor TOPE los bits son mascaras con cero cuando ninguno de los registros
OCRnx son escritos.
El proceso para actualizacin ICRn difiere desde la actualizacin OCRnA
cuando es usada para la definicin del valor TOPE. El registro ICRn no tiene
doble buffer. Esto significa que si ICRn es cambiado a un valor bajo cuando el
contador esta corriendo con ninguno o un valor bajo del prescalador, hay un
riesgo que el nuevo valor de ICRn sea escrito con un valor bajo que el valor
actual de TCNTn. Es resultado ser luego contado perdiendo el valor del punto
TOPE. El contador luego contara el valor MAX (0xFFFF) y emperaz alrededor
de 0x0000 antes que la comparacin en el punto pueda ocurrir. El registro ICRn
sin embargo, tiene un doble buffer. Esto corresponde a la localizacin OCRnA
E/S q seria escrita en cualquier instante. Cuando la localidad OCRnA E/S es
escrita con un valor se puede poner un registro buffer. El registro de
comparacin OCRnA puede ser actualizado con el valor en el registro Buffer y
en el siguiente ciclo de reloj en el punto TOPE de TCNTn. La actualizacin es
hecha al mismo tiempo que el tiempo del ciclo de reloj como TCNTn es
limpiada y la bandera TOVn es uno.
Usando el Registro ICRn por definicin del valor TOPE trabajara cuando se usa
un valor de arreglo al TOPE. Usando el registro ICRn, el registro OCRnA es
libre de ser usado para generar una PWM a la salida del OCnA. Si embargo si la
base de frecuencia de la PWM esta activando cambios (por cambios en el valor
TOPE), usando el OCRnA como TOPE es claramente mejor escoger dos buffer.

En modo de rpida PWM, la comparacin unitaria permite la generacin de
formas de onda PWM en los pines OCnx. Configurando los bits COMnx1:0 a
dos producira una PWM no invertida y una PWM invertida a la salida.
El valor actual del OCnx no debe ser visible en los pines del prtico a menos
que la direccin del dato del pin de salida est en uno. La forma de Onda
cuadrada por el registro OCnx en el punto de comparacin entre OCRnx y
TCNTn cuando ocurren incrementos. La frecuencia de la PWM en Modo de
Fase Correcta puede ser calculada por la siguiente ecuacin:

La variable N representa el prescalador dividido (1, 8, 64, 256, o 1024).
El valor extreme de el Registro OCRnx representa casos especiales cuando
generan una forma de onda PWM a la salida en Modo Rpida PWM. Si el
OCRnx es igual a uno en (0x0000) de la salida seria un pico para cada tiempo
TOPE+1 del tiempo de ciclo de reloj. Configurando el OCRnx igual al TOPE
resultara en una constante de salida alta o baja (dependiendo la polaridad de
la salida en uno por los bits COMnx1:0). Una frecuencia de salida para la forma
de onda en Modo de Rpida PWM puede ser archivado por la configuracin
OCnA a inversin estos niveles lgicos en cada punto de comparacin
(COMnA1:0 = 1).Esto es aplicable solo si OCR1A es usado para definir el valor
TOPE (WGM13:0015). La forma de onda generada tendr una frecuencia
mxima fOCnA = fclk_I/O/2 cuando OCRnA va de uno a cero (0x0000). Estos
es similar al OCnA invertido en el modo CTC.

15.9.4 Modo Fase Correcta PWM
La fase correcta para el modulador de ancho de pulo en modo de fase correcta
PWM (WGMn3:0 = 1, 2, 3,10, o 11) proporciona una alta resolucin en fase
correcta PWM en la opcin de generacin de forma de onda. El modo correcto
de fase PWM esta basada en la operacin forma triangular (dualslope). El
contador cuenta repetitivamente desde (0x0000) hasta el valor TOPE y desde
TOPE hasta 0x0000. En modo de comparacin no invertido, la salida de
comparacin (OCnx) limpia en la comparacin entre TCNTn y OCRnx
mientras decrementa, y enciende la comparacin mientras decrementa. En
modo de comparacin invertida, la operacin es invertida.

La operacin en (dual-slope) tiene una frecuencia de operacin mxima menor
que la operacin (single slope). Sin embargo, conserva la doble simetra del
modo (dual-slope) PWM, estos tres modos son preferidos para aplicacin de
control de motores.
La resolucin PWM para el modo de fase correcta puede ser arreglada a 8-, 9-,
o 10-bit, o definida por ICRn o OCRnA. La mnima resolucin es 2 bits (ICRn o
OCRnA con uno en
0x0003), y la mxima resolucin es 16 bits (ICRn o OCRnA en uno en la
direccin MAX 0xFFFF). La resolucin PWM en bits puede ser calculada
usando la siguiente ecuacin:

En modo de fase correcta PWM el contador es incrementado hasta el valor en el
punto uno de los valores arreglados 0x00FF, 0x01FF, o 0x03FF (WGMn3:0 = 1, 2,
o 3), el valor en ICRn (WGMn3:0 = 10), o el valor en OCRnA (WGMn3:0 = 11).
El contador tiene luego q alcanzar el TOPE y cambiar la direccin de la cuenta.
El valor TCNTn ser igual al TOPE para un ciclo de reloj del timer. El diagrama
de tiempos para modo de fase correcta muestra el modo de fase correcta PWM
cuando OCRnA o ICRn son usados para definir el TOPE. EL valor TCNTn
incluye salidas PWM invertidas y no invertidas- La lnea horizontal pequea
marcada del TVNTn representa el punto de comparacin entre OCRnx y
TCNTn. La bandera de interrupcin OCnx ser uno cuando la comparacin el
punto ocurra.

Diagrama de Tiempos en Modo de fase Correcta



La bandera de desbordamiento del Timer/Counter (TOVn) es uno cada vez que
el contador alcaza 0x00000. Cuando OCRnA o ICRn es usada para definir el
valor TOPE, el OCnA o ICFn es uno de acuerdo al mismo tiempo del ciclo de
reloj como los registros OCRnx son actualizados con el valor en doble buffer
(TOPE). La bandera de Interrupcin puede ser usada para generar una
interrupcin cada vez que el contador alcance el TOPE o el valor 0x0000.
Cuando se encuentra cargando el valor TOPE el programa asegura si el alto o
igual el valor de todos los registros de comparacin. En el valor TOPE es el mas
bajo de los registros de comparacin, el punto de comparacin nunca ocurre
entre el TCNTn y el OCRnx.
Note que cuando se usan los valores de los arreglos en el TOPE, El no uso de
los bits son mascaras de cero cuando cualquiera de los registros OCRnx son
escritos. Como en el tercer periodo ilustrado en la figura, cargando activamente
el TOPE mientras el Timer/counter esta corriendo en modo de fase correcta
puede resultar en una salida antisimtrica. La razn para que esto pueda ser
encontrado a la vez que es actualizado el registro OCRnx. Desde que la
actualizacin OCRnx ocurre en el TOPE, el periodo PWM comienza y termina
al final del valor TOPE. Esto implica que la longitud de la pendiente negativa es
determinada por el previo valor TOPE, mientras la longitud de la pendiente
positiva es determinada por el nuevo valor TOPE. Cuando estos dos valores
difieren de las dos pendientes del periodo diferirn en longitud. La diferencia
en longitud da un resultado antisimtrico a la salida.

Esto es recomendable al usar el modo de fase y frecuencia correcta en
comparacin del modo de fase correcta cuando se carga el valor TOPE mientras
el Timer/Counter esta corriendo. Cuando usamos un valor constante el valor
TOPE prcticamente no hay diferencias entre los dos modos de operacin. En
modo de fase correcta PWM, la comparacin permite la generacin de formas
de onda PWM en los pines OCnx. Configurando los bits COMnx1:0 a dos se
producira una salida invertida de PWM y una no invertida PWM puede ser
generada por la configuracin de COMnx1:0 a tres. El valor actual de OCnx
solo seria visible en el pin del prtico si la direccin del dato para el pin del
prtico es uno como la salida (DDR_OCnx). La forma de onda PWM generada
por configuracin (o limpiando) el registro OCnx en el punto de comparacin
entre OCRnx y TCNTn cuando el contador incrementa, y limpiando (o
poniendo en uno) el registro OCnx al punto de comparacin entre OCRnx y
TCNTn cuando el contador decrementa. La frecuencia PWM para la salida
cuando se usa frecuencia correcta PWM puede ser calcula por la siguiente
ecuacin:


La variable N representa el prescalador dividido (1, 8, 64, 256, o 1024).
El valor extremo para el registro OCRnx representa casos especiales cuando se
genera una forma de onda PWM a la salida en el modo de fase correcta. Si el
OCRnx es igual a uno en 0x0000 la salida ser continuamente bajo y si es igual a
uno a 0x0000 la salida ser continuamente alta para modo PWM no invertido.
Para invertir la salida PWM tendr un valor opuesto lgico. Si OCR1A es usada
para definir el valor TOPE (WGM13:0 = 11) y COM1A1:0 = 1, la salida OC1A
invertir con 50% al ciclo en alto.








15.11 Descripcin de Registros
15.11.1 TCCR1A Registro de Control A Timer/Contador1


Bit 7:6 COMnA1:0: Modo de Comparacin de Salida para Canal A

Bit 5:4 COMnB1:0: Modo de Comparacin de Salida para Canal B
El COMnA1:0 y COMnB1:0 controlan los pines para la comparacin de salida
(OCnA y OCnB respectivamente). Si uno o ambos bits de COMnA1:0 son
escritos con uno, la salida OCnA es conectada al desbordamiento normal en el
pin del prtico de E/S. Si uno o ambos bits del COMnB1:0 estn escritas con
uno, la salida OCnB es conectada al desbordamiento normal en el pin del
prtico de E/S. Sin embargo la direccin del registro de datos (DDR)
corresponde al pin OCnA o OCnB debe ponerse para habilitar la salida del
controlador. Cuando el OCnA o OCnB es conectada al pin, la funcin del los
bits COMnx1:0 es dependiente de los bits programados del WGMn3:0.

Modo de Comparacin de Salida, no PWM
COMnA1/COMnB1 COMnA0/COMnB0 Descripcin
0 0 Modo de operacin Normal,
OCnA/OCnB desconectado
0 1 Inversin OCnA/OCnB en el
Punto de comparacin
1 0 Pone en cero OCnA/OCnB en el
Punto de comparacin (Pone en
uno la salida en nivel bajo)
1 1 Pone en uno OCnA/OCnB en el
Punto de comparacin (Pone en
uno la salida en nivel alto)


Modo de Comparacin de Salida, Rpida PWM
COMnA1/COMnB1 COMnA0/COMnB0 Descripcin
0 0 Modo de operacin Normal,
OCnA/OCnB desconectado
0 1 WGMn3:0=14 o 15: Inversin
OC1A en Modo comparacin,
OC1B desconectado (Modo de
operacin Normal) Para todas las
configuraciones WGM1, Modo de
operacin Normal, OC1A/OC1B
1 0 Pone en cero OCnA/OCnB en el
Punto de comparacin, pone en
uno OCnA/OCnB en la direccin
baja 0X00 (Modo no Invertido)
1 1 Pone en uno OCnA/OCnB en el
Punto de comparacin, pone en
cero OCnA/OCnB en la direccin
baja 0X00 (Modo Invertido)



Modo de Comparacin de Salida, Fase correcta, fase, y Correcta frecuencia
PWM
COMnA1/COMnB1 COMnA0/COMnB0 Descripcin
0 0 Modo de operacin Normal,
OCnA/OCnB desconectado
0 1 WGMn3:0=9 o 11: Inversin
OCnA en Modo comparacin,
OCnB desconectado (Modo de
operacin Normal) Para todas las
configuraciones WGM1, Modo de
operacin Normal, OC1A/OC1B
desconectados.
1 0 Pone en cero OCnA/OCnB en el
Punto de comparacin cuando
cuenta ascendentemente, pone en
uno OCnA/OCnB en modo
comparacin cuando cuanta
descendentemente.
1 1 Pone en uno OCnA/OCnB en el
Punto de comparacin cuando
cuenta ascendentemente, pone en
cero OCnA/OCnB en Punto de
comparacin cuando cuanta
descendentemente.


Bit 1:0 WGMn1:0: Modo Generador de Forma de Onda (Cuadrada)
Combinado con los bits WGMn3:2 encontrados en el registro TCCRnB, estos
bits controlan la secuencia de conteo del contador, La fuente para el mximo
valor del contador (TOP), y que tipo de generacin de forma de onda va hacer
usada. Los Modos de operacin soportador por el Timer/Contador unitario
son: Modo Normal (Contador), Modo de Seteo del timer en el punto de
comparacin (CTC) y tres tipos de modos de modulador de ancho de Pulso
(PWM).

Descripcin de bits en Modo Generador de Forma de Onda
Mo
do
WG
Mn3
WG
Mn2
(CTC
n)
WGM
n1
(PWM
n1)
WGM
n0
(PWM
n0)
Modo de
Operacin
Timer/Con
tador
TOP Actualiza
cin
OCRnX
Encen
der
bande
ra
TOVn
0 0 0 0 0 Normal 0xFF
FF
Inmediat
o
0xFF
1 0 0 0 1 PWM, Fase
Correcta, 8
bits
0x00
FF
TOP 0X00
2 0 0 1 0 PWM, Fase
Correcta, 9
bits
0x01
FF
TOP 0X00
3 0 0 1 1 PWM, Fase
Correcta,
10 bits
0x03
FF
TOP 0X00
4 0 1 0 0 CTC OCR
nA
Inmediat
o
0xFF
5 0 1 0 1 Rpida
PWM, 8
bits
0x00
FF
0X00 TOP
6 0 1 1 0 Rpida
PWM, 9
bits
0x01
FF
0X00 TOP
7 0 1 1 1 Rpida
PWM, 10
bits
0x03
FF
0X00 TOP
8 1 0 0 0 PWM, Fase
y
Frecuencia
Correcta
ICRn 0X00 0X00
9 1 0 0 1 PWM, Fase
y
Frecuencia
Correcta
OCR
nA
0X00 0X00
10 1 0 1 0 PWM, Fase
y Correcta
ICRn TOP 0X00
11 1 0 1 1 PWM, Fase
y Correcta
OCR
nA
TOP 0x00
12 1 1 0 0 CTC ICRn Inmediat
o
0xFF
13 1 1 0 1 (Reservado
)
- - -
14 1 1 1 0 Rpida
PWM
ICRn 0x00 TOP
15 1 1 1 1 Rpida OCR 0x00 TOP
PWM nA

TOP: Punto mximo de comparacin


15.11.2 TCCR1B Registro d Control B Timer/Contador1


Bit 7 ICNCn: Salida con Captura y Cancelacin del Ruido
Colocando estos bits en uno se activa el Modo de Salida con captura y
cancelacin del ruido. Cuando la cancelacin del ruido es activado, la entrada
desde el pin de Captura de entrada (ICPn) se encarga de filtrar. El
funcionamiento del filtro requiere de cuatro valores iguales sucesivos en el pin
ICPn para efectuar cambios a la salida. La Captura a la entrada tiene una
demora de cuatro ciclos del oscilador cuando es habilitada la cancelacin de
ruido.

Bit 6 ICESn: Selector de Flanco de captura a la entrada
Este bit selecciona el flanco en el pin de Captura de entrada (ICPn), que suele
disparar el evento de captura. Cuando el bit ICESn esta escrito a cero, el flanco
negativo es usado como disparo, y cuando el bit ICESn esta escrito a uno, el
flanco positivo disparara la captura.
Cuando la captura es disparada de acuerdo a la programacin del ICESn, el
valor del contador es copiado en el registro de Captura a la entrada (ICEn). El
evento tambin pone en uno la bandera de captura a la entrada (ICFn), y esto
puede causar la interrupcin de captura a la entrada, si esta interrupcin es
habilitada.
Cuando el ICRn es usado como valor TOPE (ver la descripcin de los bits
WGMn3:0 localizados en los registros TCCRnA y el TCCRnB), el ICOn es
desconectado y consecuentemente la funcin de la entrada como captura es
deshabilitada.

Bit 5 Bits Reservados
Este bit es reservado para usos futuros. Para asegurar la compatibilidad con
futuros dispositivos, este bit puede ser escrito en cero cuando TCCRnB es
escrito.

Bit 4:3 WGMn3:2: Modo Generador de Forma de Onda (Cuadrada)
Ver la descripcin del registro TCCRnA

Bit 2:0 CSn2:0: Seleccin del Reloj
Tres fuentes de seleccin de bits para el reloj pueden ser usadas por el
Timer/Contador

Descripcin de Bits para seleccin del Reloj
CSn2 CSn1 CSn0 Descripcin
0 0 0 Sin fuente de Reloj(Timer/Contador parados)
0 0 1 Clk E/S (Sin prescalador)
0 1 0 Clk E/S /8(Prescalador)
0 1 1 Clk E/S /64(Prescalador)
1 0 0 Clk E/S /256(Prescalador)
1 0 1 Clk E/S /1024(Prescalador)
1 1 0 Fuente de Reloj Externo pin Tn. Reloj con flanco de
bajada
1 1 1 Fuente de Reloj Externo pin Tn. Reloj con flanco de
subida



Si los modos externos la pin son usados por el Timer/Contador, las
transiciones en el pin Tn sern contadas por el contador incluso si el pin es
configurado como una salida.

15.11.3 TCCR1C Registro de Control C Timer/Contador1

Bit 7 FOCnA: Comparacin Forzada a la Salida para el Canal A

Bit 6 FOCnB: Comparacin Forzada a la Salida para el Canal B
Los bits FOCnA/FOCnB son nicamente activados cuando los bits WGMn3:0
estn especificados en el Modo no PWM. Sin embargo para asegurar la futura
compatibilidad con dispositivos, estos bits deben pasar de uno a cero cuando
TCCRnA es escrito cuando se encuentra operando en modo PWM. Cuando se
escribe uno lgico en el bit FOCnA/FOCnB, e inmediatamente la comparacin
en el punto es forzada en la generacin unitaria de forma de onda. Los bits
FOCnA/FOCnB son implementados como habilitadores. Por consiguiente esto
es el valor del bit COMnx1:0 que determina el efecto de la comparacin
forzada.
La habilitacin del FOCnA/FOCnB no genera ninguna interrupcin ni limpia el
timer en el modo punto de comparacin (CTC) usando OCRnA como valor
tope. Los bits FOCnA/FOCnB son siempre ledos como cero.


15.11.4 TCNT1H y TCNT1L Timer/Counter1




Las dos localidades Timer/Contadores E/S (TCNTnH y TCNTnL, combinando
TCNTn)) brindan acceso directo, ambos para leer y escribir operaciones, para el
Timer/Contador uno 16-bits. Asegrese que en ambos los bytes en alto y bajo
sean ledo y escritos simultneamente cuando se accede a los registros del CPU,
el acceso es realizado usando temporalmente 8-bits en alto del registro (TEMP).
Este registro temporal es compartido por todos los otros 16-bits Registrados.
Modificando el contador (TCNTn) mientras la cuenta esta corriendo introduce
el riesgo de perder la comparacin entre TCNTn y uno de los registros OCRnx.
Escribiendo en los registros (TCNTn) el punto de comparacin en el siguiente
ciclo de mquina para todas las comparaciones unitarias.

15.11.5 OCR1AH y OCR1AL Registros de Comparacin de Salida 1 A


15.11.6 OCR1BH y OCR1BL Registros de Comparacin de Salida 1 B


Los registros de comparacin de salida contienen 16-bits cuyo valor es
continuamente comparado con el valor del contador (TCNTn). A match puede
ser usado para generar una interrupcin por comparacin a la salida, o generar
una forma de onda a la salida en el pin OCnx. Los registros de comparacin de
salida son de tamao 16-bits. Para asegurar que en ambos los bytes altos y bajos
son escritos simultneamente con la escritura del los registros en el CPU, el
acceso es realizado usando 8 bits temporales en alto (TEMP). Estos registros
temporales son compartidos por otros registros de 16 bits.

15.11.7 ICR1H y ICR1L Registro de Captura de Entrada 1

La Captura de entrada es actualizada con el valor del contador (TCNTn) cada
vez que un evento ocurre en el pin ICP (opcionalmente para la salida del
Comparador para el Timer/Contador1). La captura a la entrada puede ser
usada para definir el valor tope de l contador. El registro de Captura a la
entrada es de 16 bits. Para asegurar que ambos bytes en alto y en bajo sean
ledos simultneamente cuando se accede a los registros del CPU, el acceso es
continuamente usado con un registro en alto de un byte (TEMP). Estos registros
temporales son compartidos por todos los otros registros de 16-bits.

15.11.8 TIMSK1 Registro Mascara de Interrupcin Timer/Counter1


Bit 7:6 Res: Bits Reservados
Estos bits no son usados en el ATmega164P/324P/644P, y siempre estn
escritos como cero.


Bit 5 ICIE1: Habilitacin de Interrupcin a la entrada Timer/Counter1
Cuando este bit es escrito con uno, y la bandera I en el registro de Estado es uno
(Interrupciones Globales habilitadas), la interrupcin de captura a la salida
Timer/Contador1 es habilitada. El correspondiente vector de interrupcin es
ejecutado cuando la bandera ICF1, localizada en TIFR1, es uno.

Bit 4:3 Res: Bits Reservados
Estos bits no son usados en el ATmega164P/324P/644P, y siempre estn
escritos como cero.

Bit 2 OCIE1B: Salida de Comparacin B, habilitacin del punto de
interrupcin Timer/Counter1
Cuando este bit es escrito con uno, y la bandera-I en el registro de Estado es
uno (Interrupciones globales habilitadas). La Salida de Comparacin B, y el
punto de interrupcin Timer/Counter1 es habilitado. El correspondiente vector
de interrupcin es ejecutado cuando la bandera OCF1B, localizada en TIRF1, es
uno.

Bit 1 OCIE1A: Salida de Comparacin A, habilitacin del punto de
interrupcin Timer/Counter1
Cuando este bit es escrito con uno, y la bandera-I en el registro de Estado es
uno (Interrupciones globales habilitadas). La Salida de Comparacin A, y el
punto de interrupcin Timer/Counter1 es habilitado. El correspondiente vector
de interrupcin es ejecutado cuando la bandera OCF1A, localizada en TIRF1, es
uno.

Bit 0 TOIE1: Habilitacin de la Interrupcin por Desbordamiento
Timer/Counter1
Cuando este bit es escrito con uno, y la bandera-I en el registro de Estado es
uno (Interrupciones globales habilitadas). La Interrupcin por desbordamiento
Timer/Counter1 es habilitado. El correspondiente vector de interrupcin es
ejecutado cuando la bandera TOV1, localizada en TIRF1, es uno.


15.11.9 TIFR1 Registro de Banderas de Interrupcin Timer/Counter1



Bit 7:6 Res: Bits Reservados
Estos bits no son usados en el ATmega164P/324P/644P, y siempre estn
escritos como cero.

.
Bit 5 ICF1: Bandera de Captura a la Entrada Timer/Counter1
Esta bandera es uno cuando ocurre un evento de captura en el pin ICP1:
Cuando el registro de captura de entrada (ICR1) es uno por el WGMn3:0 puede
ser usada como el valor tope, la bandera ICF1 es uno cuando el contador
alcanza el valor tope.
ICF1 es automticamente limpiado cuando le vector de interrupcin de captura
a la entrada es ejecutado. Alternativamente, ICF1 puede ser limpiado por
escritura de uno lgico en la localidad del bit.



Bit 4:3 Res: Bits Reservados
Estos bits no son usados en el ATmega164P/324P/644P, y siempre estn
escritos como cero.

Bit 2 OCF1B: Bandera de Comparacin a la salida B Timer/Counter1
Esta bandera es uno en el tiempo de ciclo de maquina despus del valor del
contador (TCNT1) del registro de comparacin de salida B (OCR1B).
Note que una Comparacin forzada a la salida (FOC1B) no habilitara la bandera
OCF1A.
OCF1A es automticamente limpiada cuando es ejecutado el vector de
interrupcin por comparacin a la salida B.
Alternativamente, OCF1B puede ser limpiada escribiendo uno lgico en la
localidad de este bit.

Bit 1 OCF1A: Timer/Counter1, Output Compare A Match Flag
Esta bandera es uno en el tiempo de ciclo de maquina despus del valor del
contador (TCNT1) del registro de comparacin de salida A (OCR1A).
Note que una Comparacin forzada a la salida (FOC1A) no habilitara la
bandera OCF1A.
OCF1A es automticamente limpiada cuando es ejecutado el vector de
interrupcin por comparacin a la salida A.
Alternativamente, OCFA puede ser limpiada escribiendo uno lgico en la
localidad de este bit.


Bit 0 TOV1: Timer/Counter1, Overflow Flag
La programacin de esta bandera es dependiente del bit WGMn3:0. En Modo
normal y CTC, la bandera TOV1 es uno cuando el timer se desborda. TOV1 es
automticamente limpiado cuando el vector de Interrupcin por
desbordamiento del Timer/Contador1 es ejecutado. Alternativamente, TOV1
puede ser limpiado por escritura de uno lgico en la localidad de este bit.

















16. TIMER/COUNTER2 CON PWM Y OPERACIN
ASINCRNICA A 8-BITS

Simple Canal Contador
Recarga Automtica en los modos Clear Timer y Punto de Comparacin
(Compare Match).
Modulador de Ancho de Pulso en Fase Correcta (PWM)
Generador de frecuencias
Prescalador del reloj a 10bits
Fuente de Comparacin de Interrupciones y desbordamiento (TOV2, OCF2A
y OCF2B)
Permite trabajar con un Cristal externo de 32 KHz independientemente de la
seal de reloj interna.

VISIN GENERAL
El Timer/Counter2 es un mdulo de propsito general, de un solo canal y es de
8 bits.
A Continuacin se muestra el diagrama en bloque del Timer/Counter2 de 8
bits.








16.7 Modos de Operacin

El modo de Operacin por ejemplo el comportamiento de los pines del
Timer/Counter y de la Salida de comparacin (Output Compare), estn
definidos por la combinacin del Modo de generacin de Formas de Onda
(WGM22:0) y el Modo de Comparacin de Salida COM2x1:0. Los bits del Modo
de Comparacin de Salida no afectan la secuencia de conteo, mientas se ejecuta
el modo de Generacin de Formas de Onda. Los bits COM2x1:0 controlan si la
salida generada del PWM est invertida o no.
Para el modo de no PWW los bits COM2x1:0 controlan si la salida debe ser
puesta en uno, limpiada, o invertida en el punto de comparacin.



16.7.1 Modo Normal

El modo ms simple de operacin es el Modo Normal (WGM22:0 = 0). En este
modo la direccin del contador siempre se encuentra incrementando, y el
contador no se pone en cero. El contador simplemente deja de contar con un
valor mximo a 8 bits (TOP=0xFF) y luego inicia desde tope bajo (0x00). En
operacin normal la Bandera de desbordamiento del Timer/Contador sern
uno al mismo tiempo que el ciclo de mquina como el TCNT2 llegan a ser cero.
La bandera TOV2 en este caso se comporta como un noveno bit, excepto que
est solo en uno. Sin embargo, combinado con la interrupcin de
desbordamiento del timer que automticamente limpia la bandera TOV2, la
resolucin del timer puede incrementarse por software. No hay casos especiales
a considerar en el Modo Normal, el valor del nuevo contador puede ser escrito
a cualquier instante.
La salida de comparacin unitaria puede ser usada para generar interrupciones
en algn tiempo dado. Usar la salida de comparacin para generar Formas de
Onda en modo Normal no es recomendada, ya que ocupa mucho tiempo en el
CPU.


16.7.2 Modo Clear Timer y Punto de Comparacin (CTC)
En el modo Clear Time y Punto de Comparacin o CTC (WGM22:0 = 2), el
registro OCR2A es usado para manipular la resolucin del contador. En el
modo CTC el contador es puesto en cero cuando el valor del contador (TCNT2)
se combina con el OCR2A. El OCR2A define el valor mximo del contador, por
lo tanto tambin su resolucin. Este modo permite un control ms grande de la
frecuencia de salida en el punto de comparacin. Estos tambin simplifica la
operacin de contador de eventos externos.

El diagrama de tiempos para el CTC se muestra a continuacin. El valor de
contador (TCNT2) incrementa mientras ocurre una comparacin entre TCNT2 y
OCR2A, y el contador (TCNT2) es limpiado.




Una interrupcin puede ser generada cada vez que el valor del contador llega al
mximo valor usando la bandera del OCF2A. Si la interrupcin es habilitada, la
rutina de interrupcin puede ser usada para actualizar el valor mximo. Sin
embargo, cambia de valor mximo a la direccin 0x00 cuando el contador est
corriendo sin ningn prescalador o con valores bajos de prescalador, el valor
debe ser tomado con cuidado ya que el modo de CTC no tiene una caracterstica
de doble buffer. Si el nuevo valor escrito en el OCR2A es ms bajo que el valor
corriente del TCNT2, el contador perder el punto de comparacin. El contador
entonces contar hasta su mximo valor (0xFF) y vuelve a empezar desde la
direccin 0x00 antes de que ocurra un punto de comparacin.
Para generar formas de ondas cuadradas a la salida en el Modo CTC, la salida
del OC2A puede estar en uno o invertido su valor lgico en cada punto de
comparacin por los bits del Modo Comparador de Salida (COM2A1:0 = 1). El
valor del OC2A no debe ser visible en los pines del prtico a menos que la
direccin del dato del pin de salida est en uno. La forma de Onda cuadrada
generada tendr una frecuencia mxima de fOC2A = fclk_I/O/2 cuando
OCR2A es puesto en la direccin (0x00). La frecuencia de la forma de onda est
definida por la siguiente ecuacin:


La variable N representa el factor del prescalador (1, 8, 32, 64, 128, 256, o 1024).
En cuanto al modo Normal de operacin, la bandera del TOV2 es seteada en el
mismo ciclo del reloj del timer cuando el contador cuenta del mximo valor a la
direccin 0x00.

16.7.3 Modo de Rpida PWM
El modo de Rpida PWM (WGM02:0=3 o7) proporciona una opcin de
generacin de forma de onda PWM a alta frecuencia. La rpida PWM difiere de
otra opcin de PWM por la simple pendiente de operacin (diente de sierra). El
contador cuenta desde el 0x00 hasta el Tope luego inicia desde 0x00. El tope es
definido como 0xFF cuando WGM2:0 = 3, y OCR0A cuando WGM2:0 = 7. En
Modo de comparacin de salida no invertido, la salida de comparacin (OCOx)
es limpiada en el punto de comparacin entre TCNT0 y OCR0x, y pone en uno
a la direccin 0x00. En Modo de Comparacin de salida Invertida, la salida es
puesta en uno en el punto de comparacin y es limpiada en la direccin 0x00,
en simple pendiente de operacin, la frecuencia de operacin en modo rpida
PWM puede estar dos veces en alto como en el modo de fase correcta PWM
que usa doble pendiente de operacin (onda triangular). Esta alta frecuencia
hace que el modo Rpida PWM pueda ser usada para reguladores de voltaje,
rectificadores, y aplicaciones DAC. Para alta frecuencia se tiene fsicamente
pequeos tamaos de componentes externos (capacitores), y reduce el costo
total del sistema.



Diagrama de Tiempos en Modo Rpida PWM

La bandera de desbordamiento (TOV2) del Timer/Contador es puesta en uno
cada vez que la cuenta llega al Tope. Si la interrupcin es habilitada, la rutina de
interrupcin puede ser usada para actualizar el valor de comparacin. En modo
de Rpida PWM, la comparacin unitaria permite la generacin de formas de
onda PWM en el pin OC2x. Configurando los bits del COM2x1:0 a dos
producirn una PWM no invertida y una PWM invertida de salida q puedes ser
generada por configuracin del COM2x1:0 con tres: Configurando los bits
COM2A1:0 con uno permitiendo la inversin del pin OC0A en el punto de
comparacin si el bit WGM22 es uno. Esta opcin no es valida para el pin
OC2B. El valor actual OC2x solo ser visible en el pin del prtico si la direccin
del dato para el pin del prtico es uno como salida. La forma de onda PWM es
generada por la configuracin del registro OC2x al tiempo que el contador del
ciclo de mquina es limpiado (cambio desde el Tope hasta 0x00). La frecuencia
para la salida de la PWM puede ser calculada por la siguiente ecuacin:
256
/
N
f
f
o I clk
OCnxPWM
=
La variable N representa el factor prescalador (1,8, 64, 256 o1024). El valor
extremo para el OCR0A es igual a uno en 0X00, la salida ser un pico estrecho
para cada MAX+1 del ciclo de mquina del reloj. Configurando el OCR2A igual
al MAX (0xFF)) resulta una constante en alto o bajo de la salida (dependiendo
de la polaridad de la salida ser uno por los bits COM2A1:0). A frecuencia (50
%) salida de la forma de onda en Modo de Rpida PWM puede archivado por
la configuracin del OC2x para invertir esto con un nivel lgico en cada punto
de comparacin (COM2x1:0 = 1). La generacin de la forma de onda tendr una
mxima frecuencia de = fclk_I/O/2 cuando OCR2A va de uno a cero. Esta
caracterstica es similar al del OC2A invertido en modo CTC, excepto a la
caracterstica del doble buffer de la comparacin a la salida el uno es el
habilitador del modo de Rpida PWM


16.7.4 Modo de Fase Correcta del PWM
El Modo de Fase Correcta de PWM (WGM22:0 = 1 o 5) provee una alta
resolucin en la opcin para la Generacin de Formas de Ona de fase correcta.
El Modo de operacin de fase correcta est basado en la operacin dual-slope
(onda triangular).
El contador cuenta repetidamente desde el valor mnimo 0x00 hasta el valor
mximo y desde el valor mximo al valor mnimo. El valor mximo est
definido como 0x00 cuando WGM22:0=1 y cuando MGM22:0=5. En Modo de
comparacin no invertida, la comparacin de salida (OC2x) es limpiada en el
punto de comparacin entre TCNT2 y OCR2x mientras cuenta
ascendentemente y pone uno mientras el punto de comparacin cuanta hacia
abajo. En el Modo de comparacin invertida, la operacin es invertida. La
operacin dual-slope tiene una frecuencia de operacin ms baja que la
mxima en simple operacin slope. Sin embargo, debido a los modos de
simetra de la pendiente doble de PWM, estos modos son preferidos para
aplicaciones de control de motor.
En fase correcta de PWM el contador es incrementado mientras el valor del
contador llega a su valor mximo. Cuando el contador alcanza su valor
mximo, este contador cambia de direccin. El valor del TCNT2 ser igual al
valor mximo para un ciclo de mquina del Timer.
En la figura siguiente se muestra el diagrama de tiempos para el modo de
operacin Correcta PWM para ilustrar la operacin dual slope (doble
pendiente). El diagrama incluye las salidas invertidas y no invertidas del PWM.
La lnea pequea horizontal marcada en el TCNT2 representa comparacin
entre OCR2x y TCNT2.





La bandera de desbordamiento del Timer/Counter (TOV2) es puesta en uno
cada vez que el contador llega a su valor mnimo (0x00).
La bandera de interrupcin puede ser usada para generar un tiempo de
interrupcin cada vez que contador llega al valor mnimo.
En Modo de Fase Correcta, la unidad de comparacin permite generar formas
de onda cuadrada de PWM en el pin OC2x. Configurando los dos bits
COM2x1:0 como dos en binario producir una PWM no invertida. Una salida
de PWM invertida puede ser generada configurando los dos bits COM2x1:0
como tres en binario. El valor mximo es definido como 0xFF cuando
WGM2:0=3, y cuando MGM2:0=7.

El valor actual del OC2x no debe ser visible en los pines del prtico a menos
que la direccin del dato del pin de salida est en uno. La forma de Onda
cuadrada por el registro OC2x en el punto de comparacin entre OCR2x y
TCNT2 cuando ocurren incrementos. La frecuencia de la PWM en Modo de
Fase Correcta puede ser calculada por la siguiente ecuacin:



La variable N representa el factor del prescalador (1, 8, 32, 64, 128, 256, o 1024).
Los valores extremos para el Registro OCR2A representa casos especiales
cuando genera una forma de onda cuadrada de salida PWM cuando est en
modo de fase correcta. Si el pin OCR2A es igual que el valor mnimo, la salida
estar continuamente en bajo y si es igual al valor mximo la salida
permanecer en alto para Modo no invertido de la PWM. Para la salida de la
PWM invertida se tendr valores de niveles lgicos opuestos.
En el inicio del segundo periodo de la figura anterior en OCnx se tiene una
transicin de alto a bajo siempre y cuando no este en Punto de Comparacin. El
punto de esta transicin es para garantizar simetra cerca del valor mnimo.
Existen dos casos para dar una transicin sin Punto De Comparacin.

Cuando el OCR2A cambia su valor mximo como en la figura anterior. Cuando
el valor del OCR2A es el mximo, el valor del pin OCn es igual como resultado
de la cuenta descendente en el Punto de Comparacin. Para asegurar la simetra
en la parte inferior el valor del OCn debe corresponder al resultado de la cuenta
ascendente en el punto de Comparacin.

El timer empieza a contar desde un valor mas alto que el uno en el OCR2A, y
por esta razn se pierde el Punto de Comparacin y por lo tanto el ONc cambia
si hubiese contado ascendentemente.

16.11 DESCRIPCION DE REGISTROS

TCCR2A Timer/Counter Control Register A



Bits 7:6 COM2A1:0: Modo A Comparacin de Salida

Estos bits controlan el comportamiento del pin (OC2A) de comparacin. Si uno
o ambos bits COM2A1:0 son uno, las salidas del OC2A se ponen en modo de
funcionamiento normal haciendo que se conecten los pines de entrada y salida.
Sin embargo, note que el bit OC2A que corresponde al registro de direccin de
datos (DDR) debe estar en uno para habilitar el controlador de salida.

Cuando OCA2 es conectado al pin, la funcin de los bits COM2A1:0 dependen
de la configuracin de los bits WGM22:0. La siguiente tabla muestra la
funcionalidad de los bits COM2A1:0 cuando los bits WGM22:0 estn en uno
para un modo normal o CTC (no PWM).


Tabla: Modo de Comparacin de Salida (no PWM)

COM2A1 COM2A0 Descripcin
0 0 Modo de Operacin Normal, OC0A desconectado
0 1 Inversin del OC2 en Punto de Comparacin (Compare
Match)
1 0 Pone cero el OC2 en Punto de Comparacin (Compare
Match)
1 1 Pone uno el OC2 en Punto de Comparacin (Compare
Match)

La siguiente tabla muestra la funcionalidad de los bits COM2A1:0 cuando el
WGM21:0 estn en uno para un Modo Rpido de PWM.
Tabla: Modo de Comparacin de Salida (Modo de Rpida PWM)

COM2A1 COM2A0 Descripcin
0 0 Modo de Operacin Normal, OC2A desconectado
0 1 WGM22=0: Modo de operacin Normal, OC0A
desconectado
WGM22=1: Inversin del OC2A en Punto de
Comparacin (Compare Match).
1 0 Pone cero el OC2A en Punto de Comparacin (Compare
Match). Pone uno la parte inferior de OC2A.
1 1 Pone uno el OC2A en Punto de Comparacin (Compare
Match). Pone cero la parte inferior de OC2A

La siguiente tabla muestra la funcionalidad de los bits COM2A1:0 cuando el
WGM22:0 estn en uno para un Modo en Fase correcta del PWM.
Tabla: Modo de Comparacin de Salida (Modo en Fase Correcta PWM)

COM2A1 COM2A0 Descripcin
0 0 Modo de Operacin Normal, OC2A desconectado
0 1 WGM22=0: Modo de operacin Normal, OC2A
desconectado
WGM22=1: Inversin del OC2A en Punto de
Comparacin Compare Match
1 0 Pone cero el OC2A en Compare Match, Pone uno la
parte inferior de OC2A en cuenta descendente
1 1 Pone uno el OC2A en Compare Match, Pone cero la
parte inferior de OC2A en cuenta descendente

Bits 5:4 COM2B1:0: Modo B Comparacin de Salida
Estos bits controlan el comportamiento del pin (OC2B) de comparacin. Si uno
o ambos bits COM2B1:0 son uno, las salidas del OC2B se ponen en modo de
funcionamiento normal haciendo que se conecten los pines de entrada y salida.
Sin embargo, note que el bit OC2B que corresponde al registro de direccin de
datos (DDR) debe estar en uno para habilitar el controlador de salida.
Cuando OC2B es conectado al pin, la funcin de los bits COM2B1:0 dependen
de la configuracin de los bits WGM22:0. La siguiente tabla muestra la
funcionalidad de los bits COM2B1:0 cunado los bits WGM22:0 estn en uno
para un modo normal o CTC (no PWM).
Tabla: Modo de Comparacin de Salida (no PWM)

COM2B1 COM2B0 Descripcin
0 0 Modo de Operacin Normal, OC0B desconectado
0 1 Inversin del OC2B en Punto de Comparacin
(Compare Match).
1 0 Pone cero el OC2B en Punto de Comparacin (Compare
Match).
1 1 Pone uno el OC2B en Punto de Comparacin (Compare
Match).

La siguiente tabla muestra la funcionalidad de los bits COM2B1:0 cuando el
WGM21:0 estn en uno para un Modo Rpido de PWM.
Tabla: Modo de Comparacin de Salida (Modo de Rpida PWM)

COM2B1 COM2B0 Descripcin
0 0 Modo de Operacin Normal, OC2B desconectado
0 1 WGM22=0: Modo de operacin Normal, OC0B
desconectado
WGM22=1: Inversin del OC2B en Punto de
Comparacin (Compare Match).
1 0 Pone cero el OC2B en Punto de Comparacin (Compare
Match), Pone uno la parte inferior de OC2B.
1 1 Pone uno el OC2B en Punto de Comparacin (Compare
Match), Pone cero la parte inferior de OC2B.
La siguiente tabla muestra la funcionalidad de los bits COM2B1:0 cuando el
WGM22:0 estn en uno para un Modo en Fase correcta del PWM.

Tabla: Modo de Comparacin de Salida (Modo en Fase Correcta PWM)
COM2B1 COM2B0 Descripcin
0 0 Puerto de Operacin Normal, OC2B desconectado
0 1 WGM22=0: Puerto de operacin Normal, OC2B
desconectado
WGM22=1: Inversin del OC2B en Compare Match
1 0 Pone cero el OC2B en Compare Match, Pone uno la
parte inferior de OC2B en cuenta descendente
1 1 Pone uno el OC2B en Compare Match, Pone cero la
parte inferior de OC2B en cuenta descendente

Bits 3:2 RES: Bits Reservados
Estos bits son bits reservados en el ATmega164P/324P/644P y siempre se
leern como cero.

Bits 1:0 WGM21:0: Modo de Generacin de Formas de Onda Cuadrada.

Conjuntamente con el bit WGM22 que se encuentra en el registro TCCR2B,
estos bits controlan la secuencia del contador, la fuente para un valor de
contador mximo (TOP) y el tipo de forma de onda generada para ser usada ver
en la tabla siguiente:


Modo de descripcin del bit Generador De Formas de Onda Cuadrada
Mod
o
WGM
2
WGM
1
WGM
0
Modo de
Operacin
Timer/Coun
ter
Valor
Mxim
o
(TOP)
Actualizaci
n
Del OCRx

TOV
Encend
er
bander
a
(1)(2)

0 0 0 0 Normal 0XFF Inmediato MAX
1 0 0 1 Modo Fase
Correcta
(PWM)
0XFF TOP
2 0 1 0 CTC OCRA Inmediato MAX
3 0 1 1 Rpida
PWM
0XFF BOTTON MAX
4 1 0 0 Reservado - - -
5 1 0 1 Modo Fase
Correcta
(PWM)
OCRA TOP BOTTO
N
6 1 1 0 Reservado - - -
7 1 1 1 Rpida
PWM
OCRA BOTTON TOP

Notas: 1. MAX=0XFF (Valor mximo)
2.BOTTON=0x00 (Valor mnimo)

Los Modos de operacin que soporta la unidad Timer/Counter son: Modo
normal (Counter), Modo Clear Time y Punto de Comparacin (Compare Match
(CTC)), y dos modos para la Modulacin de Ancho de Pulso (PWM).


16.11.2 TCCR2B Timer/Counter Control Register B


Bit 7 FOC2A: Comparacin Forzada de Salida A

El bit FOC2A es activado solo cuando los bits del WGM especifican un modo no
PWM. Sin embargo, para asegurar la compatibilidad con el dispositivo futuro,
este bit debe cambiar de uno a cero cuando TCCR2B es escrito cuando la
operacin est en Modo PWM.

Cuando se escribe un uno lgico en el bit FOC2A, una comparacin inmediata
es forzada en la unidad de Generacin de Formas de Onda Cuadradas. La
salida del OC2A es cambiada de acuerdo a la configuracin de los bits del
COM2A1:0. Note que el bit FOC2A es implementado como un habilitador.

Por lo tanto este es el valor presente en los bits COM2A1:0 que determinan los
efectos de la comparacin forzada. Una habilitacin del FOC2A no genera
cualquier interrupcin, no limpiar el Timer en el modo CTC usando el
OCR2A como valor mnimo. El bit FOC2A siempre se lee como cero.

Bit 6 FOC2B: Comparacin Forzada de Salida B

El bit FOC2B esta activo solo cuando los bits del WGM estn especificados en
modo de no PWM. Sin embargo, para asegurar la compatibilidad con el
dispositivo futuro, este bit debe cambiar de uno a cero cuando TCCR2B es
escrito cuando la operacin est en Modo PWM.
Cuando se escribe un uno lgico en el bit FOC2B, una comparacin inmediata
es forzada en la unidad de Generacin de Formas de Onda. La salida del OC2B
es cambiada de acuerdo a la configuracin de los bits del COM2B1:0. Note que
el bit FOC2B es implementado como un habilitador.

Por lo tanto este es el valor presente en los bits COM2B1:0 que determinan los
efectos de la comparacin forzada. Una habilitacin del FOC2B no genera
cualquier interrupcin, no limpiar el Timer en el modo CTC usando el OCR2B
como valor mnimo. El bit FOC2B siempre se lee como cero.

Bits 5:4 Res: Bits Reservados

Estos bits son bits reservados en el ATmega164P/324P/644P y siempre se
leern como cero.
Bit 3 WGM22: Modo de generacin de Formas de Onda
Ver la descripcin en el Registro A Timer/Counter.

Bit 2:0 CS22:0: Seleccin Del Reloj
Los tres bits para la seleccin del reloj, seleccionan la fuente del reloj para ser
usado por el Timer/Counter.

Descripcin de los bits selectores para el Reloj
CS22 CS21 CS20 Descripcin
0 0 0 Sin Fuente del reloj (Timer/Counter detenido)
0 0 1 ClkT2S/(Sin Prescalador)
0 1 0 ClkT2S/8 (Del Prescalador)
0 1 1 ClkT2S/32 (Del Prescalador)
1 0 0 ClkT2S/64 (Del Prescalador)
1 0 1 ClkT2S/128 (Del Prescalador)
1 1 0 ClkT2S/256 (Del Prescalador)
1 1 1 ClkT2S/1024 (Del Prescalador)


Si los pines en modo externo son usados para el Timer/Counter, las
transiciones en el pin T0 del reloj contarn siempre y cuando el pin sea
configurado como una salida. Este elemento permite controlar por software el
contador.

16.11.3 TCNT2 Registro Timer/Counter


El registro Timer/Counter brinda un acceso directo, ambos para operacin de
lectura y escritura para la unidad de 8 bits del Timer/Counter.

Al escribir en el Registro TCNT2 remueve el punto de comparacin al siguiente
tiempo del reloj. Al modificar el contador TCNT2 cuando est activado
(corriendo), introduce el riesgo de perder la comparacin entre los registros
TCNT2 y el OCR2x.

16.11.4 OCR2A Registro de Comparacin de Salida A


El registro de comparacin de salida A contiene un valor de 8 bits que estn
continuamente comparndose con el valor del contador (TCNT2). Este modo
puede ser usado para generar una Comparacin de Interrupcin a la salida o
para generar formas de onda cuadrada a la salida del pin OC2A.



16.11.5 OCR2B Registro de Comparacin de Salida B


El registro de comparacin de salida B contiene un valor de 8 bits que estn
continuamente comparndose con el valor del contador (TCNT2). Este modo
puede ser usado para generar una Comparacin de Interrupcin a la salida o
para generar formas de onda cuadrada a la salida del pin OC2B.

16.11.6 ASSR Registro de Estado Asincrnico


Bit 6 EXCLK: Habilitacin de la Entrada de Reloj

Cuando el bit EXCLK es puesto a uno y el reloj asincrnico es seleccionado, el
buffer en la entrada del reloj externo es habilitada y por el pin de Reloj
Oscilador 1 (Timer Oscilador TOSC1) puede ser ingresado un reloj externo en
ver de un cristal de 32Khz.
El bit EXCLK debera ser escrito antes de que una operacin asincrnica es
seleccionada. Note Que el cristal del Oscilador solo correr cuando este bit es
cero.


Bit 5 AS2: Timer/Counter2 Asincrnico

Cuando el bit AS2 es puesto en cero, el Timer / Counter2 es registrado desde el
reloj de E/S, clk I/O. Cuando el bit AS2 es puesto en uno, el Timer / Counter2
es registrado desde el Oscilador del Cristal conectado al pin de Reloj Oscilador
1 (Timer Oscilador TOSC1). Cuando el valor del AS2 es cambiado, el contenido
del TCNT2, OCR2A,OCR2B, TCCR2A y TCCR2B puede ser modificado.



Bit 4 TCN2UB: Actualizacin de Espera del Timer/Counter2

Cuando se encuentra en operacin asincrnica el Timer/Counter2 y es escrito el
TCNT2, este bit llega a ser uno.
Cuando el TCNT2 ha sido actualizado desde el registro de almacenamiento
temporal, este bit es limpiado por hardware.
Un cero lgico en este bit indica que el TCNT2 est listo para ser actualizado
con un nuevo valor.


Bit 3 OCR2AUB: Registro Comparador de Actualizacin de Espera de
Salida 2
Cuando se encuentra en operacin asincrnica el Timer/Counter2 y es escrito el
OCR2A, este bit llega a ser uno.
Cuando el OCR2A ha sido actualizado desde el registro de almacenamiento
temporal, este bit es limpiado por hardware.
Un cero lgico en este bit indica que el OCR2A est listo para ser actualizado
con un nuevo valor.


Bit 2 OCR2BUB: Registro Comparador de Actualizacin de Espera de
Salida 2

Cuando se encuentra en operacin asincrnica el Timer/Counter2 y es escrito el
OCR2B, este bit llega a ser uno.
Cuando el OCR2B ha sido actualizado desde el registro de almacenamiento
temporal, este bit es limpiado por hardware.
Un cero lgico en este bit indica que el OCR2B est listo para ser actualizado
con un nuevo valor.

Bit 1 TCR2AUB: Registro de Control de Actualizacin de Espera del
Timer/Counter2

Cuando se encuentra en operacin asincrnica el Timer/Counter2 y es escrito el
TCCR2A, este bit llega a ser uno.
Cuando el TCCR2A ha sido actualizado desde el registro de almacenamiento
temporal, este bit es limpiado por hardware.
Un cero lgico en este bit indica que el TCCR2A est listo para ser actualizado
con un nuevo valor.

Bit 0 TCR2BUB: Registro de Control de Actualizacin de Espera del
Timer/Counter2

Cuando se encuentra en operacin asincrnica el Timer/Counter2 y es escrito el
TCCR2B, este bit llega a ser uno.
Cuando el TCCR2B ha sido actualizado desde el registro de almacenamiento
temporal, este bit es limpiado por hardware.
Un cero lgico en este bit indica que el TCCR2B est listo para ser actualizado
con un nuevo valor.

Si una escritura es llevada a cabo en cualquiera de los 5 registros del
Timer/Counter2 mientras la bandera de actualizacin de espera est en uno, el
valor de la actualizacin puede ser modificado y puede causar que una
interrupcin involuntaria ocurra.

Los mecanismos de lectura del OCR2A, OCR2B, TCCR2A y TCCR2B son
diferentes. Cuando se lee el TCNT2, el valor actual del Timer es ledo. Cuando
se lee el valor del OCR2A, OCR2B, TCCR2A y TCCR2B el valor en el registro
temporal de almacenamiento es ledo.

16.11.7 TIMSK2 Registro Mscara de Interrupcin del Timer/Counter2


Bit 2 OCIE2B: Habilitacin de Interrupciones del Punto de Comparacin
B del Timer/Counter2

Cuando el bit OCIE2B es escrito a uno y el bit I en el registro de estado est en
uno, la interrupcin del Punto de comparacin del Timer/Counter2 es
habilitada. La interrupcin independiente es ejecutada si ocurre una
comparacin en el Timer/Counter2 por ejemplo cuando los bits del OCF2B
estn en uno en el Registro de las Banderas de Interrupcin del
Timer/Counter2 (TIFR2).

Bit 1 OCIE2A: Habilitacin de Interrupciones del Punto de Comparacin
A del Timer/Counter2

Cuando el bit OCIE2A es escrito a uno y el bit I en el registro de estado est en
uno, la interrupcin del Punto de comparacin del Timer/Counter2 es
habilitada. La interrupcin independiente es ejecutada si ocurre una
comparacin en el Timer/Counter2 por ejemplo cuando los bits del OCF2A
estn en uno en el Registro de las Banderas de Interrupcin del
Timer/Counter2 (TIFR2).


Bit 0 TOIE2: Habilitacin de Interrupciones para el Desbordamiento del
Timer/Counter2

Cuando el bit TOIE2 es puesto en uno y el bit I del Registro de estado est en
uno, la interrupcin para el desbordamiento del Timer/Counter2 es habilitada.
La interrupcin correspondiente es ejecutada si un desbordamiento en el
Timer/Counter2 ocurre, por ejemplo cuando el bit TOV2 est es uno en el
Registro de las Banderas de Interrupcin del Timer/Counter2 (TIFR2)



16.11.8 TIFR2 Registro de Bandera de Interrupcin del Timer/Counter2



Bit 2 OCF2B: Bandera Comparacin de salida 2 B

El bit OCF2B es puesto en uno cuando ocurre una comparacin entre el
Timer/Counter2 y el dato en el Registro Comparador de Salida OCF2B. El bit
OCF2B es limpiado por hardware cuando se ejecuta el correspondiente vector
de interrupcin.
Alternativamente, OCF2B es limpiado al escribir un uno lgico en la bandera.
Cuando el bit I en el SREG, el OCIE2B (Habilitacin de Interrupcin del
Timer/Counter2) y el OCRB2B estn en uno, se ejecuta la Interrupcin del
Timer/Counter2.


Bit 1 OCF2A: Bandera de Comparacin de Salida 2 A

El bit OCF2A es puesto en uno cuando ocurre una comparacin entre el
Timer/Counter2 y el dato en el Registro Comparador de Salida OCF2A. El bit
OCF2A es limpiado por hardware cuando se ejecuta el correspondiente vector
de interrupcin.
Alternativamente, OCF2A es limpiado al escribir un uno lgico en la bandera.
Cuando el bit I en el SREG, el OCIE2A (Habilitacin de Interrupcin del
Timer/Counter2) y el OCRB2A estn en uno, se ejecuta la Interrupcin del
Timer/Counter2.


Bit 0 TOV2: Bandera de Desbordamiento del Timer/Counter2
El bit TOV2 se pone a uno cuando ocurre un desbordamiento en el
Timer/Counter2. El bit TOV2 es limpiado por hardware cuando se ejecuta la
interrupcin del vector correspondiente. Alternativamente, el TOV2 es
limpiado escribiendo un uno lgico en la bandera. Cuando el bit I del SREG, el
TOIE2A (Habilitacin de Interrupcin por desbordamiento del
Timer/Counter2) y el TOV2 estn en uno, las Interrupciones por
desbordamiento del Timer/Counter2 son ejecutadas. En Modo PWM, este bit es
puesto en uno cuando cuenta cambios el Timer/Counter2 cuenta los cambios
en la localidad 0x00.


16.11.9 GTCCR Registro General de Control del Timer/Counter


Bit 7 - TSM: Modo de Sincronizacin del Timer/Counter
Escribiendo un uno en el TSM, se activa el modo de sincronizacin del
Timer/Counter. En este modo, el valor que es escrito en los bits PSRASY y
PSRSYNC son guardados, por lo tanto guarda el prescalador correspondiente.
Esto asegura que el Timer/Counter correspondiente son interrumpidos y
pueden ser configurados para el mismo valor sin el riesgo de que uno de ellos
avance durante la configuracin.
Cuando el bit TSM es puesto a cero, los bits PCRASY y PSRSYNC son
limpiados por hardware, y el Timer/Counter comienza a contar
simultneamente.

Bit 1 PSRASY: Reseteo del Prescaler del Timer/Counter2
Cuando este bit est en uno, el prescalador del Timer/Counter ser reseteado.
Este bit es inmediatamente limpiado por hardware. Si el bit es escrito cuando el
Timer/Counter se encuentra operando en modo asincrnico, este bit
permanecer en uno hasta que el prescalador sea reseteado. Este bit no ser
limpiado por hardware si el bit TSM es uno.


Bit 0 - PSRSYNC: Reseteo del Prescaler

Cuando este bit est en uno, el prescalador del Timer/Counter1 y el
Timer/Counter0 ser reseteado. Este bit es inmediatamente limpiado por
hardware excepto si el bit TSM est en uno.

Note que el Timer/Counter1 y el Timer/Counter0 accionan el mismo
prescalador y el reseteo de este prescalador no afecta a ambos timers.




























17. SPI Perifricos de Interfase Serial

17.1 Especificaciones:

Transferencia de Datos sincrona tres-cables, bidireccional
Operacin Maestro-Esclavo
Transferencia de Datos LSB o MSB
Siete velocidades programables en los bits
Finalizacin de transmisin por Bandera de Interrupcin
Write Collision Flag Protection
Despertar desde Modo Idle
Doble velocidad (CK/2) Modo Maestro SPI

Descripcin General
Los perifricos de Interfase serial (SPI) permiten una transferencia de datos
sincrona de alta velocidad en el ATmega164P/324P/644P, perifricos de
dispositivos o entre varios dispositivos AVR. USART puede ser usado en modo
Maestro SPI.

Diagrama de Bloques SPI






17.5 Descripcin de Registros

17.5.1 SPCR Registros de Control SPI



Bit 7 SPIE: Habilitacin de Interrupciones SPI
Estos bits causan la interrupcin del SPI al ser ejecutados si el bit SPIF en el
registro SPSR es uno y si las Interrupciones Globales son habilitadas con uno en
el bit del SREG.


Bit 6 SPE: Habilitacin SPI
Cuando el bit SPE es puesto en uno. El SPI es habilitado. Este bit seria uno para
habilitar cualquier operacin SPI.

Bit 5 DORD: Orden de Datos
Cuando el bit DORD es escrito con uno, el LBS de la palabra de datos es
transmitida primero. Cuando el DORD es escrito con cero, el MSB de la palabra
de datos es transmitido primero.

Bit 4 MSTR: Selector Maestro/Esclavo
La seleccin del bit en el modo Maestro SPI cuando se escribe uno, y el modo
esclavo SPI esta escrito con cero lgico. Si SS es configurado como una entrada
y es controlada en bajo mientras MSTR es uno, MSTR ser limpiada, y SPIF en
SPSR llegara a ser uno. El uso tendr uno MSTR al re-habilitar el modo Maestro
SPI.
.
Bit 3 CPOL: Polaridad del reloj
Cuando este bit es escrito con uno, SCK esta en alto. Cuando CPOL es escrito
con cero, SCK esta en bajo. La funcionalidad CPOL esta descrita a continuacin:




Bit 2 CPHA: Fase del Reloj
The settings of the Clock Phase bit (CPHA) determine if data is sampled on the leading (first) or
trailing (last) edge of SCK. Refer to Figure 17-3 and Figure 17-4 for an example. The CPOL
functionality is summarized below:

La configuracin del bit Fase de RELOJ (CPHA) determina si el dato es tomado
en el primer pulso del flanco de subida o bajada del SCK.
La funcionalidad del CPOL es mostrada a continuacin:




Bits 1:0 SPR1, SPR0: Seleccin de velocidad del Reloj
Estos dos bits de controlan la velocidad del SCK del dispositivo configurado
como Maestro. SPR1 y SPR0 no tienen efecto en el esclavo. La relacin entre el
SCK y la frecuencia del oscilador del reloj fosc es mostrada en la siguiente tabla:


Relacin entre SCK en la Frecuencia del Oscilador
SPI2X SPR1 SPR0 Frecuencia SCK
0 0 0 fosc/4
0 0 1 fosc/16
0 1 0 fosc/64
0 1 1 fosc/128
1 0 0 fosc/2
1 0 1 fosc/8
1 1 0 fosc/32
1 1 1 fosc/64


17.5.2 SPSR Registro de Estado SPI

Bit 7 SPIF: Bandera de Interrupcin SPI
Cuando la transferencia serial es completada, la bandera SPIF es uno. Una
interrupcin es generada si SPIE en SPCR es uno y las Interrupciones Globales
son Habilitadas. Si SS es una entrada y es controlada en bajo cuando esta en
Modo maestro SPI. Esto tambin pone en uno la bandera SPIF. SPIF es limpiada
por hardware cuando esta ejecutando el correspondiente vector de
interrupcin. Alternativamente, el bit e SPIF es limpiado primero leyendo el
registro de estado SPI con SPIF en uno, luego accediendo al Registro de Datos
del SPI (SPDR).

Bit 6 WCOL: Escritura de la Bandera de Colisin
El bit WCOL es uno si el Registro de Datos del SPI (SPDR) es escrito durante la
transferencia. El bit WCOL (y el bit SPIF) son limpiados primero en la lectura
del registro de estado del SPI con WCOL en uno, y luego accediendo el registro
de datos del SPI.

Bit 5:1 Res: Bits Reservados
Estos bits son reservados en el ATmega164P/324P/644P y siempre sern ledos
como cero.

Bit 0 SPI2X: Bit para Doble velocidad SPI
Cuando este bit es escrito con uno lgico la velocidad del SPI (Frecuencia SCK)
ser duplicada cuando el SPI este en Modo Maestro. Esto significa que el
periodo mnimo del SCK seria de dos periodos de reloj de la CPU. Cuando el
SPI es configurado como esclavo, el SPI esta solo garantizado para trabajar con
fosc/4.
La interfase SPI en el ATmega164P/324P/644P es tambin usada para memoria
programable y carga o descarga de la EEPROM.

17.5.3 SPDR Registro de Datos SPI

El Registro de Datos SPI ledo/escrito es usado para transferencia de datos
entre el Registro Archivo y el Registro de Cambio del SPI. Escribiendo en el
registro inicializa la transmisin de datos. Leyendo el registro causa cambios al
registro al recibir la lectura.























18. USART
18.1 Descripcin

Operacin simultnea bidireccional (Independiente Recepcin Serial y
Registros de Transmisin.
Operacin Asncrona o Sncrona
Reloj Maestro o Esclavo Operacin Sncrona.
Generador Proporcional Alta Resolucin en Baudios
Supports Serial Frames with 5, 6, 7, 8, or 9 Data Bits and 1 or 2 Stop Bits
Odd or Even Parity Generation and Parity Check Supported by Hardware
Data OverRun Detection
Framing Error Detection
Noise Filtering Includes False Start Bit Detection and Digital Low Pass Filter
Three Separate Interrupts on TX Complete, TX Data Register Empty and RX
Complete
Modo de Comunicacin Multi-Proceso
Modo de Doble Velocidad Asncrona de Comunicacin

18.2 USART1 y USART0
El ATmega164P/324P/644P tiene dos USARTs, USART0 y USART1.
La funcionalidad para todos los USARTs es descrito a continuacin, la mayora
de registros y bits de referencia en esta seccin son escritas en forma general. La
letra minscula n reemplaza el nmero USART.

Diagrama de Bloques USART

18.4 Generacin del Reloj
La Generacin lgica de reloj genera la base de reloj para la Transmisin y
Recepcin. El USARTn soporta cuatro modos de operacin de reloj: Asincrnico
Normal, Doble velocidad Asincrnica, Maestro Sincrnico y Modo esclavo
Sincrnico. El bit UMSELn en USART Control de Registro de Estado C
(UCSRnC) selecciona entre operacin Asincrnica y Sincrnica. Doble
velocidad (solo modo asncrono) es controlada por el U2Xn encontrado en el
registro UCSRnA. Cuando se usa modo sncrono (UMSELn = 1), el Registro de
Direccin de Datos para el pin XCKn (DDR_XCKn) controlan si la fuente de
reloj es interna (modo Maestro) o externa (modo esclavo). El pin XCKn es solo
activado cuando se usa modo Sncrono.


Diagrama de Bloques, Generacin Lgica de Reloj


Descripcin de la Seal:
txclk Reloj de Transmisin (Seal Interna).
rxclk Reloj Receptor (Seal Interna).
xcki Entrada desde el pin XCK (Seal Interna). Usada para operacin Esclavo
sincrnica.
xcko Salida desde el pin XCK (Seal Interna). Usada para operacin Maestro
sincrnica.
fOSC Frecuencia del pin XTAL (Sistema de Reloj).

18.4.1 Generacin del Reloj Interno- Generador de Velocidad de transmisin
en Baudios
Generacin Interna de Reloj es usada por los modos de operacin Maestro
sncrono. La USART Registro de Velocidad de Baudios (UBRRn) y el contador-
Bajo conectados a esta funcin como prescalador programable del registro de
velocidad de Baudios. El contador-bajo, corriendo como sistema de reloj (fosc),
es cargado con el valor UBRRn cada vez que el contador ha contado
descendente hasta cero o cuando el Registro UBRRln es escrito. El reloj es
generado cada vez que el contador se hace cero. Este reloj es el generador de
velocidad de transmisin en Baudios a la salida (= fosc/(UBRRn+1)). La
transmisin divide el generador de velocidad de transmisin en Baudios a la
salida por 2, 8 o 16 dependiendo del modo. El generador de velocidad de
transmisin en Baudios a la salida es usada directamente por el reloj receptor y
las unidades de recuperacin de datos. Sin embargo, la recuperacin unitaria
usa la (state machine) que usa 2, 8 o 16 dependiendo del modo uno por la
condicin del los bits UMSELn, U2Xn yDDR_XCKn.

Ecuaciones para calcular la velocidad en baudios


18.4.2 Doble Velocidad de Operacin (U2Xn)
La proporcin transferida puede ser duplicada por la configuracin del bit
U2Xn en UCSRnA. Configurando solo este bit tiene efecto para la operacin
asncrona. Poner este bit a cero cuando se usa una operacin sncrona.
Configurando este bit reducira la divisin de la proporcin de baudios
dividida para 16 a 8, efectivamente doblando la proporcin de transferencia
para comunicacin asncrona. Note sin embargo que al Receptar en este caso
solo se usa la mitad de nmeros de ejemplo (Reducido desde 16 a 8 ) para datos
de ejemplo y tiempo de recuperacin, y adems a mas exactas proporciones en
baudios y sistemas de reloj son requeridas cuando este modo es usado. Para la
Transmisin no hay downsides.

18.4.3 Reloj externo
El reloj externo es usado para el modo de operacin Esclavo sncrono. La
entrada de Reloj Externo desde el pin CCKn es mostrada por la sincronizacin
del registro para minimizar la oportunidad de una mayor estabilidad. La salida
desde el la sincronizacin del registro es minimizada al perder la oportunidad.
La salida desde el registro sincronizado pasa luego a travs del detector de
flanco antes que pueda ser usada para la Transmisin y Recepcin. Este proceso
introduce dos periodos de reloj del CPU demorados y por consiguiente la
mxima frecuencia de reloj externo XCKn es limitada por la siguiente ecuacin:


Note que la fosc depende de la estabilidad de la fuente del sistema de reloj.
Esto es recomendado al agregar ms flancos para evitar posibles prdidas de
datos en las variaciones de frecuencia.

18.4.4 Operacin de Reloj Sncrona
Cuando el modo sncrono es usado (UMSELn = 1), el pin XCKn seria usado
como entrada de reloj (Esclavo) o Salida de reloj (Maestro). La dependencia
entre el flanco del reloj y los datos muestreados o datos cambiados es lo mismo.
El principio bsico es que la entrada de datos (en RxDn) es muestreada a la
oposicin del flanco del reloj XCKn del flanco de la salida (TxDn) es oportuno.





El bit UCPOLn en UCRSC selecciona cual flanco de reloj XCKn es usada para
probar los datos y para cambiar los datos. Cuando UCPOLn es cero los datos
sern cambiados al flanco de subida XCKn y probados en el flanco de bajada
XCKn y probados en el flanco de subida XCKn.


18.5 Formato de Trama
La Trama serial es definida para ser una caracterstica de bits de datos con
sincronizacin de bits (Bits que enmiendan y terminan), y opcionalmente la
paridad del bit para chequear errores. USART acepta en total 30 combinaciones
de los siguientes formatos de trama:
1bit empieza
5, 6, 7, 8 o 9 bits de datos
bit de paridad impar
1 o 2 bits de parade

La trama comienza con el bit de comienzo, seguido por el bit de dato menos
significativo. Luego el siguiente bit de dato, sube a un total de nueve, teniendo
xito, finalizando con el bit ms significante. Si es habilitado, la paridad del bit
es insertada despus de los bits de datos, antes de los bits de parada. Cuando
una trama es completada es transferida, esta puede ser direccionada seguida
por la nueva trama, o la lnea de comunicacin puede ser un estado en alto.


Formatos de Tramas



El formato de la trama usado por la USART es uno por el USCZn2:0, UPMn1:0
y los bits USBSn en UCSRnB y UCSRnC. La Recepcin y transmisin usa la
misma configuracin. Note que cambiando la configuracin de cualquiera de
estos bits puede daar la comunicacin tanto de recepcin como de
Transmisin.
El tamao de los caracteres de los bits de USART (UCSZn2:0) seleccionan el
nmero de bits de datos en la trama. Los bits del modo paridad de la USART
(UPMn1:0) habilita y pone el tipo de paridad del bit. La seleccin entre uno o
dos bits de parada es hecha por el bit de paro de la USART seleccionando el bit
(USBSn). La Recepcin ignora la segunda parada del bit. FE (Error de trama)
ser solo detectada en los casos cuando el primer bit de parada es cero.

18.5.1 Clculo del bit de Paridad
El bit de paridad es calculado utilizando una or-exclusiva en todos los bits de
datos. Si la paridad impar es usada, el resultado de la or exclusiva es invertido.
La relacin entre el bit de paridad y los bits de datos es el siguiente:


Peven Bit de paridad usando el nivel de paridad
Podd Bit de paridad usando paridad impar
Dn bit de datos en el carcter n
Si son usados, el bit de paridad es localizado entre el ltimo bit de datos y el
primer bit de parada de la trama serial.

18.6 Inicializacin del USART
La USART tiene que ser inicializada antes de que cualquier comunicacin
pueda tener lugar. El proceso de inicializacin normalmente consiste de
configuraciones del tiempo en baudios, el formato de configuracin de la trama
y habilitacin de la Transmisicin o la Recepcin dependende del uso. Para
manejar la operacin de interrupcin USART, la Bandera de Interrupciones
Globales debera ser puesta en cero y las interrupciones USART deberan ser
deshabilitadas.
Antes de hacer la re inicializacin con el tiempo en baudios cambiado o el
formato de trama, seria seguro que no hay transmisin durante el periodo en el
que los registros son cambiados. La Bandera TXCn puede ser usada para
chequear que transmisin ha sido completada en todas las transferencias, y la
bandera RXc puedan ser usadas para chequear que no hay lectura de datos en
la recepcin del buffer. Note que la bandera TXCn puede ser puesta en cero
antes de cada transmisin (antes que UDRN es escrito) si esto es usado para
este propsito. La siguiente USART inicializa con un cdigo simple mostrado
en asembler y en C que son equivalentes en funcionamiento. Los ejemplos
asumen una operacin asncrona sin la habilitacin de interrupciones y
arreglando el formato de trama. La velocidad en baudios es dada como
parmetro de funcin. Para el cdigo asembler, el parmetro de velocidad en
baudios es asumido para ser guardado en los registros r17:r16.




18.7 Transmisin de Datos La transmisin USART
La transmisin del USART es habilitada por la configuracin de habilitacin del
bit de transmisin (TXEN) usada en el registro UCSRnB. Cuando la
transmisin es habilitada, la normal operacin del prtico del pin TxDn es
sobrepuesto por el USART y dada la funcin como la Transmisin de salida
serial. La velocidad en Baudios, modo de operacin y formato de trama seria
instalada una vez ante de cualquier transmisin. Si la operacin sncrona es
usada, el reloj en el pin XCKn seria sobrepuesto y usado como reloj de
transmisin.

18.7.1 Enviando Tramas con 5 hasta 10 Bits de datos
La transmisin de datos es inicializada por la carga del buffer de transmisin
con el dato a ser transferido. La CPU puede cargar el buffer de transmisin por
la escritura en la localidad de E/S UDRn. El buffer de datos en la transmisin
seria movido al Register cuando es ledo y enviado una nueva trama. El registro
movido es cargado con el nuevo dato si este no enva la transmisin o
inmediatamente despus del ltimo bit de parada de la trama previa es
transmitida. Cuando el registro movido, es cargado con un nuevo dato, esto
transferira una trama completa a la velocidad dada por el registro de baudios,
bit U2Xn o XCKn dependiendo del modo de operacin.
Los siguientes cdigo de ejemplo muestran la simple USART transmitiendo
funciones basadas en el registro de datos vaci de la bandera (UDRn). Cuando
se usa tramas con menos que ocho bits, la mayora bits significativos escritos en
el UDRn son ignorados. El USART tiene que ser inicializada antes que la
funcin pueda ser usada. Para el cdigo asembler, el dato a ser enviado se
asume que ha sido guardado en el registro R16.




La funcin simplemente espera la transmisin del buffer a ser limpiada por el
chequeo de la bandera UDREn. Antes de ser cargada con el nuevo dato a ser
transmitido. Si el Registro de Datos es limpiado la interrupcin es utilizada, la
rutina de interrupcin escribe el dato en el buffer.


18.7.2 Envi de Tramas con 9 bits de datos
Si son usados 9-bits (UCSZn = 7), el noveno bit seria escrito en el bit TXB8 en
UCSRnB antes de que el byte en bajo del carcter es escrito a UDRn. El siguiente
cdigo muestra la funcin de transmisin a 9 bits. Para el cdigo asembler, el
dato a ser enviado es asumido al ser guardado en los registros R17:R16.



El noveno bit puede ser usado para indicar la direccin de la trama usando un
multi procesador en modo de comunicacin o por otro protocolo del manual
como para el ejemplo de sincronizacin.









18.7.3 Banderas de Transmisin e Interrupciones.
La transmisin USART tiene dos banderas que indican estos estados: USART
Registro de Datos vaco (UDREn) y Transmisin completa (TXCn) Ambas
banderas pueden ser usadas para la generacin de interrupciones. La bandera
del Registro de Datos Vaco (UDREn) indica si la transmisin del buffer ha ledo
o recibido un nuevo dato. Este bit es uno cuando la transmisin del dato es
vaca, y cero cuando la transmisin del buffer contiene datos a ser transmitidos
que todava no han sido movidos en el registro Shift.
Para compatibilidad con futuros dispositivos, siempre escribir este bit con cero
cuando escribimos en el registro UCSRnA. Cuando en el Registro de
Interrupcin de Datos Vaco es habilitado en el bit (UDRIEn) en UCSRnB con
uno, el USART Registro de Interrupcin de Datos Vaco seria ejecutado como
UDREn con uno (las interrupciones globales tienen que ser habilitadas). UDREn
es limpiada por la escritura UDRn. Cuando en el dato de interrupcin es
manejada la transmisin es usada, la rutina del registro de datos de
Interrupcin vaco seria escrito con un nuevo dato a UDRn solamente al
limpiar UDREn o deshabilitar el registro de datos de interrupcin vaca, por
consiguiente la nueva interrupcin ocurrira una vez que la rutina de
interrupcin ha terminado.
El bit de la bandera de transmisin completa (TXCn) es uno cuando la trama
entera en la transmisin del registro Shift ha sido movida fuera y no hay un
nuevo dato actualmente presente en el buffer de transmisin.
El bit de la bandera TXCn es automticamente limpiada cuando se completa la
transmisin y la interrupcin es ejecutada, o puede ser limpiado escribiendo
uno en este bit. La bandera TXCn es usada en la interfase de comunicacin half-
duplex (RS-485 estndar), donde en una aplicacin entrando en el modo de
recepcin y libre el bus de comunicacin inmediatamente despus de completar
la transmisin.
Cuando la transmisin es completada la interrupcin es usada, la rutina de
interrupcin del manual no debe tener cero en la bandera TXCn, esto es hecho
automticamente cuando la interrupcin es ejecutada.

18.7.4 Generador de Paridad
El generador de paridad calcula el bit de paridad para la trama de datos
seriales. Cuando el bit de paridad es habilitado (UPMn1 = 1), el control lgico
de transmisin inserta el bit de paridad entre el ltimo bit de dato y el primer
bit de paro de la trama que es enviada.

18.7.5 Deshabilitando la Transmisin
La desabilitacin de la transmisin (configurando el TXEN cero) no llegar
hacer efectivo hasta que las transmisiones pendientes sean completadas, cuando
la transmisin del Registro de Desplazamiento y la transmisin del Buffer
Register no contenga los datos ha ser transmitidos. Cuando deshabilitamos, la
transmisin no es excedida en el pin TxDn.



18.8 Recepcin de Datos El receptor USART
El receptor USART es habilitado por la escritura en e el bit de habilitacin de
recepcin (RXENn) y el registro UCSRnB a uno. Cuando la Recepcin es
habilitada, la normal operacin del pin del RxDn es sobrepasada por el USART
y dada la funcin como entrada serial de Recepcin. La velocidad en baudios,
modo de operacin y formato de trama seria instalada una vez antes de
cualquier recepcin serial que pueda haber sido hecha. Si la operacin sincrona
es usada, el reloj en el pin XCKn seria usado como reloj de transferencia.


18.8.1 Recibiendo Tramas de 5 a 8 bits de datos
La recepcin de datos comienza cuando esto detecta un bit valido de inicio.
Cada bit que sigue el bit de inicio ser probado a la velocidad en baudios o
reloj XCKn, y mostrado dentro de la recepcin del Registro de Deslazamiento
hasta que el primer bit de parada de la trama es recibido. Un segundo bit de
parada ser ignorado por la recepcin. Cuando el primer bit de parada es
recibido, una trama seria completa es presentada en la Recepcin del Registro
de Desplazamiento, el contenido de estos registros del Registro de
Desplazamiento ser movida en el buffer de recepcin. El buffer de recepcin
puede luego ser ledo por la lectura de la localidad del UDRn E/S.
El siguiente ejemplo de cdigo muestra una simple USART que recibe una
funcin basada en la recepcin completa e la bandera (RXCn). Cuando usamos
tramas con menos de 8 bits el bit mas significante de la lectura e datos desde el
UDRn ser una mascara a 0. El USART tiene que ser inicializada antes que la
funcin sea usada.








La funcin simplemente espera por datos a ser presentados en el buffer de
recepcin por chequeo de la bandera RXCn.

18.8.2 Recibiendo Tramas con 9 bits de datos
Si los 9-bits son usados (UCSZn=7) el noveno bit seria ledo desde el bit RXB8n
en UCSRnB antes leyendo el bit en bajo desde el UDRn. Esta regla aplica muy
bien a las banderas de estado FEn, DORn y UPEn. Leer el estado desde
UCSRnA, luego el dato desde UDRn. Leyendo las localidades de E/S de
UDRn cambiar el estado del buffer de recepcin FIFO y consecuentemente los
bits TXB8n, FEn, DORn y UPEn, con lo cual son almacenados en el FIFO, para
futuros cambios.
El siguiente ejemplo de cdigo muestra una simple recepcin USART ambos de
nueve bits y los bits de estado.




El ejemplo de funcin de recepcin lee todos lo registros e E/S dentro del
Archivo del registro antes que cualquier calculo sea hecho. Esto dado en una
ptima utilizacin del buffer de recepcin desde la localizacin leda ser libre
de aceptar el nuevo dato tan pronto sea posible.





18.8.3 Bandera de Recepcin Completa e Interrupcin
La recepcin del USART tiene una bandera que indica el estado de Recepcin.
La Bandera de Recepcin Completa (RXCn) indica si hay una lectura de datos
presente en el buffer de transmisin. Esta bandera es uno cuando el dato ledo
existe en la recepcin del buffer, y cero cuando la recepcin del buffer seria
vaciado y consecuentemente el bit RXCn llegara hacer cero. Cuando la
recepcin completa habilita la interrupcin (RXCIEn) en UCSRnB es uno, el
USART recepta la interrupcin completa sera ejecutada al tiempo que la
bandera RXCn es uno (Las interrupciones globales son habilitadas). Cuando el
manejo de la interrupcin de datos habilitada es usado, la rutina de completa
recepcin leera el dato receptado desde UDRn a medida que pone en cero la
bandera RXCn, por otra parte una nueva interrupcin ocurrira una vez que la
rutina de interrupcin termina.


18.8.4 Recepcin de Banderas de Error
La recepcin USART tiene tres bandera de error: Error de Trama (FEn),
desbordamiento de datos (DORn) y error de paridad (UPEn). Todas pueden ser
accesibles por la lectura del UCSRnA. Comnmente para la bandera de error es
que hay localidades en el buffer de recepcin junto con la trama para cualquiera
de ellos indica el estado de error. Debido al buffer de la bandera de error, el
UCSRnA seria ledo antes que el buffer de recepcin (UDRn), desde la lectura
de las localidades de E/S UDRn cambia la localizacin de la lectura del buffer.


Otra igualdad para el error de bandera es que ellos no serian alterados por
software haciendo una escritura en la localidad de la bandera. Sin embargo,
todas las banderas serian puestas a cero cuando la UCSRnA es escrita hacia
arriba para compatibilidad de futuras implementaciones USART. Ninguna de
las banderas de error puede generar interrupciones.
La Bandera de Trama de Error (FEn) indica el estado del primer bit de parada
de la siguiente lectura de la trama almacenada en el buffer de recepcin. La
bandera FEn es cero cuando el bit de parada fue incorrecto (cero). Esta bandera
puede ser usada para detectar condiciones de falta de sincronizacin,
detectando condiciones de ruptura y protocolos del manual. La Bandera FEn no
es afectada por la configuracin del bit USBSn en UCSRnC desde la recepcin
ignora todo, excepto para el primer, bit de parada. Para compatibilidad con
futuros dispositivos, siempre poner este bit a cero cuando escribimos a
UCSRnA.
La bandera de desbordamiento de datos (DORn) indica la perdida de datos
debida a la condicin de buffer lleno. El desbordamiento de datos ocurre
cuando la recepcin del buffer esta llena (dos caracteres), esto es un nuevo
carcter esperando la recepcin del Registro de Desplazamiento, y un nuevo bit
de comienzo es detectado. Si la Bandera DORn es puesta fue uno o mas tramas
seriales prdidas entre la ultima trama leda desde UDRn, y la siguiente trama
leda desde UDRn. Para compatibilidad con futuros dispositivos, siempre
escribir este bit a cero cuando la lectura cuando se escribe en el UCSRnA. La
bandera (UPEn) indica que la siguiente trama en el buffer de recepcin fue
exitosamente movida des de el Registro de Desplazamiento en el buffer de
recepcin.
La bandera de Error de Paridad indica que la siguiente trama en el buffer de
recepcin tiene un error de paridad cuando recepta. Si el chequeo de paridad no
es habilitado el bit UPEn siempre ser ledo cero. Para compatibilidad con
futuros dispositivos, siempre poner este bit a cero cuando se escribe a UCSRnA.


18.8.5 Comprobador de Paridad
El comprobador de paridad es activado cuando el bit de modo de paridad en
alto USART es uno. El comprobador de tipo de paridad a ser realizado (impar)
es seleccionado por el bit UPMn0. Cuando habilitamos, el comprobador de
paridad calculamos la paridad de los bits de datos en tramas entrantes y
compara el resultado con el bit de paridad desde la trama serial. El resultado de
la comprobacin es almacenado en el buffer de recepcin ambos con la
recepcin de datos y bits de parada. La bandera de error de paridad puede
luego ser leda por software para comprobar si la trama tiene un error de
paridad.
El bit UPEn es puesto si el siguiente caracter que puede ser ledo desde el
buffer de recepcin tendiendo un error de paridad cuando recepta y el
comprobador de paridad fue habilitado en el punto (UPMn1 = 1). Este bit es
vlido hasta que el buffer de recepcin (UDRn) es ledo

18.8.6 Deshabilitando el Receptor
En contraste al transmisor, la desabilitacin del Receptor seria inmediata. . Los
Datos desde la recepcin serian perdidos. Cuando de deshabilita (el RXENn es
puesto a cero) la recepcin en un desbordamiento no tan largo la funcin
normal del prtico del pin RxDn. El buffer de Recepcin FIFO seria vaciado la
recepcin es deshabilitada. Permaneciendo el Dato en el buffer sera perdido.

18.8.7 Vaciando el Buffer Receptor
El buffer de recepcin FIFO seria vaciado cuando la Recepcin es deshabilitada,
el buffer seria vaciado de este contenido. El dato no ledo sera perdido. Si el
buffer tiene que ser vaciado durante la operacin normal. Debido a un instante
o condicin de error, leer la localidad de E/S UDRn hasta que la Bandera RXCn
sea limpiada. El siguiente ejemplo de cdigo muestra el vaciado del buffer de
recepcin.





18.9 Recepcin de Datos Asincrnica
El USART incluye un reloj de recuperacin y una unidad recuperadora de datos
para el manual recepcin de datos asincrnico. El reloj de recuperacin lgico
es usado para sincronizar la velocidad interna en baudios del reloj en la trama
asincrnica entrante al pin RxDn. La recuperacin de datos lgica muestra y un
filtro pasa bajos cada vez que entra un bit, mejorando la inmunidad al ruido por
el receptor. En la recepcin asncrona el rango de operacin depende de la
exactitud del reloj interno de la velocidad de transmisin en baudios, la
proporcin de los flancos entrantes, y el flanco se clasifican segn el tamao del
nmero de bits.


18.9.1 Recuperacin del Reloj Asncrona
La recuperacin lgica del reloj sincroniza el reloj interno en el interior de la
trama serial. La velocidad muestra 16 veces la velocidad de transmisin en
baudios para el modo Normal, y ocho veces la velocidad de transmisin en
baudios para el modo de doble Velocidad. Las flechas horizontales ilustran la
variacin de la sincronizacin debido al proceso mostrado. Note que la
variacin de tiempo es ms larga cuando se utiliza el modo de doble velocidad
(U2Xn = 1) de operacin.










Cuando la recuperacin lgica del reloj detecta un alto (idle) o un bajo (Start) la
transicin en la lnea RxDn, el bit de comienzo detecta que una secuencia es
inicializada. La recuperacin lgica del reloj luego usa muestras de 8, 9, y 19
para modo Normal, y muestras de 4, 5, y 6 para modo de doble velocidad
(indicando como muestras los nmeros dentro del cuadro de la figura), para
decidir si un bit de de comienzo es receptado. Si dos o ms de estas tres
muestras tienen un alto nivel lgico (la mayora gana), el bit de inicio es vlido
como pico de ruido y la bsqueda para el inicio de la recepcin para siguiente
transicin en alto o en bajo. Sin embargo, el bit de inicio vlido es detectado, la
recuperacin lgica de reloj es sincronizada y la recuperacin del dato puede
comenzar. El proceso de sincronizacin es repetido para cada bit de inicio.

18.9.2 Recuperacin de datos Asincrnica
Cuando el reloj de recepcin es sincronizado al bit de inicio, la recuperacin del
dato puede comenzar. La unidad recuperadora de datos usa estados de
mquina para cada bit en modo Normal y ocho estados para cada bit en Modo
de Doble Velocidad. Cada una de las muestras es dada un nmero que es igual
al estado de la unidad de recuperacin.



La decisin del nivel lgico de la recepcin de bits es tomada haciendo una
votacin mayoritaria de los valores lgicos de las tres muestras en el centro de
bits recibidos. Las muestras centrales son enfatizadas en la figura teniendo el
nmero de muestras en el cuadro. La mayora de proceso votados es hecha
como sigue: Si dos o todos lo ejemplos tienen niveles bajos, el bit de recepcin
es registrado con 0 lgico. Esto la mayora de procesos como filtros pasa bajos
completa la trama y es receptada. Incluyendo el primer bit de parada. Note que
la recepcin solo usa el primer bit de parada de la trama.


Muestra del bit de parada y el siguiente bit muestreado






El mismo voto mayoritario es hecho al bit de de parada para el otro bit en la
trama. Si el bit de parada es registrado para tener un valor lgico de 0, la
bandera de error de trama (FEn) seria puesta.
La nueva transicin en alto o bajo indican el bit de inicio de la nueva trama
puede llegar a la derecha despus del ltimo de los bits usados por la mayora.
Para el modo Normal de velocidad, el primer nivel bajo mostrado puede ser el
punto de comparacin A. Para modo de doble velocidad el primer nivel bajo
seria deliberado a las marcas (B, (C) al bit de parada de amplia longitud. La
deteccin temprana del bit de inicio influencia el rango de operacin de la
Recepcin.

18.9.3 Rango de Operacin Asincrnica
El rango de operacin asincrnica de la Recepcin es dependiente en la
desigualdad entre la velocidad del bit de recepcin y la generacin de la
velocidad interna en baudios. Si la transmisin esta enviando tramas a
velocidades rpidas o lentas, o la generacin interna de velocidad en baudios
del receptor no tiene una base de frecuencia similar, la recepcin no estara de
acuerdo a la trama de sincronizacin del bit de inicio.
Las siguientes ecuaciones pueden ser usadas para calcular el radio de la
velocidad de entrada de datos y la velocidad de recepcin interna.


D Suma de tamao de caracteres y tamao de paridad (D = 5 a 10 bit)
S Muestras por bit. S = 16 para modo de operacin normal y S = 8 para
modo de doble velocidad
SF Primera numero de muestras usado para majority voting de. SF = 8 para
velocidad normal y SF = 4 para modo de Doble velocidad.
SM Mitad del nmero de muestras usadas para majority voting . SM = 9
para velocidad normal
SM = 5 para modo de Doble velocidad.
Rslow es el radio de la entrada de datos ms lenta que puede ser
aceptada en relacin a la velocidad de baudios receptada.
Rfast es el radio de la entrada de datos ms rpida que puede ser aceptada en
relacin a la velocidad de baudios receptada.

Recommended Maximum Receiver Baud Rate Error for Normal Speed Mode
(U2Xn = 0)

Recommended Maximum Receiver Baud Rate Error for Double Speed Mode
(U2Xn = 1)

La recomendacin de la mxima recepcin del error de velocidad en baudios
fue hecha debajo de la asuncin que la recepcin y la transmisin igualmente
divide el error mximo total. Hay dos fuentes de posibilidad para la recepcin
del error de velocidad en baudios. El sistema de reloj de recepcin (XTAL)
siempre tiene menor estabilidad que el rango de la fuente de suministro y el
rango de temperatura- Cuando se usa un cristal para general el sistema de reloj,
esto raramente es un problema, pero para el resonador el sistema de reloj puede
diferir ms que el 2% dependiendo de la tolerancia del resonador. La segunda
fuente para el error es ms controlable. La velocidad generada en baudios no
puede siempre hacerse con una divisin exacta del sistema de frecuencia para
obtener la velocidad en baudios deseada. En este caso el valor de UBRR en un
error aceptable y puede usarse si es posible.


18.10 Modo de Comunicacin Multi-Proceso
Configurando el Modo de Comunicacin de Multi-proceso el bit (MPCMn) en
UCSRnA habilita la funcin filtro de trama de entrada receptada por el USART.
La trama que hace no contiene informacin de direcciones que seran ignoradas
y no puestas dentro del buffer de recepcin. Esto efectivamente reduce el
nmero de tramas de entrada que estn en el manual por el CPU, en un sistema
con mltiples MCUs que comunican va el mismo bus serial. La transmisin no
es afectada por la configuracin por la configuracin MPCMn, pero tiene que
ser usada diferentemente, pero tiene que ser usada diferentemente cuando esto
es una parte del sistema utilizando el modo de comunicacin Multi-proceso. Si
el receptor es preparado para la recepcin de tramas que contiene de 5 a8 bits
de datos, luego el primer bit de parada indica si la trama contiene informacin
de datos o direcciones. Si el registro es puesto por tramas con nueve bits de
datos, luego el noveno bit (RXB8n) es usado para identificar direcciones y
tramas de datos. Cuando el tipo de bit de trama (la primera parada o el noveno
bit) es uno, la trama contiene una direccin. Cuando bit de tipo de trama es cero
la trama es de datos. El modo de comunicacin multi-proceso habilita varios
esclavos MCUs a receptar datos desde el MCU maestro. Esto es hecho primero
decodificando una trama de direccin para encontrar la salida con la cual MCU
ha sido diseccionado. Si particularmente el esclavo MCU ha sido diseccionado,
este receptar la siguiente trama de datos como normal, mientras el otro esclavo
MCUs ignorar la trama recibida hasta que otra trama de direccin es recibida.

18.11 Descripcin de registros

18.11.1 UDRn Registro de n Datos USART E/S

El USART Registro de transmisin de buffer de datos y USART Registro de
recepcin de buffer de datos proporcionan las mismas direcciones de E/S
referidas como USART Registro de Datos o UDRn. El registro de transmisin de
buffer de datos (TXB) seria el destino para escritura de datos situados en el
registro UDRn. Leyendo la localidad del registro UDRn retornara el contenido
del registro de recepcin de buffer de datos (RXB). Para 5, 6, 8 7 bits de
caracteres los bits superiores no usados serian ignorados por la Transmisin y
puestos en cero por la Recepcin.
El buffer de transmisin puede solo ser ledo cuando la bandera UDREn en el
registro UCSRnA es puesta. Los Datos escritos a UDRn cuando la bandera
UDREn no es puesta seria ignorada por el USART cuando est transmitiendo.
Cuando el dato es escrito al buffer de transmisin, y la Transmisin es
habilitada, se cargara el dato dentro del buffer de transmisin, y la transmisin
es habilitada, la transmisin cargara el dato en la transmisin del Shift Register
cuando esta vaco. Luego el dato ser transmitido serialmente a travs del pin
TXDn.
El buffer de recepcin consiste de dos niveles FIFO. El FIFO. Cambiara su
estado sin importar si el buffer de recepcin es accedido. Debido a su
comportamiento el buffer recibido, no usa las instrucciones modificables de
lectura- escritura de instrucciones (SBI y CBI) en esta localidad. Tenga cuidado
cuando con el uso de estos bits (SBIC y SBIS), hasta que esto tambin cambie el
estado del FIFO.

18.11.2 UCSRnA Registro de Control y Estado A del USART



Bit 7 RXCn: Recepcin Completa del USART
Este bit de bandera es habilitado cuando no hay lectura de datos en el buffer de
recepcin y es limpiado cuando el buffer de recepcin esta vaci (por ejemplo,
no contiene cualquier dato que no ha sido ledo). Si la recepcin es
deshabilitada, el buffer de recepcin ser vaciado y consecuentente el bit RXCn
llegar a ser cero. La bandera RXCn pude ser usada para generar una
interrupcin completa de interrupcin (ver la descripcin del bit RXCIEn)

Bit 6 TXCn: Transmisin Completa del USART
Este bit de bandera es habilitado cuando los bits de la trama en el registro de
desplazamiento de transmisin han sido desplazados y no hay concurrencia de
nuevos datos en el buffer transmisor (UDRn). El bit de la bandera TXCn es
automticamente limpiado cuando una interrupcin en una transmisin
completa es ejecutada., o esto puede ser limpiado por la escritura de uno en la
localidad de este bit. La bandera TXCn puede generar una interrupcin en una
transmisin completa.

Bit 5 UDREn: Vaciado del Registro de datos del USART
La bandera UDREn indica si el buffer transmisor (UDRn) esta listo para recibir
un nuevo dato. Si el bit UDREn es uno, el buffer esta vaci y adems listo para
ser escrito. La bandera UDREn puede generar una interrupcin de vaco en el
registro de datos. El UDREn es habilitado despus de indicar que la transmisin
esta lista.

Bit 4 FEn: Error en la Trama
Este bit es habilitado si el caracter siguiente en el buffer de recepcin tiene un
error en la trama cuando esta receptando. Por ejemplo, cuando el bit de parada
del carcter siguiente en el buffer de recepcin es cero. Este bit es vlido hasta
que el buffer de recepcin es ledo. El bit FEn es cero cuando el bit de parada
del dato de recepcin es uno. Siempre habilitar este bit a cero cuando se escribe
en UCSRnA.

Bit 3 DORn: Desbordamiento de Datos
Este bit es habilitado si una condicin de desbordamiento es detectada. Un
desbordamiento de datos ocurre cuando el buffer de recepcin esta lleno (dos
caracteres), esto es un nuevo carcter esperando en el registro de despeamiento
en la recepcin, y un nuevo bit de inicio es detectado. Este bit es valido hasta
que el buffer de recepcin es ledo. Siempre habilitar este bit a cero cuando se
escribe en UCSRnA.

Bit 2 UPEn: Error de paridad en el USART
Este bit es habilitado si el caracter siguiente en el buffer de recepcin tiene un
error de paridad cuando recibe y el chequeo de paridad fue habilitado en ese
punto (UPMn1=1). Este bit es valido hasta que el buffer de recepcin es ledo.
Siempre habilitar este bit a cero cuando se escribe en UCSRnA


Bit 1 U2Xn: Doble Velocidad de Transmisin del USART
Este bit solo tiene efecto para una operacin asincrnica. Escribir este bit a cero
cuando usa operacin asincrnica. Escribiendo uno en este bit la velocidad en
baudios es dividida desde 16 a 8 efectivamente duplicando la velocidad de
transferencia para comunicacin asincrnica.


Bit 0 MPCMn: Modo de comunicacin Multi-proceso
Este bit habilita el bit de modo de comunicacin multi-proceso. Cuando el bit
MPCMn es escrito a uno, todas las tramas son recibidas en el USART que no
contiene informacin de la direccin a ser ignorada. La transmisin no es
afectada por la configuracin del MPCMn.

18.11.3 UCSRnB Registro de Control y Estado n B del USART


Bit 7 RXCIEn: Habilitacin de la Interrupcin de la Recepcin completa
Escribiendo este bit a uno habilita la interrupcin en la bandera RXCn. La
interrupcin cuando se completa la recepcin sera generada solo si el bit
TXCIEN es escrito con uno, La Bandera Global de Interrupciones en SREG es
escrita a uno y el bit RXCn en UCSRnA es habilitada.


Bit 6 TXCIEn: TX Complete Interrupt Enable n
Escribiendo este bit a uno habilita la interrupcin en la bandera TXCn. La
interrupcin en el USART al completar la transmisin seria generada solo si el
bit TXCIEn es escrito con uno, la Bandera de Interrupciones Globales en SREG
es escrita a uno y el bit TXCn en UCSRnA es habilitada.

Bit 5 UDRIEn: Vaciado del Registro de Datos en el USART en la
Habilitacin de la n Interrupcin
Escribiendo este bit a uno habilita la interrupcin en la bandera UDREn. El
vaciado de del registro de Datos a la interrupcin sera generado solo si el bit
UDRIEn es escrito a uno, la bandera de Interrupciones Globales en SREG es
escrita a uno y el bit UDREn en UCSRnA es habilitada.

Bit 4 RXENn: Habilitacin de la Recepcin n
Escribiendo los bits a uno se habilita la recepcin del USART. La recepcin
afectara la operacin normal del prtico para el pin RxDn cuando es habilitada.
Deshabilitando la recepcin vaciara el buffer de recepcin invalidando las
banderas FEn, DORn y UPEn.




Bit 3 TXENn: Habilitacin de la Transmisin n
Escribiendo este bit a uno se habilita la transmisin del USART. El transmisor
afectara la operacin normal del pin TxDn cuando es habilitado. La
desabilitacin de la Transmisin (escribiendo TXENn a cero) no llegara hacer
efectiva hasta continuar y las transmisiones pendientes son completadas, por
ejemplo, cuando la transmisin del registro de desplazamiento y el registro de
transmisin del buffer no contienen datos a ser transmitidos.
Cuando es deshabilitada, la Transmisin no afectara el prtico TXDn.


Bit 2 UCSZn2: Tamao de n Caracteres
Los bits UCSZn2 son combinados con los bits UCSZn1:0 en el UCSRnC
habilitando el nmero de bits de datos en la trama usando Transmision y
Recepcin.

Bit 1 RXB8n: Receptor de n Datos en 8 bits
RXB8 es el noveno bit de datos de los caracteres recibidos cuando se opera con
tramas seriales con el noveno bit de datos. Sera ledo antes de la lectura de los
bits en bajo desde el UDRn.

Bit 0 TXB8n: Transmit Data Bit 8 n
TXB8 es el noveno bit de datos en los caracteres a ser transmitidos cuando esta
operando con tramas seriales con el noveno bit de datos. Debera escribirse
antes de escribir un bit en bajo en UDRn.

18.11.4 UCSRnC Registro de Control y Estado n C del USART


Bits 7:6 UMSELn1:0 Seleccin del modo USART
Este bit d seleccin del modo de operacin del USART se muestra en la
siguiente tabla:



Bits 5:4 UPMn1:0: Modo de Paridad
Estos bits habilitan y ponen el tipo de generacin de paridad y chequeo. Si es
habilitado, la Transmision automticamente generan y envan la paridad de la
transmisin bits de datos dentro de cada trama. La Recepcin generara un
valor de paridad para los datos internos y comparan esto en la habilitacin del
UPMn. Si un error es detectado, la bandera UPMn en UCSRnA seria habilitada.

Configuracin de bits del UPMn


Bit 3 USBSn: Seleccin del bit de parada
Estos bits seleccionan el nmero de bits de parada a ser insertados por la
Transmisin. La Recepcin ignora esta configuracin.

Configuracin de bits del USBS


Bit 2:1 UCSZn1:0: Tamao de Caracteres
Los bits UCSZn1:0 combinados con el bit UCSRnB pondrn el nmero de bits
de datos en la trama usando la Recepcin y Transmisin.

Configuracin de bits del UCSZn


Bit 0 UCPOLn: Polaridad de Reloj
Este bit es usado solo para modo sncrono. Escribir este bit a cero cuando el
modo asncrono es usado. Los bits UCPOLn habilitan la relacin entre los datos
de salida modificados y los datos de entrada muestreados y el reloj sncrono
(XCKn).



18.11.5 UBRRnL y UBRRnH Registro de Velocidad en Baudios del USART



Bit 15:12 Bits Reservados
Estos bits son reservados para usos futuros. Para compatibilidad con futuros
dispositivos, estos bits seran escritos a cero cuando UBRRH es escrito.

Bit 11:0 UBRR11:0: Registro de velocidad en Baudios del USART
Este es el bit-12 del registro el cual contiene la velocidad en baudios del USART.
El UBRRH contiene los cuatro bits ms significativos, y el UBRRL contiene el
octavo bit menos significativo del la velocidad en Baudios del USART.
Constantemente transmitiendo por el Transmisor y Receptor seria interrumpido
si la velocidad en baudios es cambiada. Escribiendo UBRRL activara
inmediatamente la actualizacin del prescalador de la velocidad en baudios.

18.12 Ejemplos de la configuracin de la Velocidad en Baudios
Para cristales estndar y frecuencias resonantes la ms velocidad en baudios
comnmente usada para operacin asncrona puede ser generada usando la
configuracin del UBRR. Los valores del UBRR con el cual el rendimiento
actual de la velocidad en baudios difiere menos que el 0.5 % desde el la
velocidad en baudios en blanco, estn con negrilla en la tabla. Altos errores de
velocidad son aceptables, pero el Receptor tendr menos resistencia al ruido
cuando el error de velocidad es alto, especificando para tramas seriales largas.
Los valores de los errores son calculados usando la siguiente ecuacin.





















19. USART en Modo SPI

19.1 ESPECIFICACIONES
Full Duplex, Tres hilos (Three-wire) para transferencia de datos Sincrnica.
Operacin Maestro
Soporta cuatro modos de operacin SPI (Modo 0, 1, 2, y 3)
Transferencia de datos LSB o MSB (Orden de Configuracin de Datos)
Operacin en cola (Doble Buffer)
Alta resolucin del generador de velocidad en Baudios
Alta velocidad de operacin (fXCKmax = fCK/2)
Generador de Interrupciones Flexible

19.2 Revisin General
El Receptor y Transmisor serial universal sincrnico y asincrnico (USART)
puede ser puesto como maestro SPI en modo dcil de operacin. Configurando
ambos bits a uno del UMSELn1:0 y habilitando el USART en MSPIM. En este
modo de operacin el control del SPI maestro toma el mando directo por
encima de los recursos del USART. Estos recursos incluyen la transmisin y
recepcin del registro de desplazamiento y buffers, y el generador de velocidad
en baudios.
El generador de paridad y chequeo, el dato y la recuperacin lgica del reloj, y
el control lgico RX y TX son deshabilitados. El control lgico RX y TX del
USART es remplazado comnmente por el control lgico de transferencia del
SPI. Sin embargo, el control lgico del pin y el generador lgico de interrupcin
es idntico en ambos modos de operacin. Las localidades de los registros de
E/S son los mismos en ambos modos. Sin embargo, algunas de las
funcionalidades del registro de control cambian cuando usan MSPIM.

19.3 Generacin de Reloj
Generacin lgica del Reloj produce una base de reloj para la transmisin y
Recepcin. Para el USART modo de operacin MSPIM solo la generacin
interna del reloj es soportada (por ejemplo operacin maestro). La Direccin del
Registro de Datos para el pin XCKn (DDR_XCKn) por consiguiente seria puesta
a uno (como en la salida) para el USART en MSPIM a operacin correcta.
Preferiblemente el DDR_XCKn debera ser puesta antes de que el USART en
MSPIN sea habilitado (bits TXENn y RXENn puestos en uno). La generacin del
reloj interno es usada en modo MSPIM esto es idntico para el USART en modo
asincrnico maestro. La velocidad en baudios configurada en UBRRn puede ser
calculada usando las mismas ecuaciones:



BAUD Velocidad en baudios (en bits por segundo, bps)
fOSC Frecuencia de reloj del sistema
UBRRn Contenido de los registros UBRRnH y UBRRnL, (0-4095)

19.4 Modo de Datos y Tiempos SPI
Existen cuatro combinaciones de XCKn (SCK) fase y polaridad con respecto a
los datos seriales, los cuales son determinados por los bits de control y
UCPOLn. Los diagramas de transferencia de datos son mostrados en la Figura
19-1- Los bits de Datos son desplazados y Habilitados en blancos opuestos de la
seal del XCKn, asegurando el tiempo suficiente para que se estabilice la seal
de datos. La funcionalidad de UCPOLn y UCPHAn se muestra en la tabla 19-2.
Note que los cambio de la configuraciones en cualquiera de estos bits
interrumpen la comunicacin para ambos tanto Receptor como Transmisor.






19.5 Formatos de Trama
La trama serial para el MSPIM es definida para ser de o bits de Caracteres de
datos. EL USART en modo MSPIM tiene dos formatos de tramas vlidas:

8-bits de datos con MSB primero.
8-bit de datos con LSB primero.

La trama comienza con el dato del bit ms o menos significante. Luego los bits
del siguiente dato, suben a un total de ocho, esto sucede, enviando con el bit
ms o menos significante. Cuando una trama completa es transmitida, una
nueva trama puede directamente seguir, o la lnea a de comunicacin puede ser
puesta en alto (idle).

El bit UDORDn en UCSRnC pone el formato de trama usada por la USART en
modo MSPIM. La recepcin y Transmisin usa la misma configuracin. Note
que el cambio de configuracin de cualquiera de estos bits interrumpira la
comunicacin para ambos tanto Recepcin como Transmisin.
La transferencia de 16-bits puede ser almacenada escribiendo dos bits de datos
a UDRn. El UART transmite completamente las interrupciones luego de que el
valor en 16-bits ha sido desplazado.

19.5.1 Inicializacin USART MSPIM
El USART en modo MSPIM tiene que ser inicializado antes que cualquier
comunicacin pueda tener lugar. El proceso de inicializacin normalmente
consiste en la configuracin de la velocidad en baudios, configurando en modo
maestro de operacin (Poniendo DDR_XCKn a uno), configurando el formato
de trama y habilitando el Transmisor y Receptor. Solo el transmisor puede
operar independientemente. Para manejo de interrupciones USART, la Bandera
Global de Interrupcin debera ser limpiada (y as deshabilitar las
interrupciones globales) cuando se ha hecho la inicializacin.
Nota: para asegurarse que la inmediata inicializacin del XCKn del registro de
salida de la velocidad en baudios (UBRRn) seria cero al tiempo que la
transmisin es habilitada. Contrariamente al modo normal del USART
operando el UBRRn luego de ser escrito el valor deseado despus que la
transmisin es habilitada, pero antes de que la primera transmisin es iniciada.
Configurando UBRRn a cero antes habilitando la transmisin no es necesaria si
la inicializacin es hecha inmediatamente despus del reset desde que UBRRn
es reseteada a cero.
Antes de hacer la re-inicializacin con el cambio de velocidad en baudios, modo
de datos, o formato de trama, seria seguro que no habra transmisiones durante
el periodo en el que los registros son cambiados. La bandera TXCn puede ser
usada para chequear que transmisin ha sido completada, y la bandera RXCn
puede ser usada para chequear que no hay lecturas de datos en buffer de
recepcin. Note que la bandera TXCn seria limpiada antes de cada transmisin
(antes de que UDRn es escrita) si esto es usado para este propsito.
El siguiente ejemplo de cdigo para inicializacin del USART es mostrado en
asembler y en C que tienen igual funcionalidad.


19.6 Transferencia de Datos
Usando el USART en modo MSPI requiere que la transmisin sea habilitada,
por ejemplo el pin TXENn en el registro UCSRnB es puesta a uno. Cuando el
Transmisor es habilitado, la operacin normal del prtico en el pin TxDn
obtiene la funcin como la transmisin de salida serial.
Habilitando el Receptor es opcional y es hecho por la configuracin del bit
RXENn en el registro UCSRnB a uno. Cuando la Recepcin es habilitada, la
normal operacin del pin RxDn obtiene la funcin como entrada de recepcin
serial. El XCKn en ambos casos seria usada como el reloj de transferencia.
Despus de que la inicializacin del USART esta lista para hacer la transferencia
de datos. La transferencia de datos es inicializada por la escritura en UDRn
E/S. En este caso para ambos enviando y recibiendo datos desde el Transmisor
se controla el reloj de transferencia. El dato escrito a UDRn es movido para el
buffer de transmisin del registro de desplazamiento cuando este registro es
ledo al enviar una nueva trama.



19.6.1 Banderas del Transmisor y Receptor e Interrupciones
Las banderas RXCn, TXCn y UDREn y las correspondientes interrupciones en el
USART en el modo MSPIM son idnticas en funciones en operacin normal del
USART. Sin embargo, el estado de las banderas de error de recepcin (FE, DOR,
y PE) no son usadas y siempre son ledas como cero.

19.6.2 Deshabilitando el Transmisor o Receptor
La desabilitacin de la transmisin o recepcin en el USART en modo MSPIM
es idntica en la funcin el la operacin normal del USART.

19.7 AVR USART MSPIM vs. AVR SPI
El USART en modo MSPIM es totalmente compatible con el AVR SPI con
respecto a:
Diagrama de tiempos en modo maestro.
La funcionalidad del bit UCPOLn es idntica en el bit SPI CPOL.
La funcionalidad del bit UCPHAn es idntica en el bit SPI CPHA
La funcionalidad del bit UDORDn es idntica en el bit SPI DORD.

Sin embargo, desde el USART en modo MSPIM rehsa los recursos del USART,
el uso del USART en modo MSPIM es algo diferente comparado con el SPI.
Adicionalmente a diferencia del los bits del registro de control, y que solamente
la operacin en modo maestro es soportada por el USART en el modo MSPIM,
lo siguiente muestra la diferencia entre los dos mdulos:
El USART en modo MSPIM incluye (doble) buffer de transmisin. El SPI no
tiene buffer.
El USART en modo receptor MSPIM incluye un buffer adicional de nivel.
El bit SPI WCOL no esta incluido en el USART en el modo.
El SPI en modo de doble velocidad (SPI2X) bit no esta incluida. Sin embargo,
lo mismo afecta al almacenamiento por la configuracin del UBRRn acordada.
El tiempo de Interrupcin no es compatible.
El Pin de control difiere del maestro solo en la operacin del USART en modo
MSPIM.



19.8 Descripcin de Registros
La siguiente seccin describe los registros usados para la operacin SPI usando
el USART.

19.8.1 UDRn USART MSPIM I/O Registro de Datos
La funcin y la descripcin del bit del USART registro de datos (UDRn) en
modo MSPI es idntica la operacin normal del USART.

19.8.2 UCSRnA USART MSPIM Registro de Control y Estado n A

Bit 7 - RXCn: Recepcin Completa del USART
El bit de esta bandera es puesto cuando no hay lectura de datos en el buffer de
recepcin y ser limpiado cuando el buffer de recepcin esta vaco. Si el
Receptor es deshabilitado, el buffer de recepcin ser vaciado y
consecuentemente el bit RXCn llegara hacer cero. LA bandera RXCn puede ser
usada para generar una interrupcin cuando se completa la recepcin.

Bit 6 - TXCn: Transmisin Completa del USART
Esta bandera es puesta cuando una trama entera en el registro de transmisin y
desplazamiento ha sido desplazado y no hay un nuevo dato presente en el
buffer de transmisin (UDRn). El bit de la bandera TXCn automticamente es
limpiada cuando la transmisin completa por interrupcin es ejecutada, o esto
puede ser limpiada por la escritura de uno es la localidad de estos bits. La
bandera TXCn puede generar una transmisin completa con interrupcin.

Bit 5 - UDREn: Registro de Datos cuando el USART esta vaco
La bandera UDREn indica si el buffer de transmisin (UDRn) es ledo para la
recepcin de un nuevo dato. Si UDREn es uno, el buffer esta vaco, y estara
listo para ser escrito. La bandera UDREn puede generar una interrupcin en el
registro de datos cuando se vaca. UDREn es puesta despus de resetear o
indicar que el transmisor esta listo.

Bit 4:0 Bits Reservados en modo MSPI
Cuando esta en modo MSPI, estos bits son reservados para usos futuros. Para
compatibilidad con futuros dispositivos, estos bits serian escritos a cero cuando
UCSRnA es escrito.

19.8.3 UCSRnB Registro de Control y estado USART MSPIM n B


Bit 7 - RXCIEn: Habilitacin de Interrupciones cuando la Recepcin es
completada
Escribiendo este bit a uno se habilita la bandera de interrupcin en RXCn. El
USART habilita la interrupcin cuando la recepcin es completada si el bit
RXCIE es escrita con uno, la Bandera de Interrupciones Globales es el SREG es
escruta a uno y el bit RXCN en UCSRnA es habilitado.

Bit 6 - TXCIEn: Habilitacin de Interrupciones cuando la Transmisin es
completada
Escribiendo este bit a uno se habilita la bandera de interrupcin en TXCn. El
USART habilita la interrupcin cuando la recepcin es completada si el bit
TXCIE es escrita con uno, la Bandera de Interrupciones Globales es el SREG es
escruta a uno y el bit en UCSRnA es habilitado.


Bit 5 - UDRIE: Habilitacin de Interrupciones cuando el Registro de datos
es vaciado en el USART
Escribiendo este bit a uno se habilitan las interrupciones en la bandera UDREn.
La interrupcin cuando el registro de datos esta vaco ser generada solo si el
bit UDRIE es escrito con uno, La bandera de Interrupciones Globales en el
SREG es escrita a uno y el bit UDRE en UCSRnA es habilitada.

Bit 4 - RXENn: Habilitacin de Recepcin
Escribiendo este bit a uno habilita la recepcin en el USART en el modo
MSPIM. La Recepcin afectara la operacin normal del prtico para el pin
RxDn cuando es habilitado. Deshabilitando la Recepcin se vaciara el buffer de
recepcin. Solo habilitando la recepcin en el modo SPI (configurando
RXENn=1 y TXENn=0) no tiene importancia desde esta transmisin que
controla el reloj de transferencia y solo el modo maestro es soportado.



Bit 3 - TXENn: Habilitacin de la Transmisin.
Escribiendo uno en este bit se habilita la Transmisin de l USART. El
Transmisor afectara la normal operacin del prtico cuando el pin TxDn es
habilitado. La desabilitacin del transmisor no llegara hacer efectiva hasta que
se complete una transmisin, por ejemplo cuando el registro de desplazamiento
y el buffer de transmisin del registro no contienen datos para ser transmitidos.
Cuando se deshabilita, la transmisin no afectara al prtico en el que se
encuentra el TxDn.

Bit 2:0 Bits reservados en el modo MSPI
Cuando esta en el modo MSPI, estos bits son reservados par usos futuros. Para
compatibilidad con dispositivos futuros, estos bits deben ser escritos a cero
cuando el UCSEnB es escrito.


19.8.4 UCSRnC Registro de Estado y Control n C USART MSPIM



Bit 7:6 - UMSELn1:0: Seleccin de Modo del USART
Estos bits seleccin el modo de operacin del USART como se muestra en la
tabla 19-4. Ver en la pag. 191 del datasheet. El MSPIM es habilitado cuando
ambos bits del UMSEL son puestos en uno. UDORDn, UCPHAn, y UCPOLn
pueden ser habilitados al mismo tiempo de la operacin de escritura cuando el
MSPIM es habilitado.



Bit 5:3 Bits Reservados en modo MSPI
Cuando esta en modo MSPI, estos bits son reservados para uso futuro. Para
compatibilidad con dispositivos futuros, estos bits deben ser escritos con cero
cuando UCSRnC es escrito.


Bit 2 - UDORDn: Orden de Datos
Cuando se pone en uno el LSB la palabra de datos es transferida primero.
Cuando se pone en cero el MSB la palabra de datos es transferida primero.

Bit 1 - UCPHAn: Fase del Reloj
La configuracin del bit UCPHAn determina si el dato es muestreado en el
flanco de subida o en el flanco de bajada del XCKn.


Bit 0 - UCPOLn: Polaridad del Reloj
La configuracin del bit UCPOLn pone la polaridad del reloj XCKn. La
combinacin de la configuracin de los bits UCPOLn y UCPHAn determinan el
tiempo de la transferencia de datos.
































20. Interfase Serial 2 Hilos (2-wire)

20.1 Descripcin
Interfase de comunicacin flexible, solo necesita dos lneas del bus.
Soportan la operacin de Maestro y Esclavo
Los Dispositivos pueden operar como Transmisor o Receptor
7- bits de direccin permiten a 128 diferentes direcciones de esclavo.
Soporte arbitrario multi-maestro
Velocidad de transferencia de datos superior a 400 KHz.
Slew-rate Limited Output Drivers
Circuitera de supresin de ruido y picos en las lneas del bus.
Direccin del Esclavo Totalmente Programable con el Apoyo de Llamada de
General
Reconocimiento de la direccin al despertar el AVR del modo Sleep.

20.2 Definicin del Bus de Interfase serial (2-wire)
La interfase seria de 2-hilos (TWI) es idealmente satisfecha para aplicaciones
tpicas de los microcontroladores. El protocolo TWI permite el diseo del
sistema a interconectar a 128 dispositivos diferentes usando solo dos lneas del
bus bi-direccionable, una para reloj (SCL) y otra para datos (SDA). Solo el
hardware externo necesita que la implementacin del bus sea simplemente una
resistencia pull u para cada una de las lneas de los buses TWI. Todos los
dispositivos conectados al bus tienen direcciones individuales, y mecanismos
para resolver la disputa del bus sin inherentes en el protocolo TWI.


20.2.1 Terminologa TWI
Las siguientes definiciones son frecuentemente encontradas en esta seccin.


20.2.2 Interconexin Elctrica
Ambas lneas del bus con conectadas a la fuente de voltaje positiva a travs de
las resistencias pull up. Los controladores del bus de todos los dispositivos TWI
son de colector-abierto. Esto implementa una funcin AND con la cual es
esencial la operacin de la interfase. Un bajo nivel en la lnea del bus TWI es
generada cuando uno o ms dispositivos de salida TWI son cero. Un alto nivel
es salida cuando todos los dispositivos TWI estn en buen estado a sus salidas,
permitiendo a la resistencias pull up una lnea en alto. Note que todos los
dispositivos AVR conectados al bus TWI seran encendidos a medida que
permita cualquier operacin del bus.
El nmero de dispositivos que pueden ser conectados es solo limitado por el
lmite de capacitancia de 400 pF y el 7-bit del espacio de direccin del esclavo.
Dos diferentes especificaciones estn presentes aqu: una relevante para la
velocidad del bus 100 Khz., y una valida para una velocidad del bus superior a
400 KHz.

20.3 Transferencia de Datos y Formato de Trama
20.3.1 Transfiriendo Bits
Cada bit de datos es transferido en el bus de TWI es acompaado por un pulso
en la lnea del reloj. El nivel de la lnea de datos seria estable cuando la lnea del
reloj esta en alto. La nica excepcin de esta regla es para generar condiciones
de comienzo y finalizacin.






20.3.2 Condiciones de Inicio y Parada
El Maestro inicia y termina la transmisin de datos. La transmisin es
inicializada cuando el Maestro emite la condicin de Inicio en el bus, y esto es
terminada cuando el Maestro emite la condicin de Parada. Entre la condicin
de Inicio y Final, el bus lo considera como basura, y otro maestro no debera
intentarlo. Un caso especial ocurre cuando una nueva condicin de Inicio es
emitida entre la condicin de Inicio y Finalizacin. Esto es referido como una
condicin de Inicio Repetitiva, y es usada cuando el maestro desea inicializar
una nueva transmisin sin abandonar el control del bus. Despus del Inicio
Repetitivo, el bus es considera basura hasta la siguiente parada. Esta conducta
es idntica al Inicio, y por consiguiente el Inicio es usado para describir ambos
Inicio e Inicio Repetitivo para la el resto de este manual. Las condiciones de
Inicio y Fin son sealadas por la carga del nivel de la lnea SDA cuando la lnea
SCL esta en alto.



20.3.3 Formato del Paquete de Direccin
Todos los paquetes de direcciones transmitidas en el bus TWI son de una
longitud de 9-bits, consisten de 7 bits de direcciones, un bit de control de
lectura/escritura y un bit desconocido. Si el bit de lectura/escritura es
habilitado, la operacin de lectura seria realizado, por otra parte la operacin de
escritura sera realizada. Cuando el esclavo reconoce que esta siendo
direccionada, esto debera ser desconocido por pulling SDA low en el noveno
ciclo del SCL (ACK). Si la direccin del esclavo es basura, o po r algunas otras
razones puede no servir la respuesta del Maestro, la lnea SDA debera ser
salida en alto en el ciclo de reloj ACK. El Maestro puede luego transmitir la
condicin de parada, o condiciones de inicio repetitivo al iniciar la nueva
transmisin. El paquete de direccin consiste de direcciones esclavo y los bits
de Lectura o Escritura son llamados SLA+R o SLA+W respectivamente.
El MSB del byte de direccin es transmitido primero. Las direcciones esclavas
pueden libremente ser localizadas por el diseador, perola direccin 0000 000
es reservada para llamadas generales.

Cuando un llamada general es emitida, todos los esclavos deberan responder
por by pulling the SDA line en el ciclo del ACK. Una llamada general es usada
cuando el Maestro desea transmitir el mismo mensaje a varios esclavos en el
sistema. Cuando la direccin de la llamada general seguida por el bit de
escritura en el bus, todos los esclavos desconocen la llamada general pull the
SDA line low in the ack cycle
Los siguientes paquetes de datos luego de ser recibidos por todos los esclavos
que desconocen la llamada general. Note que transmitiendo la llamada general
a las siguientes direcciones por el bit de lectura no tiene sentido, si varios
esclavos comienzan transmitiendo diferentes datos. Todas la direcciones con
formato 1111 XXX deberan ser reservadas para propsitos futuros.



20.3.4 Formato del Paquete de Datos
Todos los paquetes de datos transmitidos en el bus del TWI son de nueve bits
de longitud, consistiendo de un byte de datos y unos bits desconocidos.
Durante la transferencia, el Maestro genera el reloj y el USART y condiciones de
Parada, mientras la recepcin es responsable por desconocidas recepciones.
Una desconocida (ACK) es sealada por la recepcin pulling the SDA line low
durante el noveno ciclo SCL. Si la recepcin llega ha ser la lnea de alto SDA, el
NACK es sealada. Cuando el receptor tiene receptado el ultimo byte, o por
algunas razones no puede receptar mas bytes, esto debera informar la
transmisin enviando al NACK despus del byte final. EL MSB del byte de
datos es transmitido primero.




20.3.5 Combinando Direcciones y Paquetes de Datos dentro de la
Transmisin
La transmisin bsica consiste de condiciones de INICIO, SLA+R/W, una o
mas paquetes de datos y condiciones de PARADA. Un mensaje vaci, que
consiste de un INICIO seguido por la condicin de PARADA, es ilegal.
Note que el Wired-ANDing de la lnea SCL puede ser usado para implementar
hadshaking entre el Maestro y el Esclavo. El esclavo puede extender el periodo
en bajo del SCL por pulling the SCL line low. Esto es til si la velocidad del reloj
puesta por el Maestro es tambin rpida para el Esclavo, o el Esclavo necesita
tiempo extra para procesamiento entre la transmisin de datos. El Esclavo
entendiendo el periodo en bajo del SCL no afectara el periodo en alto del SCL,
con lo cual es determinado por el Maestro. Como consecuencia el Esclavo
puede reducir la transferencia de datos del TWI por prolongamiento del SCL
duty cycle.




20.4 Sistemas de Buses Multi-maestro, Sincronizacin y
Arbitracin
El protocolo TWI permite sistemas de bus con varios maestros. Se han tomado
precauciones especiales para asegurar que las transmisiones sean procesadas
normalmente, incluso si dos o ms maestros inician la transmisin al mismo
tiempo. Dos problemas suceden en sistemas multi-maestros:
Un algoritmo seria implementado permitiendo solo uno de los maestros para
completar la transmisin. Todos los otros maestros deberan cesar la
transmisin cuando ellos descubren que tienen perdido el proceso seleccionado.
Este proceso seleccionado es un llamado arbitrario. Cuando el maestro descubre
que ha perdido el proceso arbitrario, debera inmediatamente cambiar a modo
esclavo para chequear si ha sido direccionado por la ganancia del maestro. De
hecho que mltiples maestros tienen comienzo de transmisin al mismo tiempo
que no deberan detectar esclavos, por ejemplo, los datos siendo transferidos en
el bus no deberan ser interrumpidos.

Diferentes maestros pueden usar diferentes frecuencias SCL. Se utilizara un
esquema para sincronizacin de relojes seriales para todos los maestros, a
medida que se permitira la transmisin procesada en el lockstep fashion. Esto
facilitara los procesos arbitrarios.
The wired-ANDing de las lneas del bus es usado para solucionar ambos
problemas. Los relojes seriales desde todos los maestros serian wired-ANDed,
rindiendo un reloj combinado con altos periodos igual a uno desde el Maestro
con el periodo ms corto. El periodo en bajo del reloj combinado es igual al
periodo en bajo del Maestro con el periodo ms largo. Note que todos los
maestros escuchan la lnea del SCL, efectivamente comenzando a contar su SCL
en alto y en bajo en periodos fuera de tiempo cuando la combinacin de lneas
SCL van en alto o en bajo, respectivamente.



El arbitraje se lleva a cabo por todos los maestros que continuamente
monitorean la lnea SDA
Despus de la salida de datos. Si el valor ledo desde la lnea SDA no coincide
con la salida que tiene el Maestro, tiene perdido el arbitraje. Note que el
Maestro solo puede perder el arbitraje cuando las salidas tienen un valor en alto
SDA mientras las salidas de otro maestro tiene un valor bajo. La prdida del
Maestro debera inmediatamente ir al modo esclavo, chequeando si esto esta
siendo direccionado por el maestro. La lnea SDA debera ser dejada en alto,
pero la prdida del maestro permite generar una seal de reloj hasta el fin del
dato actual o paquete de direcciones.

Arbitrariamente continuara hasta solo uno del resto de Maestros, y esto puede
tomar muchos bits. Si varios maestros estn probando la direccin al mismo
esclavo, arbitrariamente continuara en el paquete de datos.




Este es el uso del software responsable para asegurar que estas condiciones
arbitrarias ilegales nunca ocurrirn. Esto implica que en los sistemas multi-
maestros, todos los datos contendrn la misma composicin del SLA+R/W y
paquetes de datos.

20.5 Revision del modulo TWI


20.5.1 Pines SCL y SDA
Estos son los pines de interfase del AVR TWI con el resto de sistemas MCU. La
salida de los controladores contienen slew-rate limitados a medida que
conforman las especificaciones TWI. Las fases de entrada contienen picos de
supresin unitaria removiendo picos menores que 50 ns. Note que las pull-up
internas en el AVR pueden ser habilitadas por la configuracin de los bits del
PORT correspondientes a los pines SCL y SDA, como se explic en la seccin de
Prticos de E/S. Las pull-up internas pueden en algunos sistemas eliminar la
necesidad de unas externas.

20.5.2 Bit Unidad Generador de velocidad
Esta unidad controla el periodo del SCL cuando esta operando en modo
Maestro. El periodo SCL es controlado por la configuracin en el bit TWI del
registro de velocidad (TWBR) y los bits del prescalador en el Registro de Estado
del TWI (TWSR). La operacin esclavo no depende del bit de velocidad o de la
configuracin del prescalador, pero la frecuencia de reloj del CPU en el esclavo
seria menor a 16 veces superior que la frecuencia del SCL.
Note que los esclavos pueden prolongar el periodo en bajo del SCL, por eso
reduciendo el promedio el periodo del bus del reloj del TWI. La frecuencia del
SCL es generada de acuerdo a la siguiente ecuacin:



20.5.3 Unidad de Interfase del Bus
Esta unidad contiene el Dato y la Direccin del Registro de Desplazamiento
(TWDR), el controlador del Inicio/Final la deteccin del hardware arbitraria. El
TWDR contiene la direccin o los bytes de datos a ser transmitidos, o la
direccin o los bytes recibidos. Adicionalmente a los 8-bits TWDR, la unidad
del bus de interfase tambin contiene el bit (N) ACK a ser transmitido o
recibido. Este registro (N) ACK no es directamente accesible por el software
aplicado. Sin embargo, cuando recibe, esto puede ser puesto en uno o en cero
por la manipulacin del registro de control del TWI (TWCR). Cuando en el
modo de transmisin, el valor del bit de recepcin (N)ACK puede ser
determinado por el valor en el TWSR.
El controlador de Inicio/Parada es responsable para la generacin y deteccin
de la condiciones de Inicio, Inicio repetitivo, y Parada. El controlador de Inicio
/Parada es capaz de detectar las condiciones de inicio y Parada cuando el AVR
MCU esta en uno el modo sleep, habilitando el MCU para que se despierte si
esta direccionada por el maestro. Si el TWI tiene iniciada la transmisin como
Maestro, la deteccin arbitraria por hardware continuamente monitorea la
transmisin probando y determinando sui la arbitracin es procesada. Si el TWI
tiene perdida una arbitracin, la unidad de control es informada. Una correcta
accin puede ser puesta y apropiadamente generar cdigos de estado.

20.5.4 Unidad de Direccin
La unidad de direccin chequea si la direccin de los bytes recibidos del 7-bit en
el registro de direccin en TWI (TWAR). Si el TWI reconoce una llamada
general habilita el bit (TWGCE) en el TWAR con uno, todos los bits de
direcciones entrantes tambin serian comparadas nuevamente las direcciones
de las llamadas generales. La unidad de control es informada, permitiendo una
accin correcta para ser tomada. El TWI puede o no reconocer estas direcciones,
dependiendo de la configuracin del TWCR. La unidad de direccin es capaz
de comparar direcciones cuando el AVR MCU esta en modo sleep, habilitando
el MCU para despertarlo si esta direccionado por el Maestro. Si otra
interrupcin ocurre durante TWI power-down despierta el CPU, el TWI aborta
la operacin y retorna al estado idle. Si esto causa algunos problemas,
seguramente que la direccin del TWI solamente habilita la interrupcin
cuando se produce un Power-down.


20.5.5 Unidad de Control
La unidad de control monitorea el bus TWI y genera respuestas
correspondientemente alas configuraciones en el registro de control del TWI
(TWCR). Cuando un evento requiere la atencin de las aplicaciones ocurridas
en el bus del TWI, la bandera del Interrupcin del TWI (TWINT) es confirmada.
En el siguiente ciclo de reloj, el Registro de estado del TWI (TWSR) es
actualizado como cdigo de estado identificando el evento. El TWSR solo
contiene informacin de estado relevante cuando la bandera de interrupcin es
confirmada. Para todos los otros tiempos, el TWSR contiene un cdigo de
estado especial indicando que la informacin de estado relevante no esta
disponible. Si la bandera permanece en uno en el TWINT. La lnea del SCL es
sostenida en bajo. Esto permite la aplicacin de software para completar estas
tareas antes permitiendo que la transmisin TWI contine.

La bandera TWINT es habilitada en las siguientes situaciones:
Despus que el TWI ha transmitido en condicin Inicio/Inicio repetitivo.
Despus que el TWI ha transmitido SLA+R/W.
Despus que el TWI ha transmitido en la direccin del byte.
Despus que el TWI ha perdido arbitrariamente.
Despus que el TWI ha sido direccionada por su propia direccin esclavo o
llamada general.
Despus que el TWI ha recibido el byte de datos.
Despus de Parar o Comenzar repetitivamente ha sido recibida mientras
todava se direcciona como esclavo.
Cuando un error en el bus ha ocurrido en una condicin ilegal del Inicio y
Parada.


20.6 Usando el TWI
El AVR TWI es un byte-orientado basado en una interrupcin. Las
interrupciones son emitidas despus de todos los eventos del bus, similar a la
recepcin del byte o transmisin de condiciones de INICIO. Porque el TWI es
una base de interrupcin, el software de aplicaron es libre al carry en otras
operaciones durante el byte transferido en el TWI. Note que el bit de
habilitacin de la interrupcin del TWI (TWIE) en TWCR junto el bit de la
Habilitacin de Interrupciones Globales en el SREG permitiendo la aplicacin a
decidir si no hay asercin de la bandera TWINT debera generar una respuesta
de interrupcin. Si el bit TWIE es limpiado, la aplicacin de la bandera TWINT
solamente detectara acciones en el bus del TWI.
Cuando la bandera TWINT es afirmada, el TWI ha finalizado una operacin y
espera la respuesta aplicada. En este caso, el Registro de estado TWI (TWSR)
contiene el valor indicando el estado actual del bus TWI. El software de
aplicacin puede luego decidir como el TWI debera comportarse en el
siguiente ciclo del bus del TWI por manipulacin de los registros TWCR y
TWDR. La Figura 20-10 es un simple ejemplo de cmo la aplicacin puede ser
una interfase al hardware del TWI. En esencia, mayores detalles sern
explicados en esta seccin.


1. El primer paso en la transmisin TWI es transmitir una condicin de INICIO.
Esto es hecho escribiendo un valor especifico en TWCR, instruyendo el
hardware TWI a transmitir en la condicin de INICIO. Con lo cual el valor a
escribir es descrito luego. Sin embargo, es importante que el bit TWINT sea
puesto en el valor escrito. Escribiendo uno en TWINT las banderas son
limpiadas. El TWI no empezar ninguna operacin mientras el bit TWINT en
TWCR es uno. Inmediatamente despus la aplicacin ha sido limpiada TWINT,
el TWI iniciara la transmisin de la condicin de INICIO.

2. Cuando la condicin de INICIO ha sido transmitida, la bandera TWINT en
TWCR es uno, y TWSR es actualizada con cdigos de estado indicando que la
condicin de INICIO ha sido enviada satisfactoriamente.

3. El software de aplicacin debera ahora examinar el valor de TWSR, para
asegurarse que la condicin de INICIO fue transmitida satisfactoriamente. Si
TWSR indica por otra parte, el software de aplicacin podra tomar una accin
en especial, llamando una rutina de error. Asumiendo que el cdigo de estado
es esperado, la aplicacin cargara SLA+W dentro de TWDR. Recordando que
TWDR es usado ambos para direccionar el dato. Despus TWDR ha sido
cargado con el SLA+W deseado, un valor especifico seria escrito a TWCR,
instruyendo el TWI hardware a transmisin del SLA+W presente en TWDR.
Cuyo valor a escribirse es descrito despus. Sin embargo, es importante que el
bit TWINT sea puesto en el valor escrito. Escribiendo uno en TWINT se limpian
las banderas. El TWI no empezara ninguna operacin mientras el bit de
TWINT en TWCR sea uno. Inmediatamente despus que la aplicacin ha sido
limpiada TWINT, el TWI iniciara la transmisin del paquete de direcciones.

4. Cuando el paquete de direcciones ha sido transmitido, la bandera TWINT en
TWCR es uno, y TWSR es actualizada con el cdigo de estado indicando que el
paquete de direcciones ha sido enviada satisfactoriamente. El cdigo de estado
tambin refleja si el esclavo desconoce o no el paquete.

5. El software de aplicacin debera examinar ahora el valor de TWSR, para
estar seguros que el paquete de direccin fue transmitido satisfactoriamente, y
que el valor del bit ACK fue
Esperado. Si TWSR indica por otra parte, el software de aplicacin tomara
algunas acciones especiales, como llamar una rutina de error. Asumiendo que el
cdigo de estado es esperado, la aplicacin cargar un paquete de datos dentro
del TWDR. Subsecuentemente, un valor especfico sera escrito a TWCR,
instruyendo el hardware TWI a transmitir el paquete de datos presente en
TWDR. Con el cual el valor escrito es descrito despus. Sin embargo, es
importante que el bit TWINT sea puesto en el valor escrito. Escribiendo uno a
TWINT las banderas son limpiadas. El TWI no iniciar ninguna operacin
mientras el bit TWINT en TWCR sea uno. Inmediatamente despus la
aplicacin es limpiada en TWINT, el TWI iniciar la transmisin del paquete de
datos.

6. Cuando el paquete de datos ha sido transmitido, la bandera TWINT en
TWCR ser uno, y TWSR es actualizado con el cdigo de estado indicando que
el paquete de datos ha sido enviado satisfactoriamente. El cdigo de estado
tambin reflejara si el esclavo desconoce el paquete.

7. El software de aplicacin debera ahora examinar el valor de TWSR, para
asegurarse que el paquete de datos fue transmitido satisfactoriamente, y que el
valor del bit ACK fue esperado. Si TWSR indica por otra parte, el software de
aplicacin tomara algunas acciones especiales, como llamar una rutina de error.
Asumiendo que el cdigo de estado es esperado, la aplicacin escribira el valor
especfico a TWCR, instruyendo el hardware TWI a condicin de transmisin
de parada. El valor escrito es descrito mas adelante. Sin embargo, es
importante que el bit TWINT sea puesto en el valor escrito. Escribiendo uno en
TWINT las banderas son limpiadas. El TWI no empezar ninguna operacin
mientras el bit TWINT en TWCR sea uno. Inmediatamente despus la
aplicacin es limpiada en TWINT, el TWI inicia la transmisin de parada. Note
que TWINT no es habilitada despus de una condicin de PARADA ha sido
enviada.

Cuando el TWI ha finalizado una operacin y espera una respuesta a la
aplicacin, la bandera TWINT es uno. La lnea SCL es pulled low hasta que
TWINT es limpiada.

Cuando la bandera TWINT es uno, el usuario actualizara todos los registros
TWI con el valor relevante para el siguiente ciclo del bus TWI. Como un
ejemplo, TWDR sera cargado con el valor a ser transmitido en el siguiente ciclo
del bus.

Despus todos los Registros TWI actualizan y otras tareas del software de
aplicacin han sido completadas, TWCR es escrito. Cuando se escribe en
TWCR, el bit TWINT debera ser habilitado. Escribiendo uno en TWINT las
banderas son limpiadas. El TWI luego comenzara a ejecutar operaciones que
fueron especificadas por la configuracin del TWCR.
En la siguiente implementacin del cdigo asembler y C. Note que el cdigo
asume que varias definiciones han sido hechas.





20.7 Modos de Transmisin
El TWI puede operar en uno de los cuatros modos. Estos son nombrados
Transmisores Maestros (MT), Receptores maestros (MR), Transmisores Esclavos
(ST) y Receptores Esclavos. Varios de estos modos pueden ser usados en las
mismas aplicaciones. Como ejemplo, el TWI puede usarse en modo MT para
escribir datos en TWI EEPROM, el modo MR para lectura de datos de respaldo
desde la EEPROM. Si otros maestros estn presentes en el sistema, algunos de
estos transmitiran los datos del TWI, y luego el modo SR seria usado. Este es el
software de aplicacin que decide cuales modos son legales.
La siguiente seccin describe cada de estos modos. Estas figuras contienen las
siguientes abreviaciones:

S: condicin INICIO
Rs: condicin de INICIO REPETITIVO
R: Lectura de bits (alto nivel en SDA)
W: escritura de bits (bajo nivel en SDA)
A: bit desconocido (bajo nivel en SDA)
A: Bit desconocido (alto nivel en SDA)
Data: 8-bit de datos byte
P: condicin de PARADA
SLA: Direccin del esclavo

20.7.1 Modo Transmisor Maestro
En el modo Transmisor maestro, el nmero de bytes de datos son transmitidos
al Receptor Esclavo (Ver figura 20-11).Al entrar en modo Maestro, la condicin
de INICIO seria transmitida. El formato de los siguientes paquetes de
direcciones determinan si el modo de Transmisor Maestro o el Receptor
Maestro esta enterado. Todos los cdigos de estado mencionados en esta
seccin asumen que los bits del prescalador son cero y son mascaras a cero.

La condicin de INICIO es enviada por escritura con el siguiente valor en
TWCR:



TWEN seria uno al ser habilitado la interfaz serial 2-hilos (2-wire), TWSTA seria
escrita a uno al transmitir la condicin de INICIO y TWINT seria escrita a uno
para limpiar las banderas del TWINT. El TWI luego probara el bus serial 2-
hilos y generar una condicin de INICIO tan pronto el bus llega a estar libre.
Despus que la condicin de INICIO ha sido transmitida, la bandera TWINT es
puesta por hardware, y el cdigo de estado en TWSR sera 0x08. Al entrar en el
modo MT, SLA+W sera transmitido. Esto es hecho escribiendo SLA+W a
TWDR. Luego el bit TWINT debera ser limpiado (por la escritura de uno) y
continuar la transferencia. Esto es completado por la escritura de los siguientes
valores en TWCR:



Cuando SLA+W ha sido transmitido y un bit desconocido ha sido recibido.
TWINT es puesto en uno nuevamente y el nmero de cdigos de estados en
TWSR son posibles. Los cdigos de estado posibles en modo Maestro son 0X18,
0x20, o 0x38. Las acciones apropiadas a ser tomadas para cada de estos cdigos
de estado estn detalladas en el Tabla 20-2. Cuando SLA+W ha sido trasmitida
satisfactoriamente, el paquete de datos seria trasmitido. Esto es hecho
escribiendo el byte de datos a TWDR. TWDR solo sera escrito cuando TWINT
esta en alto. Por lo tanto, el acceso sera descargado, y la escritura del bit de
colisin (TWWC) sera uno en el registro TWCR. Despus actualizando TWDR,
el bit TWINT seria limpiado (por la escritura de uno) y continuara la
transferencia. Esto es completado por la escritura de los siguientes valores a
TWCR:



Este esquema es repetido hasta que el ltimo byte ha sido enviado y la
transferencia es finalizada generando una condicin de PARADA o repitiendo
la condicin de INICIO.
La condicin de PARADA es generada escribiendo los siguientes valores a
TWCR:



La condicin de COMIENZO REPETITIVO es generada escribiendo el valor
siguiente a TWCR:



Despus de repetir la condicin de INICIO (estado 0x10) la interfaz serial 2-
hilos puede acceder al mismo tiempo a Esclavo nuevamente, o el nuevo esclavo
sin la condicin de la transmisin de PARADA. Habilitando repetitivamente el
INICIO el Maestro cambie entre los modos de Esclavo, Transmisor Maestro y
Receptor maestro sin perder el control del bus.






20.7.2 Modo Maestro Receptor
En el modo Transmisor maestro, el nmero de bytes de datos son receptados
desde Transmisor Esclavo (Ver figura 20-13).Al entrar en modo Maestro, la
condicin de INICIO seria transmitida. El formato de los siguientes paquetes de
direcciones determinan si el modo de Transmisor Maestro o el Receptor
Maestro esta enterado. Si SLA+W es transmitido, el modo MT es enterado, si
SLA+R es transmitido, el modo MR es enterado. Todos los cdigos de estado
mencionados en esta seccin asumen que los bits del prescalador son cero y son
mascaras a cero.


La condicin de INICIO es enviada por escritura con el siguiente valor en
TWCR:




TWEN seria uno al ser habilitado la interfaz serial 2-hilos (2-wire), TWSTA seria
escrita a uno al transmitir la condicin de INICIO y TWINT seria escrita a uno
para limpiar las banderas del TWINT. El TWI luego probara el bus serial 2-
hilos y generar una condicin de INICIO tan pronto el bus llega a estar libre.
Despus que la condicin de INICIO ha sido transmitida, la bandera TWINT es
puesta por hardware, y el cdigo de estado en TWSR sera 0x08. Al entrar en el
modo MT, SLA+R sera transmitido. Esto es hecho escribiendo SLA+R a TWDR.
Luego el bit TWINT debera ser limpiado (por la escritura de uno) y continuar
la transferencia. Esto es completado por la escritura de los siguientes valores en
TWCR:



Cuando SLA+R ha sido transmitido y un bit desconocido ha sido recibido.
TWINT es puesto en uno nuevamente y el nmero de cdigos de estados en
TWSR son posibles. Los cdigos de estado posibles en modo Maestro son 0X38,
0x40, o 0x48. Las acciones apropiadas a ser tomadas para cada de estos cdigos
de estado estn detalladas en el Tabla 20-3. Recibiendo datos puede ser ledo
desde el registro TWDR cuando la bandera TWINT es puesta en alto por
hardware. Este esquema es repetido hasta el ltimo byte que ha sido recibido.
Despus que el ltimo byte ha sido recibido, el MR debera informar al ST
enviando a NZCK despus del ltimo byte de datos recibido. La transferencia
es generada escribiendo el valor siguiente a TWCR:



La condicin de COMIENZO REPETITIVO es generada escribiendo el valor
siguiente a TWCR:


Despus de repetir la condicin de INICIO (estado 0x10) la interfaz serial 2-
hilos puede acceder al mismo tiempo a Esclavo nuevamente, o el nuevo esclavo
sin la condicin de la transmisin de PARADA. Habilitando repetitivamente el
INICIO el Maestro cambie entre los modos de Esclavo, Transmisor Maestro y
Receptor maestro sin perder el control del bus.





20.7.3 Modo Receptor Esclavo
En el modo de Receptor Esclavo, el nmero de bytes de datos son receptados
desde el transmisor Maestro (ver Figura 20-15). Todos los cdigos de estado
mencionados en esta seccin asumen que los bits del prescalador son cero o
mascaras a cero.




Para iniciar el modo Receptor esclavo, TWAR y TWCR seran inicializadas
como lo siguiente:


Los 7 bits superior son direccionados para cambiar a la interfaz Serial 2-hilos
respondern cuando sea direccionado por el maestro. Si el LSB es uno, el TWI
responder a la direccin de llamada general (0x00) caso contrario esto ignorar
la llamada de direccionamiento general.



TWEN sera escrito a uno al habilitar el TWI. El bit TWEA seria escrito a uno al
habilitar el reconocimiento de los propios dispositivos direccionado como
esclavos o direcciones de llamada general. TWSTA y TWSTO seran escritos a
cero. Cuando TWAR y TWCR han sido inicializadas, el TWI espera hasta este
direccionamiento por sus propios direcciones de esclavo (o si estn habilitadas
las direcciones de llamadas generales) seguido por el bit de direccin de datos.
Si el bit de direccin es 0, el TWI operar en modo SR. Despus la propia
direccin del esclavo y el bit de escritura ha sido recibida, la bandera TWINT es
uno y el cdigo de estado vlido puede ser ledo desde TWSR. El cdigo de
estado es usado para determinar la accin de software adecuado. La accin
apropiada puede ser tomada para cada cdigo de estado en la Tabla 20-4- El
modo de receptor Esclavo puede tambin ser entera si arbitrariamente es
perdida mientras el TWI esta en el modo Maestro (ver los estados 0x68 y 0x78)

Si el bit TWEA es reset durante la transferencia, el TWI retornara a No
reconocido (1) a SDA despus del siguiente byte de datos recibido. Esto puede
ser usado para indicar que el esclavo no es capaz de recibir ms bytes. Mientras
TWEA es cero, el TWI no reconoce su propia direccin de esclavo. Sin embargo,
el bus Serial 2-hilos esta todava monitoreado y resumiendo direcciones puede
resumir a cualquier tiempo por la configuracin TWEA. Esto implica que el bit
TWEA puede ser usado temporalmente aislando el TWI del Bus Serial de 2-
hilos.
En modo sleep o modos Idle, el sistema de reloj del TWI es apagado y el bit
TWEA es uno, la interfase puede todava reconocer su propia direccin de
esclavo o la direccin de llamada general usando el bus de reloj serial de 2-hilos
como fuente de reloj.
La parte luego despierta desde el modo sleep y el TWI sostendra el reloj en
bajo del SCL durante el despertado y despus la bandera TWINT es limpiada
(por la escritura de uno). Mas all de la recepcin de datos seria cargada como
normal, con el reloj del AVR corriendo como normal. Observe que si el AVR
esta configurado con un prolongado tiempo de inicio, la lnea SCL puede ser
sostenido en bajo para un periodo largo, bloqueando otras transmisiones de
datos. Note que el registro de datos para interfase seria de 2-hilos TWDR no
reflejara el ultimo byte presente en el bus cuando despierta des de el modo
sleep.

















20.7.4 Modo de Transmisor Esclavo
En el modo de Transmisor Esclavo, el nmero de bytes de datos son
transmitidos desde el receptor Maestro (ver Figura 20-15). Todos los cdigos de
estado mencionados en esta seccin asumen que los bits del prescalador son
cero o mascaras a cero.


Para iniciar el modo Transmisin esclavo, TWAR y TWCR seran inicializadas
como lo siguiente:



Los 7 bits superior son direccionados para cambiar a la interfaz Serial 2-hilos
respondern cuando sea direccionado por el maestro. Si el LSB es uno, el TWI
responder a la direccin de llamada general (0x00) caso contrario esto ignorar
la llamada de direccionamiento general.


TWEN sera escrito a uno al habilitar el TWI. El bit TWEA seria escrito a uno al
habilitar el reconocimiento de los propios dispositivos direccionado como
esclavos o direcciones de llamada general. TWSTA y TWSTO seran escritos a
cero. Cuando TWAR y TWCR han sido inicializadas, el TWI espera hasta este
direccionamiento por sus propios direcciones de esclavo (o si estn habilitadas
las direcciones de llamadas generales) seguido por el bit de direccin de datos.
Si el bit de direccin es 1, el TWI operar en modo ST. Despus la propia
direccin del esclavo y el bit de escritura ha sido recibida, la bandera TWINT es
uno y el cdigo de estado vlido puede ser ledo desde TWSR. El cdigo de
estado es usado para determinar la accin de software adecuado. La accin
apropiada puede ser tomada para cada cdigo de estado en la Tabla 20-5- El
modo de transmisor Esclavo puede tambin ser entera si arbitrariamente es
perdida mientras el TWI esta en el modo Maestro (ver los estados 0xB0).

Si el bit TWEA es escrito a cero durante la transferencia, el TWI transmitira el
ltimo byte de la transferencia. El estado 0xC0 o 0xC8 seria entero,
dependiendo se el receptor maestro trasmite a NACK o ACK despus del byte
final. El TWI es cambiado al no direccionar en modo esclavo, e ignorara el
Maestro si esto contina la transferencia. En verdad el Receptor Maestro recibe
todos 1 como datos seriales. El estado 0xC8 es entero si el maestro demanda
bytes de datos adicionales (por transmisin ACK), Aunque el Esclavo ha
transmitido el ultimo byte (TWEA cero y esperando NACK desde el Maestro).
Mientras TWEA es cero el TWI no responde a la direccin del propio Esclavo.
Sin Embargo, el bus serial de 2-hilos es todava monitoreado y el
reconocimiento de direccin puede reasumir cuando quiera configurando el
TWEA. Esto implica que el bit TWEA puede ser usado temporalmente aislando
el TWI desde el bus serial de 2-hilos. En modo sleep o modos Idle, el sistema de
reloj del TWI es apagado y el bit TWEA es uno, la interfase puede todava
reconocer su propia direccin de esclavo o la direccin de llamada general
usando el bus de reloj serial de 2-hilos como fuente de reloj.
La parte luego despierta desde el modo sleep y el TWI sostendra el reloj en
bajo del SCL durante el despertado y despus la bandera TWINT es limpiada
(por la escritura de uno). Mas all de la recepcin de datos seria cargada como
normal, con el reloj del AVR corriendo como normal. Observe que si el AVR
esta configurado con un prolongado tiempo de inicio, la lnea SCL puede ser
sostenido en bajo para un periodo largo, bloqueando otras transmisiones de
datos. Note que el registro de datos para interfase seria de 2-hilos TWDR no
reflejara el ultimo byte presente en el bus cuando despierta des de el modo
sleep.











20.7.5 Miscellaneous States
Existen dos cdigos de estado que no corresponden a la definicin del estado
TWI, ver tabla 20-6. Los Estados 0xF8 indican que la informacin no relevante
es disponible porque la bandera TWINT no esta habilitada. Esto ocurre entres
otros estados, y cuando el TWI no esta involucrado en la transferencia serial.
Los estados 0x00 indican que el error del bus ocurre durante transferencia en el
bus serial de 2-hilos (2-wire). El error del bus ocurre cuando una condicin de
INICIO o PARADA ocurre en una posicin ilegal en el formato de trama.
Ejemplos de cmo las posiciones ilegales son durante la transferencia serial de
los byte de direccin, byte de datos, o bits reconocidos. Cuando un error de bus
ocurre, TWINT es habilitado. Para recuperar desde el error de bus, la bandera
TWSTO seria habitada y TWINT seria limpiada por escritura de uno lgico.
Esto causa que TWI no entre al modo de direccionamiento Esclavo y limpiar la
bandera TWSTO (los otros bits en TWCR no son afectados). Las lneas SDA y
SCL son soltadas, y las condiciones de PARADA son transmitidas.




20.7.6 Combinando varios Modos TWI
En algunos casos, varios modos TWI serian combinados para completar la
accin deseada. Considerar para los datos de los ejemplos ledos desde la
EEPROM serial. Tpicamente, una transferencia involucra los siguientes pasos:

1. La transferencia debe ser inicializada.
2. La EEPROM debe ser instruida que tipo de localidad debe ser leda.
3. La lectura debe ser realizada.
4. La transferencia debe ser finalizada.

Note que el dato es transmitido para ambos desde el Maestro al Esclavo o
viceversa. El maestro instruye al Esclavo para que sepa que localidad quiere
que lea, requiriendo el uso del modo MT. Subsecuentemente, el dato seria ledo
desde el Esclavo, empleando el uso del modo MR. La direccin de transferencia
seria cambiada. El Maestro guardara el control del bus durante todos estos
pasos, y los pasos deberan ser llevados a cabo como una operacin automtica.
Si este principio es violado en un sistema multimaestro, otro Maestro puede
alterar el puntero del dato en la EEPROM entre los pasos 2 y 3, y el Maestro
leera la localidad del dato errneo. Como el cambio en la direccin de
transferencia es completado transmitiendo a INICIO REPETITIVO entre la
transmisin del byte de direcciones y recepcin de los datos. Despus del
INICIO REPETITIVO, el Maestro guarda sus propiedades del bus. La siguiente
figura muestra el flujo en esta transferencia:



20.8 Sistemas Multimaestros y Arbitrarios
Si mltiples maestros son conectados al mismo bus, las transmisiones pueden
ser iniciadas simultneamente por uno o ms de ellos. El TWI estndar asegura
estas situaciones en el manual como otra va para que uno de los maestros
pertita el proceso con la transferencia, y que los datos no sean perdidos en el
proceso. Un ejemplo de una situacin arbitraria es explicado debajo, cuando
dos maestros son probados al transmitir datos al Receptor Esclavo.



Varios escenarios diferentes pueden levantarse durante la situacin arbitraria,
como se describe a continuacin:
Dos o ms maestros son realizados con comunicacin idnticas con el mismo
Esclavo. En este caso, ni el Esclavo ni ninguno de los Maestros conoceran
acerca del bus de conexin.
Dos o ms maestros son accesibles al mismo Esclavo con datos diferentes o bit
de direcciones. En este caso, las situaciones arbitrarias sucederan, o en los bits
de LECTURA/ESCRITURA o en los bits de datos. Los maestros prueban a la
salida con uno en SDA mientras otras salidas del Maestro lo hacen con cero.
Perdiendo maestros el cambio no direccionara al modo Esclavo y esperara
hasta que el bus este libre y transmitir una nueva condicin de INICIO.

Dos o ms maestros son asignados a Esclavos diferentes. En este caso,
ocurrira en los bits SLA. Los maestros prueban la salida con uno en SDA
mientras otro salida del Maestro esta en cero perdera la arbitrariedad. Los
Maestro pendiendo la arbitrariedad en SLA cambiaran al modo Esclavo y
chequearan si ellos son direccionados con el Maestro ganador. Si
direccionamos, ellos, cambiaran al modo SR o ST, dependiendo del valor del
bit de LECTURA/ESCRITURA. Si ellos nos empiezan a direccionar, el cambio
no direccionara el modo maestro u esperara hasta que el bus este libre y
transmita una nueva condicin, dependiendo de la accin del software de
aplicacin.


20.9 DESCRIPCION DE REGISTROS

20.9.1 TWBR TWI Bit Rate Register

Bits 7:0 Velocidad del Bit del Registro TWI
TWBR selecciona el factor de divisin para el bit generador de velocidad. Este
bit es la frecuencia dividida con lo cual genera la frecuencia de reloj SCL en los
modos Maestros.

20.9.2 TWCR Registros de Control TWI

El TWCR es usado para el control de la operacin del TWI. Esto es usado para
habilitar el TWI, al iniciar el acceso al Maestro aplicando la condicin de
INICIO al bus, al generar el reconocimiento del Receptor, al generar una
condicin de parada, y al detener el control del bus mientras el dato es escroto
al bus escribiendo al TWRD. Esto tambin indica la colisin de escritura al
TWRD mientras el registro es inaccesible.

Bit 7 TWINT: Bandera de Interrupcin del TWI
Este bit es habilitado por hardware cuando el TWI ha finalizado esto actualiza
el trabajo y espera la respuesta de la aplicacin por software. Si el bit-I en el
SREG y TWIE en TWCR son habilitadas, el MCU saltara al vector de
interrupcin del TWI. Mientras la bandera TWINT es habilitada, el periodo en
bajo del SCL es estrecho. La bandera TWINT seria limpiada por software
escribiendo uno lgico. Note que limpiando estas banderas comienza la
operacin del TWI, tan pronto todos los accesos al Registro de direcciones del
TWI (TWAR), registro de estados del TWI (TWSR), y el Registro de Datos del
TWI (TWDR) seria completados antes de limpiar estas banderas.


Bit 6 TWEA: Habilitacin del bit de Reconocimiento del TWI
El bit TWEA controla la generacin del pulso de reconocimiento. Si el bit TWEA
es escrito a uno, el pulso del ACK es generado en el bus del TWI si las
siguientes condiciones son conocidas:

1. El propio dispositivo Esclavo direccionado ha sido recibido.
2. Una llamada general ha sido recibida, mientras el bit TWGCE en TWAR es
habilitado.
3. El byte de datos ha sido recibido en el Receptor Maestro o en el modo
Receptor Esclavo.

Escribiendo el bit de TWEA a cero, el dispositivo puede ser virtualmente
desconectado temporalmente desde el bus serial de 2 hilos (2-wire), El
reconocimiento de la direccin puede Lugo ser resumido escribiendo el bit de
TWEA a uno nuevamente.

Bit 5 TWSTA: Bit de Condicin de INICIO del TWI
La aplicacin escribe el bit TWSTA a uno cuando desea llegar hacer Maestro en
el bus Serial de 2 hilos (2-wire). El hardware del TWI chequea si el bus esta
disponible, y genera una condicin de INICIO en el bus si este est libre. Sin
embargo, si el bus no est libre, el TWI espera hasta que una condicin de
PARADA sea detectada, y luego genera una nueva condicin de INICIO a
demanda del estado del bus Maestro. TWSTA sera limpiada por software
cuando la condicin de INICIO ha sido transmitida.

Bit 4 TWSTO: Bit de Condicin de PARADA del TWI
Escribiendo uno al bit del TWSTO en el modo Maestro generara una condicin
de PARADA en el bus serial de 2-hilos (2-wire). Cuando una condicin de
PARADA es ejecutada en el bus, el bit TWSTO es limpiado automticamente.
En modo esclavo, configurando el bit TWSTO puede ser usado para recuperar
desde una condicin de error. Esto no generara una condicin de PARADA,
pero el TWI retornara bien-definido reconociendo el modo Esclavo y colocando
a las lneas SCL y SDA en estado de alta impedancia.

Bit 3 TWWC: TWI Write Collision Flag
El bit TWWC es habilitado cuando se intenta escribir al Registro de datos del
TWI TWDR cuando TWINT esta en bajo. Esta bandera es limpiada
escribiendo el Registro TWDR cuando TWINT esta en alto.

Bit 2 TWEN: Habilitacin del Bit TWI
El bit TWEN habilita la operacin del TWI y activa la interfase del TWI. Cuando
TWEN es escrito a uno, el TWI toma todo el control de los pines de E/S
conectados al SCL t SDA, habilitando lmites de baja-velocidad y picos filtrados.
Si este bit es escrito a cero, el TWI cambia a apagado y todas las transmisiones
del TWI son terminadas, indiferentemente de cualquier operacin.
Bit 1 Res: Bits Reservados
Estos bits son reservados y siempre son escritos como cero.

Bit 0 TWIE: Habilitacin de Interrupciones del TWI
Cuando este bit es escrito a uno, y el bit-I en SREG es habilitado, la respuesta de
interrupcin del TWI seria activada mientras la bandera del TWINT este en
alto.

20.9.3 TWSR Registro de Estado del TWI

Bits 7:3 TWS: Estado del TWI
Estos 5 bits reflejan el estado lgico del TWI y del Bus serial de 2-hilos (2-wire).
Los diferentes cdigos de estado son descritos despus en esta seccin. Note
que el valor ledo desde TWSR contiene ambos los valores del estado del 5-bit y
el valor del prescalador del 2-bit. El diseo de aplicacin seria enmascarar los
bits del prescalador a cero cuando chequea los bits de Estado. Esto chequea
indiferentemente de las configuraciones del prescalador.

Bit 2 Res: Bits Reservados
Estos bits son reservados y siempre son escritos como cero.

Bits 1:0 TWPS: Bits del prescalador del TWI
Estos bits pueden ser ledos, escritos, y controlados por el bit prescalador de
velocidad.








20.9.4 TWDR Registro de Datos del TWI

En modo de Transmisin, TWDR contiene el siguiente byte a ser transmitido.
En modo Receptor, el TWDR contiene el ultimo byte recibido. Esto es reescrito
mientras el TWI no esta en el proceso de desplazamiento del byte. Esto ocurre
cuando la Bandera de Interrupcin del TWI (TWINT) es habilitada por
hardware. Note que el Registro de Datos no puede ser inicializado por el
usuario antes que la primera interrupcin ocurra. El dato en TWDR permanece
estable mientras TWINT esta en uno. Mientras el dato es desplazado fuera, en el
bus el dato simultneamente es desplazado adentro. TWDR siempre contiene el
ltimo byte presente en el bus, excepto despus de despertar desde el modo
sleep por la interrupcin del TWI. En este caso, el contenido de TWDR es
indefinido. En este caso de perdida arbitraria del bus, ningn dato es perdido
en la transmisin desde el Maestro al Esclavo. Manejando los bits del ACK es
automticamente controlado por el TWI, el CPU no puede acceder al bit ACK
directamente.

Bits 7:0 TWD: Registro de Datos del TWI
Estos ocho bits constituyen el siguiente byte de datos a ser transmitidos, o el
ltimo byte de datos recibidos en el Bus Serial de 2-hilos.

20.9.5 TWAR Registro de Direcciones TWI (Esclavo)


El TWAR debera ser localizado con el 7-bit Esclavo direccionado (en el sptimo
bit ms significativo) con lo cual es TWI respondera cuando programamos
como Transmisor Esclavo o Receptor, y no necesita los modos Maestros. En
sistemas multimaestros, TWAR seria habilitado como Maestro con lo cual
puede ser direccionado como Esclavo por otros Maestros.
El LSB de TWAE es usado para habilitar el reconocimiento del llamado de
direcciones general (0x00). Existen unas direcciones asociadas comparadoras
que observan por la direccin del Esclavo (o direcciones de llamado general
habilitadas) en la recepcin serial de direcciones.
.
Bits 7:1 TWA: Registro de direcciones del TWI (Esclavo)
Estos siete bits constituyen la direccin Esclavo de la unidad TWI.


Bit 0 TWGCE: Bit de Habilitacin del Llamado de Reconocimiento
General del TWI
Si esta puesto, esto habilita el llamado de reconocimiento general dado en el bus
serial de 2-hilos.

20.9.6TWAMR Registro de Mascara de Direcciones del TWI (Esclavo)

Bits 7:1 TWAM: Mascara de Direcciones del TWI
El TWAMR puede ser cargado con el 7-bit Mascara de direccin Esclavo. Cada
de estos bits en TWARM puede enmascarar (deshabilitar) el correspondiente bit
de direcciones en el Registro de Direcciones del TWI (TWAR). Si el bit mascara
es puesto en uno luego la direccin ignora la comparacin entre las direcciones
entrantes y los correspondientes bits en TWAR. La figura 20-22 muestra estos
detalles.



Bit 0 Res: Bit Reservado
Este bit es reservado y siempre ledo como cero.

















21. Comparador Analgico AC

21.1 Revisin General
El Comparador Analgico comparara el valor de las entradas en el pin positivo
AIN0 y pin negativo AIN1. Cuando el voltaje en el pin positivo AIN0 es ms
alto que el voltaje en el pin negativo AIN1, la salida del Comparador Analgico,
ACO, es habilitada. La salida del comparador seria puesta para disparar el
Timer/contador1 en funcin de captura de Entrada. Adicionalmente, el
comparador puede disparar una interrupcin separada, exclusiva al
comparador Analgico. El usuario puede seleccionar el disparo de la
interrupcin en a la salida del comparador (subida, bajada, invertida). El
diagrama de bloques del comparador es mostrado en la figura 21-1.


21.2 Comparador Analgico Multiplexado e Entrada
Esto es posible al selecciona cualquiera de los pines del ADC70 al reemplazar
la entrada negativa del Comparador Analgico. El ADC multiplexor es usado
para seleccionar estas entradas, y consecuentemente, el ADC seria cambiado a
apagado al utilizar esto. En el bit del comparador Analgico Multiplexado
(ACME en ADCSRB) es habilitado y el ADC es cambiado a apagado (ADEN en
ADCSRA es cero), MUX20 en ADMUX selecciona el pin de entrada a
remplazar en la entrada negativa del Comparador Analgico. Si ACME es
limpiado o ADEN es habilitado, AIN1 es aplicado a la entrada negativa del
Comparador Analgico.






21.3 Descripcin de Registros

21.3.1 ADCSRB Registro de Control y Estado B del ADC


Bit 6 ACME: Habilitacin del Comparador Analgico Multiplexado
Cuando este bit es escrito con uno lgico y el ADC es apagado (ADEN en
ADCSRA es cero), el ADC multiplexor selecciona la entrada negativa del
Comparador Analgico. Cuando este bit es escrito con cero lgico, AIN1 es
aplicado a la entrada negativa del Comparador Analgico.

21.3.2 ACSR Registro de Control y Estado del Comparador Analgico
Digital



Bit 7 ACD: Desabilitacin del Comparador Analgico
Cuando este bit es escrito con uno lgico, la energa del Comparador Analgico
es quitada. Este bit puede ser habilitado en cualquier momento y apagar el
Comparador analgico. Esto reduce el consumo de emerga en los modos
activo e Idle. Cuando se carga el bit de ADC, la Interrupcin del Comparador
Analgico seria deshabilitada por limpieza del bit ACIE en ACSR. Por otra
parte una interrupcin puede ocurrir cuando este bit es cambiado.

Bit 6 ACBG: Seleccin del Comparador Analgico Bandgap
Cuando este bit es puesto, un arreglo bandgap de referencia de voltaje
remplaza la entrada positiva del Comparador Analgico. Cuando la referencia
bandgap es usada como entrada del Comparador Analgico, esto tomara algn
tiempo para que el voltaje se estabilice. Si no se estabiliza, la primera conversin
tiene un valor incorrecto.

Bit 5 ACO: Salida del Comparador Analgico
La salida del Comparador Analgico es sincronizada y luego directamente
conecta al ACO. La sincronizacin introduce un retardo de 1 2 ciclos de reloj.

Bit 4 ACI: Bandera de Interrupcin del Comparador Analgico
Este bit es habilitado por hardware cuando una salida de comparacin dispara
las interrupciones en modo definidos por ACIS1 y ACIS0. La rutina del
Comparador Analgico es ejecutada si el bit ACIE es puesto y el bit-I en SREG
es habilitado. ACI es limpiado por hardware cuando ejecuta el correspondiente
vector de interrupcin. Alternativamente, ACI es limpiado por la escritura de
uno lgico a la bandera.

Bit 3 ACIE: Habilitacin de la Interrupcin del Comparador Analgico
Cuando el bit del ACIE es escrito con uno lgico y el bit-I en es Registro de
Estado es habilitado, la Interrupcin del Comparador Analgico es activada.
Cuando se escribe con cero, la interrupcin es deshabilitada.

Bit 2 ACIC: Habilitacin de la Entrada de Captura del Comparador
Cuando se escribe uno lgico, estos bits habilitan la entrada en funcin de
captura en el Timer/Contador1 a ser disparado por el Comparador Analgico.
La salida del comparador es en este caso directamente conectada a la entrada de
captura, haciendo la comparacin utiliza el cancelador de ruido y seleccin del
flanco del Timer/Contador1 Interrupcin de Captura a la entrada. Cuando se
escribe cero lgico, ninguna conexin entre el Comparador Analgico y la
funcin de captura a la entrada existe. Para hacer la comparacin disparar el
Timer/contador1 a la salida de la interrupcin de captura, el bit ICIE1 en el
registro mscara de la Interrupcin del Timer (TIMSK1) seria habilitada.

Bits 1:0 ACIS1:ACIS0: Modo Selector de la Interrupcin del Comparador
Analgico.
Estos bits determinan cual comparador eventualmente dispara la interrupcin
del Comparador Analgico. Las diferentes configuraciones son mostradas en la
tabla 21-2.

Cuando cargando los bits ACIS1/ACIS0, la Interrupcin del Comparador
Analgico sera deshabilitada limpiando estos bits de habilitacin de
Interrupciones en el Registro ACSR. Por otra parte una interrupcin puede
ocurrir cuando los bits son cambiados.

21.3.3 DIDR1 Desabilitacin de los Registros de Entradas Digitales 1


Bit 1:0 AIN1D:AIN0D: AIN1: Desabilitacin de la Entrada Digital AIN0
Cuando este bit es escrito con uno lgico, el buffer de entrada digital en el pin
AIN1/0 es deshabilitada. El correspondiente bit del registro PIN siempre leera
como cero cuando este bit es habilitado. Cuando la seal analgica es aplicada
en el pin AIN/ la entrada digital desde este pin no es necesaria, este bit debera
ser escrito con uno lgico para reducir el consumo de energa en el buffer de
entrada digital.

































22. ADC CONVERSOR ANLOGO A DIGITAL

22.1 Especificaciones:
Resolucin de 10-bits
Integrador no Lineal 0.5 LSB
Presicin Absoluta 2 LSB
Tiempo de Conversin 13 - 260s
Mxima Resolucin por encima de 15 KSPS
8 Canales Multiplexados Simples de Salida
Modo Diferencial con Ganancia Seleccionable: X1, X10 o X200
Ajuste opcional Izquierdo para lectura de salida del ADC
Rango de Voltaje de Entrada del ADC: 0 - VCC
Rango de Voltaje Diferencial del ADC: 2.7 - VCC
Voltaje de Referencia Seleccionable ADC: 2.5V o 1.1V
Modo de Simple Conversin (Free Running)
Inicio de Conversin ADC por Auto-disparo o Fuente de Interrupcin
Activacin de Interrupcin al finalizar la Conversin ADC
En Modo Sleep se cancela el ruido

Nota1. Los canales de entada diferencial no son probados para dispositivos de
paquetes P DIP P. Este elemento esta garantizado para trabajar con dispositivos
de paquetes TQFP y QFN/MLF.

Bloque Esquemtico del Conversor Analgico Digital



22.9 DESCRIPCIN DE REGISTROS

22.9.1 ADMUX Seleccin de Registros Multiplexados del ADC



Bit 7:6 REFS1:0: Seleccin Bits de Referencia

Estos bits seleccionan el voltaje de referencia para el ADC, como se muestra en
la siguiente tabla. Si estos bits son cambiados durante la conversin, el cambio
no ser efectuado hasta que la conversin sea completada (ADIF EN ADCSRA
es uno). La opcin del voltaje de referencia interno no debe ser usada si una
referencia externa esta siendo aplicada en el pin AREF.
Nota: Si la ganancia es seleccionada en x10 ox200, solo debera usarse 2.56V
como voltaje de referencia interna.

TABLA 1
REFS1 REFS0 SELECCIN DEL VOLTAJE DE REFERENCIA
0 0 AREF, Voltaje de referencia interno apagado
0 1 AVCC con capacitor externo en el pin AREF
1 0 Voltaje de referencia interno 1.1V con capacitor en el pin
AREF
1 1 Voltaje de referencia interno 2.56V con capacitor en el pin
AREF

Bit 5 ADLAR: Ajuste de resultado hacia la izquierda del ADC

El bit ADLAR afecta la presentacin del resultado de la conversin ADC en el
registro de datos del ADC. Escriba uno en ADLAR para ajustar el resultado
hacia la izquierda. De lo contrario, el resultado es ajustado a la derecha.
Cambiando el bit ADLAR afectara inmediatamente el registro de datos del
ADC.

Bits 4:0 MUX4:0: Bits de seleccin para Canal Anlogo y Ganancia
El valor de estos bits seleccionan cual combinacin de la entrada analgica son
conectadas al ADC. Estos bits tambin seleccionan la ganancia para los canales
diferenciales. Si estos bits son cambiados durante una conversin, el cambio no
se vera afectado hasta que se complete la conversin (ADIF en ADCSRA es
uno).




22.9.2 ADCSRA ADC Registro de Control y Estado A


Bit 7 ADEN: Habilitacin ADC
Cuando se pone uno en este bit se habilita el ADC, con cero el ADC es apagado.
Si se apaga el ADC mientras la conversin esta en progreso, la conversin
terminar.

Bit 6 ADSC: Inicio de Conversin ADC
En modo de Simple Conversin, cada vez que se ponga uno en este bit se inicia
cada conversin. En modo de Simple Conversin (Free Running), al escribir
uno en este bit inicia la conversin. La primera conversin ADSC ha sido
escrita despus de que el ADC ha sido habilitado o si ADSC es escrito al mismo
tiempo q el ADC es habilitado, esto demora 25 ciclos de reloj ADC comparado
con los 13 ciclos q demora normalmente. La primera conversin llega a
inicializar el ADC.
ADSC estar en uno durante la conversin en progreso. Cuando termina la
conversin retorna a cero.

Bit 5 ADATE: Habilitacin Auto Disparador ADC
Cuando se escribe uno en este bit, el auto Disparador del ADC es habilitado. El
ADC empezara la conversin con flanco positivo seleccionado con la seal del
disparador. La fuente de disparo es seleccionado por la configuracin de
acuerdo a la seleccin de los bits ADC, ADTS en ADCSRB.

Bit 4 ADIF: ADC Banderas de Interrupcin
Este bit es uno cuando se completa la conversin ADC y los Registros de Datos
son actualizados. Cuando la conversin ADC es completada se ejecuta la
interrupcin si el bit ADIE y el bit I en SREG son uno.
ADIF es cero por hardware cuando se ejecuta la correspondiente interrupcin.
Alternativamente ADIF es cero cuando la bandera se pone en uno.
Tener precaucin que si se esta haciendo una modificacin de lectura-escritura
en el ADCSRA, una interrupcin pendiente puede ser deshabilitada. Estos
tambin aplica si se utilizan las interrupciones SBI o CBI.
Bit 3 ADIE: Habilitacin de interrupciones del ADC
Cuando este bit es uno y el bit I en SREG es uno, la conversin ADC es
completada y es activada la interrupcin.

Bits 2:0 ADPS2:0: Bits de seleccin para el Prescalador
Estos bits determinan el factor de divisin entre la frecuencia del cristal y la
entrada del reloj del ADC.

ADPS2 ADPS1 ADPS0 Factor de Divisin
0 0 0 2
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128














22.9.3 EL REGISTRO DE DATOS DEL ADC ADCL Y ADCH




Cuando una conversin del ADC es completada, el resultado es encontrado en
estos dos registros. Si los canales diferenciales son usados el resultado es
presentado en complemento a 2.

Cuando el ADCL es ledo, el registro de datos ADC no es actualizado hasta que
el ADCH es ledo. Consecuentemente si el resultado es ajustado a la izquierda y
no se requiere una presicin mayor a 8 bits es suficiente leer el ADCH. De otra
forma se debe leer primero el ADCL y luego el ADCH.

El bit ADLAR en el ADMUX y en los bits del MUXn en ADMUX afecta la forma
del resultado cuando es ledo de los registros. Si ADLAR es uno el resultado es
ajustado a la izquierda. Si el ADLAR es cero el resultado es ajustado a la
derecha.


22.9.4 ADCSRB ADC Registro de Control y Estado B



Bit 7, 5:3 RES: Bits Reservados

Estos bits son reservados para el uso futuro en el ATmega 164P/324P/644P.
Para compatibilidad con dispositivos futuros, estos bits deben ser escritos en
cero cunado el ADCSRB es escrito.

Bit 2:0 ADTS2:0: Fuente de Auto disparo del ADC
Si ADATE en ADCSRA es escrito en uno, el valor de estos bits seleccionados
disparar la fuente de conversin del ADC. Si ADATE es cero, los bits del
ADTS[2:0] no afectan.
Una conversin ser disparada por un flanco de subida de la seleccin de la
bandera de interrupcin.

ADTS2 ADTS1 ADTS0 Fuente de Disparo
0 0 0 Modo Simple Conversin (Free Running)
0 0 1 Comparador Analgico
0 1 0 Interrupcin Externa
0 1 1 Timer/Contador 0 Punto de Comparacin
1 0 0 Timer/ Contador 0 Desbordamiento
1 0 1 Timer/ Contador 1 Punto de Comparacin B
1 1 0 Timer/ Contador 1 Desbordamiento
1 1 1 Timer/ Contador 1 Capture Event
































23. JTAG Interface and On-chip Debug System
23.1 Features
JTAG (IEEE std. 1149.1 Compliant) Interface
Boundary-scan Capabilities According to the IEEE std. 1149.1 (JTAG)
Standard
Debugger Access to:
All Internal Peripheral Units
Internal and External RAM
The Internal Register File
Program Counter
EEPROM and Flash Memories
Extensive On-chip Debug Support for Break Conditions, Including
AVR Break Instruction
Break on Change of Program Memory Flow
Single Step Break
Program Memory Break Points on Single Address or Address Range
Data Memory Break Points on Single Address or Address Range
Programming of Flash, EEPROM, Fuses, and Lock Bits through the JTAG
Interface
On-chip Debugging Supported by AVR Studio

23.2 Revisin General
El AVR IEEE std. 1149.1 con interfase dcil JTAG puede ser usada por
Probando PCBs usando la capacidad del JTAG Boundary-scan
Programando las memorias no voltiles, Fusibles y bits de Bloqueo
On-chip debugging
Una breve descripcin es dada en la siguiente seccin- Una descripcin
detallada de programacin va la interfase JTAG, y usando el Boundary-scan
Chain puede ser encontrada en la seccin Programando va la interfase JTAG
en la pgina 312 del datasheet y IEEE 1149.1 (JTAG) Boundary scan en la
pgina 266 respectivamente. El On-chip Debug support es considerada siendo
instrucciones privadas del JTAG y distribuidas dentro de ATMEL.
La Figura 23-1 muestra el diagrama de bloques de la interfase JTAG y el On-
chip Debug system. El controlador TAP es una mquina de estado controlada
por las seales TCK y TMS. El controlador TAP selecciona el Registro de
Instrucciones JTAG o uno de varios Registro de Datos como el scan Can
(Registro de desplazamiento) entre la entrada TDI y la salida TDO. El Registro
de Instruccin JTAG controla la conducta del Registro de Datos.
El registro-ID, Registro Bypass, y el Boundary-scan Chain son Registro de datos
usados por board-level testing. La programacin de la Interfase JTAG
(actualmente consiste de Registro de datos fsicos y virtuales) es usado por la
programacin serial va la interfase JTAG. El Internal Scan Chain and Break
Point Scan Chain son usados por On-chip debugging.


The ID-Register, Bypass Register, and the Boundary-scan Chain are the Data
Registers used
.
23.3 TAP Test Access Port
La interfase JTAG es accedida a travs de cuatro pines del AVR. En la
terminologa JTAG, estos pines constituyen el Test Access Port-TAP. Estos pines
son:

TMS: Test mode select. Este pin es usado para la navegacin a travs del
estado de mquina del controlador TAP.
TCK: Test Clock. Operacin JTAG es sincronizada con TCK.
TDI: Test Data In. Entrada de Datos serial a ser desplazada en el Registro de
Instrucciones o Registro de Datos (Scan Chains).
TDO: Test Data Out. Salida de Datos Serial desde el Registro de Instrucciones
o Registro de Datos.
El IEEE std. 1149.1 tambin especifica una seal opcional TAP; TRST -Test
ReSeT lo cual no esta provisto.
Cuando el Fusible JTAGEN no es programado, estos cuatro pines TAP son
pines de protico, y el controlador TAP est en Reset. Cuando es programado,
las seales de entrada TAP son pulled high internas y el JTAG es habilitado por
Boundary-scan y programandolo. El dispositivo es desplazado con los fusibles
programados. Para el On-chip Debug system, adicionalmente los pines de
interfase JTAG, el pin RESET es monitoreado por el depurador que es capaza de
detectar fuentes de reset externas. El depurador puede tambin pull low al pin
a reset al sistema entero, asumiendo solo colector abierto en la lnea reset
son usados en la aplicacin.




23.4 Controlador TAP
El controlador TAP es un estado de maquina de 16 bits que controla la
operacin del circuito Boundaryscanm, circuito de programacin del JTAG, o
On-chip Debug system. Las transiciones de estado descritas en la Figura 232
dependen de la seal presente en TMS al tiempo que el flanco de subida en
TCK. Es estado inicial despus de Encendido en el Reset es probado. Como
definicin es este documento, el LSB es desplazado adentro y primero fuera por
todos los Registro de Desplazamiento. Asumiendo que Run-Test/Idle es el
estado presente, el escenario tpico para usar la interfase JTAG es:

A la entrada TMS, aplicar la secuencia 1, 1, 0 , 0 en el flanco de subida de TCK
o entrar el Registro de instrucciones de desplazamiento - Shift-IR state. Mientras
en este estado, desplaza los cuatro bits de las instrucciones JTAG en el Registro
de Instrucciones del JTAG desde la entrada TDI en el flaco de subida de TCK.
La entrada TMS sera sostenida en bajo durante la entrada de los 3 LSB para
permanecer en el estado Shift-IR. El MSB de la instruccin es desplazado
cuando este estado esta a izquierda en la configuracin TMS alto. Mientras la
instruccin es desplazada desde el pin TDI, la captura IR-state 0x01 es
desplazada afuera en el pin TDO. La instruccin JTAG selecciona un Registro
de Datos Particular como camino entre TDI y TDO y los controles del circuito
rodeando el Registro de Datos.


Aplicar la secuencia TMS 1, 1,0 re-entrando al estado Run-Test/Idle. La
instruccin es habilitada en la salida paralela desde el Registro de
Desplazamiento en el Update-IR state. Los estados Exit-IR, Pause-
IR, and Exit2-IR son solo usados para navegacin en la maquina de estado.
A la entrada TMS, aplicar la secuencia 1, 0, 0 al flanco de subida de TCK
entrando al Registro de desplazamiento de datos - Shift-DR state. Mientras en
este estado, descarga el Registro de Datos seleccionado desde la entrada TDI en
el flanco de subida de TCK.
Para permanecer en el estado Shift-DR, la entrada TMS seria sostenida en bajo
durante la entrada de todos los bits excepto el MSB. El MSB del dato es
desplazado cuando este estado es configurado a la izquierda, Mientras el
Registro de Datos es desplazado desde el pin TDI, las entradas paralelas al
Registro de datos capturados en el estado Capture-DR es desplazado fuera en el
pin TDO.

Aplicar la secuencia TMS 1, 1, 0 al re-entrar al Run-Test/Idle state. Si el
registro de Datos seleccionado a habilitado la salida paralela, las habilitaciones
toman lugar en Update-DR state. Exit-DR, Pause-DR, and Exit2-DR states son
solo usados para navegacin de la mquina de estados.
Como se muestra en este diagrama de estados, el Run-Test/Idle state no
necesita ser ingresado entre la seleccin de la instruccin JTAG y usando los
Registros de Datos, y algunas instrucciones JTAG pueden seleccionar funciones
En Run-Test/Idle, hacienda esto impropio como un an Idle state.


23.5 Usando el Boundary-scan Chain
Una completa descripcin del Boundary-scan capabilities esta dado en la
seccin IEEE 1149.1 (JTAG) Boundary-scan en la pgina 266 del datasheet.

23.6 Usando el On-chip Debug System
Como se muestra en la Figura 23-1, el hardware soportado por On-chip
Debugging consiste de


A scan chain en la interfase entre el AVR CPU interno y las unidades de
perifricos internos
Break Point unit.
Interfase de comunicacin entre el sistema del CPU y JTAG.
Todas la lectura o modificaciones/escritura necesarias para implementar el
depurador son hechas aplicando las instrucciones del AVR va internal AVR
CPU Scan Chain. El CPU enva el resultado a la localidad de memoria de E/S
lo cual es parte de la interfase de comunicacin entre el CPU y el sistema JTAG




Todas las operaciones de lectura o modificar/escritura se necesitan para
implementar el copilador son hechas por aplicaciones del Break Point Unit
implements Break on Change of Program Flow, Single Step Break, two
Program Memory Break Points, and two combined Break Points. Sin embargo,
las cuatro puntos de descanso puede ser configurados como lo siguiente:


4 single Program Memory Break Points.
3 Single Program Memory Break Point + 1 single Data Memory Break Point.
2 single Program Memory Break Points + 2 single Data Memory Break Points.
2 single Program Memory Break Points + 1 Program Memory Break Point
with mask (range
Break Point).
2 single Program Memory Break Points + 1 Data Memory Break Point with
mask (range Break
Point).


Un compilador, como el AVR studio, debe sin embargo usar uno o ms de estos
recursos para propsitos internos, permitiendo menos flexiblidad al usuario
final.
Una lista del On-chip debug de las instrucciones especficas del JTAG es dada
en On-chip Debug Specific JTAG Instructions en la pgina 264 del data sheet.
El fusible JTAGEN debera ser programado para habilitar el Prtico de Acceso
de Prueba del JTAG. En suma, el fusible OCDEN debe ser programado y los
bits de Bloqueo no debera ser puestos en uno para el sistema de trabajo On-
chip debug. Como un sistema de seguridad, el sistema On.chip debug es
deshabilitado cuando los bits de bloqueo LB1 o LB2 son peuestos en uno.
Adems, el sistema On-chip debug debera estar provisto de un back-door
dentro del dispositivo.
El AVR estudio permite al usuario un control total en la ejecucin de los
programas en el dispositivo AVR con la capacidad del On-chip debug, AVR In-
Circuit Emulator, or the built-in AVR Instruction Set Simulator.

La fuente de soporte del AVR estudio ejecuta programas en nivel ensamblador
con Atmel Corporations AVR Assembler and C programs compiled with third
party vendors compilers.
AVR estudio funciona con Microsoft Windows 95/98/2000 y Microsoft
Windows NT.
Para una descripcin total del AVR estudio, por favor refierase a la Gua de
Usuario del AVR estudio.
Todos los comandos de ejecucin estn presentes en el AVR estudio. El usuario
puede ejecutar el programa, con pasos simples a travs de cdigos

The user can execute the program, single step through the code either by
tracing into or stepping over functions, step out of functions, place the cursor
on a statement and
execute until the statement is reached, stop the execution, and reset the
execution target. In
addition, the user can have an unlimited number of code Break Points (using
the BREAK
instruction) and up to two data memory Break Points, alternatively combined
as a mask (range)
Break Point.
23.7 On-chip Debug Specific JTAG Instructions
The On-chip debug support is considered being private JTAG instructions, and
distributed within
ATMEL and to selected third party vendors only. Instruction opcodes are listed
for reference.
23.7.1 PRIVATE0; 0x8
Private JTAG instruction for accessing On-chip debug system.
23.7.2 PRIVATE1; 0x9
Private JTAG instruction for accessing On-chip debug system.
23.7.3 PRIVATE2; 0xA
Private JTAG instruction for accessing On-chip debug system.
23.7.4 PRIVATE3; 0xB
Private JTAG instruction for accessing On-chip debug system.
23.8 Using the JTAG Programming Capabilities
Programming of AVR parts via JTAG is performed via the 4-pin JTAG port,
TCK, TMS, TDI, and
TDO. These are the only pins that need to be controlled/observed to perform
JTAG programming
(in addition to power pins). It is not required to apply 12V externally. The
JTAGEN Fuse
must be programmed and the JTD bit in the MCUCR Register must be cleared
to enable the
JTAG Test Access Port.

The JTAG programming capability supports:
Flash programming and verifying.
EEPROM programming and verifying.
Fuse programming and verifying.
Lock bit programming and verifying.
The Lock bit security is exactly as in parallel programming mode. If the Lock
bits LB1 or LB2 are
programmed, the OCDEN Fuse cannot be programmed unless first doing a
chip erase. This is a
security feature that ensures no back-door exists for reading out the content of a
secured
device.
The details on programming through the JTAG interface and programming
specific JTAG
instructions are given in the section Programming via the JTAG Interface on
page 312.
23.9 Bibliography
For more information about general Boundary-scan, the following literature can
be consulted:
IEEE: IEEE Std. 1149.1-1990. IEEE Standard Test Access Port and Boundary-
scan
Architecture, IEEE, 1993.
Colin Maunder: The Board Designers Guide to Testable Logic Circuits,
Addison-Wesley, 1992.


23.10 Descripcin de Registros
23.10.1 OCDR Registro On-chip Debug



El Registro OCDR provee un canal de comunicacin desde que corre el
programa en el microcontrolador.
El CPU puede transferir un byte al compilador mediante la escritura de esta
localidad. Al mismo tiempo, una bandera interna; E/S Debug Register Dirty
IDRD es configurada para indicar al compilador que el registro ha sido
escrito.
Cuando el CPU lee el registro OCDR el bit menos significativo corresponde a el
bit LSB, mientras que el bit ms significativo es el IDRD. El compilador limpia
el bit IDRD cuando este ha ledo la informacin.
En algunos dispositivos AVR, este registro est en las localidades estndares de
E/S. En este caso, el registro OCDR solo puede ser accedido si el fusible
OCDEN es programado y el compilador habilita el acceso al registro OCDR. En
todos los otros casos, las localidades estndares de E/S son accedidas.
























24. IEEE 1149.1 (JTAG) Boundary-scan
24.1 Especificaciones
JTAG Interface (IEEE std. 1149.1 compliant)
Boundary-scan Capabilities According to the JTAG Standard
Full Scan of all Port Functions as well as Analog Circuitry having Off-chip
Connections
Supports the Optional IDCODE Instruction
Additional Public AVR_RESET Instruction to Reset the AVR

24.2 Revisin General
El Boundary-scan cambia la capacidad del controlador y observando los niveles
lgicos en los pines digitales de E/S, as como el lmite entre digital y anlogo
lgico por circuitera analgica
Teniendo conexiones off-chip. En el nivel del sistema, todas las ICs tienen JTAG
capaces de ser conectadas serialmente por las seales TDI/TDO para formar un
largo Registro de Desplazamiento. Un Controlador externo configura los
dispositivos con valores en los pines de salida, y observa el valor de la salida
recibida desde otros dispositivos. El controlador compara el dato recibido con el
resultado esperado. En este camino, Boundary-scan proporciona un mecanismo
para probar interconexiones y la integridad de componentes en las junturas de
los Circuitos impresos usando solo cuatro seales TAP. Las cuatro instrucciones
definidas por la IEEE 1149.1 en el JTAG son IDCODE, BYPASS,
SAMPLE/PRELOAD, y EXTEST, as como la instruccin publica AVR del JTAG
AVR_RESET puede ser usada para prueba de las junturas de circuitos impresos.
Iniciando la revisin del Registro de datos mostrara el cdigo ID de los
dispositivos, desde IDCODE es la definicin por defecto del JTAG. Esto puede
ser deseable para tener el dispositivo AVR en reset durante el modo de prueba.
Si ninguno es reseteado, las entradas de los dispositivos pueden ser
determinado por la revisin de las operaciones, y el software interno puede ser
un estado indeterminado cuando existen modos de prueba. Enteramente
resetear, las salidas de cualquier pin del prtico instantneamente entra en
estado de alta impedancia, haciendo la instruccin HIGH redundante. Si es
necesario, la instruccin BYPASS puede ser emitido hacer la revisin mas corta
posible a travs del dispositivo. Es dispositivo puede ser puesto en el estado
reset o pulling the external RESET pin low, o emitiendo la instruccin
AVR_RESET con configuraciones apropiadas del Reset del Registro de Dato.
La instruccin EXTEST es usada para probar los pines externos y cargar los
pines de salida con datos. Los datos desde el habilitador de salida serian salidas
manejadas con los pines as como la instruccin EXTEST es cangada en el
Registro IR del JTAG. Por consiguiente, el SAMPLE/PRELOAD debera
tambin ser usado para configurar valores iniciales en el can ring,
Al evitar daar la tarjeta cuando se usa la instruccin EXTEST por primera vez.
SAMPLE/PRELOAD puede tambin ser usada para tomar instantneamente de
los pines externos durante la operacin normal de la parte.

El fusible JTAGEN sera programado y el bit JTD en el Registro de E/S MCUCR
sera limpiado al habilitar el JTAG Prueba de acceso al prtico.
Cuando se usa la interfase JTAG para Boundary-scan, usando el JTAG TCK
con frecuencia de reloj ms alta que la frecuencia interna del chip es posible. El
reloj del chip no requiere que corra.

24.3 Registro de Datos
El Registro de datos pertinente para las operaciones del Boundary-scan son:

Registro de Desviacin
Registro de Identificacin del Dispositivo
Registro Reset
Boundary-scan Chain

24.3.1 Registro de Desviacin
El Registro de Desviacin consiste de un simple Registro de Desplazamiento de
fase. Cuando el Registro de Desviacin es seleccionado como camino entre TDI
e TDO, el registro es reseteado a 0 cuando sale del estado controlador de
captura DR. El Registro de Desviacin puede ser usado para una revisin corta
de la cadena de prueba en el sistema cuando otro dispositivo esta siendo
probado.

24.3.2 Registro de Identificacin de Registros
La Figure 24-1 muestra la estructura del Registro de Identificacin de Registros.



Versin
Es el nmero del 4-bit que identifica la revisin del componente. El nmero de
la versin del JTAG sigue la revisin del dispositivo. Revisin A es 0x0, revisin
B es 0x1.

Nmero de Parte
Son cdigos de 16-bits que identifican el componente. El nmero de parte del
JTAG para el
ATmega164P/324P/644P es listado en la Tabla 26-6 en la pgina 296 del
Datasheet.

ID del Fabricante
Son cdigos de 11-bits que identifican el fabricante. EL ID de fabricante del
JTAG para ATMEL es listado en la Tabla 26-6 en la pgina 296.




24.3.3 Registro Reset
El Registro Reset es un Registro de Datos de Prueba usado para restablecer la
parte. Desde los pines del Prtico de 3-estados cuando es reseteado, el Registro
Reset puede tambin reemplazar la funcin de la opcin no implementada de la
instruccin HIGHZ en el JTAG. Un valor en alto del Registro Reset corresponde
a pulling the external Reset low.
La parte es reseteada con tal que exista un valor en alto presente en el Registro
de Datos. Dependiendo de la configuracin de los fusibles para las opciones de
reloj, la parte permanecer reseteada por el reset en periodo de tiempo fuera
despus de dejar el Registro Reset. La salidas desde el Registro de Datos no es
habilitada, tambin el reset tomar lugar inmediatamente, como se muestra en
la Figura 24-2.




24.3.4 Boundary-scan Chain
The Boundary-scan Chain tiene la capacidad de controlar y observar los niveles
lgicos en los pines digitales de E/S, as como el lmite entre digital y lgico
analgico para circuitos analgicos teniendo conexiones off-chip. Para una
completa descripcin ver la pagina 269.

24.4 Boundary-scan Specific JTAG Instructions
El Registro de Instrucciones es de 4-bits, soporta 16 instrucciones. El listado de
abajo son instrucciones del JTAG tiles para la operacin Boundary-scan. Note
que la instruccin opcional HIGHZ no esta implementada, pero todas las
salidas con 3- estados de capacidad pueden ser puestos en estado de alta
impedancia usando la instruccin AVR_RESET, desde el estado de inicio para
todo los pines del prtico es de 3-estados. Como definicin de este datasheet, el
LSB es desplazado primero hacia adentro y hacia afuera por todos Registros de
Desplazamiento.
El OPCODE para cada instruccin es mostrado detrs del nombre de la
instruccin en el formato hex. El texto describe con cual Registro de Datos es
seleccionado como camino entre TDI y TDO para cada instruccin.



24.4.1 EXTEST; 0x0
Obligatoriamente las instrucciones JTAG para seleccionar el Boundary-scan
Chain como Registro de Datos para probar los circuitos externos en los
paquetes del AVR. Para pines del prtico, Pull-up Deshabilitadas, Control de
Salidas, Datos de Salida, y entrada de Datos son todas accesibles en la revisin
en cadena. Para circuitos Analgico teniendo conexiones off-chip, la interfase
entre el analgico y el lgico digital es la cadena de revisin. Los contenidos de
las habilitaciones de salida del Boundary-scan chain es manejada a la salida as
como el registro IR del JTAG es cargado con la instruccin EXTEST.
Los estados activos son:
Captura DR: Datos en los pines externos son probados en el Boundary-scan
Chain.
Desplazamiento DR: La cadena de revisin interna es desplazada por la
entrada del TCK.
Actualizacin DR: Datos desde la cadena de revisin es aplicada a los pines
de salida.

24.4.2 IDCODE; 0x1
Instruccin opcional del JTAG seleccionando los 32 bits del Registro ID como
Registro de Datos. El registro ID consiste de un numero de versin, un nmero
de dispositivo y un cdigo de fabricante escogidos por JEDEC. Esta es la
instruccin por defecto despus del encendido.
Los estados activos son:
Captura DR: Datos en el Registro IDCODE es probado en el Boundary-scan
Chain.
Desplazamiento DR: El IDCODE revisa si la cadena es desplazada por la
entrada TCK.

24.4.3 SAMPLE_PRELOAD; 0x2
Obligatoriamente las instrucciones del JTAG para pre-carga a la habilitacin de
salida y tomando instantneo de los pines de entrada/salida sin afectar la
operacin del sistema. Sin embargo, la habilitacion de salida no es conectada a
los pines. El Boundary-scan Chain es seleccionado como Registro de Datos.
Los estados activos son:
Captura DR: Datos en los pines externos son probados en el Boundary-scan
Chain.
Desplazamiento DR: La cadena de revisin interna es desplazada por la
entrada del TCK.
Actualizacin DR: Datos desde la cadena de revisin es aplicada a los pines
de salida. Sin embargo, las salidas de habilitacion no son conectadas a los pines.

24.4.4 AVR_RESET; 0xC
Las especificaciones publicas del AVR en las instrucciones JTAG son forzadas a
los dispositivos AVR en el modo Reset o desconectando la fuente reset del
JTAG. El controlador TAP nos es reseteado por esta instruccin. El bit uno del
Registro Reset es seleccionado como registro de datos. Note que el reset seria
activado tan pronto este uno lgico en la cadena Reset. La salida desde esta
cadena no es habilitada.
Los estados de activacin son:
Desplazamiento DR: El Registro reset es desplazado por la entrada del TCK.

24.4.5 BYPASS; 0xF
Obligatoriamente las instrucciones JTAG seleccionan el Registro de desviacin
para el registro de datos.
Los estados de activacin son:
Captura DR: cargando 0 lgico en el Registro de Desviacin.
Desplazamiento DR: El Registro de Desviacin clula entre TDI y TDO es
desplazado.


24.5 Boundary-scan Chain
El Boundary-scan chain tiene la capacidad manejar y controlar los niveles
lgicos de los pines de E/S digital, as como el lmite entre digital y lgico
digital para circuitos analgicos que tienen conexiones off-chip.


24.5.1 Escaneando Pines de los Prticos Digitales
La Figura 24-3 muestra la clula del Boundary-scan para pin de prticos bi-
direccionales. La funcin pull-up es deshabilitada durante Boundary-scan
cuando el JTAG IC contiene EXTEST o SAMPLE_PRELOAD. La clula consiste
de pines bi-direccionales combinando las tres seales del Control de Salida
OCxn, Datos de Salida ODxn, y Datos de Entrada IDxn, en solo dos fases del
Registro de Desplazamiento. Los ndices del prtico y el pin no son usados en
las siguientes descripciones del Boundary-scan logia y no son incluidas las
figuras en el datasheet. La Figura 24-4 muestra simple pin digital del prtico
como se describe en la seccin E/S de Prticos. Cuando ninguna funcin
alternativa en el prtico es presente, los datos de Entrada ID correspondientes
al valor del Registros PINxn (pero ID no ha sido sincronizado), los datos de
salida corresponden al registro del PORT, control de salida correspondiente a la
Direccin de datos- Registro DD, y habilitacin Pull-up-PUExn correspondiente
a la expresin lgica


Las funciones alternativas del prtico digital son conectadas fuera de la caja
punteada en la Figura 24-4 para hacer la lectura de verificacin encadena en el
valor actual del pin. Para funciones Analgicas, esto es conectado directamente
desde el pin externo del circuito analgico. No hay revisin en cadena en la
interfase entre lo digital y el circuito analgico, pero algunas seales de
controles digitales a circuitos analgicos son apagadas para evitar la disputa
del manejo en los pads.
Cuando el JTAG IR contiene EXTEST o SAMPLE_PRELOAD el reloj no enva
hacia fuera de los pines del prtico si el fusible CKOUT es programado. Incluso
a travs del reloj es salida cuando el JTAG IR contiene SAMPLE_PRELOAD, el
reloj no es probado por el boundary scan.





24.5.2 Escaneando el Pin Reset
El pin RESET acepta 5V activos en bajo para operacin del reset estndar, y 12 V
activos en alto para alto voltaje Programando en Paralelo.


24.6 ATmega164P/324P/644P Boundary-scan Order
La Tabla 24-1 muestra el orden de escaneo entre TDI y TDO cuando el
Boundary-scan Can es seleccionado como camino de datos. El Bit 0 es el LSB; el
primer bit escaneado dentro, y el primer escaneado fuera. La orden e escaneo
sigue al pin de salida tan lejos como sea posible. Si, los bits del Port A y Port K
son escaneados en bit opuesto de los otros prticos. Excepciones de estas reglas
son la cadena de escaneo para circuitos analgicos, lo cual constituye los bits
ms significantes indiferente de la cadena de escaneo de los pines fsicos que
son conectados. En la figura 24-3, PXn. Los datos corresponden a FF0.
Pxn. Control correspondiente a FF1, PXn. Bit 4, 5, 6 y 7 del Prtico F no esta en
la cadena de escaneo, desde estos pines constituye los pines TAP cuando el
JTAG es habilitado.









24.7 Boundary-scan Description Language Files
Boundary-scan Description Language (BSDL) files describe Boundary-scan
capable devices in
a standard format used by automated test-generation software. The order and
function of bits in
the Boundary-scan Data Register are included in this description. BSDL files are
available for
ATmega164P/324P/644P.

24.8 Descripcin de Registros
24.8.1 MCUCR Registros de Control MCU

Bits 7 JTD: Desabilitacin de la Interfase TAG
Cuando este bit es cero, la interfase JTAG es habilitada si el Fusible JTAGEN es
programado. Si este bit es uno, la interfase JTAG es deshabilitada. Para evitar
una desabilitacin o una habilitacion desvoluntaria de la interfase JTAG, la
secuencia de tiempo seria seguida cuando cambia este bit. El software de
aplicacin escribira a este bit el valor deseado dos vece cada cuatro ciclos al
cambio de este valor. Note que este bit no sera alterado cuando se usa el On-
chip Debug system.



24.8.2 MCUSR Registro de Estado MCU
El Registro de Estado MCU brinda informacin de cuando la fuente reset causa
un reset en MCU.





Bit 4 JTRF: Bandera de Reset del JTAG
Este bit es puesto si el reset ha sido causado por uno lgico en el Registro Reset
del JTAG seleccionado por la instruccin del JTAG AVR_RESET. Este bit es
reset por el encendido del reset, o por escritura de cero lgico en la bandera.
































25. Boot Loader Support Auto programacin de Escritura
mientras se realiza la lectura.

25.1 Descripciones
Read-While-Write Self-Programming
Flexible Boot Memory Size
High Security (Separate Boot Lock Bits for a Flexible Protection)
Separate Fuse to Select Reset Vector
Optimized Page(1) Size
Code Efficient Algorithm
Efficient Read-Modify-Write Support
Note: 1. A page is a section in the Flash consisting of several bytes (see Table 26-
7 on page 296) used
during programming. The page organization does not affect normal operation.


25.2 Revisin General
El Boot Loader Support proporciona un mecanismo de auto programacin de
escritura mientras se realiza la escritura para transmitir y transferir el cdigo
del programa por el MCU. Esto permite un software de aplicacin flexible para
actualizacin controlada por el MCU usando a Flash-resident Boot Loader
program. The Boot Loader program puede ser usado en cualquier dato de
interfase disponible y asociando el protocolo del cdigo de lectura y escritura
con el cdigo en la memoria flash, leyendo el cdigo desde la memoria de
programa. El cdigo de programa dentro de la seccin Boot Loader tiene la
capacidad de escribir enteramente en la Flash, incluyendo la memoria Boot
Loader. El Boot Loader puede incluso modificarse y tambin borrarse desde el
cdigo si esto no necesita nada ms. El tamao de la memoria Boot
Loader es configurada con fusibles y tiene dos configuraciones separadas con
los bits del Boot Lock con el cual puede ser configurada independientemente.
Esto le da una nica flexibilidad al usuario para seleccionar diferentes niveles
de proteccin.

25.3 Application and Boot Loader Flash Sections
La memoria Flash es organizada en dos secciones, la seccin de aplicacin y la
seccin Boot Loader (ver Figura 25-2 en la pgina 279 del datasheet). El tamao
de las diferentes secciones es configurada por el fusible BOOTSZ como se
muestra en la Tabla 25-7 en la pgina 288 y Figura 25-2 del datasheet. Estas dos
secciones pueden tener diferentes niveles de proteccin desde que tienen
diferentes configuraciones de los bits de bloqueo.

25.3.1 Seccin de Aplicacin
La seccin de aplicacin es la seccin de la Flash que es usada para guardar el
cdigo de aplicacin. El nivel de proteccin para la seccin de Aplicacin puede
ser seleccionada por la aplicacin de los bits del Boot Loader, ver la Tabla 25-2
de la pgina 280 del datasheet. La seccin de aplicacin puede nunca almacenar
cualquier cdigo Boot loader desde la instruccin SPM es deshabilitada cuando
se ejecuta desde la seccin de Aplicacin.

25.3.2 BLS Seccin Boot
Mientras la seccin de Aplicacin es usada para almacenamiento del cdigo de
aplicacin, el software del Boot Loader sera localizado en el BLS desde la
instruccin SPM puede acceder a la Flash, incluyendo sus bits BLS. El nivel de
proteccin para la seccin Boot Loader puede ser seleccionada por los bits de
bloqueo del Boot Loader, ver la Tabla 25-3 en la pgina 280 del datasheet.

25.4 Lectura mientras se Escribe y No Lectura mientras se Escribe en las
secciones Flash.
Cuando el CPU soporta la lectura mientras se realiza la escritura o si el CPU es
detenido durante la actualizacin del software del Boot Loader la actualizacin
es dependiente de la direccin con la que ha sido programada. Adicionalmente
las dos secciones que son configuradas por los fusibles BOOTSZ como se
describe a continuacin, la Flash tambin divide en dos secciones arregladas, la
seccin de lectura mientras se escribe (RWW) y la seccin de no lectura
mientras se escribe (NRWW). El lmite entre las secciones RWW y NRWW es
dado en la Tabla 25-1 y la figura 25-1 en la pgina 278 en el datasheet. La
diferencia entre las dos secciones son:
Cuando se borra o escribe en la localidad de pgina dentro de la seccin
RWW, la seccin NRWW puede ser leda durante la operacin.

Cuando se borra o escribe en la localidad de pgina dentro de la seccin
NRWW, la CPU es detenida durante la operacin entera.

Note que el software del usuario puede nunca leer ningn cdigo que es
localizado dentro de la seccin Boot Loader del software de aplicacin. La
sintaxis Lectura mientras se escribe se refiere a que la seccin puede llegar
hacer programada (borrado o escritura), con lo que la seccin actual no llega
hacer leda durante la actualizacin del software del Boot Loader.


25.4.1 RWW Seccin de Lectura mientras se Escribe
Si la actualizacin del software del Boot Loader es programado dentro de la
pgina de la seccin RRW, esto es posible al leer el cdigo desde la Flash, pero
solo el cdigo que es localizado en la seccin NRWW. Durante la continuacin
del programa, el software asegurara que la seccin NRWW nunca sea leda. Si
el software del usuario esta probando el cdigo de lectura que esta localizado
en la seccin RWW (por ejemplo, cargando la memoria de programa, llamar, o
instrucciones de salto o interrupciones) durante la programacin, el software
finalizara en un estado desconocido.
Para evitar esto, las interrupciones deberan ser deshabilitadas I movidas a la
seccin Boot Loader. Esta seccin esta siempre localizada en la seccin NRWW.
La seccin ocupada por el bit RWWSB en el programa de almacenamiento de la
memoria de control y registro de estado (SPMCSR) sera ledo como uno lgico
mientras la seccin RRW es bloqueado para la lectura. Despus que la
programacin es completada, el RWWSB sera limpiado por software antes de
leer la localidad del cdigo en la seccin RWW. Ver la seccin 25.9.1 para
mayores detalles de cmo limpiar RWWSB:

25.4.2 NRWW Seccin de No lectura mientras se realiza la escritura.
La localidad del cdigo en la seccin NRWW puede ser leda cuando el
software del Boot Loader esta actualizando la pgina en la seccin RRW.
Cuando cdigo del Boot Loader actualiza la seccin NRWW, el CPU es
detenido durante la operacin del borrado de pgina o escritura de pgina.









25.5 Bits Bloqueados del Boot Loader
Si la capacidad del Boot Loader no es necesitada, la Flash esta disponible
para cdigos de aplicacin. El Boot Loader tiene dos configuraciones
separadas de bits de bloqueo del Boot con lo cual puede ser configurado
independientemente. Esto da al usuario una flexibilidad nica al seleccionar
los diferentes niveles de proteccin.
El usuario puede seleccionar:

Proteger la Flash desde la actualizacin de software por el MCU.
Proteger solo la seccin Flash Boot loader desde la actualizacin del software por el MCU.
Proteger solo la seccin de Paliacin de la Flash desde la actualizacin del software por el
MCU.
Permitir la actualizacin del software en la Flash.

Ver la Tabla 25-2 en la pgina 280 y la Tabla 25-3 en la pgina 280 del datasheet para mayores
detalles. Los bits de bloqueo del Boot pueden ser puestos en software y en modo de
programacin Serial o paralela, pero pueden ser limpiados solo por el comando Chip Erase. El
Bloqueo general de escritura (Bit de bloqueo modo 2) no controla la programacin de la
memoria Flash por la instruccin SPM. Similarmente, el bloqueo de lectura/escritura (Bit de
bloqueo modo 2) no controla la lectura o escritura por (E)LPM/SPM, si esto es intentado.






25.6 Entrando en el programa del Boot Loader
Entrando al Boot Loader toma lugar un salto o una llamada desde el programa
de aplicacin. Esto puede ser inicializado por un disparo como un comando de
recepcin va USART, o interfase SPI. Alternativamente, el fusible de reset del
Boot puede ser programado para que el Vector de reset este apuntado al Boot
Flash comienza a direccionar despus del reset. En este caso, el Boot Loader es
iniciado despus del reset. Despus que el cdigo de aplicacin es cargado, el
programa puede iniciar a ejecutar el cdigo de aplicacin. Note que los fusibles
no pueden ser cambiados por el MCU. Esto significa que una vez programado
el fusible del Boot Reset, el Vector Reset siempre apuntara al Boot Loader Reset
y el fusible puede ser solo cambiado a travs de la interfase de programacin
serial o paralela.










Desde la Flash esta organizada en pginas, el contador de programa puede ser
Tratado como si tuviera dos secciones diferentes. Una seccin, consiste de los
bits menos significantes, estn direccionando las palabras dentro de la pgina,
mientras los bits ms significativos estn direccionando las pginas. Esto es
mostrado en la Figura 25-3. Note que las operaciones de Borrado de pgina y
escritura son direccionadas independientemente. Si esto es de mayor
importancia que el software del Boot Loader direcciona la misma pgina en
ambas operaciones de Borrado de pgina y escritura de pgina. Una vez que la
programacin es inicializada, la direccin es habilitada y el puntero Z puede ser
usado para otras operaciones.
La instruccin (E)LPM usa el puntero Z para almacenamiento de la direccin.
Desde estas instrucciones direccionan la Flash byte por byte, tambin el bit Z0
de puntero Z es usado.




25.8 Auto-Programando la Flash
La memoria de programa es actualizada en una pgina por la pgina de moda.
Antes de programar la pgina con el dato almacenado en buffer de la pgina
temporal, la pgina seria borrada. El buffer de la pgina temporal es llenado
con una palabra al tiempo que esta usando SPM y el buffer puede ser llenada
antes del comando de borrado de pgina o entre las operaciones de borrado de
pgina y escritura:
Alternativa 1, llenar el buffer antes del Borrado de Pgina

Llenar el buffer de la pgina temporal
Realice el Borrado de pgina
Realice la escritura de pgina
Alternativa 2, llenar el buffer antes del Borrado de Pgina
Realice el Borrado de pgina
Llenar temporalmente el buffer de pgina
Realice la escritura de pgina

Si solo una parte de las pginas necesitan ser cambiadas, el resto de las pginas
serian almacenadas (por ejemplo en el buffer de pgina temporal) antes de
borrar, y luego de ser rescrito. Cuando se usa la alternativa 1, el Boot loader
proporciona una efectiva Lectura modificando la escritura con lo cual permite
al usuario del software primero leer la pgina, hacer los cambios necesarios, y
luego escribir de nuevo el dato modificado. Si la alternativa 2 es usada, no es
posible leer el dato antiguo mientras se carga desde la pgina esta listo para ser
borrado.
El buffer de pgina temporal puede ser accedido en cualquier secuencia. Esto es
esencial que la direccin de pgina usada en ambos el borrado de pgina y la
escritura de pgina es direccionada en la misma pgina.

25.8.1 Realizando el Borrado de Pgina por SPM
Para ejecutar el borrado de pgina, configurar la direccin en el puntero Z,
escribir X0000011 a SPMCSR y ejecutar SPM dentro de cuatro ciclos de reloj
despus escribiendo en SPMCSR. El dato en R1 y R0 es ignorado. La direccin
de pgina seria escrita a PCPAGE en el registro Z. Otros bits en el puntero Z
sera ignorados durante esta operacin.
Borrar la pgina en la seccin RWW: La seccin NRWW puede ser leda
durante el borrado de pgina.
Borrar la Pgina en la seccin NRWW: El CPU es detenido durante esta
operacin.


25.8.2 Llenando temporalmente el buffer (Cargando la Pgina)
Para escribir una palabra de instruccin, configurar la direccin en el puntero Z
y datos en R1:R0, escribir 0000001 a SPMCSR y ejecutar SPM dentro de cuatro
ciclos de reloj despus escribiendo SPMCSR. El contenido de PCWORD en el
registro Z es usado para direccionar el dato en el buffer temporal. El buffer
temporal se auto borrara despus de la operacin de escritura de pgina o por
la escritura del bit RWWSRE en SPMCSR. Esto tambin es borrado despus del
reset del sistema. Note que esto no es posible al escribir ms de una vez cada
direccin sin borrar el buffer temporal. Si la EEPROM es escrita en la mitad de
la operacin de carga de pgina SPM, todos los datos cargados seran borrados.

25.8.3 Realizando la Escritura de Pgina
Para ejecutar la escritura de pgina, configurar la direccin del puntero Z,
escribir X0000101a SPMCSR y ejecutar SPM dentro de cuatro ciclos de reloj
despus de la escritura de SPMCSR. El dato en r1 y R0 es ignorado.
La direccin de pgina seria escrita a PCPAGE en el registro Z. Otros bits en el
puntero Z sera ignorados durante esta operacin.
Borrar la pgina en la seccin RWW: La seccin NRWW puede ser leda
durante el borrado de pgina.
Borrar la Pgina en la seccin NRWW: El CPU es detenido durante esta
operacin.

25.8.4 Usando la Interrupcin de SPM
Si la interrupcin SPM es habilitada, esta generara una interrupcin constante
cuando el bit SPMEN en SPMCSR es limpiado. Esto significa que la
interrupcin puede ser usada para un cambio por software en el registro
SPMCSR. Cuando se usa la interrupcin SPM, el vector de interrupcin debera
ser movido a la seccin BLS para evitar que la interrupcin este accediendo a la
seccin RWW cuando esto es bloqueado para lectura. El como mover las
interrupciones se describe en Interrupciones en la pgina 61 de datasheet.




25.8.5 Consideraciones mientras se actualiza el BLS
Cuidados especiales deben ser tomados si el usuario permite a la seccin Boot
Loader ser actualizado por el bit11 del Boot Lock desprogramado. Si una
escritura accidental sucede en el Boot Loader puede corromper por entero el
Boot Loader, y la actualizacin del software seria imposible. Esto no es
necesario se el software del Boot Loader es cambiado por si mismo, esto es
recomendado para programar el bit 11 del Boot Lock y proteger el software del
Boot Loader desde cualquier cambio de software interno.

25.8.6 Prevenir la lectura de la seccin RWW durante la auto programacin
Durante la Auto programacin (Borrado de Pagina o Escritura de Pagina), la
seccin RWW es siempre bloqueada por la lectura. El software del usuario
prevendra que esta seccin sea direccionada durante la operacin de auto
programacin. El RWWSB es SPMCSR sera puesto en uno mientras la seccin
RWW esta ocupada. Durante la auto programacin del vector de interrupcin
debera ser movida a BLS como se describe en Interrupciones en la pgina 61
del datasheet., o las interrupciones serian deshabilitadas. Antes de direccionar
la seccin RWW despus que la programacin es completada, el software del
usuario limpiara a RWWSB por la escritura en RWWSRE.

25.8.7 Configurando Setting the Boot Loader Lock Bits por SPM
Al poner en uno los bits del Boot Loader y los bits general de bloqueo, escribir
el dato deseado a R0, escribir X0001001 a SPMCSR y ejecutar SPM dentro de
cuatro ciclos de reloj despus escribiendo a SPMCSR.



Si los bits 50 son limpiados (cero), el correspondiente bit Boot Lock sera
programado si la instruccin SPM es ejecutada dentro de cuatro ciclos de reloj
despus BLBSET y SPMEN son puestos en uno a SPMCSR. El puntero Z no
tiene cuidado durante esta operacin, pero para futura compatibilidad esto es
recomendado para cargar al puntero Z con 0x0001 (lo mismo es usado para
lectura de los bits IOck). Fa futura compatibilidad es recomendado poner en
uno los bits 7 y 6 en R0 cuando se esta escribiendo en los bits de bloqueo.
Cuando se programa los bits de bloqueo la Flash puede leer durante la
operacin.


25.8.8 EEPROM Write Prevents Writing to SPMCSR
Note que la operacin de escritura de la EEPROM bloqueara toda la
programacin de software en la Flash. Leyendo los fusibles y los bits de
bloqueo desde software esto tambin prevendra durante la operacin de
escritura de la EEPROM. Se recomienda que el usuario cheque el bit de estado
(EEPE) en el registro EECR y verifique que el bit es antes escrito en el Registro
SPMCSR.

25.8.9 Leyendo el Fusible y los Bits de Bloqueo por Software
Es posible leer ambos bits el de Fusibles y de Bloqueo por software. Al leer los
bits de bloqueo, cargar el puntero Z con 0x0001 y poner en uno a los bits
BLBSET y SPMEN. Cuando la instruccin (E) LPM es ejecutada dentro de tres
ciclos de CPU despus los bits BLBSET y SPMEN son puestos en uno en
SPMCSR, el valor de los bits de bloqueo seran cargados en el registro de
destino. Los bits BLBSET y SPMEN auto limpiaran en la realizacin de la
lectura de los bits de bloqueo o si la instruccin (E) LPM es ejecutada dentro de
tres ciclos CPU o la instruccin no es ejecutada dentro de cuatro ciclos de CPU.
Cuando BLBSET y SPMEN son limpiados, (E) LPM trabajara como se describe
en la habilitacin de instrucciones en el manual.




El algoritmo para lectura del byte bajo del fusibles es similar a uno descrito para
lectura de los bits de bloqueo. Para leer el byte bajo del fusible, cargar el
puntero Z con 0x0000 y poner en uno los bits BLBSET y SPEM en SPMCSR.
Cuando la instruccin (E) LPM es ejecutada dentro de tres ciclos despus los
bits BLBSET y SPMEN son puestos en uno en SPMCSR, el valor del byte bajo de
los Fusibles (FLB) sera cargado en el registro de destino como se muestra a
continuacin:




Similarmente, cuando se lee el byte alto del Fusible, cargar 0x0003 en el puntero
Z. Cuando la instruccin (E) LPM es ejecutada dentro de tres ciclos despus que
los bits BLBSET y SPEM son puestos en uno en SPMCSR, el valor del byte alto
del Fusible (FHB) sera cargado en el registro de destino como se muestra a
continuacin:



Cuando se lee el byte extendido del fusible, cargar 0x0002 en el puntero Z.
Cuando la instruccin (E) LPM es ejecutada dentro de tres ciclos despus los
bits BLBSET y SPMEN son puestos en uno en el registro de destino como se
muestra a continuacin:





Si el Fusible y los bits de bloqueo son programados, seran ledos como cero. Si
los bits de Fusible y Bloqueo no son programados serian ledos como uno.


25.8.10 Leyendo la Fila de Firma por Software
Para leer la Fila de Firma por software, Cargar el puntero Z con la direccin del
byte de firma dado en la Tabla 25-5 y poner en uno los bits SIGRD y SPMEN en
SPMCSR. Cuando una instruccin LPM es ejecutada dentro de tres ciclos CPU
despus los bits SIGRD y SPMEN son puestos en uno en SPMCSR, el valor del
byte de firma sera cargado en el registro de destino. Los bits SIGRD y SPMEN
auto programara por completo la lectura de los bits de bloqueo de fila de firma
o si la instruccin LPM es ejecutada dentro de tres ciclos CPU. Cuando SIGRD y
SPMEN son limpiados, LPM trabajara como se describe en la habilitacin de
instrucciones del manual.




25.8.11 Previniendo la corrupcin de la Flash
Durante periodos de bajo Vcc, la programacin de la Flash puede ser
corrompida debido a que la fuente de voltaje es demasiado baja para la CPU y
la Flash opere apropiadamente. La corrupcin de la Flash puede ser causada
por dos situaciones cuando el voltaje es demasiado bajo. Primero, regular la
secuencia de escritura de la flash requiere de un voltaje mnimo para que opere
correctamente. Secundariamente, la CPU por si misma puede ejecutar
instrucciones incorrectamente, si la fuente de voltaje para ejecutar instrucciones
es demasiado bajo.
La corrupcin de la Flash puede ser fcilmente evitada siguiendo las siguientes
recomendaciones:

1. Si no se necesita la actualizacin para el Boot Loader en el sistema, programar
los bits de bloqueo del Boot Loader para prevenir cualquier actualizacin de
software en el Boot Loader.
2. Guardar el AVR RESET activo (bajo) durante periodos con suficiente voltaje.
Esto puede ser hecho habilitando el BOD (internal Brown-out Detector) if the
operating voltage matches the detection level. Si no, el reset externo puede ser
usado. Si el reset ocurre mientras la operacin de escritura esta en progreso,
esta operacin sera completada si la fuente de energa es suficiente.

25.8.12 Programando el tiempo de la Flash cuando se esta usando SPM
La calibracin del Oscilador RC es usada en el tiempo de acceso de la Flash. La
Tabla 25-6 muestra el tiempo de programacin tpica para la Flash desde la
CPU.





25.8.13 Simple Assembly Code Example for a Boot Loader
;-the routine writes one page of data from RAM to Flash
; the first data location in RAM is pointed to by the Y pointer
; the first data location in Flash is pointed to by the Z-pointer
;-error handling is not included
;-the routine must be placed inside the Boot space
; (at least the Do_spm sub routine). Only code inside NRWW section can
; be read during Self-Programming (Page Erase and Page Write).
;-registers used: r0, r1, temp1 (r16), temp2 (r17), looplo (r24),
; loophi (r25), spmcrval (r20)
; storing and restoring of registers is not included in the routine
; register usage can be optimized at the expense of code size
;-It is assumed that either the interrupt table is moved to the Boot
; loader section or that the interrupts are disabled.
.equ PAGESIZEB = PAGESIZE*2 ;PAGESIZEB is page size in BYTES, not words
.org SMALLBOOTSTART
Write_page:
; Page Erase
ldi spmcrval, (1<<PGERS) | (1<<SPMEN)
call Do_spm
; re-enable the RWW section
ldi spmcrval, (1<<RWWSRE) | (1<<SPMEN)
call Do_spm
; transfer data from RAM to Flash page buffer
ldi looplo, low(PAGESIZEB) ;init loop variable
ldi loophi, high(PAGESIZEB) ;not required for PAGESIZEB<=256
Wrloop:
ld r0, Y+
ld r1, Y+
ldi spmcrval, (1<<SPMEN)
call Do_spm
adiw ZH:ZL, 2
sbiw loophi:looplo, 2 ;use subi for PAGESIZEB<=256
brne Wrloop
; execute Page Write
subi ZL, low(PAGESIZEB) ;restore pointer
sbci ZH, high(PAGESIZEB) ;not required for PAGESIZEB<=256
ldi spmcrval, (1<<PGWRT) | (1<<SPMEN)
call Do_spm
; re-enable the RWW section
ldi spmcrval, (1<<RWWSRE) | (1<<SPMEN)
call Do_spm
; read back and check, optional
ldi looplo, low(PAGESIZEB) ;init loop variable
ldi loophi, high(PAGESIZEB) ;not required for PAGESIZEB<=256
subi YL, low(PAGESIZEB) ;restore pointer
sbci YH, high(PAGESIZEB)
Rdloop:
elpm r0, Z+
ld r1, Y+
cpse r0, r1
jmp Error

sbiw loophi:looplo, 1 ;use subi for PAGESIZEB<=256
brne Rdloop
; return to RWW section
; verify that RWW section is safe to read
Return:
in temp1, SPMCSR
sbrs temp1, RWWSB ; If RWWSB is set, the RWW section is not ready yet
ret
; re-enable the RWW section
ldi spmcrval, (1<<RWWSRE) | (1<<SPMEN)
call Do_spm
rjmp Return
Do_spm:
; check for previous SPM complete
Wait_spm:
in temp1, SPMCSR
sbrc temp1, SPMEN
rjmp Wait_spm
; input: spmcrval determines SPM action
; disable interrupts if enabled, store status
in temp2, SREG
cli
; check that no EEPROM write access is present
Wait_ee:
sbic EECR, EEPE
rjmp Wait_ee
; SPM timed sequence
out SPMCSR, spmcrval
spm
; restore SREG (to enable interrupts if originally enabled)
out SREG, temp2
ret

25.8.14 ATmega164P Boot Loader Parameters
In Table 25-7 through Table 25-9, the parameters used in the description of the Self-
Programming are given.







25.8.15 ATmega324P Boot Loader Parameters
In Table 25-7 through Table 25-9, the parameters used in the description of the Self-
Programming are given.





25.8.16 ATmega644P Boot Loader Parameters
In Table 25-13 through Table 25-15, the parameters used in the description of the Self-
Programming are given.



25.9 Descripcin de Registros

25.9.1 SPMCSR Store Program Memory Control and Status Register
The Store Program Memory Control and Status Register contiene los bits de
control necesarios para las operaciones del Boot Loader.



Bit 7 SPMIE: Habilitacin de Interrupciones SPM
Cuando el bit SPMIE es escrito a uno, y el bit I del Registro de estado es uno, la
interrupcin estara lista para ser habilitada. La interrupcin SPM sera
ejecutada mientras el bit SPMEN en SPMCSR es limpiado.

Bit 6 RWWSB: Lectura mientras la seccin de escritura esta ocupada
Cuando la operacin de auto programacin (Borrado de Pgina o escritura de
Pgina) en la seccin RWW es inicializada, RWWSB seria uno por hardware.
Cuando el bit RWWSB es uno, la seccin RWW no puede ser accedida. El bit
RWWSB sera limpiado si el bit RWWSRE es escrito a uno despus de que la
operacin de auto programacin es completada. Alternativamente el bit
RWWSB automticamente sera limpiado si la operacin cargar pgina es
inicializada.

Bit 5 SIGRD: Lectura de la Fila de Firma
Si este bit es escrito a uno al mismo tiempo que SPMEN, la siguiente instruccin
LPM dentro de tres ciclos de reloj leera el byte desde la fila de firma en el
registro de destino. Las instrucciones LPM dentro de cuatro ciclos de mquina
despus SIGRD y SPMEN son puestos en uno y no tendran efecto. Esta
operacin es reservada para usos futuros y no debera ser usada.

Bit 4 RWWSRE: Read-While-Write Section Read Enable
Cuando la operacin de auto programacin (Borrado de Pgina o escritura de
Pgina) en la seccin RWW, la seccin RWW es bloqueada para la lectura
(RWWSB sera puesto en uno por hardware). Para re-habilitar la seccin RWW,
el software del usuario esperara hasta que la programacin sea completada
(SPMEN sera limpiado). Luego, si el bit RWWWSRE es escrito a uno al mismo
tiempo que SPMEN, la siguiente instruccin dentro de cuatro ciclos de reloj re-
habilita la seccin RWW. La seccin RWW no podra ser re-habilitada mientras
la flash esta ocupada con el Borrado de Pgina o Escritura de Pagina (SPMEN es
uno). Si el bit RWWSRE es escrito mientras la Flash est siendo cargada, la
operacin de cargar la Flash abordara y el dato cargado sera perdido.


Bit 3 BLBSET: Poner en uno el Bit del Boot Lock Bit Set
Si este bit es escrito con uno al mismo tiempo que SPMEN, la siguiente
instruccin SPM dentro de cuatro ciclos de reloj pone en uno los bits Boot Lock,
de acuerdo con el dato en R0. El dato en R1 y la direccin en el puntero Z son
ignoradas. El bit BLSET automticamente sera limpiado por completo del bit
en uno del Lock, o si no la instruccin SPM es ejecutada dentro de cuatro ciclos
de reloj. Cuando la instruccin (E) LPM dentro de tres ciclos despus BLBSET y
SPMEN son puestos en uno en el Registro SPMCSR, leer los bits Bloqueados o
los bits del Fusible (dependiendo en Z0 en el puntero-Z) en el registro de
destino.

Bit 2 PGWRT: Escritura de Pgina
Si este bit es escrito a uno al mismo tiempo que SPMEN, la siguiente instruccin
dentro de cuatro ciclos de reloj ejecutan la escritura de pgina, con el dato
almacenado en el buffer temporal. La direccin de pgina es tomada desde la
parte alta del puntero-Z. el dato en R1 y R0 son ignorados. El bit PGWRT auto-
limpiara completamente la pgina de escritura, o si no la instruccin SPM es
ejecuta dentro de cuatro ciclos de reloj. La CPU es detenida durante la
operacin de escritura de pgina si la seccin NRWW es direccionada.

Bit 1 PGERS: Borrado de Pgina
Si este bit es escrito a uno al mismo tiempo que SPMEN, la siguiente instruccin
dentro de cuatro ciclos de reloj ejecutan el borrado de pgina. La direccin de
pgina es tomada desde la parte alta del puntero-Z. El dato en R1 y R0 son
ignorados. El bit PGERS auto-limpiara completamente el borrado de pgina, o
si no la instruccin SPM es ejecuta dentro de cuatro ciclos de reloj. La CPU es
detenida durante la operacin de borrado de pgina si la seccin NRWW es
direccionada.


Bit 0 SPMEN: Store Program Memory Enable
Este bit habilita la instruccin SPM para los siguientes cuatro ciclos de reloj. Si
se escribe una de ambas con RWWSRE, BLBSET, PGWRT o PGERS, la
siguiente instruccin SPM tendra un significado especial, ver la descripcin
anterior. Si solo SPMEN es escrito, la siguiente instruccin SPM cargara el valor
en R1:R0 en el buffer temporal de pgina direccionado por el puntero-Z. El LSB
del puntero Z es ignorado. El bit SPMEN auto limpiara por completo la
instruccin SPM, o si no la instruccin SPM es ejecutada dentro de cuatro ciclos
de reloj. Durante el borrado de pagina y escritura de pgina, el bit SPMEN
permanece en alto hasta que la operacin es completada. Escribiendo cualquier
otra combinacin 10001, 01001, 00101, 00011 or 00001 en los cinco
bits bajos no tendra efecto.
Nota: Solo un a instruccin SPM debera ser activada en cualquier tiempo.
























26. Programando Memoria
26.1 Programa y Bits de Bloqueo de la Memoria de Datos
El ATmega164P/324P/644P proporciona seis bits de bloqueo con lo cual puede
ser desprogramado (1) o ser programado (0) y obtener cosas adicionales
listadas en la Tabla 26-2- Los bits de bloqueo pueden ser solo borrados a 1
con el comando Chip Erase.







26.2 Bits de los Fusibles
El ATmega164P/324P/644P tiene cuatro bytes de Fusibles. La Tabla 26-3 y 26-5
describen brevemente la funcionalidad de todos los fusible y como son
mapeados en los bytes de Fusibles. Note que los fusibles son ledos con cero
lgico, 0, si son programados.






26.2.1 Habilitacin de Fusibles
Los valores de los fusibles son habilitados cuando los dispositivos entran al
modo de programacin. Esto no es aplicable al fusible EESAVE lo cual tendra
efecto una vez que es programado. Estos fusibles son tambin habilitados al
encendido en modo normal.






26.3 Bytes de Identificacin
Todos los microcontroladores de Atmel tienen tres-byte de cdigo de firma con
lo cual se identifican los dispositivos. Estos cdigos pueden ser ledos en modo
serial y paralelo, tambin cuando el dispositivo es bloqueado. Los tres bytes
residen en espacios de direcciones separadas. Para el ATmega164P/324P/644P
la firma de los bytes son dadas en la Tabla 26-6.



26.4 Byte de Calibracin
El ATmega164P/324P/644P tiene un byte de calibracin con un valor para el
oscilador interno RC. Este byte reside en el byte en alto de la direccin 0x000 en
el espacio de la direccin de firma. Durante el reset, este byte es
automticamente escrito en el Registro OSCCAL para habilitar la frecuencia
correcta de la calibracin del Oscilador RC.

26.5 Tamao de Pgina




26.6 Parmetros de Programacin en Paralelo, Mapamiento del Pin, y
Comandos
Esta seccin describe como programar en paralelo y verificar la memoria Flash
de Programa, Memoria de datos EEPROM, bits Bloqueados de Memoria, y los
bits de los Fusibles en el ATmega164P/324P/644P. Los Pulsos son asumidos al
ser menor que 250 ns.

26.6.1 Nombres de Firma
En esta seccin, algunos pines del ATmega164P/324P/644P son identificados
por los nombres de firma describiendo la funcionalidad durante la
programacin paralela, ver la Figura 26-1 y 26-9. Los Pines no describen en la
siguiente tabla que son referidos por nombre de pines. Los pines XA1/XA0
determinan la accin a ejecutarse cuando el pin XTAL se le da un pulso
positivo, El cdigo de pin es mostrado en la figura 26-12. Cuando se pulsa
, el comando carga determinadas acciones a ejecutarse. Los diferentes
comandos son mostrados en la Tabla 26-13.
















26.7 Programando en Paralelo
26.7.1 Entrando al modo de Programacin
El siguiente algoritmo pone al dispositivo en modo de programacin paralela:
1. Aplicando 4.5 - 5.5V entre VCC y GND.
2. Poniendo RESET a 0 e invirtiendo XTAL1 las ltimas seis veces.
3. Habilitando los pines Prog_enable mostrados en la Tabla 26-11 a 0000 y
esperando 100 ns.
4. Aplicando 11.5 - 12.5V al RESET. Si no hay ninguna actividad en los pines
Prog_enable dentro de 100ns tiene que ser aplicado al RESET +12V, esto
causara que el dispositivo falle en el modo de programacin.
5. Esperar 50 us antes de enviar el Nuevo comando.

26.7.2 Consideraciones para una Programacin Eficiente
Al cargar el comando y la direccin estos son retenidos en el dispositivo
durante la programacin, lo siguiente debera ser considerado:
El comando necesita solo ser cargado una vez cuando se escribe o se lee
mltiples localidades de memoria.
Salto de escritura del valor del dato 0xFF, que es contenido en la EEPROM (a
menos que el Fusible EESAVE sea programado) y la Flash despus del Chip
Erase.
La direccin del byte en alto necesita solo ser cargada antes de la
programacin o leyendo 256 nuevas palabras en la Flash o 256 bytes en la
EEPROM. Esta consideracin tambin aplica a los bytes de firma ledos.

26.7.3 Chip Erase
El Chip Erase borrara las memorias Flash y la EEPROM ms los bits
bloqueados. Los bits bloqueados no son reseteados hasta que la memoria de
programa ha sido completa de borrar. Los bits de los Fusibles no son
cambiados. El Chip Erase seria realizado despus que la Flash y la EEPROM
son reprogramadas.
Nota 1: La memoria EEPROM es preservada durante el Chip Erase si el fusible
EESAVE es programado. Cargando los comandos Chip Erase

1. Poner XA1, XA0 a 10. Esto habilita la carga de los comandos.
2. Poner BS1 a 0.
3. Poner DATA a 1000 0000. Este es el comando para el Chip Erase.
4. Dar a XTAL1 un pulso positivo. Esto cargara los comandos.
5. Dar a un pulso negativo. Esto inicializa al Chip Erase. RDY/BSY van en
bajo.
6. Esperar hasta que este en alto antes de cargar el Nuevo comando.

26.7.4 Programando la Flash
La Flash es organizada como se muestra en la tabla 26-7. Cuando se programa
la flash, los datos de programa son habilitados en el buffer. Esto permite una
pagina de programa para ser programada simultneamente. El siguiente
procedimiento describe como programar totalmente de memoria de Flash.

A. Cargar Comandos Escribir la Flash
1. Poner XA1, XA0 a 10. Esto habilita la carga de los comandos.
2. Poner BS1 a 0.
3. Poner DATA a 0001 0000. Este es el comando para escribir en la Flash.
4. Dar a XTAL1 un pulso positivo. Esto carga los comandos.
B. Cargar Direcciones con un byte bajo(Direcciones de los bits 7..0)
1. Poner XA1, XA0 a00. Esto habilita la carga de direcciones.
2. Poner BS2, BS1 a 00. Esto selecciona las direcciones con bytes bajos.
3. Poner DATA = Address en el byte en bajo (0x00 - 0xFF).
4. Dar a XTAL1 un pulso positive. Esto carga la direccin del byte bajo.
C. Cargar los datos en un byte bajo
1. Poner XA1, XA0 a 01. Esto habilita la carga de datos.
2. Poner DATA = Data en un byte bajo (0x00 - 0xFF).
3. Dar a XTAL1 un pulso positivo. Esto carga el byte de datos.
D. Cargar los Datos con un byte alto
1. Poner BS1 a 1. Esto selecciona un byte de datos altos
2. Poner XA1, XA0 a 01. Esto habilita la carga de datos..
3. Poner DATA = Data en un byte alto (0x00 - 0xFF).
4. Dar a XTAL1 un pulso positivo. Esto carga los byte de datos.
E. Habilitacin de Datos
1. Poner BS1 a 1. Esto selecciona un byte de datos en alto.
2. Dar a PAGEL un pulso positivo. Esto habilita los bytes de datos. (Ver Figura
26-3)
F. Repetir B a travs de E hasta que el buffer sea llenado totalmente por todos
los datos si la pgina es cargada.

Mientras los bits ms bajos en la direccin son mapeados a palabras dentro de
la pgina, las direcciones de los bits ms altos dentro de la FLASH. Esto es
ilustrado en la Figura 26-2. Note que si menos de ocho bits son requeridos a las
palabras de direccin en la pgina (tamao de la pagina < 256), el bit ms
significante en la direccin de los bytes en bajo son usadas para direccionar la
pgina cuando realizan la escritura de la pgina.

G. Cargar Direcciones de bytes altos (Direcciones de los bits15..8)
1. Poner XA1, XA0 a 00. Esto habilita que se carguen las direcciones.
2. Poner BS2, BS1 a 01. Esto selecciona las direcciones de los bytes altos.
3. Poner DATA = Address en el byte alto (0x00 - 0xFF).
4. Dar a XTAL1 un pulso positivo. Esto carga las direcciones de los bytes altos.
H. Cargar Direcciones de bytes altos extendidos (Direcciones de los bits 23..16)

1. Poner XA1, XA0 a 00. Esto habilita que se carguen las direcciones.
2. Poner BS2, BS1 a 10. Esto selecciona la direccin extendida del byte alto.
3. Poner DATA = Address extended high byte (0x00 - 0xFF).
4. Give XTAL1 a positive pulse. This loads the address high byte.
I. Program Page
1. Poner BS2, BS1 a 00
2. Dar un pulso negativo. Esto inicia la programacin de la pgina de datos
en su totalidad. est en bajo.
3. Esperar hasta que este en alto (Ver figura 26-3).

J. Repetir B a travs de I hasta que la Flash sea programada totalmente o todos
los datos han sido programados.
K. Programando el Fin de Pgina
1. Poner XA1, XA0 a 10. Esto habilita la carga de los comandos.
2. Poner DATA a 0000 0000. Este el comando de No operacin.
3. Dar a XTAL1 un pulso positivo. Esto carga los comandos, y escribe
internamente las firmas para el reset.


26.7.5 Programando la EEPROM
La EEPROM es organizada en pginas. Cuando se programa la EEPROM, los
datos de programa son habilitados en el buffer de la pgina. Esto permite una
pgina de datos para ser programada simultneamente. El algoritmo de
programacin para la memoria de datos EEPROM se describe a continuacin:

1. A: Cargar Comando 0001 0001.
2. G: Cargar Direccin del byte alto (0x00 - 0xFF).
3. B: Cargar Direccin del byte bajo (0x00 - 0xFF).
4. C: Cargar Dato (0x00 - 0xFF).
5. E: Habilitar Dato (Dar a PAGEL un pulso positivo).
K: Repetir 3 a travs de 5 hasta que el buffer este totalmente llenado.
L: Programar la pgina de la EEPROM
1. Poner BS2, BS1 a 00.
2. Dar a un pulso negativo. Esto inicia la programacin de la pgina de la
EEPROM. Estn en bajo.
3. Esperar hasta que estn en alto antes de programar la pgina
siguiente. Ver figura 26-4.



26.7.6 Leyendo la Flash
El algoritmo para lectura de la memoria Flash se describe a continuacin:

1. A: Cargar Comando 0000 0010.
2. H: Cargar Direcciones de Byte Extendidos (0x00- 0xFF).
3. G: Cargar Direcciones de Byte Altos (0x00 - 0xFF).
4. B: Cargar Direcciones de Byte Bajos (0x00 - 0xFF).
5. Poner OE a 0, y BS1 a 0. La palabra de la Flash con byte altos puede ser
leda en DATA.
6. Poner BS a 1. La palabra de la Flash con byte altos puede ser leda en
DATA.
7. Poner OE a 1.

26.7.7 Leyendo la EEPROM
El algoritmo para lectura de la EEPROM es descrita a continuacin:

1. A: Cargar Comando 0000 0011.
2. G: Cargar Direcciones de Byte Altos (0x00 - 0xFF).
3. B: Cargar Direcciones de Byte Bajos (0x00 - 0xFF).
4. Poner OE a 0, y BS1 a 0. El byte de Datos de la EEPROM puede ahora ser
leda a DATA.
5. Poner OE a 1.

26.7.8 Programando los Bits Bajos del Fusible
El algoritmo para programar los Bits Bajos del fusible se describe a
continuacin.

1. A: Cargar Comando 0100 0000.
2. C: Cargar Datos de Byte Bajos. Programar bit n = 0 y bit n = 1 borra el bit
del fusible.
3. Dar a un pulso negativo y esperar para que este en alto.


26.7.9 Programando los Bits altos del Fusible
El algoritmo para programar los Bits altos del fusible se describe a continuacin:

1. A: Cargar Comando 0100 0000.
2. C: C: Cargar Datos de Byte Bajos. Programar bit n = 0 y bit n = 1 borra el
bit del fusible.
3. Poner BS2, BS1 a 01. Esto selecciona el byte alto de datos.
4. Dar a un pulso negativo y esperar para que este en alto.
5. Poner BS2, BS1 a 00. Esto selecciona el byte bajo de datos.

26.7.10 Programando los Bits Extendidos del Fusible
El algoritmo para programar los Bits Extendidos del Fusible se describe a
continuacin:

1. 1. A: Cargar Comando 0100 0000.
2. 2. C: Cargar Datos de Byte Bajos. Programar bit n = 0 y bit n = 1 borra el
bit del fusible.
3. 3. Poner BS2, BS1 a 10. Esto selecciona el byte extendido de datos.
4. 4. Dar a un pulso negativo y esperar para que este en alto.
5. 5. Poner BS2, BS1 a 00. Esto selecciona el byte bajo de datos.




26.7.11 Programando los Bits de Bloqueo
El algoritmo para programar los Bits de Bloqueo se describe a continuacin:
1. A: Cargar Comando 0010 0000.
2. C: Cargar Datos de Byte Bajos. Bit n = 0 programa el bit de bloqueo. Si el
modo 3 LB es programado (LB1 y LB2 es programado), esto no es posible en los
bits bajos de Bloqueo por ningn modo de programacin externo.
3. Dar a un pulso negativo y esperar para que este en alto. Los
bits bloqueados solo pueden ser limpiados ejecutando el Borrado de Chip.


26.7.12 Leer Fusibles y Bloquear Bits
El algoritmo para leer el Fusible y Bloquear Bits es descrito a continuacin:

1. A: Cargar Comando 0000 0100.
2. Poner a 0, y BS2, BS1 a 00. El estado de los bits en alto del Fusible
pueden ahora ser ledos en DATA (0 significa que ha sido programado).
3. Poner a 0, y BS2, BS1 a 11. El estado de los bits en alto del Fusible
pueden ahora ser ledos en DATA (0 significa que ha sido programado).
4. Poner a 0, y BS2, BS1 a 10. El estado de los bits extendidos del Fusible
pueden ahora ser ledos en DATA (0 significa que ha sido programado).
5. Poner a 0, y BS2, BS1 a 01. El estado de los bits de bloqueo pueden
ahora ser ledos en DATA (0 significa que ha sido programado).
6. Poner a 1.


26.7.13 Lectura de los Bytes de Firma
El algoritmo para lectura de los bytes de firma es descrito a continuacin:

1. A: Cargar Comando 0000 1000.
2. Cargar Datos de Byte Bajos (0x00 - 0x02).
3. Poner a 0, and BS to 0. La seleccin de byte de firma ahora puede ser
leda en DATO.
4. Poner a 1.

26.7.14 Lectura de los Bytes de Calibracin
El algoritmo para lectura del byte de Calibracin se describe a continuacin:

1. A: Cargar Comando 0000 1000.
2. B: Cargar Datos de Byte Bajos, 0x00.
3. Poner a 0, y BS1 a 1. El byte de calibracin puede ahora ser ledo en
DATA.
4. Poner a 1.

26.7.15 Caractersticas de la Programacin en Paralelo








26.8 Descarga Serial
Ambas series de memorias la Flash y la EEPROM pueden ser programadas
usando un bus serial de programacin mientras RESET es puesto a GND. La
interfase de programacin Serial consiste de pines SCK, MOSI (entrada) y MISO
(salida). Despus el RESET el puesto en bajo, la instruccin para habilitar la
Programacin necesita ser ejecutada primero antes que las operaciones de
programar/borrar puedan ser ejecutadas. Note, que en la tabla 26-15, el
mareamiento del pin para programacin serial es listado. No todos los paquetes
usan los pines SPI dedicados para los perifricos internos de Interfase Serial-
SPI.

26.8.1 Mapamiento del pin de Programacin Serial




Cuando programando la EEPROM, el ciclo de auto-borrado es construido en el
mismo tiempo de operacin de programacin (solo en el modo serial) y no
necesita ser ejecutada primero en la instruccin Borrado de Chip. La operacin
borrado del Chip gira el contenido de cara localidad de memoria en ambas el
Programa y EEPROM en 0xFF.
Dependiendo de los fusibles CKSEL, un reloj vlido estara presente. Los
periodos mnimos en bajo y alto para el reloj de salida serial (SCK) son
definidas a continuacin:
Bajo: > 2 CPU ciclos de reloj para fck < 12 MHz, 3 CPU ciclos de reloj para
fck >= 12 MHz
Alto: > 2 CPU ciclos de reloj para fck < 12 MHz, 3 CPU ciclos de reloj para f
ck >= 12 MHz




26.8.2 Algoritmo de Programacin Serial
Cuando la escritura de datos seriales para el ATmega164P/324P/644P, el dato
es bloqueado en el flanco de subida del SCK.
Cuando la lectura de datos seriales para el ATmega164P/324P/644P, el dato es
bloqueado en el flanco de bajada del SCK.
Para programar y verificar el ATmega164P/324P/644P en el modo de
programacin serial, la siguiente secuencia es recomendada:

1. Secuencia de Encendido:
Aplicando Energa entre Vcc y GND mientras el y SCK son puestos en
0. En algunos sistemas la programacin no puede garantizar que SCK es
mantenida en bajo durante el encendido. En este caso, el dara pulsos
positivos de los dos ltimos ciclos de reloj del CPU despus el SCK ha sido
puesto en 0.

2. Esperar por lo menos 20 ms y habilitar la programacin serial enviando la
instruccin de habilitacin de programacin al pin MOSI.

3. Las instrucciones de Programacin serial no trabajaran si la comunicacin
esta fuera de sincronizacin. Cuando en la sincronizacin, el segundo byte
(0x53), regresara cuando emite el tercer byte de la habilitacin de la instruccin
de programacin. Por consiguiente el eco es correcto o no, para todos los cuatro
bytes de las instrucciones serian transmitidas. Si la 0x53 no retrocedera, dar
con un pulso positivo y emitir el nuevo comando de habilitacin de
programacin.

4. La flash programa una pgina en un momento. La pagina de memoria carga
un byte en un momento supliendo el 7 LSB de la direccin y datos ambos con la
instruccin Cargar la pagina de la memoria de programa. Para asegurar la carga
correcta de la pgina, el byte bajo del dato sera cargado antes que el byte alto
del dato esto es aplicado para las direcciones dadas. La pgina de la memoria
de programa es almacenada cargando el instruccin de escritura de pagina de
la memoria de programa con las lneas de direccin 15..8. Antes emitiendo este
comando, estar seguro que la instruccin cargar el byte de direccin extendido
ha sido usado para definir la MSB de la direccin. El byte de direccin
extendida es almacenado hasta que el comando es re-emitido, por ejemplo, los
comandos necesitan solo ser emitidos para la primera pgina, y cuando cruza el
limite de la palabra 64K. Si no es usado, el usuario esperara al ltimo
tWD_FLASH antes de emitir la siguiente pgina. Ver Tabla 26-16. Accediendo a
la interfase de programacin serial antes que la operacin de escritura de la
Flash este completada puede resultar una programacin incorrecta.

5. El arreglo de la EEPROM es programado con un byte a la vez
proporcionando las direcciones y datos junto con las instrucciones de Escritura
apropiadas. La localidad de memoria de la EEPROM es primero
automticamente borrada antes de que el nuevo datos es escrito. Si el polling no
es usado, el usuario esperara al ultimo tWD_EEPROM antes de enviar el
siguiente byte. Ver la Tabla 26-16. En el borrado del Chip del dispositivo,
ningn 0 xFFs en los datos de archivo necesitan ser programados.

6. Ninguna localidad de memoria puede ser verificada usando la instruccin de
lectura con la cual retorna el contenido y selecciona la direccin en la salida
serial MISO. Cuando se lee la memoria Flash, use la instruccin Cargar el byte
de direccin extendido definido arriba del byte de direccin, con lo cual no es
incluido la instruccin de la memoria de programa. El byte de direccin
extendida es almacenado hasta que el comando es re-emitido, por ejemplo, los
comandos necesitan solo ser emitidos para la primera pgina, y cuando cruzan
el limite de la palabra 64K.

7. Al final de la sesin de programacin, el puede ser puesto en alto y
comenzar una operacin normal.

8. Secuencia de Apagado si es necesario.
Poner a1.
Apagar VCC.

























26.9 Set de Instrucciones de Programacin Serial



Si el LSB en el byte de datos de salida RDY/BSY es 1, la operacin de
programacin esta todava pendiente. Esperar hasta que el bit retorne a 0
antes de que la siguiente instruccin es llevada a cabo. Dentro de la misma
pgina, el byte de datos bajo sera cargado antes que el byte de datos alto.
Despus el dato es cargado en el buffer de pgina, ver la Figura 26-11.



26.9.1 Caractersticas de Programacin Serial

26.10 Programando va la Interfase del JTAG I
Programando a travs de la interfase del JTAG el control requiere de cuatro
pines especficos del JTAG: TCK, TMS, TDI, y TDO. El control de reset y los
pines del reloj no son requeridos.
Para ser capaces de usar la interfase serial del JTAG, el Fusible JTAGEN sera
programado. El dispositivo es por defecto desplazado con el programa del
fusible. Adicionalmente, el bit JTD en MCUCSR sera limpiado.
Alternativamente, si el bit JTD es puesto, el reset externo puede ser forzado en
bajo. Luego, el bit JTD sera limpiado despus de dos chip de reloj y los pines
JTAG como pines de prtico normales en modo Running mientras todava
permite en la programacin del sistema va la interfase JTAG. Note que esta
tcnica no puede ser usada cuando los pines del JTAG para Boundary-scan or
On-chip Debug. En estos casos los pines de JTAG serian dedicados para estos
propsitos. Durante la programacin de la frecuencia de reloj de la entrada del
TCK seria menos que la frecuencia mxima del chip. El sistema de reloj del
Prescalador puede no ser usado para dividir la entrada de reloj TCK en una
frecuencia lo suficientemente baja.





26.10.1 Programando Instrucciones Especficas del JTAG
El Registro de Instruccin es de 4-bits, soportando 16 instrucciones. Las
instrucciones del JTAG para programacin son listadas debajo.
El OPCODE para cada instruccin es mostrado detrs de l nombre de la
instruccin en el formato hex. El texto describe con cual Registro de datos es
seleccionado como camino entre TDI y TDO para cada instruccin. El estado
Run-Test/Idle del controlador TAP es usado como generador de reloj interno.
Esto puede tambin ser usado como estado idle entre las secuencias JTAG. El
estado de la secuencia de mquina para cargar la palabra de instruccin es
mostrada en la figura 26-13.



26.10.2 AVR_RESET (0xC)
El AVR especifica pblicamente las instrucciones del JTAG para
configuraciones de los dispositivos AVR en el modo Reset o tomando la salida
del dispositivo desde el modo Reset. El controlador TAP no es reseteado por
esta instruccin. El un bit del registro reset es seleccionado como registro de
Datos. Note que el reset seria activado cuando hay uno lgico en la cadena del
reset. La salida desde la cadena no es habilitada.
Los estados de activacin son:
Desplazamiento DR: El Registro reset es desplazado por la entrada del TCK.

26.10.3 PROG_ENABLE (0x4)
El AVR especifica pblicamente las instrucciones del JTAG programando va
prtico JTAG. Los 16-bits del registro habilitador de Programa es seleccionado
como registro de Datos. Los estados activos son los siguientes:
Desplazamiento DR: El programa de habilitacin de firma es desplazada en el
Registro de Datos.
Actualizando-DR: El programa de habilitacin de firma es comparado con el
valor correcto y el modo de programacin es escogido si la firma es vlida.


26.10.4 PROG_COMMANDS (0x5)
El AVR especifica pblicamente las instrucciones del JTAG programando los
comandos va JTAG .Los estados activos son los siguientes:

Captura-DR: El resultado del comando previo es cargado en el Registro de
Datos.
Desplazamiento-DR: El Registro de datos es desplazado por la entrada TCK,
desplazando fuera el resultado del comando previo y desplazando en nuevo
comando.
Actualizando-DR: El comando de programacin es aplicado en la entrada de
la Flash.
Run-Test/Idle: Un ciclo de Reloj es generado, ejecutando el comando
aplicado.

26.10.5 PROG_PAGELOAD (0x6)
El AVR especifica pblicamente las instrucciones del JTAG directamente
cargando la pgina de datos de la flash va el prtico del JTAG. Unos 8-bits del
registro de byte de datos de la Flash es seleccionado como Registro de datos.
Esto es fsicamente los 8 LSBs del Registro de comandos Programados. El
estado activo se describe a continuacin:

Desplazamiento DR: El Registro de Byte de Datos de la Flash es desplazado
por la entrada TCK.
Actualizacin-DR: El contenido del Registro de Byte de Datos de la Flash es
copiado en el Registro temporal. Al escribir secuencias es inicializado dentro de
11 cargas de ciclos TCK el contenido del registro temporal en el buffer de la
pagina de la Flash. El AVR automticamente alterna entre escribir en bajo y en
alto el byte para cada nuevo estado de actualizacin-DR, empezando con el byte
bajo para la primera Actualizacin-DR encontrada despus del comando
PROG_PAGELOAD. El contador de programa es pre-incrementado antes de
escribir el byte en bajo, excepto para el primer byte escrito. Esto asegura que el
primer dato es escrito a la direccin por PORG_COMMANDS, y cargando la
ultima localidad en el buffer de pagina
que no es hecho por el contador de programa incrementado en la siguiente
pgina.

26.10.6 PROG_PAGEREAD (0x7)
El AVR especifica pblicamente la instruccin JTAG y captura directamente el
contenido de la Flash va el prtico del JTAG. Unos 8-bits del Registro de Byte
de datos de la Flash es seleccionado como Registro de datos. Esto es fsicamente
los 8 LSBs del Registro de Comando de Programa. Los estados Activos son los
siguientes:

Captura DR: El contenido de seleccin del bytes de la Flash es capturado en el
Registro de Byte de Datos de la Flash. El AVR automticamente alterna entre
leer el byte alto o bajo para cada nuevo estado de captura-DR, empezando con
el byte bajo para la primera Captura DR encontrada despus de comando
PROG_PAGEREAD- El contador de Programa es post-incrementado despus
de leer cada byte alto, incluyendo el primer byte ledo. Esto asegura que el
primer datos es capturado desde la primera direccin por
PROG_COMMANDS, y leyendo la ltima localidad en la pgina haciendo que
el contador de programa incremente en la siguiente pgina.
Desplazamiento-DR: El Registro de Datos de la Flash es desplazado por la
entrada TCK.

26.10.7 Registro de Datos
El Registro de Datos es seleccionado por los Registro de instrucciones del JTAG
descritos en la seccin Programacin de Instrucciones Especificas del JTAG
Las operaciones ms relevantes de programacin del Registro de Datos son:

Registro Reset
Programando el Registro de Habilitacin
Programando el Registro de Comandos
Registro de Byte de Datos de la Flash

26.10.8 Registro Reset
El Registro Reset es un Registro de Datos de Prueba usado para resetear la parte
durante la programacin. Esto requiere la parte antes del modo de
programacin. Un valor alto en el registro Reset corresponde al pulling externo
del reset en bajo. La parte es reseteada hasta que hay un valor presente en el
Registro Reset. Dependiendo de las configuraciones de los Fusibles para las
opciones del reloj, la parte permanecer reseteada por el periodo de tiempo
fuera del Reset despus soltar al registro del reset. La salida desde el Registro
de Datos no es habilitada, as el reset tomar lugar inmediatamente, como se
muestra en la figura 24-2.

26.10.9 Programando el Registro de Habilitacin
La programacin del registro de Habilitacin es de 16-bits. El contenido de
estos registros es comparado con la programacin de la firma de habilitacin,
con el cdigo binario 0b1010_0011_0111_0000. Cuando el contenido del registro
es igual a la programacin de la firma de habilitacin, programando va JTAG
el prtico es habilitado. El registro es reseteado a 0 al Encender el Reset, y
debera siempre ser reseteado cuando llega al modo de programacin.



26.10.10 Programando del Registro de Comandos
La Programacin del Registro de Comandos es de registros de 15-bit. El registro
es usado para desplazar serialmente fuera el resultado del comando previo. El
Set de Instrucciones de Programacin del JTAG es mostrado en la Tabla 26-18
en la pag 317 del Datasheet. La secuencia de estado cuando se desplaza en los
comandos de programacin es ilustrado en la Figura 26-16 en la pagina 320.



















26.10.11 Registro de Byte de Datos de la Flash
El Registro de Byte de Datos de la Flash proporciona una eficiente va de cargar
el buffer de la pagina de la Flash ante de ejecutar la lectura de pagina, o la
salida/verificando el contenido de la flash. Un estado de maquina actualiza la
seal de control de la flash y sensa la seal de habilitacin desde la Flash,
verdaderamente solo la palabra de datos necesita ser desplazado
entrada/salida.
El Registro de Byte de Datos de la flash actualmente consiste de una cadena de
8-bits y un registro temporal de 8-bit . Durante la carga de la pgina, el estado
de actualizacin DR copia el contenido de toda la cadena al registro temporal e
inicializa la secuencia de escritura que dentro de 11 ciclos TCK cargando el
contenido del registro temporal en el buffer de pgina de la Flash. El AVR
automticamente alterna entre escribiendo el byte en bajo y en alto para cada
nueva actualizacin del estado DR, empezando con el byte bajo para la primera
actualizacin encontrada despus que se ejecuta el comando
PROG_PAGELOAD. El contador de Programa es pre-incrementado antes de
escribir el byte bajo, excepto para el primer byte de escritura, Esto asegura que
el primer dato es escrito en la direccin preparada por PROG_COMMANDS, y
cargando la ultima localidad en el buffer de pagina no hace que el Contador de
Programa incremente en la siguiente pagina.
Durante la Lectura de Pagina, el contenido del byte de seleccin de la Flash es
capturado en el registro de byte de datos de la Flash durante el estado de
captura DR. El AVR automticamente alterna entre lectura entre el byte bajo y
alto para cada nuevo estado de captura DR, empezando con el byte bajo para la
primera captura DR encontrada despus de entrar en el comando
PROG_PAGEREAD. El contador de programa es post incrementado despus de
la lectura de cada byte alto, incluyendo el primer byte ledo. Esto asegura que el
primer dato es capturado desde la primera direccin preparada por
PROG_COMMANDS, y leyendo la ltima localidad en la pgina hecha, el
contador de programa incrementa a la siguiente pgina.




El estado de maquina controlando el Registro de Byte de Datos de la Flash es
contado por TCK. Durante la operacin normal en la cual ocho bits son
desplazados por cada byte de la Flash, los ciclos de reloj necesitan navegar a
travs del controlador TAP automticamente alimenta al estado de mquina
por el Registro de Byte de datos de la Flash con suficiente numero de pulsos
reloj para completar esta operacin.
Sin embargo, si pocos bits son desplazados entre cada estado de actualizacin
DR durante la carga de pgina, el controlador TAP debera estar en estado Run-
Test/Idle para algunos ciclos TCK para asegurar que exista los ltimos 11 ciclos
TCK entre cada estado de actualizacin DR:






26.10.12 Algoritmos de Programacin
Todas la referencias 1a, 1b, estn descritas en la tabla 26-18 de la pgina 317
del datasheet.

26.10.13 Entrando al Modo de Programacin
1. Entrar a la instruccin AVR_RESET del JTAG y cambiar a 1 en el Registro
Reset.
2. Entrar a la instruccion PROG_ENABLE y cambiar a 0b1010_0011_0111_0000
en el Registro de habilitacin del Programa.

26.10.14 Saliendo del Modo de Programacin
1. Entrar a la instruccin PROG_COMMANDS.
2. Deshabilitar todas las instrucciones de programacin no usar las
instrucciones de operacin 11a.
3. Entrar a la instruccin PROG_ENABLE y cambiar a 0b0000_0000_0000_0000
en el Registro de habilitacin del Programa.
4. Entrar a la instruccin AVR_RESET del JTAG y cambiar a 0 en el Registro
Reset.

26.10.15 Realizando el borrado del Chip
1. Entrar a la instruccin PROG_COMMANDS.
2. Empezar con el Borrado del Chip usando las instrucciones de programacin
1a.
3. Verificar si el Borrado del Chip se ha completado usando las instrucciones de
programacin 1b, o esperar por tWLRH_CE (referido en la Tabla 26-14 en la
pagina 306 datasheet)

26.10.16 Programando la Flash
Antes de programar en la Flash el Borrado del Chip, ver Realizando el Borrado
del Chip

1. Entrar a la instruccin PROG_COMMANDS.
2. Habilitar la escritura en la Flash usando la instruccin de programacin 2a.
3. Cargar la direccin del byte bajo usando la instruccin de programacin 2b.
4. Cargar la direccin del byte alto usando la instruccin de programacin 2c.
5. Cargar la direccin del byte bajo usando la instruccin de programacin 2d.
6. Cargar el dato usando las instrucciones de programacin 2e, 2f, y 2g.
7. Repetir los pasos 5 y 6 para todas las palabras de instrucciones en la pgina.
8. Escribir la pgina usando la instruccin de programacin 2h.
9. Verificar para la escritura de la Flash ha sido completada usando la
instruccin de programacin 2i, o esperar por tWLRH (Referido en la Tabla 26-
14)
10. Repetir los pasos 3 y 9 hasta que todos los datos han sido programados.

Una ms eficiente transferencia de datos puede ser lograda usando la
instruccin de programacin PROG_PAGELOAD:
1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar la escritura en la Flash usando la instruccin de programacin 2a.
3. Cargar la direccin de pgina usando las instrucciones de programacin
2b,2c y 2d. PCWORD (Referidos en la Tabla 26-7) es usada para direccionar
dentro de una pgina y seria escrita como 0.
4. Entrar a la instruccin PROG_PAGELOAD en el JTAG.
5. Cargar la pgina entera moviendo todas las palabras de instrucciones en la
pgina byte por byte, empezando con el LSB de la primera instruccin en la
pgina y finalizando con el MSB de la ltima instruccin de la pgina. Usar
Actualizacin DR para copiar los contenidos del Registro de Byte de Datos de la
Flash en la localidad de la pgina de la Flash y con el auto incremento del
Contador de Programa antes de cada palabra.
6. Entrar a la instruccin PROG_COMMANDS en el JTAG.
7. Escribir la pgina usando la instruccin de programacin 2h.
8. Verificar para la escritura de la Flash ha sido completada usando la
instruccin de programacin 2i, o esperar por tWLRH (Referido en la Tabla 26-
14)
9. Repetir los pasos 3 y 8 hasta que todos los datos han sido programados.

26.10.17 Leyendo la Flash
1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar la lectura en la Flash usando la instruccin de programacin 3a.
3. Cargar la direccin de pgina usando las instrucciones de programacin 3b,
3c y 3d.
4. Leer el dato usando la instruccin de programacin 3e.
5. Repetir los pasos 3 y 4 hasta que todos los datos han sido ledos

Una transferencia de datos ms eficiente puede ser lograda usando la
instruccin de programacin PROG_PAGEREAD

1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar la lectura en la Flash usando la instruccin de programacin 3a.
3. Cargar la direccin de pgina usando las instrucciones de programacin 3b,
3c y 3d.. PCWORD (referido en la Tabla 26-7) es usado para direccionar dentro
de una pgina y sera escrito como 0.
4. Entrar a la instruccin PROG_PAGEREAD en el JTAG.
5. Leer la pgina entera (o Flash) desplazando fuera todas la palabras de
instrucciones en la pgina, empezando con el LSB de la primera instruccin en
la pgina y finalizando con el MSB de la ltima instruccin de la pgina. El
estado de Captura DR para ambas capturas de datos desde la flash, y tambin
auto incremento del contador de programa despus que cada palabra es leda.
Note que la captura DR va antes del desplazamiento DR.
6. Entrar a la instruccin PROG_COMMANDS en el JTAG.
7. Repetir los pasos 3 y 6 hasta que todos los datos han sido ledos



26.10.18 Programando la EEPROM
Antes de programar la EEPROM el Borrado del Chip seria realizado, ver
Realizando el Borrado del chip en la pagina 322 del datasheet.

1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar la escritura en la EEPROM usando la instruccin de programacin
4a.
3. Cargar la direccin del byte alto usando la instruccin de programacin 4b.
4. Cargar la direccin del byte bajo usando la instruccin de programacin 4c.
5. Cargar los datos usando las instrucciones de programacin 4d y 4e.
6. Repetir los pasos 4 y 5 para todos los bytes de datos en la pgina.
7. Escribir los datos usando las instrucciones de programacin 4f.
8. Verificar para EEPROM que la escritura ha finalizado usando la instruccin
de programacin 4g o esperar por tWLRH (referida en la tabla 26-14).
9. Repetir los pasos 3 a 8 hasta que todos los datos han sido programados.
Note que la instruccin PROG_PAGELOAD no puede ser usada cuando se
programa la EEPROM.


26.10.19 Leyendo la EEPROM
1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar la lectura en la EEPROM usando la instruccin de programacin 5a.
3. Cargar los direccin usando las instrucciones de programacin 5b and 5c.
4. Leer los datos usando las instrucciones de programacin 5d.
5. Repetir los pasos 3 y 4 hasta que todos los datos han sido ledos.
Note que la instruccin PROG_PAGEREAD no puede ser usada cuando se lee
en la EEPROM.

26.10.20 Programando Fusibles
1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar la escritura de los Fusibles usando la instruccin de programacin
6a.
3. Cargar el dato del byte alto usando la instruccin de programacin 6b. El
valor del bit 0 programar el fusible correspondiente, a 1 se desprograma el
fusible.
4. Escribir el Fusible del byte alto usando la instruccin de programacin 6c.
Write Fuse High byte using programming instruction 6c.
5. Verificar que la escritura del fusible ha finalizado usando la instruccin 6d,
esperar por tWLRH (referido en la Tabla 26-14).
6. Cargar el dato del byte bajo usando las instrucciones de programacin 6e. A
0 programar el fusible, a 1 se desprogramara el fusible.
7. Escribir el fusible en el byte bajo usando la instruccin de programacin 6g,
Write Fuse low byte using programming instruction 6f.
8. Poll for Fuse write complete using programming instruction 6g, or wait for
tWLRH (esperar por tWLRH (referido en la Tabla 26-14).


26.10.21 Programando los Bits de Bloqueo
1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar el bloqueo del bit de escritura usando la instruccin de
programacin 7a.
3. Cargar los datos usando la instruccin de programacin 7b. El valor del bit
0 programacin el correspondiente bit de bloqueo, a 1 llegara el bit de
bloqueo inesperado.
4. Escribir los bits de bloqueo usando la instruccin de programacin 7c.
5. Verificar que la escritura del bit de bloqueo ha finalizado usando la
instruccin 6d, esperar por tWLRH (referido en la Tabla 26-14).

26.10.22 Leyendo los Fisibles y Bits de Bloqueo
1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar Fusible/lectura del bit de bloqueo usando la instruccin de
programacin 8a.
3. Para leer todos los Fusibles y bits de Bloqueo, use la instruccin de
programacin 8e.
Para solo leer el byte alto del Fusible, use la instruccin de programacin 8b.
Para solo leer el byte bajo del Fusible, use la instruccin de programacin 8c.
Para solo leer los bits de Bloqueo, use la instruccin de programacin 8d.

26.10.23 Leyendo los bytes de Firma
1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar la lectura del byte de firma usando la instruccin de programacin
9a.
3. Cargar la direccin 0x00 usando la instruccin de programacin 9b.
4. Leer el primer del byte de firma usando la instruccin de programacin 9c.
5. Repetir los pasos 3 y 4 con direcciones 0x01 y 0c02 para leer el Segundo y
tercer byte de firma, respectivamente.

26.10.24 Leyendo el Byte de Calibracin
1. Entrar a la instruccin PROG_COMMANDS en el JTAG.
2. Habilitar la lectura del byte de calibracin usando la instruccin de
programacin 10a.
3. Cargar la direccin 0x00 usando la instruccin de programacin 10b.
4. Leer el byte de calibracin usando la instruccin de programacin 10c.











27. Caractersticas Elctricas


27.1 Caractersticas DC




27.1.1 Caractersticas DC del ATmega164P


27.1.2 Caractersticas DC del ATmega324P


27.1.3 Caractersticas DC del ATmega644P

27.2 Grados de Velocidad
La Mxima Frecuencia es dependiente de Vcc. Como se muestra en la Figura 27-
1 y 27-2, la curva de Mxima Frecuencia VS. Vcc es lineal entre 1.8V < VCC <
2.7V y entre 2.7V < VCC <
4.5V.




27.3 Caractersticas de Reloj




27.3.1 Formas de Onda del Controlador de Reloj Externo






27.3.2 Controlador del Reloj Externo



27.4 Sistema y Caractersticas del Reset






27.5 Caractersticas de Interrupciones Externas


27.6 Caractersticas del Timer SPI




27.7 Caractersticas de Interfase Serial 2-hilos (2-wire)


























27.8 Caractersticas ADC






28. Caractersticas Tpicas
Los siguientes mapas muestran la conducta tpica. Estas figuras no son
probadas durante la fabricacin. Todas las mediciones del consumo de corriente
son realizadas con todos los pines de E/S configurados como entradas y con
pull-up internas habilitadas. El generador de forma seno a la salida es usado
como fuente de reloj. Todas las medidas de Activacin y Idle consumo de
corriente son hechas con todos los bits en los registros PRR poniendo as, los
mdulos correspondientes de E/S son apagados. Tambin el comparador
Analgico es deshabilitado durante estas mediciones. El consumo de energa en
modo Power-down es independiente de la seleccin del reloj.
El consumo de corriente es una funcin de varios factores como: voltaje de
operacin, frecuencia de operacin, cargando los pines de E/S, cambiando la
velocidad del los pines de E/S, ejecutando el cdigo y temperatura ambiente.
Los factores dominantes son voltaje y frecuencia.
La dibujo de corriente desde la capacidad de carga de los pines puede ser
estimada (por un pin) como CL*VCC*f cuando CL=capacidad de carga, Vcc=
voltaje de operacin y f= frecuencia de cambio promedio de los pines de E/S.
Las partes son caracterizadas con ms altas frecuencias que los lmites de
prueba. Las partes no garantizan las propiedades de la funcin a frecuencias
ms altas que el cdigo indicado.
La diferencia entre consumo de corriente ente modo Power-down con
Watchdog Timer habilitadas y modo Power-down con Watchdog Timer
deshabilitado representa la corriente diferencial dibujada por el Watchdog
Timer.

28.1 Caracterizacin Tpica del ATmega164P
28.1.1 Suministro Activo Actual










28.1.2 Idle Supply Current











28.1.3 Suministro de Corriente de los mdulos E/S
Las tablas y formulas pueden ser usadas para calcular el consumo de corriente
adicional para los diferentes mdulos de E/S en modo Activo y Idle. La
habilitacin o desabilitacin de los mdulos de E/S son controlados por el
Registro Reduccin de Energa. Ver PPR- Registro de Reduccin de Energa
pgina 48 del datasheet.





Esto es posible es posible calcular con el tpico consumo de corriente basado en
los nmeros de la Tabla 28-2 pgina 344 para otro Vcc y frecuencia estn
listados en la Tabla 28-1 en la pgina 343 del datasheet.
















28.1.4 Suministro de Corriente Power-down

28.1.5 Suministro de Corriente Power-save















28.1.6 Suministro de Corriente Standby



28.1.7 Pin Pull-up














28.1.8 Pin Driver Strength









28.1.9 Pin Threshold and Hysteresis













28.1.10 BOD Threshold



















28.1.11 Velocidad del Oscilador Interno










28.1.12 Consumo de Corriente de Unidades Perifricas














28.1.13 Current Consumption in Reset and Reset Pulsewidth



















28.2 Caractersticas Tpicas del ATmega324P

28.2.1 Suministro de Corriente Activa
































28.2.2 Suministro de Corriente Idle
































28.2.3 Suministro de Corriente de los mdulos E/S
Las tablas y formulas pueden ser usadas para calcular el consumo de corriente
adicional para los diferentes mdulos de E/S en modo Activo y Idle. La
habilitacin o desabilitacin de los mdulos de E/S son controlados por el
Registro Reduccin de Energa. Ver PPR- Registro de Reduccin de Energa
pgina 48 del datasheet.

















28.2.4 Suministro de Corriente Power-down


















28.2.5 Suministro de Corriente Power-save







28.2.6 Suministro de Corriente Standby








28.2.7 Pin Pull-up







































28.2.8 Pin Driver Strength






























28.2.9 Pin Threshold and Hysteresis










































28.2.10 BOD Threshold

















28.2.11 Velocidad del Oscilador Interno


























28.2.12 Consumo de Corriente de las Unidades Perifricas









































28.2.13 Current Consumption in Reset and Reset Pulsewidth
















28.3 Caractersticas Tpicas del ATmega644P

28.3.1 Active Supply Current






























28.3.2 Suministro de Corriente Idle


























28.3.3 Suministro de Corriente de los mdulos E/S
Las tablas y formulas pueden ser usadas para calcular el consumo de corriente
adicional para los diferentes mdulos de E/S en modo Activo y Idle. La
habilitacin o desabilitacin de los mdulos de E/S son controlados por el
Registro Reduccin de Energa. Ver PPR- Registro de Reduccin de Energa
pgina 48 del datasheet.





28.3.4 Suministro de Corriente Power-down









28.3.5 Suministro de Corriente Power-save














28.3.6 Suministro de Corriente Standby



28.3.7 Pin Pull-up
























28.3.8 Pin Driver Strength









28.3.9 Pin Threshold and Hysteresis














28.3.10 BOD Threshold







28.3.11 Internal Oscillator Speed











28.3.12 Consumo de Corriente de las Unidades Perifricas












28.3.13 Current Consumption in Reset and Reset Pulsewidth


























29. Register Summary










































30. Instruction Set Summary


































31. Ordering Information
31.1 ATmega164P










































32. Packaging Information
32.1 44















32.2 40P6





















32.3 44M1









33. Errata
33.1 ATmega164P Rev. A
No known Errata.
33.2 ATmega324P Rev. A
No known Errata.
33.3 ATmega644P Rev. A
No known Errata.









































Table of Contents
Features ..................................................................................................... 1
1 Pin Configurations ................................................................................... 2
2 Overview ................................................................................................... 3
2.1 Block Diagram ..........................................................................................................3
2.2 Comparison Between ATmega164P, ATmega324P and ATmega644P ..................4
2.3 Pin Descriptions .......................................................................................................4
3 Resources ................................................................................................. 7
4 About Code Examples ............................................................................. 8
5 Data Retention .......................................................................................... 8
6 AVR CPU Core .......................................................................................... 9
6.1 Overview ..................................................................................................................9
6.2 ALU Arithmetic Logic Unit ...................................................................................10
6.3 Status Register .......................................................................................................10
6.4 General Purpose Register File ...............................................................................12
6.5 Stack Pointer ..........................................................................................................13
6.6 Instruction Execution Timing ..................................................................................14
6.7 Reset and Interrupt Handling .................................................................................15
7 AVR Memories ........................................................................................ 18
7.1 Overview ................................................................................................................18
7.2 In-System Reprogrammable Flash Program Memory ............................................18
7.3 SRAM Data Memory ..............................................................................................19
7.4 EEPROM Data Memory .........................................................................................21
7.5 I/O Memory .............................................................................................................22
7.6 Register Description ...............................................................................................23
8 System Clock and Clock Options ......................................................... 29
8.1 Clock Systems and their Distribution ......................................................................29
8.2 Clock Sources ........................................................................................................30
8.3 Low Power Crystal Oscillator ..................................................................................32
8.4 Full Swing Crystal Oscillator ...................................................................................33
8.5 Low Frequency Crystal Oscillator ...........................................................................34
8.6 Calibrated Internal RC Oscillator ............................................................................36
8.7 128 kHz Internal Oscillator .....................................................................................37







8.8 External Clock ........................................................................................................37
8.9 Timer/Counter Oscillator ........................................................................................38
8.10 Clock Output Buffer ..............................................................................................38
8.11 System Clock Prescaler .......................................................................................38
8.12 Register Description .............................................................................................40
9 Power Management and Sleep Modes ................................................. 42
9.1 Overview ................................................................................................................42
9.2 Sleep Modes ..........................................................................................................42
9.3 BOD Disable ...........................................................................................................43
9.4 Idle Mode ................................................................................................................43
9.5 ADC Noise Reduction Mode ..................................................................................43
9.6 Power-down Mode .................................................................................................44
9.7 Power-save Mode ..................................................................................................44
9.8 Standby Mode ........................................................................................................44
9.9 Extended Standby Mode ........................................................................................44
9.10 Power Reduction Register ....................................................................................45
9.11 Minimizing Power Consumption ...........................................................................45
9.12 Register Description .............................................................................................47
10 System Control and Reset .................................................................... 50
10.1 Internal Voltage Reference ...................................................................................54
10.2 Watchdog Timer ...................................................................................................55
10.3 Register Description .............................................................................................58
11 Interrupts ................................................................................................ 61
11.1 Overview ..............................................................................................................61
11.2 Interrupt Vectors in ATmega164P/324P/644P .....................................................61
11.3 Register Description .............................................................................................65
12 External Interrupts ................................................................................. 67
12.1 Overview ..............................................................................................................67
12.2 Register Description .............................................................................................67
13 I/O-Ports .................................................................................................. 72
13.1 Overview ..............................................................................................................72
13.2 Ports as General Digital I/O ..................................................................................73
13.3 Alternate Port Functions .......................................................................................78
13.4 Register Description .............................................................................................91


14 8-bit Timer/Counter0 with PWM ............................................................ 93
14.1 Features ...............................................................................................................93
14.2 Overview ..............................................................................................................93
14.3 Timer/Counter Clock Sources ..............................................................................94
14.4 Counter Unit .........................................................................................................94
14.5 Output Compare Unit ...........................................................................................95
14.6 Compare Match Output Unit .................................................................................97
14.7 Modes of Operation ..............................................................................................98
14.8 Timer/Counter Timing Diagrams ........................................................................102
14.9 Register Description ...........................................................................................104
15 16-bit Timer/Counter1 with PWM ........................................................ 111
15.1 Features .............................................................................................................111
15.2 Overview ............................................................................................................111
15.3 Accessing 16-bit Registers .................................................................................113
15.4 Timer/Counter Clock Sources ............................................................................116
15.5 Counter Unit .......................................................................................................117
15.6 Input Capture Unit ..............................................................................................118
15.7 Output Compare Units ........................................................................................120
15.8 Compare Match Output Unit ...............................................................................122
15.9 Modes of Operation ............................................................................................123
15.10 Timer/Counter Timing Diagrams ......................................................................130
15.11 Register Description .........................................................................................132
16 8-bit Timer/Counter2 with PWM and Asynchronous Operation ...... 139
16.1 Features .............................................................................................................139
16.2 Overview ............................................................................................................139
16.3 Timer/Counter Clock Sources ............................................................................140
16.4 Counter Unit .......................................................................................................141
16.5 Output Compare Unit .........................................................................................141
16.6 Compare Match Output Unit ...............................................................................143
16.7 Modes of Operation ............................................................................................144
16.8 Timer/Counter Timing Diagrams ........................................................................148
16.9 Asynchronous Operation of Timer/Counter2 ......................................................150
16.10 Timer/Counter Prescaler ..................................................................................152
16.11 Register Description .........................................................................................152
17 SPI Serial Peripheral Interface ......................................................... 161

17.1 Features .............................................................................................................161
17.2 Overview ............................................................................................................161
17.3 SS Pin Functionality ...........................................................................................166
17.4 Data Modes ........................................................................................................166
17.5 Register Description ...........................................................................................168
18 USART ................................................................................................... 171
18.1 Features .............................................................................................................171
18.2 USART1 and USART0 .......................................................................................171
18.3 Overview ............................................................................................................171
18.4 Clock Generation ................................................................................................172
18.5 Frame Formats ...................................................................................................175
18.6 USART Initialization ...........................................................................................176
18.7 Data Transmission The USART Transmitter ...................................................177
18.8 Data Reception The USART Receiver ............................................................180
18.9 Asynchronous Data Reception ...........................................................................184
18.10 Multi-processor Communication Mode .............................................................187
18.11 Register Description .........................................................................................189
18.12 Examples of Baud Rate Setting .......................................................................194
19 USART in SPI Mode ............................................................................. 198
19.1 Features .............................................................................................................198
19.2 Overview ............................................................................................................198
19.3 Clock Generation ................................................................................................198
19.4 SPI Data Modes and Timing ..............................................................................199
19.5 Frame Formats ...................................................................................................199
19.6 Data Transfer .....................................................................................................201
19.7 AVR USART MSPIM vs. AVR SPI .....................................................................203
19.8 Register Description ...........................................................................................204
20 2-wire Serial Interface .......................................................................... 207
20.1 Features .............................................................................................................207
20.2 2-wire Serial Interface Bus Definition .................................................................207
20.3 Data Transfer and Frame Format .......................................................................208
20.4 Multi-master Bus Systems, Arbitration and Synchronization ..............................211
20.5 Overview of the TWI Module ..............................................................................213
20.6 Using the TWI .....................................................................................................215
20.7 Transmission Modes ..........................................................................................218

20.8 Multi-master Systems and Arbitration .................................................................231
20.9 Register Description ...........................................................................................232
21 AC - Analog Comparator ..................................................................... 237
21.1 Overview ............................................................................................................237
21.2 Analog Comparator Multiplexed Input ................................................................237
21.3 Register Description ...........................................................................................238
22 ADC - Analog-to-digital Converter ..................................................... 240
22.1 Features .............................................................................................................240
22.2 Overview ............................................................................................................240
22.3 Operation ............................................................................................................241
22.4 Starting a Conversion .........................................................................................242
22.5 Prescaling and Conversion Timing .....................................................................243
22.6 Changing Channel or Reference Selection ........................................................246
22.7 ADC Noise Canceler ..........................................................................................248
22.8 ADC Conversion Result .....................................................................................253
22.9 Register Description ...........................................................................................255
23 JTAG Interface and On-chip Debug System ..................................... 260
23.1 Features .............................................................................................................260
23.2 Overview ............................................................................................................260
23.3 TAP Test Access Port .....................................................................................260
23.4 TAP Controller ....................................................................................................262
23.5 Using the Boundary-scan Chain .........................................................................263
23.6 Using the On-chip Debug System ......................................................................263
23.7 On-chip Debug Specific JTAG Instructions ........................................................264
23.8 Using the JTAG Programming Capabilities ........................................................264
23.9 Bibliography ........................................................................................................265
23.10 Register Description .........................................................................................265
24 IEEE 1149.1 (JTAG) Boundary-scan ................................................... 266
24.1 Features .............................................................................................................266
24.2 Overview ............................................................................................................266
24.3 Data Registers ....................................................................................................267
24.4 Boundary-scan Specific JTAG Instructions ........................................................268
24.5 Boundary-scan Chain .........................................................................................269
24.6 ATmega164P/324P/644P Boundary-scan Order ...............................................272
24.7 Boundary-scan Description Language Files .......................................................274


24.8 Register Description ...........................................................................................275
25 Boot Loader Support Read-While-Write Self-Programming ......... 276
25.1 Features .............................................................................................................276
25.2 Overview ............................................................................................................276
25.3 Application and Boot Loader Flash Sections ......................................................276
25.4 Read-While-Write and No Read-While-Write Flash Sections .............................277
25.5 Boot Loader Lock Bits ........................................................................................279
25.6 Entering the Boot Loader Program .....................................................................280
25.7 Addressing the Flash During Self-Programming ................................................281
25.8 Self-Programming the Flash ...............................................................................282
25.9 Register Description ...........................................................................................291
26 Memory Programming ......................................................................... 293
26.1 Program And Data Memory Lock Bits ................................................................293
26.2 Fuse Bits ............................................................................................................294
26.3 Signature Bytes ..................................................................................................296
26.4 Calibration Byte ..................................................................................................296
26.5 Page Size ...........................................................................................................296
26.6 Parallel Programming Parameters, Pin Mapping, and Commands ....................297
26.7 Parallel Programming .........................................................................................299
26.8 Serial Downloading ............................................................................................308
26.9 Serial Programming Instruction set ....................................................................310
26.10 Programming via the JTAG Interface ...............................................................312
27 Electrical Characteristics .................................................................... 325
27.1 DC Characteristics .............................................................................................325
27.2 Speed Grades ....................................................................................................329
27.3 Clock Characteristics ..........................................................................................330
27.4 System and Reset Characteristics .....................................................................331
27.5 External Interrupts Characteristics .....................................................................331
27.6 SPI Timing Characteristics .................................................................................332
27.7 2-wire Serial Interface Characteristics ................................................................333
27.8 ADC Characteristics ...........................................................................................335
28 Typical Characteristics ........................................................................ 338
28.1 ATmega164P Typical Characterization ..............................................................338
28.2 ATmega324P Typical Characteristics ................................................................363
28.3 ATmega644P Typical Characteristic ..................................................................388


29 Register Summary ............................................................................... 413
30 Instruction Set Summary .................................................................... 417
31 Ordering Information ........................................................................... 420
31.1 ATmega164P .....................................................................................................420
31.2 ATmega324P .....................................................................................................421
31.3 ATmega644P .....................................................................................................422
32 Packaging Information ........................................................................ 423
32.1 44A .....................................................................................................................423
32.2 40P6 ...................................................................................................................424
32.3 44M1 ..................................................................................................................425
33 Errata ..................................................................................................... 426
33.1 ATmega164P Rev. A ..........................................................................................426
33.2 ATmega324P Rev. A ..........................................................................................426
33.3 ATmega644P Rev. A ..........................................................................................426
34 Datasheet Revision History ................................................................ 427
34.1 Rev. 8011G- 08/07 .............................................................................................427
34.2 Rev. 8011F- 04/07 ..............................................................................................427
34.3 Rev. 8011E - 04/07 ............................................................................................427
34.4 Rev. 8011D - 02/07 ............................................................................................427
34.5 Rev. 8011C - 10/06 ............................................................................................428
34.6 Rev. 8011B - 09/06 ............................................................................................428
34.7 Rev. 8011A - 08/06 ............................................................................................428
Table of Contents....................................................................................... i


TRADUCCION CON LA COLABORACION:

ANDRES MEJIA Y FERNANDO MORALES ESTUDIANTES DE LA E.P.N.
FACULTAD DE CONTROL


MAS COMENTARIOSY MEJORAS POR FAVOR ESCRIBIRME AL CORREO
ELECTRONICO.

ATENTAMENTE,

JUAN GALARZA
A.T.R.
QUITO ECUADOR

También podría gustarte