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 escrituralectura 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 predecremento 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 EEARLa 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 Powerdown, 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 Brownout (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 Brownout. 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 Powerdowm.

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 1

1 0 1

Cualquier flanco de INTn genera un pedido de interrupcin asincrnico El flanco de bajada de INTn genera un pedido de interrupcin asincrnico 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 lecturaescritura 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 pullup 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 altaimpedancia 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 E/S MCUCR) 0 0 X Entrada 0 1 0 Entrada 0 1 1 1 0 1 1 X X

Pullup No SI

Comentario Tri-State (Alta-Z) Pxn corriente en la fuente si existe pulled low Tri-State (Alta-Z) Salida en Bajo Salida en Alto (Fuente)

Entrada No Salida No Salida No

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 schmitttrigger. 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 PUOE

Nombre Completo Habilitacin Pullup overriddes

Descripcin

PUOV

Valor Pull-up

DDOE

Habilitacin Direccin de Datos Habilitacin del valor de Direccin de Datos

DDOV

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

PVOV

PTOE DIEOE

DI

Entrada Digital

AIO

Entrada/Salida Analgica

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. Si PVOE es uno, el valor del prtico es uno a PVOE, indiferentemente de la configuracin del bit del registro PORTxn. Si PTOE es uno, el bit del Registro del PORTxn es invertido. 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) 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. 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 PA1 PA0

ADC2 (Entrada canal 2 ADC) PCINT2 (Cambio de pin Interrupcin 2) ADC1 (Entrada canal 1 ADC) PCINT1 (Cambio de pin Interrupcin 1) 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. interrupcin externa al MCU.

El pin PC7 puede servir como una

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. interrupcin externa al MCU.

El pin PC6 puede servir como una

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)

PD3

PD2

PD1 PD0

PCINT28 (Cambio de pin de interrupcin28 ) INT1 (Entrada de Interrupcin Externa 1) TXD1 (USART1 Pin de transmisin) PCINT27 (Cambio de pin de interrupcin27 ) INT0 (Entrada de Interrupcin Externa 1) RXD1 (USART1 Pin de recepcin) PCINT26 (Cambio de pin de interrupcin26 ) TXD0 (USART Pin de Transmisin) PCINT25 (Cambio de pin de interrupcin25 ) 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: f clk I / o f OCnxPWM = N 256 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 dualslope(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 WGM WGM Timer/Conta 2 1 0 dor Modo de Operacin 0 0 0 Normal 0 0 1 PWM, fase Correcta 0 0 1 1 1 1 0 0 0 1 0 1 CTC Rpida PWM Reservado PWM, fase correcta reservado Rpida, PWM TOP Actualizaci n OCRx Bande ra TOV MAX Parte Inferio r MAX MAX Parte Inferio r TOP

0 1

0xFF 0xFF

Inmediato TOP

2 3 4 5

OCR A 0xFF OCR A OCR A

Inmediato Botn TOP

6 7

1 1

1 1

0 1

Botn

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

WGM WGM n1 n0 (PWM (PWM n1) n0) 0 0 0 1

Modo de Operacin Timer/Con tador Normal

TOP

0 1

0 0

4 5

0 0

1 1

0 0

0 1

10 11 12 13 14 15

1 1 1 1 1 1

0 0 1 1 1 1

1 1 0 0 1 1

0 1 0 1 0 1

0xFF FF PWM, Fase 0x00 Correcta, 8 FF bits PWM, Fase 0x01 Correcta, 9 FF bits PWM, Fase 0x03 Correcta, FF 10 bits CTC OCR nA Rpida 0x00 PWM, 8 FF bits Rpida 0x01 PWM, 9 FF bits Rpida 0x03 PWM, 10 FF bits PWM, Fase ICRn y Frecuencia Correcta PWM, Fase OCR y nA Frecuencia Correcta PWM, Fase ICRn y Correcta PWM, Fase OCR y Correcta nA CTC ICRn (Reservado ) Rpida ICRn PWM Rpida OCR

Actualiza Encen cin der OCRnX bande ra TOVn Inmediat 0xFF o TOP 0X00

TOP

0X00

TOP

0X00

Inmediat o 0X00

0xFF TOP

0X00

TOP

0X00

TOP

0X00

0X00

0X00

0X00

TOP TOP Inmediat o 0x00 0x00

0X00 0x00 0xFF TOP TOP

PWM TOP: Punto mximo de comparacin

nA

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: f clk I / o f OCnxPWM = N 256 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 WGM WGM WGM Modo de Valor Actualizaci TOV o 2 1 0 Operacin Mxim n Encend Timer/Coun o Del OCRx er ter (TOP) bander a (1)(2) 0 0 0 0 Normal 0XFF Inmediato MAX 1 0 0 1 Modo Fase 0XFF TOP Correcta (PWM) 2 0 1 0 CTC OCRA Inmediato MAX 3 0 1 1 Rpida 0XFF BOTTON MAX PWM 4 1 0 0 Reservado 5 1 0 1 Modo Fase OCRA TOP BOTTO Correcta N (PWM) 6 1 1 0 Reservado 7 1 1 1 Rpida OCRA BOTTON TOP PWM

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

1 0 0 1 1

1 0 1 0 1

fosc/128 fosc/2 fosc/8 fosc/32 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 contadorBajo 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 halfduplex (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 fOSC UBRRn

Velocidad en baudios (en bits por segundo, bps) Frecuencia de reloj del sistema 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 multimaestros, 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 2hilos 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 2hilos 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 2hilos 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 2hilos 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 2hilos. 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 Digital del Comparador Analgico

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 0 0 0 1 1 0 1 1

SELECCIN DEL VOLTAJE DE REFERENCIA AREF, Voltaje de referencia interno apagado AVCC con capacitor externo en el pin AREF Voltaje de referencia interno 1.1V con capacitor en el pin AREF 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 0 0 0 0 1 1 1 1 ADTS1 0 0 1 1 0 0 1 1 ADTS0 0 1 0 1 0 1 0 1 Fuente de Disparo Modo Simple Conversin (Free Running) Comparador Analgico Interrupcin Externa Timer/Contador 0 Punto de Comparacin Timer/ Contador 0 Desbordamiento Timer/ Contador 1 Punto de Comparacin B Timer/ Contador 1 Desbordamiento 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 Onchip 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, PauseIR, 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 Onchip 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 InCircuit 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 Boundaryscan 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. Registro de Identificacin de Registros La Figure 24-1 muestra la estructura del Registro de Identificacin de Registros.

24.3.2

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.

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

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

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.

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

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

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

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

Escaneando Pines de los Prticos Digitales La Figura 24-3 muestra la clula del Boundary-scan para pin de prticos bidireccionales. 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
24.5.1

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 Onchip 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 267 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 SelfProgramming 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 SelfProgramming 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 SelfProgramming 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 rehabilita 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 autolimpiara 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 est en bajo. en su totalidad.

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 Estn en bajo. EEPROM. 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). a 0, y BS2, BS1 a 10. El estado de los bits extendidos del Fusible 4. Poner 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 DATA. 4. Poner a 0, y BS1 a 1. El byte de calibracin puede ahora ser ledo en 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 SerialSPI. 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 comenzar una operacin normal. 8. Secuencia de Apagado si es necesario. Poner a1. Apagar VCC. puede ser puesto en alto y

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 RunTest/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 2614) 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 2614) 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 instruccin de programacin PROG_PAGEREAD lograda usando la

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