a tmega164p guide datashet

378
Características: Microcontrolador AVR de 8 bits de alto rendimiento y bajo consumo. Arquitectura Avanzada RISC - 131 instrucciones. La mayoría de un solo ciclo de reloj de ejecución. - 32 registros de trabajo de 8 bits para propósito general. - Funcionamiento estático total. - Capacidad de procesamiento de unos 20 MIPS a 20 MHz. - Multiplicador por hardware de 2 ciclos Memorias de programa y de datos no volátiles de alta duración - 16/32/44 K bytes de FLASH auto programable en sistema - 512B/1K/2K bytes de EEPROM - 1/2/4K bytes de SRAM Interna - Ciclos de escritura/borrado: 10.000 en Flash / 100.000 en EEPROM

Upload: hamil-fc

Post on 17-Jul-2015

45 views

Category:

Engineering


1 download

TRANSCRIPT

Características:

� Microcontrolador AVR de 8 bits de alto rendimiento y bajo consumo. � Arquitectura Avanzada RISC

- 131 instrucciones. La mayoría de un solo ciclo de reloj de ejecución. - 32 registros de trabajo de 8 bits para propósito general. - Funcionamiento estático total. - Capacidad de procesamiento de unos 20 MIPS a 20 MHz. - Multiplicador por hardware de 2 ciclos

� Memorias de programa y de datos no volátiles de alta duración

- 16/32/44 K bytes de FLASH auto programable en sistema - 512B/1K/2K bytes de EEPROM - 1/2/4K bytes de SRAM Interna - Ciclos de escritura/borrado: 10.000 en Flash / 100.000 en EEPROM

- Retención de Datos: 20 años a 85ºC / 100 años a 25ºC - Sección opcional de código Boot con bits de bloqueo independientes. Programación en sistema del programa Boot que se encuentra dentro del mismo chip. Operación de lectura durante la escritura. - Bloqueo programable para la seguridad del software.

� Interfase JTAG - Capacidades de Boundary Scan de acuerdo con el estándar JTAG - Soporte Extendido Debug dentro del chip - Programación de FLASH, EEPROM, fusibles y bits de bloqueo a través de la interfase JTAG.

� Características de los periféricos - Dos Timer/Contadores de 8 bits con prescalamiento separado y modo

comparación. - Un Timer/Contador de 16 bits con prescalamiento separado, modo comparación y modo de captura. - Contador en Tiempo Real con Oscilador separado - 6 Canales para PWM - ADC de 10 bits y 8 canales Modo Diferencial con ganancia seleccionable a x1, x10 o x200. - Interfase serie de dos hilos con byte orientado. - Dos puertos Seriales USART Programables

- Interfaz Serial SPI maestro-esclavo - Watchdog Timer programable con oscilador independiente, dentro del mismo chip. - Comparador Analógico dentro del mismo Chip - Interrupt and Wake-up on Pin Change

� Características especiales del microcontrolador - Power-on Reset (en el encendido) y detección de Brown-out (pérdida de polarización) programable. - Oscilador RC interno calibrado. - Fuentes de interrupción externas e internas. - 6 modos de descanso: Idle, Reducción de Ruido ADC, Power-save, Power-down, Standby y Standby extendido.

� Encapsulados para Entradas/Salidas (E/S)

- 32 líneas de E/S programables. - PDIP de 40 pines, TQFP y QFN/MLF de 44 pines.

� Voltajes de Operación

- 1.8 – 5.5V para el ATMEGA 164P/324P/644PV - 2.7 – 5.5V para el ATMEGA 164P/324P/644P

� Velocidad de Funcionamiento - ATMEGA 164P/324P/644PV: 0 – 4MHz @ 1.8 – 5.5V - 10MHz @ 2.7 – 5.5V - ATMEGA 164P/324P/644PV: 0 – 10MHz @ 2.7 – 5.5V - 20MHz @ 4.5 – 5.5V

� Consumo de energía a 1MHz, 1.8V, 25ºC para el ATMEGA

164P/324P/644P - Activo: 0.4mA - Modo Power-down: 0.1uA - Modo Power-Save: 0.6uA (Incluye RTC de 32 Khz)

1. CONFIGURACIÓN DE PINES

Figura 1-1. Pines de Salida del ATmega164P/324P/644P

TQFP/QFN/MLF

2. Revisión Global El ATmega164P/324P/644P es un microcontrolador CMOS de 8 bits de bajo consumo basado en la arquitectura RISC mejorada. Sus instrucciones se ejecutan en un ciclo de máquina, el ATmega164P / 324P / 644P consigue transferencia de información alrededor de 1 MIPS por MHz admitido por el sistema, permitiendo al diseñador del sistema optimizar el consumo de energía versus la velocidad de procesamiento.

2.1 Diagrama de Bloque Figura 2 -1. Diagrama de Bloques

El core (núcleo) AVR combina un conjunto de instrucciones RISC con 32 registros para uso de propósito general. Todos los 32 registros están directamente relacionados con la Unidad Aritmética Lógica (ALU), admitiendo dos registros independientes al ejecutarse una instrucción en un ciclo de máquina. El resultado de esta arquitectura es más eficiente, se consigue un caudal de flujo y transferencia hasta diez veces más rápido que microcontroladores CISC convencionales. El ATmega164P / 324P / 644P provee las siguientes características: 16/32 / 64K bytes en el sistema de Flash Programable con capacidad de lectura y escritura de 512B/1K/2K bytes en la EEPROM, 1/2/4K bytes en la SRAM, 32 pines de E/S para propósito general, 32 registros de propósito general, Contador en Tiempo real (RTC), tres Timer/Contadores flexibles con modo de Comparación y PWM, 2 USARTs, un byte orientado a la Interfaz Serial de 2 hilos, 8 canales ADC de 10 bits con opción de entrada Diferencial con ganancia programable, Watchdog Timer programable con oscilador interno, un Puerto serial SPI, Interfase de prueba JTAG, también usado para acceder al sistema On-chip Debug y seis modos de programación seleccionable para ahorro de energía. El modo Idle detiene al CPU mientras permite a la SRAM, Timer/Contador, Puerto SPI y al sistema de interrupciones continuar funcionando.

El Modo Power-down guarda el contenido de los registros pero paraliza al oscilador, desactiva todas las otras funciones de chip hasta la próxima interrupción o mediante reseteo por hardware. En el Modo Power-save, el reloj asincrónico continúa corriendo, permitiendo tener actualizado al reloj mientras el resto de dispositivos están descansando. El Modo de Reducción del Ruido del ADC detiene al CPU y a todos los módulos de E/S excepto al Reloj Asincrónico y al ADC, para minimizar el ruido durante la conversión. En el Modo Standby, el oscilador Cristal/Resonador está corriendo mientras el resto de dispositivos están descansando. Estos permiten comenzar una rápida combinación con el consumo de baja energía. En el Modo de Standby extendido, corre el Oscilador principal y el Reloj Asincrónico. Este elemento es hecho usando tecnología de alta densidad de memoria no volátil de ATMEL. El chip interno ISP de la FLASH permite a la memoria de programa ser reprogramada a través del puerto interno ISP mediante un programador convencional no volátil o mediante un programa interno en el dispositivo AVR. El programa de inicialización puede usar cualquier interfaz para descargar el programa de aplicación en la memoria flash. El programa en la sección Flash Boot es actualizado mientras continúa corriendo la sección de aplicaciones de la Flash, proporcionando una escritura-lectura verdadera de operación. Para combinar un CPU RISC de 8 bits en un sistema de Flash Auto-programable en un chip monolítico, el ATmega164P/324P/644P es un poderoso microcontrolador que provee una alta flexibilidad y solución de costos efectivos para cualquier aplicación de control. El ATmega164P / 324P / 644P AVR es soportado con un juego completo de programas y herramientas de desarrollo del sistema incluyendo: compiladores de C, ensambladores de macro, depurador / simuladores de programa, emuladores de circuitos y equipos de evaluación. 2.2 Comparación entre el ATmega164P, ATmega324P and ATmega644P

2.3 Descripción de Pines 2.3.1 VCC Alimentación de Voltaje Digital

2.3.2 GND Tierra 2.3.3 Puerto A (PA7:PA0) El puerto A sirve como entradas analógicas para el conversor Análogo Digital. El puerto A también sirve como un puerto bidireccional de 8 bits con resistencias internas de pull up (seleccionables para cada bit). Los buffers de salida del puerto A tienen características simétricas controladas con fuentes de alta capacidad. Los pines del puerto A están en tri-estado cuando las condiciones de reset están activadas o cuando el reloj no este corriendo. El puerto A también sirve para varias funciones especiales del ATmega164P/324P/644P como la Conversión Análoga Digital. 2.3.4 Port B (PB7:PB0) El puerto B es un puerto bidireccional de 8 bits de E/S con resistencias internas de pull up. Las salidas de los buffers del puerto B tienen características simétricas controladas con fuentes de alta capacidad. Los pines del puesto B están en tri-estado cuando las condiciones de reset están activadas o cuando el reloj no esté corriendo. El puerto B también sirve para varias funciones especiales del ATmega164P/324P/644P como se menciona en las páginas iniciales. 2.3.5 Port C (PC7:PC0) El puerto C es un puerto bidireccional de 8 bits de E/S con resistencias internas de pull up (seleccionadas por cada bit). Las salidas de los buffers del puerto C tienen características simétricas controladas con fuentes de alta capacidad. Los pines del puesto C están en tri-estado cuando las condiciones de reset están activadas siempre y cuando el reloj no este corriendo. El puerto C también sirve para las funciones de Interfaz del JTAG, con funciones especiales del ATmega164P/324P/644P como se menciona en las páginas iniciales.

2.3.6 Port D (PD7:PD0) El Puerto D es un puerto bidireccional de entradas y salidas con resistencias internas de pull up (seleccionadas por cada bit). Las salidas de los buffers del puerto D tienen características simétricas controladas con sumideros de fuentes de alta capacidad. Los pines del Puerto D están en tri-estado cuando llega una condición de reset activa, siempre y cuando el reloj no esté corriendo. El puerto D también sirve para varias funciones especiales del ATmega164P/324P/644P como se menciona en las páginas iniciales. 2.3.7 RESET Entrada del Reset. Un pulso de nivel bajo en este pin por períodos de pulso mínimo genera un reset, siempre y cuando el reloj no esté corriendo. La longitud del pulso mínimo está especificada en las Características y Sistemas de Reset (Páginas 331 del Data Sheet). Pulsos cortos no son garantizados para generar un reset. 2.3.8 XTAL1 Entrada para el amplificador del oscilador invertido y entrada para el circuito de operación del reloj interno. 2.3.9 XTAL2 Salida del Oscilador amplificador de salida. 2.3.10 AVCC AVCC es la alimentación de voltaje para el pin del Puerto F y el Conversor Análogo a Digital. Este debe ser conectado externamente a VCC, siempre y cuando el ADC no sea usado. Si el ADC es usado, este deberá ser conectado a VCC a través de un filtro paso bajo. 2.3.11 AREF Está es la referencia para el pin de la conversión Análoga a Digital. 3. Recursos Un set comprensible de herramientas, notas de aplicación y datasheet se puede descargar desde http://www.atmel.com/avr.

4. Acerca de los Ejemplos de Código Este documento contiene unos simples ejemplos de código que brevemente muestran como usar varias partes del dispositivo. Sea consiente que no todos los vendedores de compiladores en C incluyen la definición de bits en el archivo de cabecera y el manejo de interrupciones en el compilador C es dependiente. Por favor confirme con la documentación del compilador C para más detalles. Los ejemplos de código asumen que la parte de archivo de cabecera esta incluido antes de la compilación. Para las localidades de los registros de E/S en el mapa extendido de E/S, las instrucciones "IN", "OUT", "SBIS", "SBIC", "CBI", y "SBI" serían reemplazadas con instrucciones de acceso extendido E/S. Típicamente "LDS" y "STS" combinadas con "SBRS", "SBRC", "SBR", y "CBR". 5. Retención de Datos La fiabilidad de la calificación de resultados muestra que la velocidad de falla de un proyecto es mucho menor que 1 PPM en 20 años a 85°C ó 100 años a 25°C. 6. AVR CPU Core 6.1 VISIÓN GENERAL Esta sección discute la arquitectura general del AVR. La principal función del AVR es asegurar la correcta ejecución del programa. La CPU debe ser capaz de acceder a la memoria, llevar a cabo cálculos, control de periféricos y atención de interrupciones.

Para maximizar el rendimiento y el paralelismo, el AVR usa una arquitectura de Hardware con separador de memorias y buses para programa y datos. Las instrucciones en la memoria de programa son ejecutadas con un simple nivel de colas. Mientras una instrucción es ejecutada, la siguiente instrucción es ejecutada desde la memoria de programa. Este concepto permite que las instrucciones sean ejecutadas en cada ciclo de máquina. La memoria de programa está en la memoria Flash re-programable. El Archivo del Registro (Register File) de rápido acceso contiene 32 registros de propósito general de 8 bits trabajando en un simple ciclo de reloj. Esto permite una operación de ciclo simple en la Unidad Aritmética lógica. En una operación típica de la ALU, dos operandos están fuera del Archivo de Registro, la operación es ejecutada, y el resultado es guardado en el Archivo de Registro en un ciclo de máquina. Seis de los 32 registros pueden ser usados como tres registros punteros de 16 bits de dirección, para direccionar los Datos y permitir los cálculos de direcciones diferentes. Uno de estos tres punteros puede ser usado como un puntero de direcciones para tablas en la memoria de programa de la Flash. Estos registros de función adicionales son el X, Y y Z de 16 bits, descritos después en esta sección. La ALU soporta operaciones lógicas y aritméticas entre registros o entre constantes y registros. Simples operaciones de registros pueden ser ejecutadas en la ALU. Después de una operación aritmética, el registro de estado es actualizado para reflejar información acerca de los resultados de la operación. El flujo del programa es provisto por un salto condicional e incondicional y llamado de interrupciones, capaz de direccionar espacios de direcciones completamente. La mayoría de instrucciones del AVR tienen un formato simple de una palabra de 16 bits. Cada dirección de memoria contiene instrucciones de 16 o 32 bits. El espacio de memoria en la flash está dividido en dos secciones, la sección Baja del programa y la sección de aplicación de programa. Ambas secciones están dedicadas para bloqueo de escritura y protección de lectura/escritura. La instrucción SMP que se escribe en la Sección de la memoria Flash debe residir en la sección Baja del programa. Durante los llamados de interrupción y subrutinas, la dirección de regreso del Contador de Programa (CP) es almacenado en la pila (stack).

FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

La pila (stack) está localizada efectivamente en la SRAM (RAM estática) de datos y consecuentemente el tamaño de la pila está limitado solo por el tamaño total de la SRAM (RAM estática) y su uso. Todos los programas a usarse deben inicializar en el SP (Stack Pointer) en la rutina del Reset (antes de que sea ejecutada una interrupción o una subrutina). El puntero de pila (Stack pointer SP) es la lectura/escritura accesible en el espacio de E/S. La RAM estática de datos puede ser fácilmente penetrada a través de los cinco diferentes modos de direccionamiento soportados en la arquitectura de AVR. El espacio de memoria en la arquitectura de los mapas de memoria de los AVR son todos lineales y regulares. Un módulo de interrupción flexible tiene sus registros de control en los espacios de E/S con una Habilitación de Interrupción Global en el Registro de Estado. Todas las interrupciones tienen separado un vector de interrupciones en la tabla del vector de interrupciones. Las interrupciones tienen prioridad de conformidad con su vector de interrupciones. La dirección más baja del vector de interrupciones tiene alta prioridad. El espacio de memoria de E/S contiene 64 direcciones para las funciones periféricas de la CPU, el Registro de Control SPI y otras funciones de Entrada y Salida. La memoria de Entrada y Salida puede ser accedida directamente o como localidades de espacio de datos siguiendo estos Archivos de Registro:0x20 - 0x5F. En suma, el ATmega164P/324P/644P tiene espacios extendidos de entrada y salida desde la dirección 0x60 - 0xFF en la SRAM donde solo las instrucciones ST/STS/STD y LD/LDS/LDD pueden ser usadas. 6.3 Registro de Estado El registro de estado contiene información acerca de los resultados de las instrucciones aritméticas más recientes ejecutadas. Está información puede ser usada para alterar el flujo del programa en el funcionamiento de operaciones condicionales. Note que el Registro de Estado es actualizado después de todas las operaciones de la ALU, como especificaciones en el Set de Instrucciones de Referencia. En algunos casos esto retira la necesidad de usar comparación de instrucciones dedicadas, resultando un código más rápido y compacto. El Registro de estado no es almacenado automáticamente cuando entra una rutina de interrupción y se restituye cuando regresa de una interrupción.

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

6.3.1 SREG – Registro de Estado El registro de Estado AVR – SREG – está definido por:

• Bit 7 – I: Habilitación de Interrupciones Globales El bit de habilitación de las interrupciones globales debe estar en uno para habilitar las interrupciones. La interrupción individual permite que el control sea llevado a cabo en registros de control distintos. Si el registro de Habilitación de interrupciones globales es borrado, ninguna de las interrupciones están activadas independiente de la configuración de una interrupción individual. El bit I es limpiado por hardware después de que una interrupción ha ocurrido, y es puesto en uno por la instrucción de RETI para habilitar interrupciones siguientes. El bit I también puede ser puesto en uno y borrado por la aplicación con las instrucciones SEI y CLI. • Bit 6 – T: Bit Copia de almacenamiento Los bits de instrucción de copia BLD (cargar bit) y BST (almacenar bit) usa el bit T como una fuente o destino para la operación del bit. Un bit desde los registros de los Archivos de Registro pueden ser copiados en el bit T mediante la instrucción SBT y un bit en T puede ser copiado dentro de un registro del Archivo de registros mediante la instrucción BLD. • Bit 5 – H: Half Carry Flag Half Carry es útil en la aritmética BCD. • Bit 4 – S: Bit de Signo, S = N ⊕ V El Bit S es una OR exclusiva entre la bandera negativa N y la bandera de desbordamiento V en Complemento a Dos. • Bit 3 – V: Bandera de Desbordamiento V en Complemento a Dos La bandera de desbordamiento en Complemento a Dos soporta el complemento a dos. • Bit 2 – N: Bandera Negativa La Bandera Negativa N indica un resultado negativo en una operación aritmética o lógica.

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

• Bit 1 – Z: Bandera del Cero La bandera del cero indica si un resultado es cero en una operación aritmética o lógica. • Bit 0 – C: Bandera del Carry La bandera del Carry indica un carry en una operación aritmética o lógica. Archivo de registros de propósito General El Archivo de Registros es optimizado por el Juego de instrucciones RISC del AVR. Para lograr la actuación y flexibilidad requerida, los esquemas del entrada/salida se apoyan en los siguientes Archivos de Registros: • Un operador de salida de 8 bits y una entrada resultante de 8 bits • Dos operadores de salida de 8 bits y una entrada resultante de 8 bits • Dos operadores de salida de 8 bits y una entrada resultante de 16 bits • Un operador de salida de 16 bits y una entrada resultante de 16 bits La siguiente Figura (6-2) muestra la estructura de los 32 Registros de Propósito General que trabajan en la CPU.

La mayoría de las operaciones de instrucciones en el Archivo de Registro tiene acceso directo a todos los registros, y la mayoría de ellos son instrucciones de un ciclo. Como se muestra en la figura anterior a cada registro en la memoria de datos se le asigna una dirección, mapeados estos directamente dentro de las 32 localidades para el uso del espacio de Datos.

FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

Aunque físicamente no son implementados en las localidades de la SRAM, esta memoria provee gran organización flexible para el acceso a estos registros, como los registros punteros X, Y y Z que se usan como índices de cualquier archivo de registro. El registro X, el registro Y y el registro Z Los registros R26… R31 tienen algunas funciones adicionales para uso de propósito general. Estos registros son punteros de 16 bits de dirección para direccionar indirectamente al espacio de datos. Los tres registros de direccionamiento indirecto X, Y y Z están definidos como se muestra en la figura siguiente. Figure 6-3. Los registros X, Y y Z

En los modos de direccionamiento directo estos registros de dirección tienen desplazamientos fijos, incrementos y decrementos automáticos. 6.5 Puntero de Pila (Stack Pointer) El Stack–Pointer es usado para almacenar información temporal, para almacenar variables locales y para almacenar direcciones de regreso después de una interrupción o llamado de subrutinas. Los registros del Puntero de Pila siempre apuntan a la parte superior de la pila. Note que la pila es implementada como un crecimiento desde la localidad más alta a la localidad mas baja de la memoria. Esto implica que un comando PUSH decrementa el Puntero de Pila. El puntero de pila para la SRAM es el área donde las interrupciones y subrutinas son localizadas. Estos espacios de pila en los datos de la SRAM deben ser definidos por el programa antes de que cualquier llamado de subrutina sea ejecutado o una interrupción sea habilitada. El puntero de pila debe estar por encima de la localidad 0x0100. El valor inicial del puntero de pila es la última dirección de la SRAM interna. El puntero de pila es decrementado a uno cuando los datos presionan en la pila con la instrucción PUSH, y este es decrementado por tres cuando los datos llenan la pila con un regreso desde una subrutina RET o de regreso desde una interrupción RETI.

FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight

El Puntero de Pila del AVR es implementado como un registro de 8 bits en el espacio de E/S. El número de bits actualmente usados es dependientemente implementado. Note que el espacio de datos en algunas implementaciones en la arquitectura del AVR es tan pequeña que solo necesita el SPL. En este caso, el registro SPH no esta presente. 6.5.1 SPH y SPL – Puntero de Pila Alto y Puntero de Pila Bajo

Note: 1Valores iniciales respectivamente para el ATmega164P/324P/644P. 6.5.2 RAMPZ – Z Extendido – Registro puntero para ELPM/SPM

Para las instrucciones ELPM/SPM, el puntero Z es una concatenación del RAMPPZ, ZH y ZL se muestran en la figura siguiente. Note que LPM no es afectado por la configuración del RAMPZ. Figura. El puntero Z usado por ELPM y SPM.

El número actual de los bits es dependiente de la implementación. Al no usar los bits en una implementación se leerán como cero. Para compatibilidad con dispositivos futuros, asegurar el escribir estos bits como cero. 6.7 Reset e Interrupción Manual El AVR provee diferentes Fuentes de interrupción. Cada de estas interrupciones y el Vector Separador de Reset tienen un Vector separador de programa en el espacio de la memoria de programa. Todas las interrupciones son bits habilitados de forma individual los cuales deben ser escritos a uno lógico junto con el bit Habilitador de Interrupciones Globales en el registro de Estado.

FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

Dependiendo del valor del contador del programa, las interrupciones deben ser deshabilitadas automáticamente cuando los bits Boot Lock (BLB02 o BLB12) son programados. Esta característica mejora la seguridad de software. La dirección más baja en el espacio de la memoria de programa está definida por defecto como vectores de Reset e Interrupción. La lista completa de vectores se muestra en la página 61 del Data Sheet. La lista también determina los niveles de prioridad de las diferentes interrupciones. El nivel de prioridad es desde la dirección mas baja a la más alta. El RESET tiene la prioridad más alta y la siguiente es el pedido de interrupción externa (INTO). Los vectores de interrupción pueden ser movidos al inicio de la sección de la parte baja de la Flash por la configuración del bit IVSEL en el MCU del registro de Control (MCUCR). El vector de Reset también puede ser movido al inicio de la sección de la parte mas baja por la programación del fusible BOOTRST. Cuando ocurre una Interrupción, el bit I del Habilitador de Interrupciones Globales es limpiado y todas las interrupciones son deshabilitadas. El software del usuario puede escribir uno lógico en el bit I para habilitar de nuevo las interrupciones. Todas las interrupciones habilitadas pueden entonces interrumpir las rutinas de interrupciones. El bit I es puesto en uno automáticamente cuando regresa de una interrupción al ser ejecutada la instrucción RETI. Existen básicamente dos tipos de interrupciones. El primer tipo es disparado por un evento que configura la bandera de interrupción. Para estas interrupciones, el Contador de Programa es direccionado para el actual Vector de Interrupción a medida que se ejecuta una rutina de interrupción manual y limpiada por hardware la correspondiente bandera de interrupción. La bandera de interrupción puede también ser limpiada por uno lógico para la posición de la bandera del bit. Si una condición de interrupción ocurre mientras se habilita el bit de interrupción correspondiente este es limpiado, la bandera de interrupción será puesto en uno y la interrupción recordará ser siempre habilitada o la bandera es limpiada por software. De igual forma, si una o más condiciones de interrupción ocurren mientras el bit de interrupción es limpiado, la correspondiente bandera de interrupción será puesta en uno y la Bandera de Interrupción Global es Habilitada mientras el bit es uno, y entonces será ejecutada por el orden de prioridad. El segundo tipo de interrupción será disparada mas larga que la condición de interrupción actual. Si la condición de interrupción desaparece antes que la interrupción sea habilitada, la interrupción no será disparada. Cuando existe una interrupción en el AVR, esta siempre regresará al programa principal y ejecutará una o más interrupciones antes de cualquier pedido de interrupción. Note que el Registro

de Estado no es almacenado automáticamente cuando entra una rutina de interrupción o cuando regresa de la rutina de interrupción. Esto deber ser hecho manualmente por software. Cuando usa la instrucción CLI para deshabilitar interrupciones, la interrupción será deshabilitada inmediatamente. Ninguna interrupción será ejecutada después de la interrupción CLI, Incluso si ocurre simultáneamente con la instrucción CLI. Los siguientes ejemplos muestran como esto puede ser usado para evitar interrupciones durante el tiempo de escritura en la EEPROM. Ejemplo del Código en Lenguaje Ensamblador In r16, SREG; almacena el valor en SREG cli; deshabilita interrupciones durante la secuencia de tiempos sbi EECR, EEMPE; Comienza la escritura en la EEPROM sbi EECR, EEPE Out SREG, r16; almacena el valor del I-bit en el SREG Ejemplo del Código en C char cSREG; cSREG = SREG; almacena el valor en SREG */ /* Deshabilita interrupciones durante la secuencia de tiempos */ __disable_interrupt(); EECR |= (1<<EEMPE); /* Comienza la escritura en la EEPROM */ EECR |= (1<<EEPE); SREG = cSREG; /* almacena el valor del I-bit en el SREG */ Cuando usa la instrucción SEI para habilitar interrupciones, la siguiente instrucción SEI será ejecutada antes de cualquier interrupción pendiente, como muestra el siguiente ejemplo. Ejemplo del Código en Lenguaje Ensamblador sei; Habilita la configuración de interrupciones globales Sleep; ingresa a descansar, espera por la interrupción ; note: ingresa a descansar antes de cualquier pedido de interrupción __enable_interrupt(); /* Habilita la configuración de interrupciones globales */ __sleep(); /* ingresa a descansar, espera por la interrupción */ /* Note: ingresa a descansar antes de cualquier pedido de interrupción */ 6.7.1 Tiempo de respuesta de la Interrupción La respuesta para la ejecución de interrupción para habilitar todas las interrupciones del AVR son mínimos cinco ciclos. Después de cinco ciclos de reloj la dirección del vector de programa para la rutina manual de interrupción es ejecutada.

Durante este periodo de cinco ciclos, el Contador de Programa es guardado en el Stack (Pila). El vector es normalmente un salto para la rutina de interrupción, y este salto toma ciclos de reloj. Si una interrupción ocurre durante la ejecución de una instrucción de múltiples ciclos, esta instrucción es completada antes de que la interrupción sea pedida. Si una interrupción es ejecutada ocurre cuando el MCU esta en modo de descanso, la interrupción ejecuta tiempos de respuesta en incrementos de cinco ciclos de reloj. Este incremento llega al iniciar los tiempos desde la selección del Modo de descanso (sleep). Un retorno desde una rutina de interrupción manual toma cinco ciclos de reloj. Durante estos cinco ciclos de reloj, el Contador de Programa (tres bytes) es abierto desde el Stack, el puntero de Pila es incrementado por tres y el bit I en la configuración del SREG. 7. Memorias del AVR 7.1 Vista General Esta sección describe las diferentes memorias en el ATmega164P/324P/644P. La arquitectura de los AVR tiene dos espacios de memoria principal, la memoria de datos y el espacio de memoria de programa. En suma, al ATmega164P/324P/644P le caracteriza una memoria EEPROM para el almacenamiento de datos. Todos estos tres espacios de memoria son lineales y regulares. 7.2 Sistema Del Programa de Memoria Flash Reprogramable Interno El ATmega164P/324P/644P contiene 16/32/64K bytes en el sistema reprogramable de memoria interno para almacenamiento. Mientras todas las instrucciones son de un ancho de 16 o 32 bits, la Flash esta organizada como 32/64 x 16. Para seguridad del software, el espacio de memoria de la Flash está dividido en dos secciones, la sección baja de programa (Boot Program) y la sección de Aplicación de Programa. La memoria Flash tiene una duración de más o menos 10.000 ciclos de lectura/escritura. El Contador de Programa del ATmega164P/324P/644P es de un ancho de 15/16 bits, en consecuencia direcciona 32/64K localidades en la memoria de programa.

FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

Figura. Mapa de la memoria de programa

7.3 Memoria De Datos SRAM La figura de abajo muestra como la memoria SRAM del ATmega164P/324P/644P esta organizada. El ATmega164P/324P/644P es un microcontrolador complejo con más unidades periféricas que pueden ser soportadas entre la localidad 64 reservada en el código para las instrucciones de entrada y salida. Para los espacios extendidos de E/S desde la localidad $060 a la $FF en la SRAM, sola las instrucciones ST/STS/STD y LD/LDS/LDD pueden ser usadas. Las primeras 4.325 localidades en la Memoria de datos direccionan tanto el Archivo de Registro, la Memoria de E/S, la Memoria extendida de E/S y la SRAM de datos interna. Las primeras 32 localidades direccionan el Archivo de Registro, las 64 siguientes direccionan la SRAM de datos interna. Los cinco diferentes modos de direccionamiento para cubrir la Memoria de Datos son: Directo, Indirecto con desplazamiento, Indirecto, Indirecto con Pre-decremento y el Indirecto con Post incremento. En el archivo de registro, los registros del R26 al R31 marcan el direccionamiento indirecto de los punteros de registro. El modo Indirecto con desplazamiento alcanza 63 localidades de dirección desde la dirección base dada por los registros Y o Z.

FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

Cuando usamos los registros en modo de direccionamiento indirecto con pre-decremento automático y post-incrementos, los registros de dirección X, Y y Z son decrementados o incrementados. El trabajo de los 32 registros de propósito general, los64 registros de E/S, los registros extendidos de E/S y bytes 1024/2048/4096 de la SRAM interna en el ATmega164P/324P/644P son todos accesibles a través de estos modos de direccionamiento. Figura. Mapa de la memoria de datos

7.3.1 Tiempos de Acceso a la Memoria de datos Esta sección describe los tiempos de acceso generales para el acceso interno a la memoria. El acceso interno a la SRAM de datos funciona en dos ciclos de la CPU como se describe en la figura siguiente. Figura. Ciclos de acceso a la SRAM de datos internos

7.4 Memoria de datos EEPROM

FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

El ATmega164P/324P/644P contiene 512B/1K/2K bytes en la memoria de datos EEPROM. Está organizado como un espacio de datos separado, en el cual solo los bytes pueden ser leídos y escritos. La EEPROM tiene una resistencia de más o menos 100.000 ciclos de escritura/lectura. El acceso entre la EEPROM y la CPU esta descrito en lo siguiente, especificando Registros de Dirección, Registros de datos de la EEPROM y el registro de Control de la EEPROM. Para prevenir escritura unidireccional de la EEPROM, una escritura específica debe proceder de la siguiente forma. Referirse a la descripción del Registro de Control de la EEPROM para detalles de este. Cuando la EEPROM es leída, la CPU es detenida por cuatro ciclos de reloj antes de la siguiente instrucción sea ejecutada. Cuando la EEPROM es escrita. La CPU es detenida por cuatro ciclos de reloj antes de que la siguiente instrucción sea ejecutada. 7.4.2 Prevención de Corrupción en la EEPROM Durante períodos bajos de VCC, los datos de la EEPROM pueden ser corrompidos porque el voltaje de alimentación es también bajo para la CPU y la EEPROM opera apropiadamente. Estos asuntos son los mismos para el nivel del sistema que usa la EEPROM, y la misma solución del diseño debería ser aplicado. Una alteración de datos en la EEPROM puede ser causada por dos situaciones cuando el voltaje es demasiado bajo. Primero, una secuencia de escritura regular a la EEPROM requiere un mínimo voltaje para operar correctamente. Segundo, la misma CPU puede ejecutar instrucciones incorrectas, si la alimentación es demasiado baja. Una alteración de datos en la EEPROM puede ser fácilmente evitada siguiendo las siguientes recomendaciones: Durante los periodos con insuficiente alimentación de voltaje poner el RESET del AVR en nivel bajo. Esto se puede hacer mediante una habilitación interna del Brown-Out Reset (BOD). Si un reset ocurre mientras existe una operación de escritura en progreso, la operación de escritura será completada suministrando el voltaje de alimentación necesario. 7.5 Memoria de E/S Todas las E/S y periféricos del ATmega164P/324P/644P son ubicados en el espacio de E/S. Todas las localidades de entrada pueden ser accedidas mediante las instrucciones LD/LDS/LDD y ST/STS/STD, transfiriendo datos entre los 32 registros de propósito general y los espacios de E/S. Los Registros de E/S con rango entre 0x00 - 0x1F son direccionadas con las instrucciones SBI y CBI. En estos registros, el valor de estos bits pueden ser verificados mediante el uso de las instrucciones SBIS y SBIC. Cuando usamos los comandos específicos de ENTRADA y SALIDA, las direcciones de E/S 0x00 a la 0x3F deberían ser usadas.

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

Cuando direccionamos los registros de E/S como espacios de datos usando las instrucciones ST y LD, la localidad 0x20 debe ser añadida a estas direcciones. El ATmega164P/324P/644P es un microcontrolador complejo con muchas unidades periféricas que pueden soportar entre las 64 localidades reservadas en las instrucciones de Entrada y Salida. Para los espacios extendidos de E/S desde la localidad 0x60 a la 0xFF en la SRAM, solo las instrucciones ST/STS/STD y LD/LDS/LDD pueden ser usadas. Para compatibilidad con dispositivos futuros, los bits reservados deberían ser escritos a cero. Las direcciones reservadas de E/S nunca deben ser escritas. Algunas de las banderas de estado son limpiadas por la escritura de un uno lógico en estas. Note que, a diferencia de otros AVRs, las instrucciones CBI y SBI, solo operan sobre bits específicos, y pueden además ser usados sobre registros que tienen tales banderas de estado. Las instrucciones SCI y CBI trabajan con solo con los registros de la 0x00 a la 0x1F. Los registros de E/S y periféricos pueden ser usados para almacenar cualquier información y son particularmente para almacenar variables globales y banderas de estado. Los registros de E/S de propósito general están entre los rangos de direcciones 0x00 a la 0x1F y se usa para su acceso las instrucciones SBI, CBI, SBIS y SBIC 7.6 Descripción de Registros 7.6.1 EEARH y EEARL – Los Registros de Dirección de la EEPROM

• Bits 15:12 – Res: Bits Reservados Estos bits son reservados en el ATmega164P/324P/644P Y siempre se leen como cero. • Bits 11:0 – EEAR8:0: Dirección de la EEPROM Los registros de dirección de la EEPROM –EEARH y EEARL- especifican la dirección de la EEPROM en los 4K bytes de espacio de la EEPROM. Los bytes de datos de la EEPROM son direccionables linealmente entre 0 y 4096. El valor inicial de EEAR no esta definido. Un valor propio debe ser escrito antes Un valor correcto debe ser escrito antes de que el EEPROM pueda ser accedido. 7.6.2 EEDR – EL Registro de Datos de la EEPROM

• Bits 7:0 – EEDR7:0: Datos de la EEPROM Para la operación de la escritura en la EEPRM, el registro EEDR contienen los datos a ser escritos para la EEPROM en las direcciones dadas por el registro EEAR. Para la operación de lectura de la EEPROM, la EEDR contiene la lectura de datos fuera de la EEPROM en los registros dados por EEAR. 7.6.3 EECR – El Registro de Control de la EEPROM

• Bits 7:6 – Res: Bits Reservados Estos bits son reservados en el ATmega164P/324P/644P Y siempre se leen como cero. • Bits 5:4 – Los Bits de Modo de Programación de la EEPROM: EEPM1 EEPM0 La configuración del bit de modo de programación de la EEPROM define cual acción del programa será disparada al EEPE. Esto es posible para la programación de datos en una operación atómica (borra el valor antiguo y el nuevo valor del programa) o para dividir la operación de lectura y escritura en dos diferentes operaciones. Los tiempos de programación para los diferentes modos se muestran en la tabla 7-1. Mientras EEPMn está en uno, cualquier escritura en la EEPMn será ignorada. Durante el reset, los bits de la EEPMn serán reseteados a 0b00 a menos que el programa de la EPROM este ocupado.

• Bit 3 – EERIE: Habilitación de interrupciones de la EEPROM

Escribiendo a uno el bit EERIE se habilita la interrupción de la EEPROM si el bit del SREG es uno. Escribiendo cero en EERIE se deshabilita la interrupción. La interrupción de la EEPROM genera una interrupción constante cuando EEPE es limpiado. • Bit 2 – EEMPE: Habilitación del Programa del Maestro de la EEPROM El bit EEMPE determina si la configuración de EEPE a uno causa que la EEPROM sea escrita. Cuando EEMPE es uno, configurando EEPE durante cuatro ciclos del reloj escribiría el dato a la EEPROM al seleccionar la dirección. Si EEMPE es cero, la configuración de EEPE no tendría efecto. Cuando EMPE ha sido escrito a uno por software, hardware limpiamos el bit a cero después de cuatro ciclos de reloj. Ver la descripción del bit de EEPE para un procedimiento de escritura de la EEPROM. • Bit 1 – EEPE: Habilitando la Programación de la EEPROM La habilitación de escritura de la señal EEPE de la EEPROM es la escritura de la habilitación de la EEPROM. Cuando la dirección y el dato son correctamente configurados, el bit EEPE debería ser escrito a uno para un valor de escritura dentro de la EEPROM. El bit EEMPE debería ser uno antes de que un uno lógico sea escrito a EEPE, con lo cuál no tomaría lugar la escritura de la EEPROM. El siguiente procedimiento sería escribiendo la EEPROM(los pasos 3 y 4 no son esenciales): 1. Esperar hasta que EEPE llegue a ser cero. 2. Esperar hasta que SPMEN en SPMCSR llegue a ser cero. 3. Escribir la nueva dirección de la EEPROM a EEAR (opcional). 4. Escribir el nuevo dato de la EEPROM a EEAR (opcional). 5. Escribir uno lógico al bit EEMPE mientras se escribe cero a EEPE en EECR. 6. Dentro de cuatro ciclos de reloj después configurar EEMPE, escribir uno lógico a EEPE. La EEPROM no puede ser programada durante la escritura del CPU a la memoria Flash. El software chequearía que la programación de la Flash es completada antes de inicializar la nueva escritura de la EEPROM. El paso 2 es solo relevante si el software contiene el Boot Loader permitiendo al CPU la programación de la Flash. Si la Flash nunca comienza la actualización por el CPU, el paso 2 seria omitido. Ver “Programación de la Memoria” en la Pág. 293 en el datasheet. Precaución: Una Interrupción entre los paso 5 y 6 haría que el ciclo de escritura falle, desde que la EEPROM es interrumpida por otro acceso a la EEPROM, el Registro EEAR o EEDR seria modificado, causando que el acceso a la Interrupción de la EEPROM falle. Esto es recomendado para tener la Bandera Global de Interrupciones limpia durante todos los pasos para evitar estos problemas.

Cuando el tiempo de acceso a la escritura ha finalizado, el bit EEPE es limpiado por software. El software del usuario puede esperar por un cero antes de la escritura del siguiente byte. Cuando EEPE ha sido puesto en uno, el CPU es Detenido por dos ciclos antes de que la siguiente instrucción es ejecutada. • Bit 0 – EERE: Habilitación de Lectura de la EEPROM La lectura de la habilitación de la señal EERE de la EEPROM es leída para habilitar la EEPROM. Cuando la dirección correcta es configurada en el registro EEAR, el bit EERE seria escrito con uno lógico en el disparo de lectura de la EEPROM. El acceso de la lectura de la EEPROM toma una instrucción, y la respuesta del dato es disponible inmediatamente. Cuando la EEPROM es leída, la CPU es detenida por cuatro ciclos antes que la siguiente instrucción sea ejecutada. El usuario debería verificar el bit EEPE antes de empezar la operación de lectura. Si la escritura de la operación esta en progreso, no sería posible leer la EEPROM, o cambiar el Registro EEAR- La Calibración del Oscilador es usada al tiempo de acceso a la EEPROM- La Tabla 7-2 en la página 25 del datasheet lista el tiempo típico de programación para el acceso a la EEPROM desde el CPU.

El siguiente código de ejemplo muestra uno en asembler y otro en C para escritura de la EEPROM. Los ejemplos asumen que las interrupciones son controladas (por desabilitación de las interrupciones globales). El ejemplo también asume que la parte baja de la memoria Flash esta presente en el software. Si cada código esta presente, la EEPROM escribe funciones y también espera por cualquier comando de finalización SPM.

El siguiente código muestra un ejemplo en assembler y otro en C para lectura de la EEPROM. Los ejemplos asumen que las interrupciones son controladas también que las interrupciones no ocurrirían durante la ejecución de estas funciones.

7.6.4 GPIOR2 – General Purpose I/O Register 2

7.6.5 GPIOR1 – General Purpose I/O Register 1

7.6.6 GPIOR0 – General Purpose I/O Register 0

8. Sistema de Reloj y Opciones de Reloj 8.1 Sistemas de Reloj y sus Distribuciones La Figura 8-1 presenta los principales sistemas de reloj en el AVR y su distribución. Todos los relojes no necesitan ser activados a un tiempo dado. Para reducir el consumo de energía, los relojes de los módulos no empiezan a ser usados cuando están detenidos por uso de diferentes modos sleep, como se describe en “Power Management and Sleep Modes” en la página 42 del datasheet. Los sistemas de relojes se describen a continuación en la figura 8-1.

8.1.1 CPU Clock – clk CPU El reloj del CPU es dividido en partes del sistema concerniente a la operación del core AVR. Los ejemplos de cada módulo son Archivos de Registros de Propósito General, el Registro de Estado y la memoria de datos sosteniendo el Puntero de Pila. Deteniendo el reloj del CPU inhibe el core desde el funcionamiento general de las operaciones y cálculos. 8.1.2 I/O Clock – clk E/S La E/S de reloj es usada por la mayoría de los módulos de E/S, Timer/Counter, SPI, y USART.

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

El reloj de E/S es también es usado por el modulo de Interrupciones Externas, pero note que algunas interrupciones externas son detectadas por flancos asíncronos, permitiendo que cada Interrupción sea detectada si el reloj de E/S es detenido. También note que la detección de la condición de inicio en el módulo USI es llevado a cabo asincrónicamente cuando el clk de E/S es detenido. El reconocimiento de la dirección de TWI en todos los modos sleep. 8.1.3 Flash Clock – clk FLASH El reloj de la Flash controla la operación de la interfase Flash. El reloj de la Flash es usualmente activado simultáneamente con el reloj del CPU. 8.1.4 Asynchronous Timer Clock – clkASY El Asynchronous Timer clock permite al Timer/Counter asíncrono ser contado directamente desde un reloj de cristal externo de 32 kHz. El reloj dominante permite usar este Timer/Counter como contador en tiempo real cuando el dispositivo esta en modo sleep. 8.1.5 Reloj del ADC – clkADC El ADC es proporcionado con un reloj dominante dedicado. Esto permite detener el CPU y los relojes de E/S. esto reduce el ruido generado por los circuitos digitales. Esto da una mayor Presición a la conversión ADC. 8.2 Fuentes de Reloj El dispositivo tiene las siguientes opciones de fuente de reloj, seleccionando por bits de Fusible de la Flash como se muestra en la Tabla 8-1. El reloj desde la fuente de selección es entrada al generador de reloj del AVR.

8.2.1 Fuentes de Reloj por Defecto Este dispositivo es enviado con un oscilador interno de 8.0 MHz y con los fusibles CKDIV8 programados, resultando en un sistema de reloj de 1.0 MHz. El inicio del tiempo es puesto al máximo y el periodo de tiempo fuera habilitado (CKSEL = "0010", SUT = "10", CKDIV8 = "0"). Las configuraciones por defecto aseguran que todos los usuarios puedan hacer sus fuentes de reloj deseadas usando cualquier programación de interfase.

8.2.2 Inicio de la secuencia de Reloj Cualquier fuente de reloj necesita suficiente Vcc para comenzar la oscilación y un número mínimo de ciclos de oscilación antes de que pueda considerarse estable. Para aseguran un suficiente Vcc, el dispositivo envía un reset interno con un tiempo de demora (t out) después el dispositivo realiza un reset para todas las otras fuentes de reset. La demora es el tiempo desde el oscilador del Watchdog y el número de ciclos en demora es puesto por los bits de fusibles SUTx y CKSELx. La selección de retardos se muestra en la Tabla 8-2. La frecuencia del Oscilador del Watchdog es el voltaje dependiente como se muestra en “Características Típicas”.

El propósito general de los retardos es guardar al AVR en reset hasta que suplido con el mínimo voltaje Vcc. El retardo no monitorea el voltaje actual y esto requeriría de un retardo mas prolongado que el tiempo de subida de Vcc. Si esto no es posible, el interno o externo Brown-Out Detection circuit debería ser usado. El circuito BOD aseguraría suficiente Vcc antes que se realice el reset, el tiempo de retardo pueda ser deshabilitado. Deshabilitando el retardo sin utilizar el Brown-Out Detection circuit no sería recomendado. El oscilador requiere de oscilaciones para un número mínimo de ciclos antes de que el reloj sea considerado estable. El contador de onda interna monitorea la salida de reloj del oscilador y guarda el reset interno activado para un número dado de ciclos de reloj. El reset es luego realizado y el dispositivo empieza a ejecutarse. El tiempo de inicio recomendado para el oscilador es dependiente del tipo de reloj y varía desde 6 ciclos aplicados por un reloj externo de 32K para una baja frecuencia de cristal. La secuencia de inicio para el reloj incluye ambas el tiempo de retardo y el tiempo de inicio cuando el dispositivo empieza desde reset. Cuando empieza desde el modo Power-save o Power-down, Vcc es asumido para estar con el nivel suficiente y solo el tiempo de inicio es incluido. 8.2.3 Conexiones de la Fuente de Reloj Los pines XTAL1 y XTAL2 son entradas y salidas, respectivamente, de un amplificador invertido con el cual puede ser configurado para usos como oscilador On-Chip, como se muestra en la Figura 8-2- Un cristal de quartz o resonador cerámico puede ser usado. C1 y C2 debería siempre ser iguales para ambos cristales y resonantes. El valor optimo de los capacitores de pende del cristal y del resonador usados, la cantidad de perdida de capacitancia, y el ruido electromagnético del ambiente Para resonantes cerámicos, el valor del capacitor es dado por el fabricante.

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

El fusible CKSEL0 junto con el SUT1…0 seleccionan el inicio de tiempo como se muestra en la Tabla 8-4.

8.4 Ajuste del Oscilador del Cristal El Oscilador del cristal es ajustado, con This Crystal Oscillator is a full swing oscillator, with rail-to-rail swing on the XTAL2 output. Este es muy usado para controlar otras salidas de reloj y ambientes ruidosos. El consumo de corriente es más alto que ”Low Power Crystal Oscillator” en la página 32 del data sheet. Note que el ajuste del Oscilador del Cristal solo funciona para Vcc = 2.7 - 5.5 voltios. Alguna guía inicial para escoger los capacitores para ser usados con el cristal están dados en la tabla 8.6. El cristal debería ser conectado como se describe en ”Clock Source Connections” en la página 31 del data sheet. El modo de operación es seleccionado mediante los fusibles CKSEL3..1 como se muestra en la tabla8-5.

8.5 Oscilador del Cristal de Baja Frecuencia La baja frecuencia del Oscilador del Cristal es optimizada para usar un cristal de 32.768 KHz. Cuando seleccionamos el cristal, la capacitancia de carga y la Resistencia en serie equivalente del cristal, ESR sería tomado en consideración. Ambos valores son especificados por el fabricante. El oscilador del ATmega164P/324P/644P es optimizado para muy bajo consumo de energía, y además cuando seleccionamos los cristales, ver la tabla 8-7, para máximo ESR se recomienda cristales de 9pF y 12.5 pF.

Los osciladores de baja frecuencia del cristal proporciona una capacitancia de carga interna de cristales típicos de 8.0 pF. Los cristales con recomendaciones de 8.0 pF pueden ser quitados como se muestra en la figura 8-3.

Los cristales que especifican una capacitancia de carga CL mas alta que 8.0 pF, requieren capacitores externos como se describe en la figura 8-2. Para encontrar una capacitancia de carga adecuada para un cristal de 32.768, por favor consulte el cristal del datasheet. Cuando este oscilador es seleccionado, empieza el tiempo que es determinado por los fusibles SUT y CKSEL0 como se muestra en la figura de la Tabla 8-8.

8.6 Calibrar el Oscilador Interno RC Por defecto, el Oscilador Interno RC proporciona un reloj de aproximadamente 8MHz. Junto con el voltaje y temperatura dependiente, este reloj puede ser calibrado con mucha precisión por el usuario. Ver la tabla 27-4 “Velocidad del Oscilador Interno” para mas detalles. El dispositivo es enviado con el fusible CKDIV8 programado. Ver “Prescalador del Sistema de Reloj” para más detalles. Este reloj puede ser seleccionado como sistema de reloj por programación del fusible CKSEL como se muestra en la Tabla 8-9. Si es seleccionado, esto operaría con componentes no externos. Durante el reset, el hardware carga el valor de calibración de la pre-programación en el registro OSCCAL y por eso automáticamente calibra el oscilador RC. La precisión de esta calibración es mostrada como calibración de fábrica en la tabla 27-4.

Para cargar el registro OSCCAL desde SW, ver “OSCCAL- Registro de Calibración del Oscilador” en la página 40 del datasheet, esto es posible para obtener una mayor precisión de calibración que la usada por fabrica. La precisión de esta calibración es mostrada como calibración de usuario en la Tabla 27-4. Cuando este Oscilador es usado como el reloj del chip, el oscilador del Watchdog todavía sería usado por el Watchdog Timer para el Reseteo a tiempo fuera. Para mayor información del valor de calibración en la pre-programación, ver la sección “Byte de Calibración” en la página 296 del datasheet.

Cuando este Oscilador es seleccionado, empieza tiempos que son determinados por los fusibles SUT como se muestra en la Tabla 8-10 en la página 36 del datasheet.

8.7 Oscilador Interno de 128 kHz El Oscilador Interno de 128 KHz es un oscilador de bajo consumo provisto con un reloj de 128 KHz. La frecuencia nominal es 3V a 25 °C. Este reloj puede ser seleccionado como el sistema de reloj programando los fusibles CKSEL a “0011” como es mostrado en la Tabla 8-11.

Cuando esta fuente de reloj es seleccionada, los tiempos de inicio son determinados por los fusibles SUT como se muestra en la Tabla 8-12.

8.8 Reloj Externo Para manejar el dispositivo desde una fuente de reloj externo, XTAL1 debería ser manejado como se muestra en la Figura 8-4. Para manejar un dispositivo con reloj externo, los fusibles CKSEL serían programados a “0000”.

Cuando esta fuente de reloj es seleccionada, los tiempos de inicio son determinados por los fusibles SUT como se muestra en la Tabla 8-14.

Cuando se aplica un reloj externo, es requerido evitar cambios súbitos en la frecuencia de reloj aplicada para asegurar la estabilidad de operación del MCU. La variación en frecuencia de más del 2% desde un ciclo de reloj al siguiente puede tener una conducta impredecible. Si los cambios de más del 2% es requerido, asegurarse que el MCU es guardado en el Reset durante los cambios.

Note que el Prescalador del Sistema de Reloj puede ser usado para implementar cambios de ejecución de tiempo de la frecuencia del reloj interno mientras todavía asegura una operación estable. Referirse a “prescalador del sistema de Reloj” en la Pág. 38 del datasheet para más detalles. 8.9 Oscilador del Timer/Counter El ATmega164P/324P/644P usa el mismo tipo de oscilador del cristal para cristal de baja frecuencia y el oscilador del Timer/Counter. Ver “Oscilador del Cristal de baja frecuencia” en la página 34 del datasheet para mayores detalles. El dispositivo puede operar con Timer/Counter desde un cristal con frecuencia externa de 32.768 KHz o una fuente de reloj externa. Ver “Conexiones del la Fuente de Reloj” en la página 31 del datasheet para mayores detalles. Aplicando una fuente de reloj externa a TOSC1 puede ser hecho si EXTCLK en el Registro ASSR es escrito con uno lógico. Ver “el registro de comparación de salida B que contiene valores de 8-bit que continuamente compara con el valor de contador (TCNT2). Esto puede ser usado para generar una Interrupción de comparación a la salida, o generar una forma de onda a la salida en el pin OC2B” en la página 157 del datasheet. 8.10 Buffer del Reloj de Salida El dispositivo puede ser salida del sistema de reloj en el pin CLKO. Al habilitar la salida, el fusible CKOUT ha sido programado. Este modo es conveniente cuando el reloj del chip es usado para manejar otros circuitos en el sistema. El reloj también sería una salida durante el reset, y la operación normal del pin de E/S sería alterada cuando el fusible es programado. Ninguna fuente de reloj, incluyendo el Oscilador interno RC, puede ser seleccionado cuando el reloj es salida en CLKO. Si el prescalador del Sistema de Reloj es usado, esto divide el sistema de reloj que es salida. 8.11 Prescalador de Sistema de Reloj El ATmega164P/324P/644P tiene un Prescalador del sistema de reloj y el sistema de reloj puede ser dividido por configuración de “CLKPR-Registro Prescalador del reloj” en la página 40 del datasheet. Esto puede ser usado para decrementar la frecuencia del sistema de reloj y el consumo de energía cuando el requerimiento para procesamiento en energía es bajo. Esto puede ser usado con todas las opciones de fuente de reloj, y esto afectaría la frecuencia de reloj del CPU y todos los periféricos asíncronos clkI/O, clkADC, clkCPU, and clkFLASH son divididos por factores como se muestra en la Tabla 8-15 en la página 41 del datasheet. Cuando se cambia entre las configuraciones del prescalador, el prescalador del sistema de reloj asegura que no ocurrían fallas técnicas en el sistema de reloj. Esto también asegura que la frecuencia no es inmediatamente más alta que la frecuencia de reloj correspondiente a las configuraciones previas, o la frecuencia correspondiente a configuraciones nuevas. El contador de onda que implementa el Prescalador corre a la frecuencia no dividida del reloj, con lo cual puede ser más rápido que la frecuencia de reloj del CPU. Esto no es posible para determinar el estado del prescalador si esto

sería leíble, y el tiempo exacto que toma el cambio desde una división de reloj a otra que no puede ser exactamente predefinida. Desde el tiempo que el valor de CLKPS es escrito, esto toma entre T1 + T2 y T1 + 2*T2 antes de que la nueva frecuencia de reloj sea activada. En este intervalo, la activación de 2 flancos para el reloj son producidos. T1 es el periodo previo del reloj, y T2 es el periodo correspondiente a la configuración del nuevo prescalador. Para evitar cambios unidireccionales de la frecuencia de reloj, un procedimiento de escritura especial seria el siguiente para cambiar los bits CLKPS: 1. Escribir en el prescalador del reloj el bit de habilitación de cambio (CLKPCE) a uno y todos los otros bits en CLKPR a cero. 2. Durante cuatro ciclos, escribir el valor deseado a CLKPS mientras se escribe a cero CLKPCE. Las Interrupciones serian deshabilitadas cuando se carga las configuraciones del Prescalador para estar seguros que el procedimiento de escritura no sea interrumpido. 8.12 Descripción de Registros 8.12.1 OSCCAL – Registro de Calibración de Oscilador

• Bits 7:0 – CAL7:0: Valor de Calibración del Oscilador El Registro de Calibración del Oscilador es usado para la calibración del Oscilador Interno RC y remover la variación de procesos desde la frecuencia del oscilador. El valor de calibración pre-programado es automáticamente escrito en este registro durante el reset del chip, dando la frecuencia de calibración del fabricante como se especifica en la Tabla 27-4 en la página 330 del datasheet. El software de aplicación puede escribir en este registro para cambiar la frecuencia del oscilador. El oscilador puede ser calibrado a frecuencias como es especifica en la Tabla 27-4 en la página 330. La calibración fuera del rango no es garantizada. Note que este oscilador es usado al tiempo de acceso de escritura en la EEPROM y la Flash, y estos tiempos de escritura serían afectados. Si la EEPROM y la Flash son escritas, no calibrar a más de 8.8 MHz. Por otra parte, la escritura de la EEPROM o la Flash puede fallar. El bit CAL7 determina el rango de operación para el oscilador. Configurando este bit a 0 da el rango de frecuencia más bajo, en otras palabras configurando OSCCAL = 0x7F da la frecuencia más alta que OSCCAL = 0x80. Los bits CAL6..0 son usadas para modular la frecuencia dentro del rango seleccionado. La configuración de 0x00 da la frecuencia más baja en este rango, y configurando 0x7F da la frecuencia mas alta en el rango.

8.12.2 CLKPR – Registro Prescalador del Reloj

• Bit 7 – CLKPCE: Habilitación de cambio del Prescalador del Reloj El bit CLKPCE sería escrito a uno lógico al habilitar el cambio de los bits CLKPS. El bit CLKPCE es solo actualizado cuando los otros bits en CLKPR son simultáneamente escritos a cero. CLKPCE es limpiado por hardware cuatro ciclos después de que es escrito o cuando los bits CLKPS son escritos. Reescribiendo el bit CLKPCE dentro del periodo de tiempo fuera, no limpiaría el bit CLKPCE. • Bits 3:0 – CLKPS3:0: Bits de Selección del Prescalador del Reloj 3 – 0 Estos bits definen el factor de división entre la fuente de reloj seleccionada y el sistema de reloj interno. Estos bits pueden ser escritos corriendo el tiempo o variando la frecuencia del reloj en las aplicaciones requeridas. Cuando el divisor divide en entrada del reloj Maestro del MCU, la velocidad para todos los periféricos asincrónicos son reducidas cuando el factor de división es usado. Los factores de división están dados en la Tabla 8-15 de la página 41 de datasheet. El fusible CKDIV8 determina el valor inicial de los bits CLKPS. Si CKDIV8 es desprogramado, los bits CLKPS serían reseteados a “0000”. Si CKDIV8 es programado, los bits CLKPS son reseteados a “0011”, dando un factor de división de 8 para el inicio. Esto debería ser usado si la fuente de reloj seleccionada tiene una frecuencia más alta que la máxima frecuencia de los dispositivos presentes en condiciones de operación. Note que cualquier valor puede ser escrito en los bits CLKPS indiferentemente de la configuración de los fusibles CKDIV8. El software de aplicación aseguraría que un factor de división suficiente sea escogido si la fuente de reloj seleccionada tiene una frecuencia más alta que la frecuencia máxima de los dispositivos presentes en condiciones normales. El dispositivo es enviado con el Fusible CKDIV8 programado.

9. Power Management y Modo Sleep 9.1 Revisión General El modo sleep habilita la aplicación para cerrar los módulos no usados en el MCU, por eso ahorra energía. El AVR proporciona varios modos sleep permitiendo al usuario adaptar el consumo de energía para la aplicación requerida. Cuando habilita, el Brown-out Detector (BOD) activa el monitoreo de la alimentación de voltaje durante los periodos de descanso (sleep). Además ahorra energía, es posible desactivar el BOD en algunos modos sleep.

9.2 Modo Sleep (Descanso) La siguiente figura muestra los diferentes sistemas de reloj en el ATmega164P/324P/644P, y su distribución. La figura es útil en la selección de un apropiado modo de sleep.

La tabla 9-1 muestra los diferentes modos sleep, su forma de despertarse y la capacidad de deshabilitar el BOD:

Notas: 1. Solo recomendado con cristal externo o resonador como fuente de reloj. 2. Si el Timer/Contador2 está corriendo en modo asincrónico. 3. Para el INT0, solo interrupción de nivel.

Para entrar a cualquiera de los modos sleep, el bit SE en el SMCR debe ser escrito en uno lógico y una instrucción SLEEP debe ser ejecutada. Los bits SM2, SM1, y SM0 en el registro SMCR seleccionan cual modo de descanso será activado mediante la instrucción SLEEP. Si ocurre la habilitación de una interrupción mientras el MCU está en modo sleep, el MCU despierta. El MCU es parado durante cuatro ciclos además del tiempo de arranque, ejecuta la rutina de interrupción, y retoma la ejecución de la siguiente instrucción SLEEP. El contenido del Archivo de Registro y la SRAM son inalterables cuando el dispositivo despierta del descanso (sleep). Si ocurre un reset durante el modo sleep, el MCU despierta y ejecuta desde el Vector de Reset. 9.3 Desabilitación del BOD Cuando el Brown-out Detector (BOD) es habilitado por los fusibles BODLEVEL, el BOD es activado para monitorear la alimentación de voltaje durante el periodo de descanso (sleep). Para ahorrar energía, es posible deshabilitar el BOD por software para algunos modos sleep. El consumo máximo del modo sleep estará entonces en el mismo nivel como cuando BOD es deshabilitado globalmente por los fusibles. Si el BOD es deshabilitado por software, la función del BOD es apagada inmediatamente después de entrar en modo de descanso. Una vez que despierta del modo sleep, el BOD es activado automáticamente otra vez. Esto asegura el funcionamiento seguro en caso de que el nivel de VCC cae durante el período de descanso. Cuando el BOD ha sido deshabilitado, el tiempo de arranque desde el modo de descanso será aproximadamente 60us para asegurar que el BOD esté trabajando correctamente antes de que el MCU continúe ejecutando el código. La desabilitación del BOD es controlada por el bit 6, BODS (BOD Sleep) en el registro MCUCR. Al escribir uno en este bit se apagará el BOD en el pertinente modo sleep, mientras el BOD esté en cero este estará activo. Por defecto el BOD está en cero, por lo que siempre está activado. 9.4 Modo Idle Cuando los bits SM2..0 son escritos como 000, la instrucción SLEEP hará que el MCU entre en modo Idle, deteniendo el CPU pero permitiendo que el SPI, USART, Comparador Análogo, ADC, Interfaz Serial de 2 wire (2 hilos),

Timer/Contador, Watchdog y el sistema de interrupciones continúe funcionando. Este modo básicamente detiene el reloj del CPU y el reloj de la Flash, mientras permite que los otros relojes funcionen. El modo Idle le permite al MCU que se despierte de las interrupciones activadas externas así como el desbordamiento del Timer y las interrupciones de transmisión Completas del USART. Si despierta desde la interrupción del Comparador Análogo, el Comparador Analógico puede activarse por configuración del bit ACD en el Control comparador y Registro de estado – ACSR. Esto reducirá el consumo de energía en el modo Idle. SI el ADC es habilitado una conversión comenzará automáticamente cundo se ingresa a este modo. 9.5 Modo de Reducción de Ruido del ADC Cuando los bits SM2..0 son escritos como 001, la instrucción SLEEP hace que el MCU entre en el Modo de Reducción de ruido del ADC, deteniendo al CPU pero permitiendo al ADC, las interrupciones externas, la Interfaz Serial de 2 hilos(2 wire), Timer/Contador2 y Watchdog continuar funcionando (si es habilitado). Este modo básicamente detiene el reloj de las entradas y salidas, el reloj del CPU y el reloj de la FLASH, mientras permite que los otros relojes estén funcionando. Esto mejora el ambiente de ruido del ADC, permitiendo alta resolución en las medidas. Si el ADC es habilitado, una conversión comienza automáticamente cuando se entra en este modo. Aparte de la Interrupción de Conversión Completa del ADC, solo un reset externo, un reset del sistema del Watchdog, una Interrupción del Watchdog, un reset del Brown-out, una interrupción de la Interfaz serial de 2 hilos (2 wire), una interrupción externa en INT7:4 o un cambio de interrupción pueden despertar al MCU desde el modo de reducción de ruido del ADC. 9.6 Modo Power-down Cuando los bits SM2..0 son escritos como 010, la instrucción SLEEP hace que el MCU entre en el Modo Power-down. En este modo, el oscilador externo es detenido, mientras la interrupción externa, la interfaz serial de 2 wire (2 hilos), y el Watchdog continúan operando. Solo un reset externo, un reset del Watchdog, un reset del Brown-out, una interrupción externa en INT7:4, una interrupción en INT2:0 o un cambio de interrupción pueden despertar al MCU. Este modo de descanso básicamente detiene todos los relojes generados, permitiendo operar solo el módulo asincrónico. Note que si el nivel del disparo de una interrupción es usado para despertar desde el modo power-down, el nivel cambiado debe sostenerse durante algún

tiempo para despertar al MCU. Cuando despierta del modo Power-down, hay un retardo antes de despertarse y continúa hasta que despierte totalmente. Esto permite al reloj reiniciar y llegar a estabilizarse antes de que haya sido detenido. El periodo para despertarse esta definido por el fusible CKSEL que define el periodo de reset. 9.7 Modo Power-save Cuando los bits SM2..0 son escritos como 011, la instrucción SLEEP hace que el MCU entre en el Modo Power-save. Esto modo es idéntico al modo Power-down, con una excepción: Si el Timer/contador2 es habilitado, este funcionara durante el descanso. Este dispositivo puede despertarse desde un desbordamiento del Timer o una Salida del Comparador desde el Timer/Contador2 si los bits correspondientes a la interrupción del Timer/Contador2 son habilitadas en TIMSK2, y el bit en la interrupción global en SREG es puesta en uno. Si el Timer /Contador2 no está corriendo, se recomienda usar este modo. El Timer/Contador2 puede ser contado sincrónicamente y asincrónicamente en el Modo Power-save. Si el Timer/contador2 no está usando el reloj asincrónico, el oscilador del Timer/Contador es detenido durante el descanso (sleep). Si el Timer/contador2 no está usando el reloj sincrónico, la fuente del reloj es detenido durante el descanso (sleep). Note que aun cuando el reloj síncrono está corriendo en Power-save, este reloj sólo está disponible para el Timer/Counter2. 9.8 Modo Standby Cuando los bits SM2..0 son escritos como 110 y un cristal/resonador externo es seleccionado, la instrucción SLEEP hace que el MCU entre en Modo Standbye. Este modo es idéntico al Power-Down con la excepción de que el Oscilador es kept running. En el modo Standby, el dispositivo se despierta en 6 ciclos de reloj. 9.9 Modo Standby Extendido Cuando los bits SM2..0 son escritos como 111 y un cristal/resonador externo es seleccionado, la instrucción SLEEP hace que el MCU entre en el Modo Standbye extendido. Este modo es idéntico al modo Power-save con la excepción que el Oscilador es kept running. En el modo Stanbye Extendido, el dispositivo se despierta en 6 ciclos de reloj

9.10 Registro Reducción de Energía El Registro Reducción de Energía (PRR), proporciona un método para detener los periféricos individuales para reducir el consumo de energía. El estado de la corriente de los periféricos es congelada y los registros de E/S no pueden ser leídos o escritos. Los recursos usados por el periférico cuando el reloj se detiene permanecerán ocupados, por está razón los periféricos deben en la mayoría de los casos ser deshabilitados antes de que se detenga el reloj. Al despertarse un periférico, el cual ha sido limpiado el bit en PRR, pone a los periféricos en igual estado como antes de cerrarse. El cierre de los periféricos puede ser usado en modo Idle, Modo Activo para reducir significantemente el sobre consumo de energía. En otros modos de descanso, el reloj es ya es detenido. 9.11 Minimización del Consumo de Energía Hay varios problemas a considerar cuando se trata de minimizar el consumo de energía en un sistema controlado por un AVR. En general, los modos de descanso deben ser usados tanto como sea posible, y el modo sleep debe ser seleccionado dependiendo de la función del dispositivo que este operando. Todas las funciones no necesitan ser deshabilitadas. En particular, los módulos siguientes necesitan una consideración especial cuando tratan de obtener el más bajo consumo posible. 9.11.2 Conversión Análoga a Digital Si habilitó, el ADC será habilitado en todos los modos de descanso. Para ahorrar energía, el ADC debe ser deshabitado antes de entrar en cualquier modo sleep. Cuando el ADC es apagado y encendido otra vez, la siguiente conversión será una conversión extendida. 9.11.2 Comparador Análogo Cuando entra en modo Idle, el comparador Análogo debe ser deshabilitado si no se está usando. Cuando entra en el modo de Reducción de Ruido del ADC, el comparador Análogo debe ser deshabilitado. En otros modos sleep, el Comparador Análogo es automáticamente deshabilitado. Sin embargo, si el Comparador Análogo es configurado para usar la Referencia del Voltaje Interno como entrada, el Comparador Análogo debe ser deshabilitado en todos los modos de descanso. De otro modo, la Referencia de voltaje Interna deberá ser habilitada, independientemente del modo de descanso.

9.11.3 Brown-out Detector Si el Brown-out Detector no es necesario para la aplicación, este modo debe ser apagado. Si el Brown-out Detector es habilitado por los fusibles BODLEVEL, este será habilitado en todos los modos, y además, siempre consume energía. En el modo sleep más profundo, este contribuirá significantemente para el consumo total de corriente. 9.11.4 Referencia de Voltaje Interna La Referencia de Voltaje Interna será habilitada cuando se necesite detectar el Brown-out, el Comparador Análogo o el ADC. Si estos módulos son deshabilitados como se describe en la sección de abajo, la referencia de Voltaje Interna será deshabilitada y esta no consumirá energía. Cuando se prende otra vez, el usuario debe poner la referencia antes de que sea usado. 9.11.5 Watchdog Timer Si el Watchdog Timer no es necesario para la aplicación, el módulo debe ser apagado. Si el Perro Watchdog Timer es habilitado, este será habilitado en todos los modos, y además, siempre consumirá energía. En el más profundo de los descansos (sleep), este contribuirá significantemente al consumo total de corriente. 9.11.6 Pines del Puerto Cuando entra en modo sleep, todos los pines del puerto deben ser configurados para usar la mínima energía. Lo más importante es por lo tanto asegurar que ningún pin maneje cargas resistivas. En el modo de descanso cuando el reloj de las E/S y el reloj del ADC son detenidos, los buffers de entrada del dispositivo serán deshabilitadas. Esto asegura que no exista consumo de energía cuando una entrada lógica no es necesaria. En algunos casos, la entrada lógica es necesaria para detectar condiciones de arranque, y entonces esto será habilitado. Si el buffer de entrada es habilitado y la señal de entrada es dejada a flote o tiene una señal análoga en VCC/2, el buffer de entrada usará excesiva energía. Para los pines de entrada analógica, el buffer de entrada digital debe ser deshabilitado de todos los tiempos. Una señal análoga para VCC/2 en la entrada de un pin puede causar lo suficiente de corriente incluso en modo activo. Los buffers de entrada digital pueden deshabilitarse escribiendo en el registro de desabilitación de entradas digitales (DIDR1 y DIDR0).

9.11.7 Sistema On-chip Debug Si el Sistema On-chip Debug es habilitado por el fusible OCDEN y el chip entra en modo sleep, la fuente del reloj principal será habilitada, y además, siempre consumirá energía. En el más profundo de los modos sleep (descanso), este contribuirá significantemente al consumo total de corriente. Hay tres vías alternativas para deshabilitar el sistema OCD:

1. Deshabilitar el fusible del OCDEN 2. Deshabilitar el Fusible del JTAGEN 3. Escribir uno en el bit JTD del MCUCR

9.12 Descripción de los Registros 9.12.1 SMCR – Registro de Control para el Modo Sleep El Registro de Control para el Modo sleep contiene bits para el control de la energía.

• Bits 3, 2, 1 – SM2:0: Selección de Bits 2, 1, y 0 para el Modo Sleep Estos bits seleccionan entre los cinco posible modos como muestra la tabla 9-2.

Notas:

1. El modo Standby es solo recomendado para usar con un cristal externo. • Bit 0 – SE: Habilitación del sleep El bit SE debe ser escrito a uno lógico para hacer que el MCU entre en modo sleep cuando la instrucción SLEEP es ejecutada. Para evitar que el MCU entre al modo sleep es recomendable escribir a uno el bit SE antes de ejecutar la instrucción SLEEP y para limpiar inmediatamente después de despertarse.

FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

9.12.2 MCUCR – Registro de Control MCU

• Bit 6 – BODS: Descanso BOD El bit BODS deber ser escrito a uno lógico para apagar el BOD durante el descanso (sleep). Al escribir en el bit BODS, se controla por una secuencia de tiempos y un bit de habilitación, BODSE en el registro MCUCR. Para deshabilitar el modo de descanso, el BODS debe ser puesto a uno y el BODSE debe estar en cero en cuatro ciclos del reloj. El bit BODS es activado en tres ciclos del reloj después de ser configurado. Una instrucción SLEEP debe ser ejecutada mientras el BODS es activado para apagar el BOD para el nuevo modo de descanso. El bit BODS es automáticamente limpiado después de tres ciclos del reloj. • Bit 5 – BODSE: Habilitación del sleep (descanso) BOD El BODSE habilita la configuración del bit de control BODS, como se explica en la descripción del BODS. La deshabilitación del BOD es controlada por una secuencia de tiempos. 9.12.3 PRR – Registro Reducción de Energía

• Bit 7 - PRTWI: Reducción de Energía TWI Al escribir un uno lógico en este bit cierra el TWI mediante la detención del reloj. Cuando arranque otra vez el TWI, el TWI debe ser reinicializado para asegurar su correcto funcionamiento. • Bit 6 –Reducción de Energía del Timer/Countador2 PRTIM2 Al escribir un uno lógico en este bit pone el modulo del Timer/Contador2 en modo asincrónico (AS2 es 0). Cuando el Timer/Contador2 es habilitado, la operación continuará como antes de que haya sido cerrado. • Bit 5 - PRTIM0: Reducción de Energía del Timer/Contador0 Al escribir un uno lógico en este bit se cierra el modulo del Timer Contador0. Cuando el Timer/Contador0 es habilitado, la operación continuará como antes de que haya sido cerrado.

• Bit 4 - PRUSART1: Reducción de Energía en el USART1 Al escribir un uno lógico en este bit se cierra el USART1 detenido el reloj del módulo. Cuando despierta otra vez el USART1, el USART1 debe reinicializarse para asegurar su correcto funcionamiento. • Bit 3 - PRTIM1: Power Reduction Timer/Counter1 Al escribir un uno lógico en este bit se cierra el módulo del Timer/Contador1. Cuando el Timer/Contador1 es habilitado, la operación continuará como antes de que haya sido cerrado. • Bit 2 - PRSPI: Power Reduction Serial Peripheral Interface Al escribir un uno lógico en este bit se cierra el módulo de Interfaz Periférica Serial mediante la detención del reloj. Cuando despierta otra vez del SPI, el SPI debe reinicializarse para asegurar su correcto funcionamiento. • Bit 1 - PRUSART0: Reducción de Energía del USART0 Al escribir un uno lógico en este bit se cierra el USART0 deteniendo el reloj del módulo. Cuando despierta otra vez el USART0, el USART0 debe reinicializarse para asegurar su correcto funcionamiento. • Bit 0 - PRADC: Power Reduction ADC Al escribir un uno lógico en este bit se cierra el ADC. El ADC debe ser deshabilitado antes de que se cierre el módulo. El comparador análogo no puede usar el MUX de entrada del ADC cuando el ADC es cerrado. 10. Control del Sistema y Reset 10.0.1 Reset del AVR Durante el reset, todos los registros de E/S se ponen en su valor inicial, y el programa empieza a ejecutarse desde el Vector de Reset. La instrucción localizada en el Vector de Reset debe ser un JMP – Salto Absoluto – instrucción para reiniciar la rutina manualmente. Si el programa nunca habilita una fuente de interrupciones, el Vector de interrupciones no es usado, y el código de programa puede ser ubicado en esta localidad. Es también del caso, si el Vector de Reset, está en la sección de aplicaciones mientras el Vector de Interrupciones está en la sección baja del programa (boot), o viceversa. El diagrama del circuito se muestra en la tabla 10-1 la cual muestra el reset lógico. Los puertos de E/S de los AVRs son reiniciadas inmediatamente a su estado inicial cuando una fuente de reset está activa. Esto no requiere que cualquier fuente de reloj esté corriendo. Después de resetear todas las fuentes ha sido desactivado, se efectúa un conteo de retardo, alargándose el reset interno. Esto

permite lograr una estabilidad antes de la operación normal de inicio. El periodo de tiempo para el conteo del retardo está definido por el usuario a través de los fusibles SUT y CKSEL. 10.0.2 Fuentes de Reset El ATmega164P/324P/644P tiene cinco Fuentes de reset:

1. Power-on reset. El MCU es reseteado cuando el voltaje de alimentación está por debajo del umbral del Power-on Reset (VPOT).

2. Reinicio externo. El MCU es reseteado cuando un nivel bajo en el pin de

RESET el cual es mas largo que el pulso mínimo.

3. Reset del Watchdog. El MCU es reseteado cuando el período del Tiempo del Watchdog termina y el Watchdog es habilitado.

4. Reset del Brown-out. El MCU es reseteado cuando el voltaje de VCC de

alimentación está debajo del Brown-out Reset (VBOT) y el Brown-out Detector es habilitado.

5. Reset del JTAG. El MCU es reseteado si existe un uno lógico en el

registro del Reset.

10.0.3 Reset del Power-on Un pulso del Power-on (POR) es generado por un circuito de detención interno del chip. El circuito del POR está activado cuando el VCC esta por debajo del nivel de detección. El circuito del POR puede ser usado para disparar el reset, así como para detectar una falla en el voltaje de alimentación. El circuito de reset del Power-on asegura que el dispositivo sea reseteado desde el Power-on. Alcanzar el voltaje umbral del Power-on llama al contador del programa, el cual determina cuanto tiempo el dispositivo está en reset desde de subir el VCC. La señal de RESET es activada otra vez, sin ningún retardo, cuando el VCC decrementa por debajo del nivel de detección.

10.0.4 Reset Externo Un reset externo es generado por un nivel bajo en el pin de RESET. Los pulsos de RESET más largos que el ancho del pulso mínimo generan un reset, o si el reloj no está corriendo. Pulsos cortos no garantizan generar un reset. Cuando la señal aplicada alcanza el voltaje umbral de Reset – VRST – en su flanco positivo, el contador de retardos inicia al MCU después de que periodo de tiempo tout ha terminado.

10.0.5 Detección del Brown-out El ATmega164P/324P/644P tiene en su interior un circuito detector del Brown-out (BOD) para monitorear el nivel del VCC durante su operación mediante la comparación de un nivel de disparo. El nivel de disparo del BOD puede ser seleccionado por el fusible BODLEVEL. El nivel de disparo tiene una histéresis para asegurar la detección del Brown-out. La histéresis en el nivel de detección deben ser interpretados como VBOT+ =VBOT + VHYST/2 y VBOT- = VBOT - VHYST/2. Cuando el BOD es habilitado, y decrece el VCC a un valor más abajo del nivel de disparo, el Brown-out Reset es inmediatamente activado. Cuando incrementa el VCC por encima del nivel de disparo, el contador de retardos inicia al MCU después de que el periodo de tiempo tTOUT ha terminado.

10.0.6 Reset del Watchdog Cuando hay un tOUT, esto genera un pulso de reset corto de una duración del ciclo CK. En el flanco de bajada de este pulso, el tiempo de retardo empieza a contar el periodo de tiempo del tOUT.

10.1 Referencia del Voltaje Interno El ATmega164P/324P/644P ofrece una referencia interna. Esta referencia se usa para Detectar el Brown=out, y puede usarse como una entrada al Comparador Analógico o al CONVERSOR ANALÓGICO-DIGITAL. 10.1.1 Habilitación de la señal de voltaje interna y tiempo de arranque La referencia de voltaje tiene un arranque que influencia en la forma en que este debería usarse. Para ahorrar energía, la referencia no siempre es activada. La referencia esta activada en las siguientes situaciones:

1. Cuando el BOD es habilitado (por programación del fusible BODLVEL [2:0]).

2. Cuando la referencia Bandgap es conectada al comparador analógico (por configuración del bit ACBG en el registro ACSR).

3. Cuando el ADC es habilitado. Además, cuando el BOD no es habilitado, después de configurar el bit ACBG o deshabilitar el ADC, el usuario debe siempre iniciar la referencia antes de que la salida del comparador Análogo sea usada. Para reducir el consumo de energía en el modo Power-dowm, el usuario puede evitar las tres condiciones de arriba para asegurar que la referencia sea apagada antes de entrar en el modo Power-dowm. 10.2 Watchdog Timer 10.2.1 Características: • Contador desde un Oscilador dentro del chip • 3 Modos de Operación – Interrupciones – Reinicio del Sistema – Reinicio de Interrupciones y del sistema • Periodo del Time-out seleccionable desde 16ms to 8s • Possible Hardware fuse Watchdog always on (WDTON) for fail-safe mode

10.2.2 Vista Global El ATmega164P/324P/644P tiene un Watchdog timer mejorado (WDT). El WDT es un contador de ciclos de tiempos de un oscilador separador en el chip de 128Khz. El WDT produce una interrupción o un reset al sistema cuando el contador alcanza el valor dado en el time/out. En el modo de operación normal, esto requiere que el sistema use la instrucción WDR / Watchdog Timer Reset/ para reiniciar al contador antes de que alcance el valor del time/out. Si el sistema no reinicia el contador, se producirá una interrupción o se reiniciara el sistema.

En el modo de interrupción, el WDT produce una interrupción cuando el tiempo termina. Esta interrupción puede ser usada para despertar al dispositivo del modo de descanso y también como un contador del sistema general: como por ejemplo para limitar el tiempo máximo permitido para operaciones seguras, dando una interrupción cuando funciona mas tiempo de lo esperado. En el modo de Reset del Sistema, el WDT da un reset cuando termina el tiempo. Esto es típicamente usado para prevenir desconexiones del sistema en caso de código runaway. El tercer modo, Modo de interrupciones y Reset del sistema, combinas los otros dos modos mediante el primero genera una interrupción y entonces conecta el modo de Reset del sistema. Este modo permitirá un cierre seguro por ejemplo ahorrando los parámetros críticos antes de un reset del sistema. El Watchdog siempre enciende el fusible WDTON, si programando forzamos al WDT para entrar en modo de reset del sistema. Cuando el fusible es programado el bit WCE en el modo de Reset del Sistema y el bit WDIE en el modo de Interrupción son puestos en 1 y 0 respectivamente. Para mayor seguridad del programa, el Watchdog debe ser configurado siguiendo los siguientes pasos:

1. En operaciones similares, escribir un uno lógico para cambiar el bit WDEN y WDE del Watchdog. Un uno lógico debe ser escrito en el WDE para un previo valor del bit WDE.

2. Entre las siguientes cuatro ciclos de reloj, escribir en el WDE y en los bits

del prescalador del Watchdog como requiera, pero con el bit WDCE limpiado. Esto debe ser hecho con una sola operación.

El siguiente código de ejemplo muestra una función en ensamblador y en C para apagar el Watchdog Timer. El ejemplo asume que las interrupciones son controladas así que no ocurrirán interrupciones durante la ejecución de estas funciones.

Nota: Si el Watchdog es habilitado accidentalmente, por ejemplo por un puntero incontrolable o una condición de brown-out, el dispositivo será reseteado y el Watchdog Timer permanecerá habilitado. Si el código no es puesto para controlar el Watchdog, este podría permanecer en un lazo infinito. Para evitar esta situación, el software de aplicación debe limpiar siempre a la Bandera del sistema de Reset del Watchdog (WDRF) y al bit de control WDE en la rutina de inicialización, o si el Watchdog no está en uso.

El siguiente código muestra un ejemplo uno en ensamblador y otro en C para cambiar el valor del time-out del Watchdog Timer.

Nota: El Watchdog Timer debe ser reseteado antes de cualquier cambio de los bits WDP, ya que un cambio en los bits WDP puede resultar un time-out cuando cambia a un periodo mas corto del time-out.

10.3 Descripción de los Registros 10.3.1 MCUSR – Registro de Estado MCU El Registro de Estado MCU brinda información las causas por las cuales las fuentes de reset provocan un reset en el MCU.

• Bit 4 – Banderas del Reset JTRF: JTAG Este bits es puesto a uno si un reset es cuando por un uno lógico en el Registro de Reset JTAG seleccionado por la instrucción JTAG AVR_RESET. Este bit es reseteado por un reset del Power-on, o por un cero lógico en la bandera. • Bit 3 – WDRF: Bandera del reset del Watchdog Este bit es puesto a uno si ocurre un Reset del Watchdog. El bit es reseteado por un Reset del Power-on o por la escritura de un cero lógico en la bandera. • Bit 2 – BORF: Bandera de reset del Brown-out Este bit es puesto a uno si ocurre un Reset del Brown-out. El bit es reseteado por un Reset del Power-on, o por una escritura de un cero lógico en la bandera. • Bit 1 – EXTRF: Bandera de Reset Externo Este bit es puesto a uno si ocurre un Reset externo. El bit es reseteado por un reset del Power-on, o por la escritura de un cero lógico en la bandera. • Bit 0 – PORF: Bandera de Reset del Power-on Este bit es puesto a uno si ocurre un Reset del Power-on. El bit es reseteado solo por una escritura de un cero lógico en la bandera. Para ser uso de la Bandera de Reset para identificar una condición de reset, el usuario debe leer y entonces resetear el MCUSR tan pronto sea posible en el programa. Si el registro es limpiado antes de que ocurra otro reset, la fuente de reset ser encontrada mediante la revisión de las Banderas de Reset. 10.3.2 WDTCSR – Registro de Control del Watchdog Timer

• Bit 7 - WDIF: Bandera de Interrupción del Watchdog

Este bit es puesto a uno cuando ocurre un time-out en el Watchdog Timer y el Watchdog Timer es configurado por interrupción. WDIF es limpiado por hardware cuando se ejecuta el correspondiente vector de interrupción. Alternativamente, WDIF es limpiado mediante la escritura de un uno lógico en la bandera. Cuando el Bit I en el registro de estado es configurado, la interrupción del Watchdog Timer es ejecutada. • Bit 6 - WDIE: Habilitación de Interrupción del Watchdog Cuando este bit es escrito como uno y el bit I en el Registro de estado es configurado, la interrupción del Watchdog es habilitada. Si WDE es limpiada en combinación con su configuración, el Watchdog Timer está en modo de Interrupción, y la interrupción es ejecutada si ocurre un time-out en el Watchdog Timer. Si el WDE es configurado, el Watchdog Timer está en modo de Interrupción y rset del Sistema. El primer time-out en el Watchdog Timer pondrá en uno el WDIF. Al ejecutarse el vector de interrupción correspondiente limpiara automáticamente WDIE y WDIF por hardware. Esto es usado para brindar seguridad al Watchdog Timer mientras usa la interrupción. Este sin embargo no debería estar en la misma rutina de interrupción, porque puede comprometer la seguridad del Sistema de reset del Watchdog. Si la interrupción no es ejecutada antes del siguiente time-out, un reset del Sistema será aplicado.

• Bit 4 - WDCE: Habilitación de cambio del Watchdog Este es usado en secuencias de tiempos para cambiar los bits WDE y el prescalador. Para limpiar el bit WDE, y/o cambiar los bits del prescalador, WDCE debe ser configurado. Una vez escrito a uno, por hardware se limpiará WDCE por cuatro ciclos de reloj. • Bit 3 - WDE: Habilitación del Sistema de Reset del Watchdog El WDE es overridden por WDRF en el MCUSR. Esto significa que WDE es siempre puesto a uno cuando WDRF es configurado. Para limpiar WDE, WDRF debe ser limpiado primero. Este elemento asegura múltiples resets durante condiciones que causan problemas, y asegura ante de problemas de arranques.

• Bit 5, 2:0 - WDP3:0: Prescalador 3, 2 ,1 y 0 del Los bits WDP3:0 determinan los prescaladores (divisores) del Watchdog Timer cuando el Watchdog Timer está corriendo. Los valores de los diferentes prescaladores (divisores) y sus correspondientes periodos de time-out se muestran en la siguiente tabla 10-2.

11. INTERRUPCIONES 11.2 Vectores de Interrupción ATmega164P/324P/644P

11.3 DESCRIPCION DE REGISTROS 11.3.1 MCUCR –Registro de control MCU

• Bit 1 – IVSEL: Selección del vector de interrupción Cuando el bit IVSEL es cero, los vectores de interrupción son puestos al comienzo de la memoria Flash. Cuando este bit es uno, los vectores de interrupción son movidos al comienzo de la sección Boot Loader de la Flash. La actual dirección de comienzo de la sección Boot es determinada por los fusibles BOOTSZ. Para evitar cambios unidireccionales de las tablas de los vectores de interrupciones se procede a los siguientes cambios en el bit IVSEL: a. Habilitar el cambio en el vector de interrupción escribiendo uno en el bit (IVCE). b. Dentro de cuatro ciclos de reloj, escribir el valor deseado a IVSEL mientras se escribe cero a IVCE. Las Interrupciones automáticamente son deshabilitadas mientras la secuencia es ejecutada. Las interrupciones son deshabilitadas cuando es uno en el ciclo IVCE, y permanecen deshabilitadas hasta la siguiente instrucción escrita en Bisel. Si Bisel no es escrita, las interrupciones permanecen deshabilitadas por cuatro ciclos. El bit-I del registro de estado no es afectado por la desabilitación automática. • Bit 0 – IVCE: Habilitación de Cambios del Vector Interrupción El bit IVCE será escrito con uno lógico al habilitar el cambio del bit IVSEL. IVCE es puesto en cero por hardware por cuatro ciclos después es escrito o es cero cuando IVSEL es escrito directamente. Configurando los bits del IVCE desabitará las interrupciones.

12. INTERRUPCIONES EXTERNAS 12.1 DESCRIPCIÓN DE REGISTROS 12.2.1 EICRA – Registro de Control de Interrupciones A

• Bits 7:6 – Reservados Estos bits son reservados en el ATmega164P/324P/644P, y siempre son escritos con cero. • Bits 5:0 – ISC21, ISC20 – ISC00, ISC00: Interrupciones Externas 2 - 0 Sentido de los Bits de Control La interrupciones externas 2-0 son activadas por los pin externos INT2:0 si la bandera I en SREG y la correspondiente mascara de Interrupción en el EIMSK es uno. El nivel en los pines externos corresponde a uno en el EIMSK. Los límites de la forma de onda cuadrada en INT2, INT0 son registrados asincrónicamente. Los pulsos en INT2:0 son más extensos que el mínimo ancho de pulso dado en las “Interrupciones Externas” generadas en la interrupción. Pequeños pulsos no son garantizados para generar una interrupción. Si la interrupción a nivel bajo es seleccionada, el nivel bajo seria sostenido hasta la realización de la actualización ejecutando la instrucción para generar la interrupción. Si se habilita, el nivel activo de interrupción se generará una llamada de la interrupción hasta que el pin este en bajo. Cuando se cambia el bit, ISCn, la interrupción puede ocurrir. Por consiguiente, es recomendable primero deshabitar INTn encerando la habilitación de este bit en el registro EIMSK. Luego, el bit ISCn puede ser cambiado. Finalmente, la bandera de interrupción INTn debería ser limpiada por la escritura de uno lógico en este bit de la bandera de interrupción (INTFn) en el registro EIFR antes de que la interrupción sea nuevamente habilitada. Sentido de Control de la Interrupción ISCn1 ISCn0 Descripción

0 0 El nivel bajo de INTn genera un pedido de interrupción

0 1 Cualquier flanco de INTn genera un pedido de interrupción asincrónico

1 0 El flanco de bajada de INTn genera un pedido de interrupción asincrónico

1 1 El flanco de subida de INTn genera un pedido de interrupción asincrónico

12.2.2 EIMSK – Registro Mascara de Interrupción Externa

• Bits 2:0 – INTF2:0: External Interrupt Flags 2 - 0 Cuando algún flanco o cambio lógico en el pin INT dispara un pedido de interrupción, INTF2:0 llega hacer uno. Si el bit-I en el SREG y la correspondiente habilitación de interrupción en el bit, INT2:0 EIMSK, son uno, el MCU saltara al vector de interrupción. La bandera es limpiada cuando la rutina de interrupción es ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de uno lógico. Estas banderas son siempre limpiadas cuando INT2:0 son configuradas como nivel de interrupción. Note que cuando entra en modo sleep con las interrupciones INT2:0 deshabilitadas, los buffers de entrada en estos pines serian deshabilitados. Esto puede causar un cambio lógico en las señales internas con uno en las banderas INTF2:0. 12.2.4 PCICR –Registro de Control Cambio del pin de Interrupción

• Bit 3 – PCIE3: Habilitación de la Interrupción 3 cambiada al PIN Cuando el bit PCIE3 es uno y el bit-I en el Registro de Estado (SREG) es uno, el cambio de pin de interrupción 3 es habilitado. Cualquier cambio en cualquier habilitación en los pines PCINT31..24 causará una interrupción. La correspondiente interrupción demandada al cambio de pin de interrupción es ejecutada desde el vector de Interrupción PCI3. Los pines PCINT31..24 son habilitados individualmente por el Registro PCMSK3. • Bit 2 – PCIE2: Habilitación de la Interrupción 2 cambiada al PIN

Cuando el bit PCIE2 es uno y el bit-I en el Registro de Estado (SREG) es uno, el cambio de pin de interrupción 2 es habilitado. Cualquier cambio en cualquier habilitación en los pines PCINT23..16 causara una interrupción. La correspondiente interrupción demandada al cambio de pin de interrupción es ejecutada desde el vector de Interrupción PCI1. Los pines PCINT23..16 son habilitados individualmente por el Registro PCMSK2. • Bit 1 – PCIE1: Habilitación de la Interrupción 1 cambiada al PIN Cuando el bit PCIE1 es uno y el bit-I en el Registro de Estado (SREG) es uno, el cambio de pin de interrupción 1 es habilitado. Cualquier cambio en cualquier habilitación en los pines PCINT15..8 causara una interrupción. La correspondiente interrupción demandada al cambio de pin de interrupción es ejecutada desde el vector de Interrupción PCI1. Los pines PCINT15..8 son habilitados individualmente por el Registro PCMSK1. • Bit 0 – PCIE0: Habilitación de la Interrupción 0 cambiada al PIN Cuando el bit PCIE0 es uno y el bit-I en el Registro de Estado (SREG) es uno, el cambio de pin de interrupción 0 es habilitado. Cualquier cambio en cualquier habilitación en los pines PCINT7..0 causará una interrupción. La correspondiente interrupción demandada al cambio de pin de interrupción es ejecutada desde el vector de Interrupción PCI1. Los pines PCINT7..0 son habilitados individualmente por el Registro PCMSK0. 12.2.5 PCIFR – Cambio de Pin en el Registro de banderas de Interrupción

• Bit 3– PCIF3: Cambio de Pin en la Bandera de Interrupción 3 Cuando un cambio lógico en cualquier pin de disparo PCINT31..24 en demanda de una interrupción, PCIF3 llegara a ser uno. Si el bit-I en el SREG y el bit PCIE3 en EIMSK son uno, el MCU saltara al correspondiente vector de interrupción. La bandera es limpiada cuando la rutina de interrupción es ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de uno lógico.

• Bit 2 – PCIF2: Cambio de Pin en la Bandera de Interrupción 2 Cuando un cambio lógico en cualquier pin de disparo PCINT23..16 en demanda de una interrupción, 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 interrupción. La bandera es limpiada cuando la rutina de interrupción es ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de uno lógico. • Bit 1 – PCIF1: Cambio de Pin en la Bandera de Interrupción 1 Cuando un cambio lógico en cualquier pin de disparo PCINT15..8 en demanda de una interrupción, 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 interrupción. La bandera es limpiada cuando la rutina de interrupción es ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de uno lógico. • Bit 0 – PCIF0: Cambio de Pin en la Bandera de Interrupción 0 Cuando un cambio lógico en cualquier pin de disparo PCINT7..0 en demanda de una interrupción, 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 interrupción. La bandera es limpiada cuando la rutina de interrupción es ejecutada. Alternativamente, la bandera puede ser limpiada por la escritura de uno lógico. 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 selección de los bits PCINT31:24 si el cambio de pines de interrupción 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 interrupción es habilitado en la correspondiente pin E/S. Si PCINT31..24 es limpiado, el cambio de pin de interrupción 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 selección de los bits PCINT23:16 si el cambio de pines de interrupción 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 interrupción es habilitado en la

correspondiente pin E/S. Si PCINT23..16 es limpiado, el cambio de pin de interrupción 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 selección de los bits PCINT15:8 si el cambio de pines de interrupción 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 interrupción es habilitado en la correspondiente pin E/S. Si PCINT15..8 es limpiado, el cambio de pin de interrupción 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 selección de los bits PCINT7:0 si el cambio de pines de interrupción 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 interrupción es habilitado en la correspondiente pin E/S. Si PCINT7..0 es limpiado, el cambio de pin de interrupción en el correspondiente pin de E/S es deshabilitado.

13. Pórticos de E/S Todos los Pórtico del AVR tienen una verdadera modificación de lectura-escritura cuando son usados como pórticos generales digitales. Esto significa que la dirección de un pin de un pórtico puede ser cambiado sin intención cargando la dirección de cualquier otro pin con las instrucciones SBI y CBI. Los mismo se aplica cambiando el valor manejado (si configuramos como salida) o habilitación/desabilitación de las resistencias pull-up (si se configura como entrada)- Cada buffer de salida tendría un manejo similar de las características con la capacidad de ambas fuentes. El pin manejado es habilitado fuertemente al manejar LED displays directamente. Todos los pines del pórtico tienen pull-up que pueden ser seleccionados individualmente con una fuente de voltaje de resistencia invariante. Todos lo pines E/S tienen diodos de protección 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 minúscula “x” representa el número para el pórtico, y la letra minúscula “n” representa el número de bit. Sin embargo, cuando usamos el registro o los bits definidos en el programa, se usaría adecuadamente. Por ejemplo, para el bit 3 en el pórtico PORTB3, este documento lo denota como PORTxn.

Tres de localidades de dirección de memoria de E/S son localizadas por cada pórtico, cada una para el Registro de Datos- PORTx, Registro de Dirección de Datos –DDRx, y los Pines de Entrada al Pórtico-PINx. Los Pines de Entrada al Pórtico 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 lógico en el bit del registro PINx, resultaría una inversión en el correspondiente bit en el Registro de Datos. Adicionalmente, las Pull-up deshabilitadas- bit PUD en MCUCR deshabilita la función de las pull-up para todos los pines en todos los pórticos cuando son uno. La mayoría de los pines de los pórticos son multiplexados con funciones alternativas para los dispositivos. Note que habilitando las funciones alternativas de algunos de los pórticos no afectaría al uso de otros pines en el pórtico como E/S generales digitales. 13.2 Pórticos como E/S Generales Analógicas Los pórticos son E/S bi-direccionales con pull-up internas opcionales. La siguiente figura muestra la descripción de funcionamiento de un pin de E/S, generalmente llamado Pxn:

13.2.1 Configurando el Pin

Cada pin del pórtico esta compuesto de tres registros: DDxn, PORTxn, y PINxn, los bits DDXn son accesos a la dirección 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 dirección de este pin. Si DDxn es escrito a uno lógico Pxn es configurado como un pin de salida. Si DDxn es escrito con cero lógico, Pxn es configurado como un pin de entrada. Si PORTxn es escrito como uno lógico 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 lógico o el pin tubo que ser configurado como pin de salida. Los pines del pórtico son de declarados cuando la condición 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 pórtico es manejado con uno. Si el PORTxn es escrito con cero lógico cuando el pin es configurado como salida, el pin del pórtico es manejado con cero. 13.2.2 Invirtiendo el Pin Escribiendo uno lógico en el PINxn, se invierte el valor de PORTxn, independientemente del valor de DDRxn. Note que la instrucción SBI pude ser usada para invertir un pin de un pórtico 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 habilitación de las pull-up {DDxn, PORTxn} = 0b01) o la salida en bajo ({DDxn, PORTxn} = 0b10) ocurriría. Normalmente, la habilitación de las pull-up es aceptable, como una alta-impedancia no seria la diferencia entre un fuerte manejo en alto y la pull-up. Si este no es el caso, el bit PUD en el registro MCUCR puede ser uno y deshabilitar todas la pull-up en todos los pórticos. 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. Configuración de los Pines del Pórtico DDxn PORTxn PUD (en

MCUCR) E/S Pull-

up Comentario

0 0 X Entrada No Tri-State (Alta-Z) 0 1 0 Entrada SI Pxn corriente en la fuente

si existe pulled low 0 1 1 Entrada No Tri-State (Alta-Z) 1 0 X Salida No Salida en Bajo 1 1 X Salida No Salida en Alto (Fuente)

13.2.4 Lectura del Valor del Pin Independientemente de la configuración del bit de Dirección de Datos DDxn, el pin del pórtico puede ser leído a través del bit del registro PINxn, el bit del registro PINxn y el latch forman una sincronización. Esto es necesario para evitar la metastability si el pin físicamente cambia de valor cerca del límite del reloj interno, pero esto también introduce un retardo. La máxima y mínima propagación retardada son denotados como tpd, max y tpd, min respectivamente. Sincronización cuando es aplicado un valor de lectura externa

Considerando el periodo de reloj comenzando corto y después 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 región sombreada en la señal del “SYNC LATCH”. El valor de la señal 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 transición de la señal en el pin será demorada entre ½ y 1½ periodos de reloj dependiendo en el tiempo de aserción. Cuando leemos el valor de atrás asignado por software al pin, una instrucción NOP será insertada. En este caso, la demora tpd a través de la sincronización 1 periodo de ciclo de reloj.

Sincronización cuando el valor leído al Pin es asignado por software

13.2.5 Habilitación de Entrada Digital y Modo Sleep La señal de entrada digital puede ser sujetada alrededor de la entrada schmitt-trigger. La señal denotada SLEEP, es uno por el Controlador MCU Sleep en modo de Bajo consumo (Power-Down), Modo seguro de energía y Modo de Espera evita el alto consumo de energía si algunas señales de entrada están flotando a la izquierda, o tienen un nivel de señal analógica a Vcc/2-

SLEEP es barrido por habilitación del pin del pórtico como un pin de interrupción. Si la interrupción externa demandada no es habilitada, SLEEP es activada también por estos pines. SLEEP es también barrida por varias otras funciones alternativas. Si un nivel lógico alto (uno) es presentada en un pin de interrupción asincrónica externa configurada como “Interrupción con Flanco de Subida, Flanco de Bajada, o cualquier cambio lógico al pin” mientras la interrupción externa no es habilitada, la correspondiente bandera de interrupción seria uno cuando resumimos desde el Modo Sleep mencionado anteriormente, como al activar en este Modo Sleep produce un cambio lógico 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 través de la mayoría de la entradas digitales son deshabilitadas en profundo Modo Sleep como se describió anteriormente, las entradas flotantes deberían ser evitadas (Reset, Modo Activo, y Modo Idle) El método más simple para asegurar la definición de un nivel lógico 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 energía 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 Pórticos La mayoría de los pines del pórtico tienen funciones alternativas adicionales haciendo E/S generales digitales. El barrido de la señal puede ser no presentada en todos los pórticos, la siguiente figura muestra una descripción general aplicable a todos los pines del pórtico de la familia de los microcontroladores AVR. Funciones Alternativas del Pórtico

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

Nombre de la Señal

Nombre Completo

Descripción

PUOE Habilitación Pull-up overriddes

Si esta señal es uno, la habilitación pull up es controlada por la señal PUOV. Si esta señal es cero la pull up es habilitada cuando {DDxn, PORTxn, PUD} = 0b010.

PUOV Valor Pull-up Si PUOE es uno, la pull-up es habilitada/rehabilitada cuando PUOV es uno/cero, indiferente de la configuración del DDxn, PORTxn y los bits del registro PUD.

DDOE Habilitación Dirección de Datos

Si esta señal es uno, el control de habilitación de salida es controlado por la señal DDOV. Si esta señal es cero, el manejo de la salida es habilitado por el bit del registro DDxn.

DDOV Habilitación del valor de Dirección de Datos

Si DDOE es uno, manejo de la salida es habilitado/deshabilitado cuando DDOV es uno/cero, indiferente de la configuración del bit del registro DDxn.

PVOE Habilitación del valor del pórtico

Si esta señal es uno y el manejo de la salida es habilitado, el valor del pórtico es manejado por la señal PVOE. Si PVOE es cero y el manejo de la salida es habilitado, el valor del pórtico es controlado por el bit del registro DDxn.

PVOV Si PVOE es uno, el valor del pórtico es uno a PVOE, indiferentemente de la configuración del bit del registro PORTxn.

PTOE Si PTOE es uno, el bit del Registro del PORTxn es invertido.

DIEOE Si este bit es uno, la habilitación de Entrada Digital es controlada por la señal DIEOV. Si esta señal es cero, la habilitación de la Entrada Digital es determinada por el estado MCU (Modo Normal, Modo Sleep)

DI Entrada Digital Esta Entrada Digital con funciones alternativas. En la figura, la señal es conectada a las salida de la Schmitt trigger pero antes de la sincronización. A menos que la entrada digital sea usada como fuente de reloj, el modulo con la función alternativa usara estos propios sincronizadores.

AIO Entrada/Salida Analógica

Esto es la Entrada/salida analógica para funciones alternativas. Puede ser usada bidireccionalmente.

13.3.1 Funciones Alternativas Pórtico A Pin del Pórtico Función Alternativa PA7 ADC7 (Entrada canal 7 ADC)

PCINT7 (Cambio de pin Interrupción 7) PA6 ADC6 (Entrada canal 7 ADC)

PCINT6 (Cambio de pin Interrupción 6) PA5 ADC5 (Entrada canal 5 ADC)

PCINT5 (Cambio de pin Interrupción 5) PA4 ADC4 (Entrada canal 4 ADC)

PCINT4 (Cambio de pin Interrupción 4) PA3 ADC3 (Entrada canal 3 ADC)

PCINT3 (Cambio de pin Interrupción 3)

PA2 ADC2 (Entrada canal 2 ADC) PCINT2 (Cambio de pin Interrupción 2)

PA1 ADC1 (Entrada canal 1 ADC) PCINT1 (Cambio de pin Interrupción 1)

PA0 ADC0(Entrada canal 0 ADC) PCINT0 (Cambio de pin Interrupción 0)

13.3.2 Funciones Alternativas Pórtico B Pin del Pórtico Función Alternativa PB7 SCK (SPI Bus de entrada reloj maestro)

PCINT15 (Cambio de pin interrupción 15) PB6 MISO (SPI Bus Maestro Salida Entrada/ esclavo)

PCINT14 (Cambio de pin Interrupción 14) PB5 MOSI (SPI Bus Maestro Salida Entrada/ esclavo)

PCINT13 (Cambio de pin Interrupción 13) PB4 SS (SPI Selección de entrada Esclavo)

OC0B (Timer/Contador0 Salida de comparación B) PCINT12 (Cambio de pin Interrupción 12)

PB3 AIN1(Entrada Comparador Analógico Negativo) OC0A (Timer/Contador0 Salida de comparación A) PCINT11 (Cambio de pin Interrupción 11)

PB2 AIN0 (Entrada Comparador Analógico Positivo) INT2 (Entrada de Interrupción Externa 2) PCINT10 (Cambio de pin Interrupción 10)

PB1 T1 (Timer/Contador 1 Entrada Contador Externo) CLK0 Sistema de división del reloj de salida PCINT9 (Cambio de pin Interrupción 9)

PB0 T0 (Timer/Contador 0 Entrada Contador Externo) XCK0 (USART0 Reloj Externo de Entrada/Salida) PCINT8 (Cambio de pin Interrupción 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 configuración del DDB7. Cuando el SPI0 es habilitado como maestro, la dirección de datos de estos pines es controlada por DDB7. Cuando el pin es forzado para ser una entrada, la pull up puede todavía ser controlada por el bit del PORTB7. PCINT15, Cambio del pin de fuente de interrupción 15: El pin PB7 puede servir como fuente de interrupción 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 configuración de DDB6. Cuando el SPI es habilitado como esclavo, la dirección de datos de estos pines es controlada por DDB6. Cuando el pin es forzado para ser una entrada, la pull up puede todavía ser controlada por el bit del PORTB6. PCINT14, Cambio del pin de fuente de interrupción 14: El pin PB6 puede servir como fuente de interrupción 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 configuración de DDB5. Cuando el SPI es habilitado como maestro, la dirección de datos de estos pines es controlada por DDB5. Cuando el pin es forzado para ser una entrada, la pull up puede todavía ser controlada por el bit del PORTB5. PCINT3, Cambio del pin de fuente de interrupción 13: El pin PB5 puede servir como fuente de interrupción externa. • SS /OC0B/PCINT12 – Portico B, Bit 4 SS : Selección del pórtico de entrada esclavo. Cuando SPI es habilitada como esclavo, este pin es configurado como entrada indiferentemente de la configuración de DDB4. Cuando el SPI es habilitado como maestro, la dirección de datos de estos pines es controlada por DDB4. OC0B, salida de comparación B: El pin PB4 puede servir como una salida (DDB4 uno) al servir esta función. El pin OC0B es también la salida del pin para la PWM Modo Timer. PCINT12, Cambio de pin de fuente de interrupción 12: El PB4 puede servir como una fuente de interrupción externa. • AIN1/OC0A/PCINT11, Bit 3 AIN1, Entrada Negativa del Comparador Analógico. Este pin es conectado directamente a la entrada negativa del comparador analógico. OC0A, Salida del punto de comparación A: El pin PB3 puede servir como una salida externa para el Timer/contador0 comparación a la salida. El pin tiene que ser configurado como salida (DDB3 uno) al sacar esta función. El pin OC0A es también la salida del pin para la PWM funcionando en modo Timer

PCINT11, Cambio de pin de fuente de interrupción 11: El pin PB3 puede servir como una fuente de interrupción externa. • AIN0/INT2/PCINT10, Bit 2 AIN1, Entrada Positiva del Comparador Analógico. Este pin es conectado directamente a la entrada positiva del comparador analógico. INT2, Fuente de interrupción externa 2- El pin PB2 puede servir como una fuente de interrupción externa del MCU. PCINT10, Cambio de pin de fuente de interrupción 10: El pin PB2 puede servir como una fuente de interrupción externa. • T1/CLKO/PCINT9, Bit 1 T1, Fuente contador Timer/contador 1 CLKO, Sistema de división del reloj: El sistema de división del reloj puede ser salida del pin PB1. El sistema de división del reloj seria salida si el fusible CKOUT es programado, implícitamente de la configuración del PORTB1. Esto también seria salida durante el Reset. PCINT10, Cambio de pin de fuente de interrupción 9: El pin PB1 puede servir como una fuente de interrupción externa. • T0/XCK0/PCINT8, Bit 0 T0, Fuente contador Timer/contador0. XCK, USART reloj externo. El registro de dirección 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 síncrono.

PCINT8, Cambio de pin de fuente de interrupción 8: El pin PB0 puede servir como una fuente de interrupción externa. 13.3.3 Funciones Alternativas del Pórtico C Pin del Pórtico Funciones Alternativas PC7 TOSC2 (Timer Oscilador Pin 2)

PCINT23 (Cambio del pin de interrupción 23) PC6 TOSC1 (Timer Oscilador Pin 1)

PCINT22 (Cambio del pin de interrupción 22) PC5 TDI (JTAG Entrada testeo de datos)

PCINT21 (Cambio del pin de interrupción 21) PC4 TDO (JTAG Salida testeo de datos)

PCINT20 (Cambio del pin de interrupción 20) PC3 TMS (JTAG Modo selección de testeo)

PCINT19 (Cambio del pin de interrupción 19) PC2 TCK (JTAG testeo de reloj)

PCINT17 (Cambio del pin de interrupción 18) PC1 SDA (2-alambres Bus de datos serial línea de Entrada/Salida)

PCINT18 (Cambio del pin de interrupción 17) PC0 SCL (2-alambres Bus serial línea de reloj)

PCINT16 (Cambio del pin de interrupción 16) • TOSC2/PCINT23 – Pórtico C, Bit7 TOSC2, Oscilador de Tiempo pin 2. El pin PC7 puede servir como una interrupción externa al MCU. PCINT23, Cambio del pin de de fuente de interrupción 23: El pin PC7 puede servir como una fuente de interrupción externa • TOSC1/PCINT22 – Portico C, Bit 6 TOSC1, Oscilador de Tiempo pin 1. El pin PC6 puede servir como una interrupción externa al MCU. PCINT22, Cambio del pin de de fuente de interrupción 23: El pin PC6 puede servir como una fuente de interrupción externa • TDI/PCINT21 – Portico C, Bit 5 TDI, JTAG Test Data Input. PCINT22, Cambio del pin de de fuente de interrupción 21: El pin PC5 puede servir como una fuente de interrupción externa • TDO/PCINT20 – Port C, Bit 4 TDO, JTAG Test Data Output.

PCINT20, Cambio del pin de de fuente de interrupción 20: El pin PC4 puede servir como una fuente de interrupción externa. • TMS/PCINT19 – Port C, Bit 3 TMS, JTAG Test Mode Select. PCINT19, Cambio del pin de de fuente de interrupción 19: El pin PC3 puede servir como una fuente de interrupción externa. • TCK/PCINT18 – Port C, Bit 2 TCK, JTAG Test Clock. PCINT18, Cambio del pin de de fuente de interrupción 18: El pin PC2 puede servir como una fuente de interrupción externa. • SDA/PCINT17 – Port C, Bit 1 SDA, 2-wire Serial Bus Data Input/Output Line. PCINT17, Cambio del pin de de fuente de interrupción 17: El pin PC1 puede servir como una fuente de interrupción externa. • SCL/PCINT16 – Port C, Bit 0 SCL, 2-wire Serial Busk Clock Line. PCINT23, Cambio del pin de de fuente de interrupción 16: El pin PC0 puede servir como una fuente de interrupción externa. 13.3.4 Funciones Alternativas Pórtico D Pin del Pórtico Función Alternativa PD7 OC2A (Timer/Contador2 Salida de punto de comparación A)

PCINT31 (Cambio de pin de Interrupción 31) PD6 ICP1 (Timer /Contador 1 Entrada de captura Trigger)

OC2B (Timer/Contador 2 Salida al punto de comparación B) PCINT30 (Cambio de pin de Interrupción 30)

PD5 OC1A (Timer/Contador1 Salida de punto de comparación A) PCINT29 (Cambio de pin de Interrupción 29)

PD4 OC1B (Timer/Contador1 Salida de punto de comparación B) XCK1 (USART1 Reloj Externo Entrada/Salida)

PCINT28 (Cambio de pin de interrupción28 ) PD3 INT1 (Entrada de Interrupción Externa 1)

TXD1 (USART1 Pin de transmisión) PCINT27 (Cambio de pin de interrupción27 )

PD2 INT0 (Entrada de Interrupción Externa 1) RXD1 (USART1 Pin de recepción) PCINT26 (Cambio de pin de interrupción26 )

PD1 TXD0 (USART Pin de Transmisión) PCINT25 (Cambio de pin de interrupción25 )

PD0 RXD0 (USART Pin de Recepción) PCINT24 (Cambio de pin de interrupción24 )

• OC2A/PCINT31 – Portico D, Bit 7 OC2A, Salida del punto de comparación A: EL pin PD7 puede servir como una salida externa del Timer/Contador2 salida de comparación A. El pin tiene que ser configurado como salida (DDD7 uno). El pin OC2A es también la salida de la PWM Modo de función de tiempo. PCINT31, cambio de pin de fuente de fuente de interrupción 31: El pin PD7 puede ser una fuente de interrupción 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 comparación B: El pin PD6 puede servir como una interrupción externa del Timer/contador2 salida de comparación B. El pin tiene que ser configurado como (DDD6 uno). El pin OC2B es también el pin de salida para la PWM Modo función Timer. PCINT30, Cambio del pin de de fuente de interrupción 30: El pin PD6 puede servir como una fuente de interrupción externa. • OC1A/PCINT29 – Port D, Bit 5 OC1A, salida de punto de comparación A: El pin PB5 puede servir como una interrupción externa del Timer/contador1 salida de comparación A. El pin tiene que ser configurado como (DDD5 uno). El pin OC1A es también el pin de salida para la PWM Modo función Timer. PCINT29, Cambio del pin de de fuente de interrupción 29: El pin PD5 puede servir como una fuente de interrupción externa. • OC1B/XCK1/PCINT28 – Port D, Bit 4

OC1A, salida de punto de comparación B: El pin PB4 puede servir como una interrupción externa del Timer/contador1 salida de comparación B. El pin tiene que ser configurado como (DDD4 uno). El pin OC1B es también el pin de salida para la PWM Modo función Timer. XCK1, USART1 Reloj externo. El registro de dirección 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 síncrono. PCINT28, Cambio del pin de de fuente de interrupción 28: El pin PD4 puede servir como una fuente de interrupción externa. • INT1/TXD1/PCINT27 – Port D, Bit 3 INT1, Fuente de Interrupción Externa 1. El pin PD3 puede servir como una fuente de interrupción externa del MCU. TXD1, Transmisión de Datos (Pin de Salida de Datos para el USART1). Cuando la transmisión del USART1 es habilitada, este pin es configurado como salida indiferentemente del valor de DDD3. PCINT27, Cambio del pin de de fuente de interrupción 27: El pin PD3 puede servir como una fuente de interrupción externa. • INT0/RXD1/PCINT26 – Port D, Bit 2 INT0, Fuente de Interrupción Externa 0. El pin PD2 puede servir como una fuente de interrupción externa del MCU. RXD1, RXD0, Recepción de Datos (Pin de Entrada de Datos para el USART1). Cuando la transmisión 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 interrupción 26: El pin PD1 puede servir como una fuente de interrupción externa. • TXD0/PCINT25 – Port D, Bit 1 TXD0, Transmisión de Datos (Pin de Salida de Datos para el USART0). Cuando la transmisión del USART0 es habilitada, este pin es configurado como salida indiferentemente del valor de DDD1. PCINT25, Cambio del pin de de fuente de interrupción 25: El pin PD1 puede servir como una fuente de interrupción externa.

• RXD0/PCINT24 – Port D, Bit 0 RXD0, Recepción de Datos (Pin de Entrada de Datos para el USART0). Cuando la transmisión 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 interrupción 24: El pin PD0 puede servir como una fuente de interrupción externa. DESCRIPCIÓN DE REGISTROS 13.3.5 MCUCR – Registro de Control MCU

• Bit 4 – PUD: Desabilitación Pull-up Cuando este bit es escrito con uno, las pull up en los pórticos 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 pórtico A

13.3.7 DDRA – Registro de Dirección de Datos del pórtico A

13.3.8 PINA –Dirección de los pines de salida del pórtico A

13.3.9 PORTB– Registro de Datos del pórtico B

13.3.10 DDRB – Registro de Dirección de Datos del pórtico B

FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

13.3.11 PINB –Dirección de los pines de salida del pórtico B

13.3.12 PORTC – Registro de Datos del pórtico C

13.3.13 DDRC – Registro de Dirección de Datos del pórtico C

13.3.14 PINC –Dirección de los pines de salida del pórtico C

13.3.15 PORTD – Registro de Datos del pórtico D

13.3.16 DDRD – Registro de Dirección de Datos del pórtico D

13.3.17 PIND –Dirección de los pines de salida del pórtico D

14. Timer/Contador0 con PWM 8-bits 14.1 Especificaciones: • Dos unidades de comparación diferenciales • Registros de comparación con doble Buffer de salida • Recarga Automática en los modos Clear Timer y punto de comparación (Compare Match) • Modulación de ancho de Pulso (PWM) • Periodo variable PWM • Generador de Frecuencia • Tres Fuentes de Interrupción Externa (TOV0, OCF0A y OCF0B)

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

14.2 Diagrama de Bloques Timer/Contador 0 8-bits

14.7 Modos de Operación En el modo de operación, la conducta del Timer/Contador y los Pines de comparación a la salida, son definidos por la combinación del modo de Generador de Forma de onda (WGM02:0) y el Modo de Comparación de Salida (COM0x1:0). Los bits en el Modo de Comparación 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 debería ser invertida o no (PWM invertida o no). Para Modo no-PWM los bits COM0x1:0 controlan si la salida debería ser uno, cero, o invertida al punto de comparación. 14.7.1 Modo Normal El modo más simple de operación es el Modo Normal (WGM02:0 = 0). En este modo la dirección del contador siempre se encuentra incrementando, y el contador no se pone en cero. El contador simplemente deja de contar con un valor máximo a 8 bits (TOP=0xFF) y luego inicia desde tope bajo (0x00). En operación normal la Bandera de desbordamiento del Timer/Contador será uno al mismo tiempo que el ciclo de máquina 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 interrupción de desbordamiento del timer que automáticamente limpia la bandera TOV0, la resolución 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 comparación unitaria puede ser usada para generar interrupciones en algún tiempo dado. Usar la salida de comparación 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 Comparación (CTC) En el modo Clear Time y Punto de Comparación o CTC (WGM02:0 = 2), el registro OCR0A es usado para manipular la resolución 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 máximo del contador, por lo tanto también su resolución. Este modo permite un control más grande de la frecuencia de salida en el punto de comparación. Estos también simplifican la operación de contador de eventos externos. El diagrama de tiempos para el CTC se muestra a continuación. El valor de contador (TCNT0) incrementa mientras ocurre una comparación entre TCNT0 y OCR0A, y el contador (TCNT0) es limpiado.

Una interrupción puede ser generada cada vez que el valor del contador llega al máximo valor usando la bandera del OCF0A. Si la interrupción es habilitada, la rutina de interrupción puede ser usada para actualizar el valor máximo. Sin embargo, cambia de valor máximo a la dirección 0x00 cuando el contador está corriendo sin ningún prescalador o con valores bajos de prescalador, el valor debe ser tomado con cuidado ya que el modo CTC no tiene una característica de doble buffer. Si el nuevo valor escrito en OCR0A es más bajo que el valor corriente de TCNT0, el contador perderá el punto de comparación. El contador entonces contará hasta su máximo valor (0xFF) y vuelve a empezar desde la dirección 0x00 antes de que ocurra un punto de comparación. 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 lógico en cada punto de comparación por los bits del Modo Comparador de Salida (COM0A1:0 = 1). El valor del OC0A no debe ser visible en los pines del pórtico a menos que la dirección del dato del pin de salida esté en uno. La forma de Onda cuadrada generada tendrá una frecuencia máxima de fOC2A = fclk_I/O/2 cuando OCR0A

es puesto en la dirección (0x00). La frecuencia de la forma de onda está definida por la siguiente ecuación:

La variable N representa el factor del prescalador (1, 8, 32, 64, 128, 256, ó 1024). En cuanto al modo Normal de operación, la bandera del TOV2 es seteada en el mismo ciclo del reloj del timer cuando el contador cuenta del máximo valor a la dirección 0x00. Modo de Rápida PWM El modo de Rápida PWM (WGM02:0=3 o7) proporciona una opción de generación de forma de onda PWM a alta frecuencia. La rápida PWM difiere de otra opción de PWM por la simple pendiente de operación (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 comparación de salida no invertido, la salida de comparación (OCOx) es limpiada en el punto de comparación entre TCNT0 y OCR0x, y pone en uno a la dirección 0x00. En Modo de Comparación de salida Invertida, la salida es puesta en uno en el punto de comparación y es limpiada en la dirección 0x00, en simple pendiente de operación, la frecuencia de operación en modo rápida PWM puede estar dos veces en alto como en el modo de fase correcta PWM que usa doble pendiente de operación (onda triangular). Esta alta frecuencia hace que el modo Rápida PWM pueda ser usada para reguladores de voltaje, rectificadores, y aplicaciones DAC. Para alta frecuencia se tiene físicamente pequeños tamaños de componentes externos (capacitores), y reduce el costo total del sistema. 14.7.3 Diagrama de Tiempos en Modo Rápida PWM

La bandera de desbordamiento (TOV0) del Timer/Contador es puesta en uno cada vez que la cuenta llega al Tope. Si la interrupción es habilitada, la rutina de interrupción puede ser usada para actualizar el valor de comparación. En modo de Rápida PWM, la comparación unitaria permite la generación de formas de onda PWM en el pin OC0x. Configurando los bits del COM0x1:0 a dos producirán una PWM no invertida y una PWM invertida de salida q puedes ser generada por configuración del COM0x1:0 con tres: Configurando los bits COM0A1:0 con uno permitiendo la inversión del pin OC0A en el punto de comparación si el bit WGM02 es uno. Esta opción no es valida para el pin OC0B. El valor actual OC0x solo será visible en el pin del pórtico si la dirección del dato para el pin del pórtico es uno como salida. La forma de onda PWM es generada por la configuración del registro OC0x al tiempo que el contador del ciclo de máquina es limpiado (cambio desde el Tope hasta 0x00). La frecuencia para la salida de la PWM puede ser calculada por la siguiente ecuación:

256/

N

ff oIclk

OCnxPWM =

La variable N representa el factor prescalador (1,8, 64, 256 o1024). El valor extremo para el OCR0A es igual a uno en 0X00, la salida será un pico estrecho para cada MAX+1 del ciclo de máquina 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 Rápida PWM puede archivado por la configuración del OC0x para invertir esto con un nivel lógico en cada punto de comparación (COM0x1:0 = 1). La generación de la forma de onda tendrá una máxima frecuencia de = fclk_I/O/2 cuando OCR0A va de uno a cero. Esta característica es similar al del OC0A invertido en modo CTC, excepto a la característica del doble buffer de la comparación a la salida el uno es el habilitador del modo de Rápida 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 resolución en la opción para la Generación de Formas de Ona de fase correcta. El Modo de operación de fase correcta está basado en la operación dual-slope(onda triangular). El contador cuenta repetidamente desde el valor mínimo 0x00 hasta el valor máximo y desde el valor máximo al valor mínimo. El valor máximo está definido como 0x00 cuando WGM2:0=1 y cuando WGM2:0=5. En Modo de comparación no invertida, la comparación de salida (OC0x) es limpiada en el punto de comparación entre TCNT0 y OCR0x mientras cuenta ascendentemente y pone uno mientras el punto de comparación cuanta hacia abajo. En el Modo de comparación invertida, la operación es invertida. La operación dual-slope tiene una frecuencia de operación más baja que la máxima en simple operación slope. Sin embargo, debido a los modos de simetría 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 máximo. Cuando el contador alcanza su valor máximo, este contador cambia de dirección. El valor del TCNT0 será igual al valor máximo para un ciclo de máquina del Timer. En la figura siguiente se muestra el diagrama de tiempos para el modo de operación Correcta PWM para ilustrar la operación dual slope (doble pendiente). El diagrama incluye las salidas invertidas y no invertidas del PWM. La línea pequeña horizontal marcada en el TCNT0 representa comparación 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 mínimo (0x00). La bandera de interrupción puede ser usada para generar un tiempo de interrupción cada vez que contador llega al valor mínimo. En Modo de Fase Correcta, la unidad de comparación 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 máximo 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 pórtico a menos que la dirección del dato del pin de salida esté en uno. La forma de Onda cuadrada por el registro OC0x en el punto de comparación entre OCR0x y TCNT0 cuando ocurren incrementos. La frecuencia de la PWM en Modo de Fase Correcta puede ser calculada por la siguiente ecuación:

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 mínimo, la salida estará continuamente en bajo y si es igual al valor máximo la salida permanecerá en alto para Modo no invertido de la PWM. Para la salida de la PWM invertida se tendrá valores de niveles lógicos opuestos. En el inicio del segundo periodo de la figura anterior en OCnx se tiene una transición de alto a bajo siempre y cuando no este en Punto de Comparación. El punto de esta transición es para garantizar simetría cerca del valor mínimo. Existen dos casos para dar una transición sin Punto De Comparación.

1. Cuando el OCR0A cambia su valor máximo como en la figura anterior. Cuando el valor del OCR0A es el máximo, el valor del pin OCn es igual como resultado de la cuenta descendente en el Punto de Comparación. Para asegurar la simetría en la parte inferior el valor del OCn debe corresponder al resultado de la cuenta ascendente en el punto de Comparación.

2. El timer empieza a contar desde un valor mas alto que el uno en el

OCR0A, y por esta razón se pierde el Punto de Comparación y por lo tanto el ONc cambia si hubiese contado ascendentemente.

14.9 DESCRIPCIÓN DE REGISTROS 14.9.1 TCCR0A – Registro de Control A Timer /Contador

• Bits 7:6 – COM0A1:0: Modo de Comparación de Salida A

Estos bits controlan el comportamiento del pin de comparación-salida (OC0A). Si uno o ambos bits del COM0A1:0 están en uno, la salida del OC0A proporciona el normal funcionamiento de los pines de I/O cuando están conectados. Sin embargo, note que el bit del Registro de Dirección de datos (DDR) corresponde al pin OC0A el cual debe estar en uno conforme a la habilitación 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 están en uno. Modo de Comparación de Salida, Modo no PWM COM0A1 COM0A0 Descripción 0 0 Pórtico en operación normal, OC0A desconectado. 0 1 Invierte OC0A en Modo Comparación 1 0 Pone cero OC0A en Modo Comparación 1 1 Pone uno OC0A en Modo Comparación Modo de Comparación de Salida, Modo rápida PWM COM0A1 COM0A0 Descripción 0 0 Modo en operación normal, OC0A desconectado. 0 1 WGM02=0: Modo en operación Normal, OCA

desconectado WGM02=1: Invierte OC0A en Modo Comparación

1 0 Pone cero OC0A en Modo Comparación, Poner en uno OC0A con el Botón.

1 1 Pone uno OC0A en Modo Comparación, Poner cero OC0A con el Botón.

Modo de Comparación de Salida, Modo fase correcta PWM COM0A1 COM0A0 Descripción 0 0 Modo en operación normal, OC0A desconectado. 0 1 WGM02=0:Modo en operación Normal, OCA

desconectado WGM02=1: Invierte OC0A en Modo Comparación

1 0 Pone cero OC0A en Modo Comparación cuando cuenta de subida. Pone en uno OC0A en Modo Comparación cuando cuenta de bajada.

1 1 Pone uno OC0A en Modo Comparación cuando cuenta de subida. Pone en cero OC0A en Modo Comparación cuando cuenta de bajada.

• Bits 5:4 – COM0B1:0: Modo de Comparación de Salida B

Estos bits controlan el comportamiento del pin de comparación-salida (OC0B). Si uno o ambos bits del COM0B1:0 están en uno, la salida del OC0B proporciona el normal funcionamiento de los pines de I/O cuando están conectados. Sin embargo, note que el bit del Registro de Dirección de datos (DDR) corresponde al pin OC0B el cual debe estar en uno conforme a la habilitación 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 están en uno. Modo de Comparación de Salida, Modo no PWM COM0A1 COM0A0 Descripción 0 0 Pórtico en operación normal, OC0B desconectado. 0 1 Invierte OC0B en Modo Comparación 1 0 Pone cero OC0B en Modo Comparación 1 1 Pone uno OC0B en Modo Comparación Modo de Comparación de Salida, Modo rápida PWM COM0A1 COM0A0 Descripción 0 0 Pórtico en operación normal, OC0B desconectado. 0 1 Reservado 1 0 Pone cero OC0B en Modo Comparación, Poner en uno

OC0B con el Botón. 1 1 Pone uno OC0B en Modo Comparación, Poner cero

OC0B con el Botón. Modo de Comparación de Salida, Modo fase correcta PWM COM0A1 COM0A0 Descripción 0 0 Pórtico en operación normal, OC0B desconectado. 0 1 Reservado 1 0 Pone cero OC0B en Modo Comparación cuando cuenta

de subida. Pone en uno OC0B en Modo Comparación cuando cuenta de bajada.

1 1 Pone uno OC0B en Modo Comparación cuando cuenta de subida. Pone en cero OC0B en Modo Comparación cuando cuenta de bajada.

• Bits 3:2-Bits Reservados Estos bits son reservados en el ATmega 164P/324P/644P y siempre serán leídos 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 máximo valor del contador (TOP), y que tipo de forma de onda va hacer usada. Estos modos de operación son soportador por Timer/Contador uno: Modo normal (contador), modo CTC y dos tipos de pulso del modulador de ancho de pulso (PWM) Descripción del Bit Modo Generador de Forma de Onda MODO

WGM2

WGM1

WGM0

Timer/Contador Modo de Operación

TOP Actualización OCRx

Bandera TOV

0 0 0 0 Normal 0xFF Inmediato MAX 1 0 0 1 PWM, fase

Correcta 0xFF TOP Parte

Inferior

2 0 1 0 CTC OCRA

Inmediato MAX

3 0 1 1 Rápida PWM 0xFF Botón MAX 4 1 0 0 Reservado - - - 5 1 0 1 PWM, fase

correcta OCRA

TOP Parte Inferior

6 1 1 0 reservado - - - 7 1 1 1 Rápida, PWM OCR

A Botón TOP

NOTES:

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

14.9.2 TCCR0B – Registro de Control Timer/Contador B

• Bit 7 – FOC0A: Comparación 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 lógico en el bit FOC0A, inmediatamente la comparación es forzada a la generación 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 comparación forzada. Una habilitación del FOC0A no generará ninguna interrupción, 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: Comparación 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 lógico en el bit FOC0B, inmediatamente la comparación es forzada a la generación 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 comparación forzada. La habilitación de FOC0B no generará ninguna interrupción, 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 Generación de Forma de Onda Ver la descripción en el TCCR0A- Timer /Contador Registro de Control A • Bits 2:0 – CS02:0: Selector de Reloj Los tres bits de selección de la fuente de reloj son usados por el Timer/Contador. Descripción de los bits de selección del Reloj CS02 CS01 CS00 Descripción 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 comparación en el siguiente tiempo de reloj. Modificando al contador (TCNT0) mientras el contador está corriendo, introduce un riesgo de perder el modo de comparación entre el TCNT0 y los Registros del OCR0x. 14.9.4 OCR0A – Registro de comparación 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 interrupción de comparación de salida, o generar una forma de onda en la salida del pin OC0A 14.9.5 OCR0B – Registro de comparación 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 interrupción de comparación de salida, o generar una forma de onda en la salida del pin OC0B 14.9.6 TIMSK0 – Registro mascara de Interrupción Timer/Contador

• Bits 7:3 – Res: Bits Reservados Estos bits son reservados y siempre serán leídos como cero. • Bit 2 – OCIE0B: Habilitación de Interrupciones a la salida de la comparación 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 interrupción. La correspondiente interrupción es ejecutada si el modo comparación en el Timer/Contador ocurre, cuando el bit OCF0B esta en uno en el registro de interrupción de Banderas TIFR0 en el Timer/Contador. • Bit 1 – OCIE0A: Habilitación de Interrupciones a la salida de la comparación 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 interrupción. La correspondiente interrupción es ejecutada si el modo comparación en el Timer/Contador0 ocurre, cuando el bit OCF0A esta en uno en el registro de interrupción de Banderas TIFR0 en el Timer/Contador. • Bit 0 – TOIE0: Habilitación 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 interrupción por desbordamiento es habilitada. La correspondiente interrupción es ejecutada si el desbordamiento en el Timer/Contador ocurre, cuando el bit TOV0 en el registro de banderas de interrupción TIFR0 es uno en el Timer/Contador0 14.9.7 TIFR0 – Registro de Interrupción de Banderas Timer/Contador0

• Bits 7:3 – Res: Bits Reservados Estos bits son reservados en el ATmega164P/324P/644P y siempre serán leídas como cero. • Bit 2 – OCF0B: Modo de comparación B de la bandera a la salida Timer/Contador 0 El bit OCF0B es uno cuando el modo de Comparación ocurre entre el Timer/Contador y el dato en OCR0B- Registro de salida de comparación 0 B. OCF0B esta en cero por hardware cuando esta ejecutando la correspondiente interrupción. Alternativamente, OCF0B esta en cero por escribir uno lógico en

la bandera- Cuando el bit-I en el SREG, OCIE0B (Habilitación de interrupciones Timer/Contador Modo de comparación B), y OCF0B esta en uno, el timer/contador en modo de comparación es ejecutado. • Bit 1 – OCF0A: Modo de comparación A de la bandera a la salida Timer/Contador 0 El bit OCF0A es uno cuando el modo de Comparación ocurre entre el Timer/Contador y el dato en OCR0A- Registro de salida de comparación 0 B. OCF0A esta en cero por hardware cuando esta ejecutando la correspondiente interrupción. Alternativamente, OCF0B esta en cero por escribir uno lógico en la bandera- Cuando el bit-I en el SREG, OCIE0A (Habilitación de interrupciones Timer/Contador0 Modo de comparación), y OCF0A esta en uno, el timer/contador0 en modo de comparación 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 interrupción. Alternativamente, TOV0 esta en cero cuando se escribe uno lógico por la bandera. Cuando el bit-I del SREG, TOIE0 (Habilitación de Interrupción por desbordamiento Timer/Contador0), y TOV0 esta en uno, la interrupción por desbordamiento del Timer/Contador0 es ejecutada. La configuración de esta bandera es dependiente del bit WGM02:0 15. Timer/Counter1 con PWM 16-Bits 15.1 Especificaciones • Diseñado para 16 bits PWM • Dos salidas independientes de comparación unitaria • Registros comparadores con doble salida de Buffer • Entrada de captura unitaria • Entrada de captura y cancelación de ruido • Recarga Automática en los modos Clear Timer y Compare Match

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

• Modulador de ancho de Pulso (PWM) • Periodo Variable PWM • Generador de frecuencia • Contador de eventos externos • Cuatro Fuentes independientes de interrupción (TOV1, OCF1A, OCF1B, y ICF1) 15.2 Revisión General Diagrama de bloque Timer/Contador1 16 -bits

15.9 Modos de Operación El modo de operación, la conducta del Timer/Contador y los Pines de comparación a la salida, son definidos por la combinación del modo de Generador de Forma de onda (WGMn3:0) y el Modo de Comparación de Salida (COMnx1:0). Los bits en el Modo de Comparación 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 debería ser invertida o no (PWM invertida o no). Para Modo no-PWM los bits COMnx1:0 controlan si la salida debería ser uno, cero, o invertida al punto de comparación. 15.9.1 Modo Normal El modo más simple de operación es el Modo Normal (WGMn3:0 = 0). En este modo la dirección del contador siempre se encuentra incrementando, y el

contador no se pone en cero. El contador simplemente deja de contar con un valor máximo a 16 bits (MAX=0xFFFF) y luego inicia desde tope bajo (0x0000). En operación normal la Bandera de desbordamiento del Timer/Contador (TOVn) serán uno al mismo tiempo que el ciclo de máquina como el TCNTn llegan a ser cero. La bandera TOVn en este caso se comporta como un décimo séptimo bit, excepto que esté solo en uno. Sin embargo, combinado con la interrupción de desbordamiento del timer que automáticamente limpia la bandera TOVn, la resolución 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 comparación unitaria puede ser usada para generar interrupciones a un tiempo dado. Usar la salida de comparación 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 Comparación o CTC (WGMn3:0 = 4 o 12), el registro OCRnA o ICRn es usado para manipular la resolución 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 máximo del contador, por lo tanto también su resolución. Este modo permite un control más grande de la frecuencia de salida en el punto de comparación. Estos también simplifica la operación de contador de eventos externos. El diagrama de tiempos para el CTC se muestra a continuación. El valor de contador (TCNTn) incrementa mientras ocurre una comparación entre TCNTn y OCRnA, y el contador (TCNTn) es limpiado.

Una interrupción puede ser generada cada vez que el valor del contador llega al máximo valor usando la bandera del OCFnA o ICFn. Si la interrupción es habilitada, la rutina de interrupción puede ser usada para actualizar el valor máximo. Sin embargo, cambia de valor máximo a la dirección 0x0000 cuando el contador está corriendo sin ningún prescalador o con valores bajos de prescalador, el valor debe ser tomado con cuidado ya que el modo de CTC no tiene una característica de doble buffer. Si el nuevo valor escrito en el OCRnA o

ICRn es más bajo que el valor corriente del TCNTn, el contador perderá el punto de comparación. El contador entonces contará hasta su máximo valor (0xFFFF) y vuelve a empezar desde la dirección 0x0000 antes de que ocurra un punto de comparación. 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 lógico en cada punto de comparación por los bits del Modo Comparador de Salida (COMnA1:0 = 1). El valor del OCnA no debe ser visible en los pines del pórtico a menos que la dirección del dato del pin de salida esté en uno (DDR_OCnA=1). La forma de Onda cuadrada generada tendrá una frecuencia máxima de fOCnA = fclk_I/O/2 cuando OCRnA es puesto en la dirección (0x0000). La frecuencia de la forma de onda está definida por la siguiente ecuación:

La variable N representa el factor prescalador (1, 8, 64, 256, o 1024). Como para el modo de operación 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 Rápida PWM El modo de Rápida PWM (WGMn3:0=5, 6, 7, 14 o 15) proporciona una opción de generación de forma de onda PWM a alta frecuencia. La rápida PWM difiere de otra opción de PWM por la simple pendiente de operación (diente de sierra). El contador cuenta desde el 0x0000 hasta el Tope luego inicia desde 0x0000.. En Modo de comparación de salida no invertido, la salida de comparación (OCnx) es limpiada en el punto de comparación entre TCNTn y OCRnx, y pone en uno a la dirección 0x0000. En Modo de Comparación de salida Invertida, la salida es puesta en uno en el punto de comparación y es limpiada en la dirección 0x0000, en simple pendiente de operación, la frecuencia de operación en modo rápida PWM puede estar dos veces en alto como en el modo de fase correcta PWM que usa doble pendiente de operación (onda triangular). Esta alta frecuencia hace que el modo Rápida PWM pueda ser usada para reguladores de voltaje, rectificadores, y aplicaciones DAC. Para alta frecuencia se tiene físicamente pequeños tamaños de componentes externos (capacitores), y reduce el costo total del sistema. La resolución de la PWM por rápida PWM puede ser arreglada a 8, 9 o 10bitsm o definiendo ICRn o OCRnA. La mínima resolución es 2-bit (ICRn o OCRnA en uno a 0x00003), y la máxima resolución es 16-bits (ICRn o OCRnA en uno a 0xFFFF). La resolución e la PWM en bits puede ser calculada usando la siguiente ecuación:

En modo rápida PWM el contador es incrementado mientras es limpiado en el siguiente ciclo de reloj. El diagrama de tiempos mostrado a continuación

muestra el modo de rápida PWM cuando OCRnA o ICRn es usada para definir el Tope. El valor de TCNTn es mostrado en el diagrama de tiempos para ilustración del (single –slope operation). El diagrama incluye la salida de PWM invertida y no invertida. Una pequeña línea horizontal marca el TCNTn y marca la comparación entre OCRnx y TCNTn. La bandera de interrupción OCnx será uno cuando llegue al punto de comparación. Diagrama de tiempos de la Rápida PWM

La bandera de desbordamiento del Timer/Counter (TOVn) es puesta en uno cada vez que el contador llega a su valor mínimo (0x0000). Adicionalmente la bandera OCnA o ICFn es uno al mismo tiempo que el ciclo de reloj como TOVm estén 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 comparación. 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 comparación. Si el valor TOPE es bajo que cualquier registro de comparación, el punto de comparación 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 actualización ICRn difiere desde la actualización OCRnA cuando es usada para la definición 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 comparación en el punto pueda ocurrir. El registro ICRn sin embargo, tiene un doble buffer. Esto corresponde a la localización 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 comparación 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 actualización 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 definición del valor TOPE trabajaría 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 rápida PWM, la comparación unitaria permite la generación de formas de onda PWM en los pines OCnx. Configurando los bits COMnx1:0 a dos produciría una PWM no invertida y una PWM invertida a la salida. El valor actual del OCnx no debe ser visible en los pines del pórtico a menos que la dirección del dato del pin de salida esté en uno. La forma de Onda cuadrada por el registro OCnx en el punto de comparación entre OCRnx y TCNTn cuando ocurren incrementos. La frecuencia de la PWM en Modo de Fase Correcta puede ser calculada por la siguiente ecuación:

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 Rápida 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 resultaría 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 Rápida PWM puede ser archivado por la configuración OCnA a inversión estos niveles lógicos en cada punto de comparación (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 máxima 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 resolución en fase correcta PWM en la opción de generación de forma de onda. El modo correcto de fase PWM esta basada en la operación forma triangular (dualslope). El contador cuenta repetitivamente desde (0x0000) hasta el valor TOPE y desde TOPE hasta 0x0000. En modo de comparación no invertido, la salida de comparación (OCnx) limpia en la comparación entre TCNTn y OCRnx mientras decrementa, y enciende la comparación mientras decrementa. En modo de comparación invertida, la operación es invertida. La operación en (dual-slope) tiene una frecuencia de operación máxima menor que la operación (single slope). Sin embargo, conserva la doble simetría del

modo (dual-slope) PWM, estos tres modos son preferidos para aplicación de control de motores. La resolución PWM para el modo de fase correcta puede ser arreglada a 8-, 9-, o 10-bit, o definida por ICRn o OCRnA. La mínima resolución es 2 bits (ICRn o OCRnA con uno en 0x0003), y la máxima resolución es 16 bits (ICRn o OCRnA en uno en la dirección MAX 0xFFFF). La resolución PWM en bits puede ser calculada usando la siguiente ecuación:

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 dirección 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 línea horizontal pequeña marcada del TVNTn representa el punto de comparación entre OCRnx y TCNTn. La bandera de interrupción OCnx será uno cuando la comparación 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 Interrupción puede ser usada para generar una interrupción 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 comparación. En el valor TOPE es el mas bajo de los registros de comparación, el punto de comparación 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 antisimétrica. La razón para que esto pueda ser encontrado a la vez que es actualizado el registro OCRnx. Desde que la actualización 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 diferirán en longitud. La diferencia en longitud da un resultado antisimétrico a la salida. Esto es recomendable al usar el modo de fase y frecuencia correcta en comparación 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 prácticamente no hay diferencias entre los dos modos de operación. En modo de fase correcta PWM, la comparación permite la generación de formas de onda PWM en los pines OCnx. Configurando los bits COMnx1:0 a dos se produciría una salida invertida de PWM y una no invertida PWM puede ser generada por la configuración de COMnx1:0 a tres. El valor actual de OCnx solo seria visible en el pin del pórtico si la dirección del dato para el pin del pórtico es uno como la salida (DDR_OCnx). La forma de onda PWM generada por configuración (o limpiando) el registro OCnx en el punto de comparación entre OCRnx y TCNTn cuando el contador incrementa, y limpiando (o poniendo en uno) el registro OCnx al punto de comparación 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 ecuación:

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 lógico. 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 Descripción de Registros 15.11.1 TCCR1A – Registro de Control A Timer/Contador1

• Bit 7:6 – COMnA1:0: Modo de Comparación de Salida para Canal A Bit 5:4 – COMnB1:0: Modo de Comparación de Salida para Canal B El COMnA1:0 y COMnB1:0 controlan los pines para la comparación 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 pórtico de E/S. Si uno o ambos bits del COMnB1:0 están escritas con uno, la salida OCnB es conectada al desbordamiento normal en el pin del pórtico de E/S. Sin embargo la dirección 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 función del los bits COMnx1:0 es dependiente de los bits programados del WGMn3:0. Modo de Comparación de Salida, no PWM COMnA1/COMnB1 COMnA0/COMnB0 Descripción

0 0 Modo de operación Normal, OCnA/OCnB desconectado

0 1 Inversión OCnA/OCnB en el Punto de comparación

1 0 Pone en cero OCnA/OCnB en el Punto de comparación (Pone en uno la salida en nivel bajo)

1 1 Pone en uno OCnA/OCnB en el Punto de comparación (Pone en uno la salida en nivel alto)

Modo de Comparación de Salida, Rápida PWM COMnA1/COMnB1 COMnA0/COMnB0 Descripción

0 0 Modo de operación Normal, OCnA/OCnB desconectado

0 1 WGMn3:0=14 o 15: Inversión OC1A en Modo comparación, OC1B desconectado (Modo de operación Normal) Para todas las configuraciones WGM1, Modo de operación Normal, OC1A/OC1B

1 0 Pone en cero OCnA/OCnB en el

Punto de comparación, pone en uno OCnA/OCnB en la dirección baja 0X00 (Modo no Invertido)

1 1 Pone en uno OCnA/OCnB en el Punto de comparación, pone en cero OCnA/OCnB en la dirección baja 0X00 (Modo Invertido)

Modo de Comparación de Salida, Fase correcta, fase, y Correcta frecuencia PWM COMnA1/COMnB1 COMnA0/COMnB0 Descripción

0 0 Modo de operación Normal, OCnA/OCnB desconectado

0 1 WGMn3:0=9 o 11: Inversión OCnA en Modo comparación, OCnB desconectado (Modo de operación Normal) Para todas las configuraciones WGM1, Modo de operación Normal, OC1A/OC1B desconectados.

1 0 Pone en cero OCnA/OCnB en el Punto de comparación cuando cuenta ascendentemente, pone en uno OCnA/OCnB en modo comparación cuando cuanta descendentemente.

1 1 Pone en uno OCnA/OCnB en el Punto de comparación cuando cuenta ascendentemente, pone en cero OCnA/OCnB en Punto de comparación 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 máximo valor del contador (TOP), y que tipo de generación de forma de onda va hacer usada. Los Modos de operación soportador por el Timer/Contador unitario son: Modo Normal (Contador), Modo de Seteo del timer en el punto de comparación (CTC) y tres tipos de modos de modulador de ancho de Pulso (PWM). Descripción de bits en Modo Generador de Forma de Onda

Modo

WGMn3

WGMn2 (CTCn)

WGMn1

(PWMn1)

WGMn0

(PWMn0)

Modo de Operación Timer/Con

tador

TOP Actualización

OCRnX

Encender

bandera

TOVn 0 0 0 0 0 Normal 0xFF

FF Inmediato

0xFF

1 0 0 0 1 PWM, Fase Correcta, 8 bits

0x00FF

TOP 0X00

2 0 0 1 0 PWM, Fase Correcta, 9 bits

0x01FF

TOP 0X00

3 0 0 1 1 PWM, Fase Correcta, 10 bits

0x03FF

TOP 0X00

4 0 1 0 0 CTC OCRnA

Inmediato

0xFF

5 0 1 0 1 Rápida PWM, 8 bits

0x00FF

0X00 TOP

6 0 1 1 0 Rápida PWM, 9 bits

0x01FF

0X00 TOP

7 0 1 1 1 Rápida PWM, 10 bits

0x03FF

0X00 TOP

8 1 0 0 0 PWM, Fase y Frecuencia Correcta

ICRn 0X00 0X00

9 1 0 0 1 PWM, Fase y Frecuencia Correcta

OCRnA

0X00 0X00

10 1 0 1 0 PWM, Fase y Correcta

ICRn TOP 0X00

11 1 0 1 1 PWM, Fase y Correcta

OCRnA

TOP 0x00

12 1 1 0 0 CTC ICRn Inmediato

0xFF

13 1 1 0 1 (Reservado)

- - -

14 1 1 1 0 Rápida PWM

ICRn 0x00 TOP

15 1 1 1 1 Rápida OCR 0x00 TOP

PWM nA TOP: Punto máximo de comparación 15.11.2 TCCR1B –Registro d Control B Timer/Contador1

• Bit 7 – ICNCn: Salida con Captura y Cancelación del Ruido Colocando estos bits en uno se activa el Modo de Salida con captura y cancelación del ruido. Cuando la cancelación 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 cancelación 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 programación del ICESn, el valor del contador es copiado en el registro de Captura a la entrada (ICEn). El evento también pone en uno la bandera de captura a la entrada (ICFn), y esto puede causar la interrupción de captura a la entrada, si esta interrupción es habilitada. Cuando el ICRn es usado como valor TOPE (ver la descripción de los bits WGMn3:0 localizados en los registros TCCRnA y el TCCRnB), el ICOn es desconectado y consecuentemente la función 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 descripción del registro TCCRnA • Bit 2:0 – CSn2:0: Selección del Reloj Tres fuentes de selección de bits para el reloj pueden ser usadas por el Timer/Contador

Descripción de Bits para selección del Reloj CSn2 CSn1 CSn0 Descripción 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 serán 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: Comparación Forzada a la Salida para el Canal A • Bit 6 – FOCnB: Comparación Forzada a la Salida para el Canal B Los bits FOCnA/FOCnB son únicamente activados cuando los bits WGMn3:0 están 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 lógico en el bit FOCnA/FOCnB, e inmediatamente la comparación en el punto es forzada en la generación 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 comparación forzada. La habilitación del FOCnA/FOCnB no genera ninguna interrupción ni limpia el timer en el modo punto de comparación (CTC) usando OCRnA como valor tope. Los bits FOCnA/FOCnB son siempre leídos 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. Asegúrese que en ambos los bytes en alto y bajo sean leído y escritos simultáneamente 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 comparación entre TCNTn y uno de los registros OCRnx. Escribiendo en los registros (TCNTn) el punto de comparación en el siguiente ciclo de máquina para todas las comparaciones unitarias. 15.11.5 OCR1AH y OCR1AL – Registros de Comparación de Salida 1 A

15.11.6 OCR1BH y OCR1BL – Registros de Comparación de Salida 1 B

Los registros de comparación de salida contienen 16-bits cuyo valor es continuamente comparado con el valor del contador (TCNTn). A match puede ser usado para generar una interrupción por comparación a la salida, o generar una forma de onda a la salida en el pin OCnx. Los registros de comparación de salida son de tamaño 16-bits. Para asegurar que en ambos los bytes altos y bajos son escritos simultáneamente 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 leídos simultáneamente 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 Interrupción Timer/Counter1

• Bit 7:6 – Res: Bits Reservados Estos bits no son usados en el ATmega164P/324P/644P, y siempre están escritos como cero. • Bit 5 – ICIE1: Habilitación de Interrupción 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 interrupción de captura a la salida Timer/Contador1 es habilitada. El correspondiente vector de interrupción 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 están escritos como cero. • Bit 2 – OCIE1B: Salida de Comparación B, habilitación del punto de interrupción 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 Comparación B, y el punto de interrupción Timer/Counter1 es habilitado. El correspondiente vector de interrupción es ejecutado cuando la bandera OCF1B, localizada en TIRF1, es uno. • Bit 1 – OCIE1A: Salida de Comparación A, habilitación del punto de interrupción 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 Comparación A, y el punto de interrupción Timer/Counter1 es habilitado. El correspondiente vector de interrupción es ejecutado cuando la bandera OCF1A, localizada en TIRF1, es uno. • Bit 0 – TOIE1: Habilitación de la Interrupción 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 Interrupción por desbordamiento Timer/Counter1 es habilitado. El correspondiente vector de interrupción es ejecutado cuando la bandera TOV1, localizada en TIRF1, es uno. 15.11.9 TIFR1 – Registro de Banderas de Interrupción Timer/Counter1

• Bit 7:6 – Res: Bits Reservados Estos bits no son usados en el ATmega164P/324P/644P, y siempre están 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 automáticamente limpiado cuando le vector de interrupción de captura a la entrada es ejecutado. Alternativamente, ICF1 puede ser limpiado por escritura de uno lógico en la localidad del bit. • Bit 4:3 – Res: Bits Reservados Estos bits no son usados en el ATmega164P/324P/644P, y siempre están escritos como cero. • Bit 2 – OCF1B: Bandera de Comparación a la salida B Timer/Counter1 Esta bandera es uno en el tiempo de ciclo de maquina después del valor del contador (TCNT1) del registro de comparación de salida B (OCR1B). Note que una Comparación forzada a la salida (FOC1B) no habilitara la bandera OCF1A. OCF1A es automáticamente limpiada cuando es ejecutado el vector de interrupción por comparación a la salida B. Alternativamente, OCF1B puede ser limpiada escribiendo uno lógico 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 después del valor del contador (TCNT1) del registro de comparación de salida A (OCR1A). Note que una Comparación forzada a la salida (FOC1A) no habilitara la bandera OCF1A. OCF1A es automáticamente limpiada cuando es ejecutado el vector de interrupción por comparación a la salida A. Alternativamente, OCFA puede ser limpiada escribiendo uno lógico en la localidad de este bit.

• Bit 0 – TOV1: Timer/Counter1, Overflow Flag La programación 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 automáticamente limpiado cuando el vector de Interrupción por desbordamiento del Timer/Contador1 es ejecutado. Alternativamente, TOV1 puede ser limpiado por escritura de uno lógico en la localidad de este bit. 16. TIMER/COUNTER2 CON PWM Y OPERACIÓN ASINCRÓNICA A 8-BITS

• Simple Canal Contador • Recarga Automática en los modos Clear Timer y Punto de Comparación (Compare Match). • Modulador de Ancho de Pulso en Fase Correcta (PWM) • Generador de frecuencias • Prescalador del reloj a 10bits • Fuente de Comparación de Interrupciones y desbordamiento (TOV2, OCF2A y OCF2B) • Permite trabajar con un Cristal externo de 32 KHz independientemente de la señal de reloj interna. VISIÓN GENERAL El Timer/Counter2 es un módulo de propósito general, de un solo canal y es de

8 bits. A Continuación se muestra el diagrama en bloque del Timer/Counter2 de 8 bits.

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

16.7 Modos de Operación El modo de Operación por ejemplo el comportamiento de los pines del Timer/Counter y de la Salida de comparación (Output Compare), están definidos por la combinación del Modo de generación de Formas de Onda (WGM22:0) y el Modo de Comparación de Salida COM2x1:0. Los bits del Modo de Comparación de Salida no afectan la secuencia de conteo, mientas se ejecuta el modo de Generación 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 comparación. 16.7.1 Modo Normal El modo más simple de operación es el Modo Normal (WGM22:0 = 0). En este modo la dirección del contador siempre se encuentra incrementando, y el contador no se pone en cero. El contador simplemente deja de contar con un valor máximo a 8 bits (TOP=0xFF) y luego inicia desde tope bajo (0x00). En operación normal la Bandera de desbordamiento del Timer/Contador serán uno al mismo tiempo que el ciclo de máquina 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 interrupción de desbordamiento del timer que automáticamente limpia la bandera TOV2, la resolución 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 comparación unitaria puede ser usada para generar interrupciones en algún tiempo dado. Usar la salida de comparación 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 Comparación (CTC) En el modo Clear Time y Punto de Comparación o CTC (WGM22:0 = 2), el registro OCR2A es usado para manipular la resolución 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 máximo del contador, por lo tanto también su resolución. Este modo permite un control más grande de la frecuencia de salida en el punto de comparación. Estos también simplifica la operación de contador de eventos externos. El diagrama de tiempos para el CTC se muestra a continuación. El valor de contador (TCNT2) incrementa mientras ocurre una comparación entre TCNT2 y OCR2A, y el contador (TCNT2) es limpiado.

Una interrupción puede ser generada cada vez que el valor del contador llega al máximo valor usando la bandera del OCF2A. Si la interrupción es habilitada, la rutina de interrupción puede ser usada para actualizar el valor máximo. Sin embargo, cambia de valor máximo a la dirección 0x00 cuando el contador está corriendo sin ningún prescalador o con valores bajos de prescalador, el valor debe ser tomado con cuidado ya que el modo de CTC no tiene una característica de doble buffer. Si el nuevo valor escrito en el OCR2A es más bajo que el valor corriente del TCNT2, el contador perderá el punto de comparación. El contador entonces contará hasta su máximo valor (0xFF) y vuelve a empezar desde la dirección 0x00 antes de que ocurra un punto de comparación.

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 lógico en cada punto de comparación por los bits del Modo Comparador de Salida (COM2A1:0 = 1). El valor del OC2A no debe ser visible en los pines del pórtico a menos que la dirección del dato del pin de salida esté en uno. La forma de Onda cuadrada generada tendrá una frecuencia máxima de fOC2A = fclk_I/O/2 cuando OCR2A es puesto en la dirección (0x00). La frecuencia de la forma de onda está definida por la siguiente ecuación:

La variable N representa el factor del prescalador (1, 8, 32, 64, 128, 256, o 1024). En cuanto al modo Normal de operación, la bandera del TOV2 es seteada en el mismo ciclo del reloj del timer cuando el contador cuenta del máximo valor a la dirección 0x00. 16.7.3 Modo de Rápida PWM El modo de Rápida PWM (WGM02:0=3 o7) proporciona una opción de generación de forma de onda PWM a alta frecuencia. La rápida PWM difiere de otra opción de PWM por la simple pendiente de operación (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 comparación de salida no invertido, la salida de comparación (OCOx) es limpiada en el punto de comparación entre TCNT0 y OCR0x, y pone en uno a la dirección 0x00. En Modo de Comparación de salida Invertida, la salida es puesta en uno en el punto de comparación y es limpiada en la dirección 0x00, en simple pendiente de operación, la frecuencia de operación en modo rápida PWM puede estar dos veces en alto como en el modo de fase correcta PWM que usa doble pendiente de operación (onda triangular). Esta alta frecuencia hace que el modo Rápida PWM pueda ser usada para reguladores de voltaje, rectificadores, y aplicaciones DAC. Para alta frecuencia se tiene físicamente pequeños tamaños de componentes externos (capacitores), y reduce el costo total del sistema. Diagrama de Tiempos en Modo Rápida PWM

La bandera de desbordamiento (TOV2) del Timer/Contador es puesta en uno cada vez que la cuenta llega al Tope. Si la interrupción es habilitada, la rutina de interrupción puede ser usada para actualizar el valor de comparación. En modo de Rápida PWM, la comparación unitaria permite la generación de formas de onda PWM en el pin OC2x. Configurando los bits del COM2x1:0 a dos producirán una PWM no invertida y una PWM invertida de salida q puedes ser generada por configuración del COM2x1:0 con tres: Configurando los bits COM2A1:0 con uno permitiendo la inversión del pin OC0A en el punto de comparación si el bit WGM22 es uno. Esta opción no es valida para el pin OC2B. El valor actual OC2x solo será visible en el pin del pórtico si la dirección del dato para el pin del pórtico es uno como salida. La forma de onda PWM es generada por la configuración del registro OC2x al tiempo que el contador del ciclo de máquina es limpiado (cambio desde el Tope hasta 0x00). La frecuencia para la salida de la PWM puede ser calculada por la siguiente ecuación:

256/

N

ff oIclk

OCnxPWM =

La variable N representa el factor prescalador (1,8, 64, 256 o1024). El valor extremo para el OCR0A es igual a uno en 0X00, la salida será un pico estrecho para cada MAX+1 del ciclo de máquina 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 Rápida PWM puede archivado por la configuración del OC2x para invertir esto con un nivel lógico en cada punto de comparación (COM2x1:0 = 1). La generación de la forma de onda tendrá una máxima frecuencia de = fclk_I/O/2 cuando OCR2A va de uno a cero. Esta característica es similar al del OC2A invertido en modo CTC, excepto a la característica del doble buffer de la comparación a la salida el uno es el habilitador del modo de Rápida 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 resolución en la opción para la Generación de Formas de Ona de fase correcta.

El Modo de operación de fase correcta está basado en la operación dual-slope (onda triangular). El contador cuenta repetidamente desde el valor mínimo 0x00 hasta el valor máximo y desde el valor máximo al valor mínimo. El valor máximo está definido como 0x00 cuando WGM22:0=1 y cuando MGM22:0=5. En Modo de comparación no invertida, la comparación de salida (OC2x) es limpiada en el punto de comparación entre TCNT2 y OCR2x mientras cuenta ascendentemente y pone uno mientras el punto de comparación cuanta hacia abajo. En el Modo de comparación invertida, la operación es invertida. La operación dual-slope tiene una frecuencia de operación más baja que la máxima en simple operación slope. Sin embargo, debido a los modos de simetría 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 máximo. Cuando el contador alcanza su valor máximo, este contador cambia de dirección. El valor del TCNT2 será igual al valor máximo para un ciclo de máquina del Timer. En la figura siguiente se muestra el diagrama de tiempos para el modo de operación Correcta PWM para ilustrar la operación dual slope (doble pendiente). El diagrama incluye las salidas invertidas y no invertidas del PWM. La línea pequeña horizontal marcada en el TCNT2 representa comparación 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 mínimo (0x00). La bandera de interrupción puede ser usada para generar un tiempo de interrupción cada vez que contador llega al valor mínimo.

En Modo de Fase Correcta, la unidad de comparación 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 máximo 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 pórtico a menos que la dirección del dato del pin de salida esté en uno. La forma de Onda cuadrada por el registro OC2x en el punto de comparación entre OCR2x y TCNT2 cuando ocurren incrementos. La frecuencia de la PWM en Modo de Fase Correcta puede ser calculada por la siguiente ecuación:

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 mínimo, la salida estará continuamente en bajo y si es igual al valor máximo la salida permanecerá en alto para Modo no invertido de la PWM. Para la salida de la PWM invertida se tendrá valores de niveles lógicos opuestos. En el inicio del segundo periodo de la figura anterior en OCnx se tiene una transición de alto a bajo siempre y cuando no este en Punto de Comparación. El punto de esta transición es para garantizar simetría cerca del valor mínimo. Existen dos casos para dar una transición sin Punto De Comparación. Cuando el OCR2A cambia su valor máximo como en la figura anterior. Cuando el valor del OCR2A es el máximo, el valor del pin OCn es igual como resultado de la cuenta descendente en el Punto de Comparación. Para asegurar la simetría en la parte inferior el valor del OCn debe corresponder al resultado de la cuenta ascendente en el punto de Comparación.

El timer empieza a contar desde un valor mas alto que el uno en el OCR2A, y por esta razón se pierde el Punto de Comparación 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 Comparación de Salida Estos bits controlan el comportamiento del pin (OC2A) de comparación. 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 dirección de datos (DDR) debe estar en uno para habilitar el controlador de salida. Cuando OCA2 es conectado al pin, la función de los bits COM2A1:0 dependen de la configuración de los bits WGM22:0. La siguiente tabla muestra la funcionalidad de los bits COM2A1:0 cuando los bits WGM22:0 están en uno para un modo normal o CTC (no PWM). Tabla: Modo de Comparación de Salida (no PWM) COM2A1 COM2A0 Descripción 0 0 Modo de Operación Normal, OC0A desconectado 0 1 Inversión del OC2 en Punto de Comparación (Compare

Match) 1 0 Pone cero el OC2 en Punto de Comparación (Compare

Match) 1 1 Pone uno el OC2 en Punto de Comparación (Compare

Match) La siguiente tabla muestra la funcionalidad de los bits COM2A1:0 cuando el WGM21:0 están en uno para un Modo Rápido de PWM. Tabla: Modo de Comparación de Salida (Modo de Rápida PWM) COM2A1 COM2A0 Descripción 0 0 Modo de Operación Normal, OC2A desconectado 0 1 WGM22=0: Modo de operación Normal, OC0A

desconectado WGM22=1: Inversión del OC2A en Punto de Comparación (Compare Match).

1 0 Pone cero el OC2A en Punto de Comparación (Compare Match). Pone uno la parte inferior de OC2A.

1 1 Pone uno el OC2A en Punto de Comparación (Compare Match). Pone cero la parte inferior de OC2A

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

COM2A1 COM2A0 Descripción 0 0 Modo de Operación Normal, OC2A desconectado 0 1 WGM22=0: Modo de operación Normal, OC2A

desconectado WGM22=1: Inversión del OC2A en Punto de Comparación 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 Comparación de Salida Estos bits controlan el comportamiento del pin (OC2B) de comparación. 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 dirección de datos (DDR) debe estar en uno para habilitar el controlador de salida. Cuando OC2B es conectado al pin, la función de los bits COM2B1:0 dependen de la configuración de los bits WGM22:0. La siguiente tabla muestra la funcionalidad de los bits COM2B1:0 cunado los bits WGM22:0 están en uno para un modo normal o CTC (no PWM). Tabla: Modo de Comparación de Salida (no PWM) COM2B1 COM2B0 Descripción 0 0 Modo de Operación Normal, OC0B desconectado 0 1 Inversión del OC2B en Punto de Comparación

(Compare Match). 1 0 Pone cero el OC2B en Punto de Comparación (Compare

Match). 1 1 Pone uno el OC2B en Punto de Comparación (Compare

Match). La siguiente tabla muestra la funcionalidad de los bits COM2B1:0 cuando el WGM21:0 están en uno para un Modo Rápido de PWM. Tabla: Modo de Comparación de Salida (Modo de Rápida PWM) COM2B1 COM2B0 Descripción 0 0 Modo de Operación Normal, OC2B desconectado 0 1 WGM22=0: Modo de operación Normal, OC0B

desconectado WGM22=1: Inversión del OC2B en Punto de Comparación (Compare Match).

1 0 Pone cero el OC2B en Punto de Comparación (Compare Match), Pone uno la parte inferior de OC2B.

1 1 Pone uno el OC2B en Punto de Comparación (Compare Match), Pone cero la parte inferior de OC2B.

La siguiente tabla muestra la funcionalidad de los bits COM2B1:0 cuando el WGM22:0 están en uno para un Modo en Fase correcta del PWM. Tabla: Modo de Comparación de Salida (Modo en Fase Correcta PWM) COM2B1 COM2B0 Descripción 0 0 Puerto de Operación Normal, OC2B desconectado 0 1 WGM22=0: Puerto de operación Normal, OC2B

desconectado WGM22=1: Inversión 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 leerán como cero. • Bits 1:0 – WGM21:0: Modo de Generación 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 máximo (TOP) y el tipo de forma de onda generada para ser usada ver en la tabla siguiente: Modo de descripción del bit Generador De Formas de Onda Cuadrada Modo

WGM2

WGM1

WGM0

Modo de Operación Timer/Counter

Valor Máximo (TOP)

Actualización Del OCRx

TOV Encender bandera (1)(2)

0 0 0 0 Normal 0XFF Inmediato MAX 1 0 0 1 Modo Fase

Correcta (PWM)

0XFF TOP

2 0 1 0 CTC OCRA Inmediato MAX 3 0 1 1 Rápida

PWM 0XFF BOTTON MAX

4 1 0 0 Reservado - - - 5 1 0 1 Modo Fase

Correcta (PWM)

OCRA TOP BOTTON

6 1 1 0 Reservado - - - 7 1 1 1 Rápida

PWM OCRA BOTTON TOP

Notas: 1. MAX=0XFF (Valor máximo) 2.BOTTON=0x00 (Valor mínimo) Los Modos de operación que soporta la unidad Timer/Counter son: Modo normal (Counter), Modo Clear Time y Punto de Comparación (Compare Match (CTC)), y dos modos para la Modulación de Ancho de Pulso (PWM). 16.11.2 TCCR2B – Timer/Counter Control Register B

• Bit 7 – FOC2A: Comparación 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 operación está en Modo PWM. Cuando se escribe un uno lógico en el bit FOC2A, una comparación inmediata es forzada en la unidad de Generación de Formas de Onda Cuadradas. La salida del OC2A es cambiada de acuerdo a la configuración 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 comparación forzada. Una habilitación del FOC2A no genera cualquier interrupción, no limpiará el Timer en el modo CTC usando el OCR2A como valor mínimo. El bit FOC2A siempre se lee como cero. • Bit 6 – FOC2B: Comparación Forzada de Salida B El bit FOC2B esta activo solo cuando los bits del WGM están 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 operación está en Modo PWM. Cuando se escribe un uno lógico en el bit FOC2B, una comparación inmediata es forzada en la unidad de Generación de Formas de Onda. La salida del OC2B es cambiada de acuerdo a la configuración 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 comparación forzada. Una habilitación del FOC2B no genera

cualquier interrupción, no limpiará el Timer en el modo CTC usando el OCR2B como valor mínimo. 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 leerán como cero. • Bit 3 – WGM22: Modo de generación de Formas de Onda Ver la descripción en el Registro A Timer/Counter. • Bit 2:0 – CS22:0: Selección Del Reloj Los tres bits para la selección del reloj, seleccionan la fuente del reloj para ser usado por el Timer/Counter. Descripción de los bits selectores para el Reloj CS22 CS21 CS20 Descripción 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 contarán 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 operación de lectura y escritura para la unidad de 8 bits del Timer/Counter. Al escribir en el Registro TCNT2 remueve el punto de comparación al siguiente tiempo del reloj. Al modificar el contador TCNT2 cuando está activado (corriendo), introduce el riesgo de perder la comparación entre los registros TCNT2 y el OCR2x. 16.11.4 OCR2A – Registro de Comparación de Salida A

El registro de comparación de salida A contiene un valor de 8 bits que están continuamente comparándose con el valor del contador (TCNT2). Este modo puede ser usado para generar una Comparación de Interrupción a la salida o para generar formas de onda cuadrada a la salida del pin OC2A. 16.11.5 OCR2B – Registro de Comparación de Salida B

El registro de comparación de salida B contiene un valor de 8 bits que están continuamente comparándose con el valor del contador (TCNT2). Este modo puede ser usado para generar una Comparación de Interrupción a la salida o para generar formas de onda cuadrada a la salida del pin OC2B. 16.11.6 ASSR – Registro de Estado Asincrónico

• Bit 6 – EXCLK: Habilitación de la Entrada de Reloj Cuando el bit EXCLK es puesto a uno y el reloj asincrónico 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 debería ser escrito antes de que una operación asincrónica es seleccionada. Note Que el cristal del Oscilador solo correrá cuando este bit es cero. • Bit 5 – AS2: Timer/Counter2 Asincrónico 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: Actualización de Espera del Timer/Counter2 Cuando se encuentra en operación asincrónica 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 lógico en este bit indica que el TCNT2 está listo para ser actualizado con un nuevo valor. • Bit 3 – OCR2AUB: Registro Comparador de Actualización de Espera de Salida 2 Cuando se encuentra en operación asincrónica 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 lógico en este bit indica que el OCR2A está listo para ser actualizado con un nuevo valor. • Bit 2 – OCR2BUB: Registro Comparador de Actualización de Espera de Salida 2 Cuando se encuentra en operación asincrónica 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 lógico en este bit indica que el OCR2B está listo para ser actualizado con un nuevo valor. • Bit 1 – TCR2AUB: Registro de Control de Actualización de Espera del Timer/Counter2 Cuando se encuentra en operación asincrónica 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 lógico en este bit indica que el TCCR2A está listo para ser actualizado con un nuevo valor. • Bit 0 – TCR2BUB: Registro de Control de Actualización de Espera del Timer/Counter2

Cuando se encuentra en operación asincrónica 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 lógico 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 actualización de espera está en uno, el valor de la actualización puede ser modificado y puede causar que una interrupción 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 leído. Cuando se lee el valor del OCR2A, OCR2B, TCCR2A y TCCR2B el valor en el registro temporal de almacenamiento es leído. 16.11.7 TIMSK2 – Registro Máscara de Interrupción del Timer/Counter2

• Bit 2 – OCIE2B: Habilitación de Interrupciones del Punto de Comparación 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 interrupción del Punto de comparación del Timer/Counter2 es habilitada. La interrupción independiente es ejecutada si ocurre una comparación en el Timer/Counter2 por ejemplo cuando los bits del OCF2B están en uno en el Registro de las Banderas de Interrupción del Timer/Counter2 (TIFR2). • Bit 1 – OCIE2A: Habilitación de Interrupciones del Punto de Comparación 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 interrupción del Punto de comparación del Timer/Counter2 es habilitada. La interrupción independiente es ejecutada si ocurre una comparación en el Timer/Counter2 por ejemplo cuando los bits del OCF2A están en uno en el Registro de las Banderas de Interrupción del Timer/Counter2 (TIFR2). • Bit 0 – TOIE2: Habilitación 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 interrupción para el desbordamiento del Timer/Counter2 es habilitada. La interrupción 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 Interrupción del Timer/Counter2 (TIFR2) 16.11.8 TIFR2 – Registro de Bandera de Interrupción del Timer/Counter2

• Bit 2 – OCF2B: Bandera Comparación de salida 2 B El bit OCF2B es puesto en uno cuando ocurre una comparación 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 interrupción. Alternativamente, OCF2B es limpiado al escribir un uno lógico en la bandera. Cuando el bit I en el SREG, el OCIE2B (Habilitación de Interrupción del Timer/Counter2) y el OCRB2B están en uno, se ejecuta la Interrupción del Timer/Counter2. • Bit 1 – OCF2A: Bandera de Comparación de Salida 2 A El bit OCF2A es puesto en uno cuando ocurre una comparación 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 interrupción. Alternativamente, OCF2A es limpiado al escribir un uno lógico en la bandera. Cuando el bit I en el SREG, el OCIE2A (Habilitación de Interrupción del Timer/Counter2) y el OCRB2A están en uno, se ejecuta la Interrupción 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 interrupción del vector correspondiente. Alternativamente, el TOV2 es limpiado escribiendo un uno lógico en la bandera. Cuando el bit I del SREG, el TOIE2A (Habilitación de Interrupción por desbordamiento del Timer/Counter2) y el TOV2 están 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 Sincronización del Timer/Counter Escribiendo un uno en el TSM, se activa el modo de sincronización 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 configuración. Cuando el bit TSM es puesto a cero, los bits PCRASY y PSRSYNC son limpiados por hardware, y el Timer/Counter comienza a contar simultáneamente. • 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 asincrónico, 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 – Periféricos de Interfase Serial 17.1 Especificaciones: • Transferencia de Datos sincrona tres-cables, bidireccional • Operación Maestro-Esclavo • Transferencia de Datos LSB o MSB • Siete velocidades programables en los bits • Finalización de transmisión por Bandera de Interrupción • Write Collision Flag Protection • Despertar desde Modo Idle • Doble velocidad (CK/2) Modo Maestro SPI Descripción General Los periféricos de Interfase serial (SPI) permiten una transferencia de datos sincrona de alta velocidad en el ATmega164P/324P/644P, periféricos de dispositivos o entre varios dispositivos AVR. USART puede ser usado en modo Maestro SPI. Diagrama de Bloques SPI

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

17.5 Descripción de Registros 17.5.1 SPCR –Registros de Control SPI

• Bit 7 – SPIE: Habilitación de Interrupciones SPI Estos bits causan la interrupción 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: Habilitación SPI Cuando el bit SPE es puesto en uno. El SPI es habilitado. Este bit seria uno para habilitar cualquier operación 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 selección del bit en el modo Maestro SPI cuando se escribe uno, y el modo esclavo SPI esta escrito con cero lógico. 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 continuación:

• 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 configuración 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 continuación:

• Bits 1:0 – SPR1, SPR0: Selección 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 relación entre el SCK y la frecuencia del oscilador del reloj fosc es mostrada en la siguiente tabla: Relación entre SCK en la Frecuencia del Oscilador

SPI2X SPR1 SPR0 Frecuencia SCK 0 0 0 fosc/4 0 0 1 fosc/16 0 1 0 fosc/64

0 1 1 fosc/128 1 0 0 fosc/2 1 0 1 fosc/8 1 1 0 fosc/32 1 1 1 fosc/64

17.5.2 SPSR – Registro de Estado SPI

• Bit 7 – SPIF: Bandera de Interrupción SPI Cuando la transferencia serial es completada, la bandera SPIF es uno. Una interrupción 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 también pone en uno la bandera SPIF. SPIF es limpiada por hardware cuando esta ejecutando el correspondiente vector de interrupción. 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 Colisión 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 serán leídos como cero. • Bit 0 – SPI2X: Bit para Doble velocidad SPI Cuando este bit es escrito con uno lógico la velocidad del SPI (Frecuencia SCK) será duplicada cuando el SPI este en Modo Maestro. Esto significa que el periodo mínimo 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 también usada para memoria programable y carga o descarga de la EEPROM. 17.5.3 SPDR – Registro de Datos SPI

El Registro de Datos SPI leído/escrito es usado para transferencia de datos entre el Registro Archivo y el Registro de Cambio del SPI. Escribiendo en el registro inicializa la transmisión de datos. Leyendo el registro causa cambios al registro al recibir la lectura. 18. USART 18.1 Descripción • Operación simultánea bidireccional (Independiente Recepción Serial y Registros de Transmisión. • Operación Asíncrona o Síncrona • Reloj Maestro o Esclavo Operación Síncrona. • Generador Proporcional Alta Resolución 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 Comunicación Multi-Proceso

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

• Modo de Doble Velocidad Asíncrona de Comunicación 18.2 USART1 y USART0 El ATmega164P/324P/644P tiene dos USART’s, USART0 y USART1. La funcionalidad para todos los USART’s es descrito a continuación, la mayoría de registros y bits de referencia en esta sección son escritas en forma general. La letra minúscula “n” reemplaza el número USART. Diagrama de Bloques USART

18.4 Generación del Reloj La Generación lógica de reloj genera la base de reloj para la Transmisión y Recepción. El USARTn soporta cuatro modos de operación de reloj: Asincrónico Normal, Doble velocidad Asincrónica, Maestro Sincrónico y Modo esclavo Sincrónico. El bit UMSELn en USART Control de Registro de Estado C (UCSRnC) selecciona entre operación Asincrónica y Sincrónica. Doble velocidad (solo modo asíncrono) es controlada por el U2Xn encontrado en el registro UCSRnA. Cuando se usa modo síncrono (UMSELn = 1), el Registro de Dirección 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 Síncrono. Diagrama de Bloques, Generación Lógica de Reloj

Descripción de la Señal: txclk Reloj de Transmisión (Señal Interna). rxclk Reloj Receptor (Señal Interna). xcki Entrada desde el pin XCK (Señal Interna). Usada para operación Esclavo sincrónica. xcko Salida desde el pin XCK (Señal Interna). Usada para operación Maestro sincrónica. fOSC Frecuencia del pin XTAL (Sistema de Reloj). 18.4.1 Generación del Reloj Interno- Generador de Velocidad de transmisión en Baudios Generación Interna de Reloj es usada por los modos de operación Maestro síncrono. La USART Registro de Velocidad de Baudios (UBRRn) y el contador-Bajo conectados a esta función 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 transmisión en Baudios a la salida (= fosc/(UBRRn+1)). La transmisión divide el generador de velocidad de transmisión en Baudios a la salida por 2, 8 o 16 dependiendo del modo. El generador de velocidad de transmisión en Baudios a la salida es usada directamente por el reloj receptor y las unidades de recuperación de datos. Sin embargo, la recuperación unitaria usa la (state machine) que usa 2, 8 o 16 dependiendo del modo uno por la condición del los bits UMSELn, U2Xn yDDR_XCKn. Ecuaciones para calcular la velocidad en baudios

18.4.2 Doble Velocidad de Operación (U2Xn) La proporción transferida puede ser duplicada por la configuración del bit U2Xn en UCSRnA. Configurando solo este bit tiene efecto para la operación asíncrona. Poner este bit a cero cuando se usa una operación síncrona. Configurando este bit reduciría la división de la proporción de baudios dividida para 16 a 8, efectivamente doblando la proporción de transferencia para comunicación asíncrona. Note sin embargo que al Receptar en este caso solo se usa la mitad de números de ejemplo (Reducido desde 16 a 8 ) para datos de ejemplo y tiempo de recuperación, y además a mas exactas proporciones en baudios y sistemas de reloj son requeridas cuando este modo es usado. Para la Transmisión no hay downsides. 18.4.3 Reloj externo El reloj externo es usado para el modo de operación Esclavo síncrono. La entrada de Reloj Externo desde el pin CCKn es mostrada por la sincronización del registro para minimizar la oportunidad de una mayor estabilidad. La salida desde el la sincronización del registro es minimizada al perder la oportunidad. La salida desde el registro sincronizado pasa luego a través del detector de flanco antes que pueda ser usada para la Transmisión y Recepción. Este proceso introduce dos periodos de reloj del CPU demorados y por consiguiente la máxima frecuencia de reloj externo XCKn es limitada por la siguiente ecuación:

Note que la fosc depende de la estabilidad de la fuente del sistema de reloj. Esto es recomendado al agregar más flancos para evitar posibles pérdidas de datos en las variaciones de frecuencia. 18.4.4 Operación de Reloj Síncrona Cuando el modo síncrono 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 básico es que la entrada de datos (en RxDn) es muestreada a la oposición 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 serán 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 característica de bits de datos con sincronización 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 más significante. Si es habilitado, la paridad del bit es insertada después 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 línea de comunicación 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 Recepción y transmisión usa la misma configuración. Note que cambiando la configuración de cualquiera de estos bits puede dañar la comunicación tanto de recepción como de Transmisión. El tamaño de los caracteres de los bits de USART (UCSZn2:0) seleccionan el número 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 selección entre uno o dos bits de parada es hecha por el bit de paro de la USART seleccionando el bit (USBSn). La Recepción 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 Cálculo 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 relación 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 carácter 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 Inicialización del USART La USART tiene que ser inicializada antes de que cualquier comunicación pueda tener lugar. El proceso de inicialización normalmente consiste de

configuraciones del tiempo en baudios, el formato de configuración de la trama y habilitación de la Transmisición o la Recepción dependende del uso. Para manejar la operación de interrupción USART, la Bandera de Interrupciones Globales debería ser puesta en cero y las interrupciones USART deberían ser deshabilitadas. Antes de hacer la re inicialización con el tiempo en baudios cambiado o el formato de trama, seria seguro que no hay transmisión durante el periodo en el que los registros son cambiados. La Bandera TXCn puede ser usada para chequear que transmisión ha sido completada en todas las transferencias, y la bandera RXc puedan ser usadas para chequear que no hay lectura de datos en la recepción del buffer. Note que la bandera TXCn puede ser puesta en cero antes de cada transmisión (antes que UDRN es escrito) si esto es usado para este propósito. La siguiente USART inicializa con un código simple mostrado en asembler y en C que son equivalentes en funcionamiento. Los ejemplos asumen una operación asíncrona sin la habilitación de interrupciones y arreglando el formato de trama. La velocidad en baudios es dada como parámetro de función. Para el código asembler, el parámetro de velocidad en baudios es asumido para ser guardado en los registros r17:r16.

18.7 Transmisión de Datos – La transmisión USART La transmisión del USART es habilitada por la configuración de habilitación del bit de transmisión (TXEN) usada en el registro UCSRnB. Cuando la transmisión es habilitada, la normal operación del pórtico del pin TxDn es

sobrepuesto por el USART y dada la función como la Transmisión de salida serial. La velocidad en Baudios, modo de operación y formato de trama seria instalada una vez ante de cualquier transmisión. Si la operación síncrona es usada, el reloj en el pin XCKn seria sobrepuesto y usado como reloj de transmisión. 18.7.1 Enviando Tramas con 5 hasta 10 Bits de datos La transmisión de datos es inicializada por la carga del buffer de transmisión con el dato a ser transferido. La CPU puede cargar el buffer de transmisión por la escritura en la localidad de E/S UDRn. El buffer de datos en la transmisión seria movido al Register cuando es leído y enviado una nueva trama. El registro movido es cargado con el nuevo dato si este no envía la transmisión o inmediatamente después del último bit de parada de la trama previa es transmitida. Cuando el registro movido, es cargado con un nuevo dato, esto transferiría una trama completa a la velocidad dada por el registro de baudios, bit U2Xn o XCKn dependiendo del modo de operación. Los siguientes código 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 mayoría bits significativos escritos en el UDRn son ignorados. El USART tiene que ser inicializada antes que la función pueda ser usada. Para el código asembler, el dato a ser enviado se asume que ha sido guardado en el registro R16.

La función simplemente espera la transmisión 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 interrupción es utilizada, la rutina de interrupción 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 carácter es escrito a UDRn. El siguiente código muestra la función de transmisión a 9 bits. Para el código 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 dirección de la trama usando un multi procesador en modo de comunicación o por otro protocolo del manual como para el ejemplo de sincronización. 18.7.3 Banderas de Transmisión e Interrupciones.

La transmisión USART tiene dos banderas que indican estos estados: USART Registro de Datos vacío (UDREn) y Transmisión completa (TXCn) Ambas banderas pueden ser usadas para la generación de interrupciones. La bandera del Registro de Datos Vacío (UDREn) indica si la transmisión del buffer ha leído o recibido un nuevo dato. Este bit es uno cuando la transmisión del dato es vacía, y cero cuando la transmisión del buffer contiene datos a ser transmitidos que todavía 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 Interrupción de Datos Vacío es habilitado en el bit (UDRIEn) en UCSRnB con uno, el USART Registro de Interrupción de Datos Vacío 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 interrupción es manejada la transmisión es usada, la rutina del registro de datos de Interrupción vacío seria escrito con un nuevo dato a UDRn solamente al limpiar UDREn o deshabilitar el registro de datos de interrupción vacía, por consiguiente la nueva interrupción ocurriría una vez que la rutina de interrupción ha terminado. El bit de la bandera de transmisión completa (TXCn) es uno cuando la trama entera en la transmisión del registro Shift ha sido movida fuera y no hay un nuevo dato actualmente presente en el buffer de transmisión. El bit de la bandera TXCn es automáticamente limpiada cuando se completa la transmisión y la interrupción es ejecutada, o puede ser limpiado escribiendo uno en este bit. La bandera TXCn es usada en la interfase de comunicación half-duplex (RS-485 estándar), donde en una aplicación entrando en el modo de recepción y libre el bus de comunicación inmediatamente después de completar la transmisión. Cuando la transmisión es completada la interrupción es usada, la rutina de interrupción del manual no debe tener cero en la bandera TXCn, esto es hecho automáticamente cuando la interrupción 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 lógico de transmisión 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 Transmisión La desabilitación de la transmisión (configurando el TXEN cero) no llegará hacer efectivo hasta que las transmisiones pendientes sean completadas, cuando la transmisión del Registro de Desplazamiento y la transmisión del Buffer Register no contenga los datos ha ser transmitidos. Cuando deshabilitamos, la transmisión no es excedida en el pin TxDn. 18.8 Recepción de Datos – El receptor USART

El receptor USART es habilitado por la escritura en e el bit de habilitación de recepción (RXENn) y el registro UCSRnB a uno. Cuando la Recepción es habilitada, la normal operación del pin del RxDn es sobrepasada por el USART y dada la función como entrada serial de Recepción. La velocidad en baudios, modo de operación y formato de trama seria instalada una vez antes de cualquier recepción serial que pueda haber sido hecha. Si la operación 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 recepción 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 recepción 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 recepción. Cuando el primer bit de parada es recibido, una trama seria completa es presentada en la Recepción del Registro de Desplazamiento, el contenido de estos registros del Registro de Desplazamiento será movida en el buffer de recepción. El buffer de recepción puede luego ser leído por la lectura de la localidad del UDRn E/S. El siguiente ejemplo de código muestra una simple USART que recibe una función basada en la recepción 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 función sea usada.

La función simplemente espera por datos a ser presentados en el buffer de recepción 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 leído 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 recepción 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 código muestra una simple recepción USART ambos de nueve bits y los bits de estado.

El ejemplo de función de recepción lee todos lo registros e E/S dentro del Archivo del registro antes que cualquier calculo sea hecho. Esto dado en una óptima utilización del buffer de recepción desde la localización leída será libre de aceptar el nuevo dato tan pronto sea posible.

18.8.3 Bandera de Recepción Completa e Interrupción La recepción del USART tiene una bandera que indica el estado de Recepción. La Bandera de Recepción Completa (RXCn) indica si hay una lectura de datos presente en el buffer de transmisión. Esta bandera es uno cuando el dato leído existe en la recepción del buffer, y cero cuando la recepción del buffer seria vaciado y consecuentemente el bit RXCn llegaría hacer cero. Cuando la recepción completa habilita la interrupción (RXCIEn) en UCSRnB es uno, el USART recepta la interrupción completa sería ejecutada al tiempo que la bandera RXCn es uno (Las interrupciones globales son habilitadas). Cuando el manejo de la interrupción de datos habilitada es usado, la rutina de completa recepción leería el dato receptado desde UDRn a medida que pone en cero la bandera RXCn, por otra parte una nueva interrupción ocurriría una vez que la rutina de interrupción termina. 18.8.4 Recepción de Banderas de Error La recepción 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. Comúnmente para la bandera de error es que hay localidades en el buffer de recepción junto con la trama para cualquiera de ellos indica el estado de error. Debido al buffer de la bandera de error, el UCSRnA seria leído antes que el buffer de recepción (UDRn), desde la lectura de las localidades de E/S UDRn cambia la localización 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 recepción. La bandera FEn es cero cuando el bit de parada fue incorrecto (cero). Esta bandera puede ser usada para detectar condiciones de falta de sincronización, detectando condiciones de ruptura y protocolos del manual. La Bandera FEn no es afectada por la configuración del bit USBSn en UCSRnC desde la recepción 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 condición de buffer lleno. El desbordamiento de datos ocurre cuando la recepción del buffer esta llena (dos caracteres), esto es un nuevo carácter esperando la recepción del Registro de Desplazamiento, y un nuevo bit de comienzo es detectado. Si la Bandera DORn es puesta fue uno o mas tramas seriales pérdidas entre la ultima trama leída desde UDRn, y la siguiente trama leída 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 recepción fue exitosamente movida des de el Registro de Desplazamiento en el buffer de recepción. La bandera de Error de Paridad indica que la siguiente trama en el buffer de recepción tiene un error de paridad cuando recepta. Si el chequeo de paridad no es habilitado el bit UPEn siempre será leído 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 comprobación es almacenado en el buffer de recepción ambos con la recepción de datos y bits de parada. La bandera de error de paridad puede luego ser leída por software para comprobar si la trama tiene un error de paridad. El bit UPEn es puesto si el siguiente caracter que puede ser leído desde el buffer de recepción tendiendo un error de paridad cuando recepta y el comprobador de paridad fue habilitado en el punto (UPMn1 = 1). Este bit es válido hasta que el buffer de recepción (UDRn) es leído 18.8.6 Deshabilitando el Receptor En contraste al transmisor, la desabilitación del Receptor seria inmediata. . Los Datos desde la recepción serian perdidos. Cuando de deshabilita (el RXENn es puesto a cero) la recepción en un desbordamiento no tan largo la función normal del pórtico del pin RxDn. El buffer de Recepción FIFO seria vaciado la recepción es deshabilitada. Permaneciendo el Dato en el buffer sería perdido. 18.8.7 Vaciando el Buffer Receptor El buffer de recepción FIFO seria vaciado cuando la Recepción es deshabilitada, el buffer seria vaciado de este contenido. El dato no leído sería perdido. Si el buffer tiene que ser vaciado durante la operación normal. Debido a un instante o condición de error, leer la localidad de E/S UDRn hasta que la Bandera RXCn sea limpiada. El siguiente ejemplo de código muestra el vaciado del buffer de recepción.

18.9 Recepción de Datos Asincrónica El USART incluye un reloj de recuperación y una unidad recuperadora de datos para el manual recepción de datos asincrónico. El reloj de recuperación lógico es usado para sincronizar la velocidad interna en baudios del reloj en la trama asincrónica entrante al pin RxDn. La recuperación de datos lógica muestra y un filtro pasa bajos cada vez que entra un bit, mejorando la inmunidad al ruido por el receptor. En la recepción asíncrona el rango de operación depende de la exactitud del reloj interno de la velocidad de transmisión en baudios, la proporción de los flancos entrantes, y el flanco se clasifican según el tamaño del número de bits. 18.9.1 Recuperación del Reloj Asíncrona La recuperación lógica del reloj sincroniza el reloj interno en el interior de la trama serial. La velocidad muestra 16 veces la velocidad de transmisión en baudios para el modo Normal, y ocho veces la velocidad de transmisión en baudios para el modo de doble Velocidad. Las flechas horizontales ilustran la variación de la sincronización debido al proceso mostrado. Note que la variación de tiempo es más larga cuando se utiliza el modo de doble velocidad (U2Xn = 1) de operación.

Cuando la recuperación lógica del reloj detecta un alto (idle) o un bajo (Start) la transición en la línea RxDn, el bit de comienzo detecta que una secuencia es inicializada. La recuperación lógica 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 números dentro del cuadro de la figura), para decidir si un bit de de comienzo es receptado. Si dos o más de estas tres muestras tienen un alto nivel lógico (la mayoría gana), el bit de inicio es válido como pico de ruido y la búsqueda para el inicio de la recepción para siguiente transición en alto o en bajo. Sin embargo, el bit de inicio válido es detectado, la recuperación lógica de reloj es sincronizada y la recuperación del dato puede comenzar. El proceso de sincronización es repetido para cada bit de inicio. 18.9.2 Recuperación de datos Asincrónica Cuando el reloj de recepción es sincronizado al bit de inicio, la recuperación del dato puede comenzar. La unidad recuperadora de datos usa estados de máquina 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 número que es igual al estado de la unidad de recuperación.

La decisión del nivel lógico de la recepción de bits es tomada haciendo una votación mayoritaria de los valores lógicos de las tres muestras en el centro de bits recibidos. Las muestras centrales son enfatizadas en la figura teniendo el número de muestras en el cuadro. La mayoría de proceso votados es hecha como sigue: Si dos o todos lo ejemplos tienen niveles bajos, el bit de recepción es registrado con 0 lógico. Esto la mayoría de procesos como filtros pasa bajos completa la trama y es receptada. Incluyendo el primer bit de parada. Note que la recepción 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 lógico de 0, la bandera de error de trama (FEn) seria puesta. La nueva transición en alto o bajo indican el bit de inicio de la nueva trama puede llegar a la derecha después del último de los bits usados por la mayoría. Para el modo Normal de velocidad, el primer nivel bajo mostrado puede ser el punto de comparación 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 detección temprana del bit de inicio influencia el rango de operación de la Recepción. 18.9.3 Rango de Operación Asincrónica El rango de operación asincrónica de la Recepción es dependiente en la desigualdad entre la velocidad del bit de recepción y la generación de la velocidad interna en baudios. Si la transmisión esta enviando tramas a velocidades rápidas o lentas, o la generación interna de velocidad en baudios del receptor no tiene una base de frecuencia similar, la recepción no estaría de acuerdo a la trama de sincronización 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 recepción interna.

D Suma de tamaño de caracteres y tamaño de paridad (D = 5 a 10 bit) S Muestras por bit. S = 16 para modo de operación 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 número 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 más lenta que puede ser aceptada en relación a la velocidad de baudios receptada. Rfast es el radio de la entrada de datos más rápida que puede ser aceptada en relación 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 recomendación de la máxima recepción del error de velocidad en baudios fue hecha debajo de la asunción que la recepción y la transmisión igualmente divide el error máximo total. Hay dos fuentes de posibilidad para la recepción del error de velocidad en baudios. El sistema de reloj de recepción (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 más que el 2% dependiendo de la tolerancia del resonador. La segunda fuente para el error es más controlable. La velocidad generada en baudios no puede siempre hacerse con una división 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 Comunicación Multi-Proceso Configurando el Modo de Comunicación de Multi-proceso el bit (MPCMn) en UCSRnA habilita la función filtro de trama de entrada receptada por el USART. La trama que hace no contiene información de direcciones que serían ignoradas y no puestas dentro del buffer de recepción. Esto efectivamente reduce el número de tramas de entrada que están en el manual por el CPU, en un sistema con múltiples MCUs que comunican vía el mismo bus serial. La transmisión no es afectada por la configuración por la configuración MPCMn, pero tiene que ser usada diferentemente, pero tiene que ser usada diferentemente cuando esto es una parte del sistema utilizando el modo de comunicación Multi-proceso. Si el receptor es preparado para la recepción de tramas que contiene de 5 a8 bits de datos, luego el primer bit de parada indica si la trama contiene información 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 dirección. Cuando bit de tipo de trama es cero la trama es de datos. El modo de comunicación multi-proceso habilita varios esclavos MCUs a receptar datos desde el MCU maestro. Esto es hecho primero decodificando una trama de dirección 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 dirección es recibida. 18.11 Descripción de registros 18.11.1 UDRn – Registro de n Datos USART E/S

El USART Registro de transmisión de buffer de datos y USART Registro de recepción de buffer de datos proporcionan las mismas direcciones de E/S referidas como USART Registro de Datos o UDRn. El registro de transmisión de buffer de datos (TXB) seria el destino para escritura de datos situados en el registro UDRn. Leyendo la localidad del registro UDRn retornaría el contenido del registro de recepción de buffer de datos (RXB). Para 5, 6, 8 7 bits de caracteres los bits superiores no usados serian ignorados por la Transmisión y puestos en cero por la Recepción. El buffer de transmisión puede solo ser leído 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 transmisión, y la Transmisión es habilitada, se cargaría el dato dentro del buffer de transmisión, y la transmisión es habilitada, la transmisión cargaría el dato en la transmisión del Shift Register cuando esta vacío. Luego el dato será transmitido serialmente a través del pin TXDn. El buffer de recepción consiste de dos niveles FIFO. El FIFO. Cambiara su estado sin importar si el buffer de recepción 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 también cambie el estado del FIFO. 18.11.2 UCSRnA – Registro de Control y Estado A del USART

• Bit 7 – RXCn: Recepción Completa del USART Este bit de bandera es habilitado cuando no hay lectura de datos en el buffer de recepción y es limpiado cuando el buffer de recepción esta vació (por ejemplo, no contiene cualquier dato que no ha sido leído). Si la recepción es deshabilitada, el buffer de recepción será vaciado y consecuentente el bit RXCn llegará a ser cero. La bandera RXCn pude ser usada para generar una interrupción completa de interrupción (ver la descripción del bit RXCIEn) • Bit 6 – TXCn: Transmisión Completa del USART Este bit de bandera es habilitado cuando los bits de la trama en el registro de desplazamiento de transmisión han sido desplazados y no hay concurrencia de nuevos datos en el buffer transmisor (UDRn). El bit de la bandera TXCn es automáticamente limpiado cuando una interrupción en una transmisión 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 interrupción en una transmisión 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 además listo para ser escrito. La bandera UDREn puede generar una interrupción de vacío en el registro de datos. El UDREn es habilitado después de indicar que la transmisión esta lista. • Bit 4 – FEn: Error en la Trama Este bit es habilitado si el caracter siguiente en el buffer de recepción tiene un error en la trama cuando esta receptando. Por ejemplo, cuando el bit de parada del carácter siguiente en el buffer de recepción es cero. Este bit es válido hasta que el buffer de recepción es leído. El bit FEn es cero cuando el bit de parada del dato de recepción 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 condición de desbordamiento es detectada. Un desbordamiento de datos ocurre cuando el buffer de recepción esta lleno (dos caracteres), esto es un nuevo carácter esperando en el registro de despeamiento en la recepción, y un nuevo bit de inicio es detectado. Este bit es valido hasta que el buffer de recepción es leído. 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 recepción 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 recepción es leído. Siempre habilitar este bit a cero cuando se escribe en UCSRnA

• Bit 1 – U2Xn: Doble Velocidad de Transmisión del USART Este bit solo tiene efecto para una operación asincrónica. Escribir este bit a cero cuando usa operación asincrónica. Escribiendo uno en este bit la velocidad en baudios es dividida desde 16 a 8 efectivamente duplicando la velocidad de transferencia para comunicación asincrónica. • Bit 0 – MPCMn: Modo de comunicación Multi-proceso Este bit habilita el bit de modo de comunicación multi-proceso. Cuando el bit MPCMn es escrito a uno, todas las tramas son recibidas en el USART que no contiene información de la dirección a ser ignorada. La transmisión no es afectada por la configuración del MPCMn. 18.11.3 UCSRnB – Registro de Control y Estado n B del USART

• Bit 7 – RXCIEn: Habilitación de la Interrupción de la Recepción completa Escribiendo este bit a uno habilita la interrupción en la bandera RXCn. La interrupción cuando se completa la recepción sería 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 interrupción en la bandera TXCn. La interrupción en el USART al completar la transmisión 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 Habilitación de la n Interrupción Escribiendo este bit a uno habilita la interrupción en la bandera UDREn. El vaciado de del registro de Datos a la interrupción sería 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: Habilitación de la Recepción n Escribiendo los bits a uno se habilita la recepción del USART. La recepción afectaría la operación normal del pórtico para el pin RxDn cuando es habilitada. Deshabilitando la recepción vaciaría el buffer de recepción invalidando las banderas FEn, DORn y UPEn.

• Bit 3 – TXENn: Habilitación de la Transmisión n Escribiendo este bit a uno se habilita la transmisión del USART. El transmisor afectaría la operación normal del pin TxDn cuando es habilitado. La desabilitación de la Transmisión (escribiendo TXENn a cero) no llegaría hacer efectiva hasta continuar y las transmisiones pendientes son completadas, por ejemplo, cuando la transmisión del registro de desplazamiento y el registro de transmisión del buffer no contienen datos a ser transmitidos. Cuando es deshabilitada, la Transmisión no afectaría el pórtico TXDn. • Bit 2 – UCSZn2: Tamaño de n Caracteres Los bits UCSZn2 son combinados con los bits UCSZn1:0 en el UCSRnC habilitando el número de bits de datos en la trama usando Transmision y Recepción. • 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. Sería leído 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. Debería 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 Selección del modo USART Este bit d selección del modo de operación del USART se muestra en la siguiente tabla:

• Bits 5:4 – UPMn1:0: Modo de Paridad Estos bits habilitan y ponen el tipo de generación de paridad y chequeo. Si es habilitado, la Transmision automáticamente generan y envían la paridad de la transmisión bits de datos dentro de cada trama. La Recepción generaría un

valor de paridad para los datos internos y comparan esto en la habilitación del UPMn. Si un error es detectado, la bandera UPMn en UCSRnA seria habilitada. Configuración de bits del UPMn

• Bit 3 – USBSn: Selección del bit de parada Estos bits seleccionan el número de bits de parada a ser insertados por la Transmisión. La Recepción ignora esta configuración. Configuración de bits del USBS

• Bit 2:1 – UCSZn1:0: Tamaño de Caracteres Los bits UCSZn1:0 combinados con el bit UCSRnB pondrán el número de bits de datos en la trama usando la Recepción y Transmisión. Configuración de bits del UCSZn

• Bit 0 – UCPOLn: Polaridad de Reloj Este bit es usado solo para modo síncrono. Escribir este bit a cero cuando el modo asíncrono es usado. Los bits UCPOLn habilitan la relación entre los datos de salida modificados y los datos de entrada muestreados y el reloj síncrono (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 serían 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 más 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 activaría inmediatamente la actualización del prescalador de la velocidad en baudios. 18.12 Ejemplos de la configuración de la Velocidad en Baudios Para cristales estándar y frecuencias resonantes la más velocidad en baudios comúnmente usada para operación asíncrona puede ser generada usando la configuración 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, están 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 ecuación.

19. USART en Modo SPI 19.1 ESPECIFICACIONES • Full Duplex, Tres hilos (Three-wire) para transferencia de datos Sincrónica. • Operación Maestro • Soporta cuatro modos de operación SPI (Modo 0, 1, 2, y 3) • Transferencia de datos LSB o MSB (Orden de Configuración de Datos) • Operación en cola (Doble Buffer) • Alta resolución del generador de velocidad en Baudios • Alta velocidad de operación (fXCKmax = fCK/2) • Generador de Interrupciones Flexible 19.2 Revisión General El Receptor y Transmisor serial universal sincrónico y asincrónico (USART) puede ser puesto como maestro SPI en modo dócil de operación. Configurando ambos bits a uno del UMSELn1:0 y habilitando el USART en MSPIM. En este modo de operación el control del SPI maestro toma el mando directo por encima de los recursos del USART. Estos recursos incluyen la transmisión y recepción del registro de desplazamiento y buffers, y el generador de velocidad en baudios. El generador de paridad y chequeo, el dato y la recuperación lógica del reloj, y el control lógico RX y TX son deshabilitados. El control lógico RX y TX del USART es remplazado comúnmente por el control lógico de transferencia del SPI. Sin embargo, el control lógico del pin y el generador lógico de interrupción es idéntico en ambos modos de operación. 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 Generación de Reloj Generación lógica del Reloj produce una base de reloj para la transmisión y Recepción. Para el USART modo de operación MSPIM solo la generación interna del reloj es soportada (por ejemplo operación maestro). La Dirección 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 operación correcta. Preferiblemente el DDR_XCKn debería ser puesta antes de que el USART en MSPIN sea habilitado (bits TXENn y RXENn puestos en uno). La generación del reloj interno es usada en modo MSPIM esto es idéntico para el USART en modo asincrónico maestro. La velocidad en baudios configurada en UBRRn puede ser calculada usando las mismas ecuaciones:

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

BAUD Velocidad en baudios (en bits por segundo, bps) fOSC Frecuencia de reloj del sistema UBRRn Contenido de los registros UBRRnH y UBRRnL, (0-4095) 19.4 Modo de Datos y Tiempos SPI Existen cuatro combinaciones de XCKn (SCK) fase y polaridad con respecto a los datos seriales, los cuales son determinados por los bits de control y UCPOLn. Los diagramas de transferencia de datos son mostrados en la Figura 19-1- Los bits de Datos son desplazados y Habilitados en blancos opuestos de la señal del XCKn, asegurando el tiempo suficiente para que se estabilice la señal 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 comunicación 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 válidas: • 8-bits de datos con MSB primero. • 8-bit de datos con LSB primero. La trama comienza con el dato del bit más o menos significante. Luego los bits del siguiente dato, suben a un total de ocho, esto sucede, enviando con el bit más o menos significante. Cuando una trama completa es transmitida, una nueva trama puede directamente seguir, o la línea a de comunicación puede ser puesta en alto (idle). El bit UDORDn en UCSRnC pone el formato de trama usada por la USART en modo MSPIM. La recepción y Transmisión usa la misma configuración. Note que el cambio de configuración de cualquiera de estos bits interrumpiría la comunicación para ambos tanto Recepción como Transmisión. 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 Inicialización USART MSPIM El USART en modo MSPIM tiene que ser inicializado antes que cualquier comunicación pueda tener lugar. El proceso de inicialización normalmente consiste en la configuración de la velocidad en baudios, configurando en modo maestro de operación (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 Interrupción debería ser limpiada (y así deshabilitar las interrupciones globales) cuando se ha hecho la inicialización. Nota: para asegurarse que la inmediata inicialización del XCKn del registro de salida de la velocidad en baudios (UBRRn) seria cero al tiempo que la transmisión es habilitada. Contrariamente al modo normal del USART operando el UBRRn luego de ser escrito el valor deseado después que la transmisión es habilitada, pero antes de que la primera transmisión es iniciada. Configurando UBRRn a cero antes habilitando la transmisión no es necesaria si la inicialización es hecha inmediatamente después del reset desde que UBRRn es reseteada a cero. Antes de hacer la re-inicialización con el cambio de velocidad en baudios, modo de datos, o formato de trama, seria seguro que no habría transmisiones durante el periodo en el que los registros son cambiados. La bandera TXCn puede ser usada para chequear que transmisión ha sido completada, y la bandera RXCn puede ser usada para chequear que no hay lecturas de datos en buffer de recepción. Note que la bandera TXCn seria limpiada antes de cada transmisión (antes de que UDRn es escrita) si esto es usado para este propósito. El siguiente ejemplo de código para inicialización del USART es mostrado en asembler y en C que tienen igual funcionalidad.

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

19.6 Transferencia de Datos Usando el USART en modo MSPI requiere que la transmisión sea habilitada, por ejemplo el pin TXENn en el registro UCSRnB es puesta a uno. Cuando el Transmisor es habilitado, la operación normal del pórtico en el pin TxDn obtiene la función como la transmisión de salida serial. Habilitando el Receptor es opcional y es hecho por la configuración del bit RXENn en el registro UCSRnB a uno. Cuando la Recepción es habilitada, la normal operación del pin RxDn obtiene la función como entrada de recepción serial. El XCKn en ambos casos seria usada como el reloj de transferencia. Después de que la inicialización 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 transmisión del registro de desplazamiento cuando este registro es leído 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 idénticas en funciones en operación normal del USART. Sin embargo, el estado de las banderas de error de recepción (FE, DOR, y PE) no son usadas y siempre son leídas como cero. 19.6.2 Deshabilitando el Transmisor o Receptor La desabilitación de la transmisión o recepción en el USART en modo MSPIM es idéntica en la función el la operación 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 idéntica en el bit SPI CPOL. • La funcionalidad del bit UCPHAn es idéntica en el bit SPI CPHA • La funcionalidad del bit UDORDn es idéntica en el bit SPI DORD. Sin embargo, desde el USART en modo MSPIM rehúsa 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 operación en modo maestro es soportada por el USART en el modo MSPIM, lo siguiente muestra la diferencia entre los dos módulos: • El USART en modo MSPIM incluye (doble) buffer de transmisión. 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 configuración del UBRRn acordada. • El tiempo de Interrupción no es compatible. • El Pin de control difiere del maestro solo en la operación del USART en modo MSPIM.

19.8 Descripción de Registros La siguiente sección describe los registros usados para la operación SPI usando el USART. 19.8.1 UDRn – USART MSPIM I/O Registro de Datos La función y la descripción del bit del USART registro de datos (UDRn) en modo MSPI es idéntica la operación normal del USART. 19.8.2 UCSRnA – USART MSPIM Registro de Control y Estado n A

• Bit 7 - RXCn: Recepción Completa del USART El bit de esta bandera es puesto cuando no hay lectura de datos en el buffer de recepción y será limpiado cuando el buffer de recepción esta vacío. Si el Receptor es deshabilitado, el buffer de recepción será vaciado y consecuentemente el bit RXCn llegara hacer cero. LA bandera RXCn puede ser usada para generar una interrupción cuando se completa la recepción. • Bit 6 - TXCn: Transmisión Completa del USART Esta bandera es puesta cuando una trama entera en el registro de transmisión y desplazamiento ha sido desplazado y no hay un nuevo dato presente en el buffer de transmisión (UDRn). El bit de la bandera TXCn automáticamente es limpiada cuando la transmisión completa por interrupción es ejecutada, o esto

puede ser limpiada por la escritura de uno es la localidad de estos bits. La bandera TXCn puede generar una transmisión completa con interrupción. • Bit 5 - UDREn: Registro de Datos cuando el USART esta vacío La bandera UDREn indica si el buffer de transmisión (UDRn) es leído para la recepción de un nuevo dato. Si UDREn es uno, el buffer esta vacío, y estaría listo para ser escrito. La bandera UDREn puede generar una interrupción en el registro de datos cuando se vacía. UDREn es puesta después 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: Habilitación de Interrupciones cuando la Recepción es completada Escribiendo este bit a uno se habilita la bandera de interrupción en RXCn. El USART habilita la interrupción cuando la recepción 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: Habilitación de Interrupciones cuando la Transmisión es completada Escribiendo este bit a uno se habilita la bandera de interrupción en TXCn. El USART habilita la interrupción cuando la recepción 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: Habilitación 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 interrupción cuando el registro de datos esta vacío 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: Habilitación de Recepción Escribiendo este bit a uno habilita la recepción en el USART en el modo MSPIM. La Recepción afectaría la operación normal del pórtico para el pin RxDn cuando es habilitado. Deshabilitando la Recepción se vaciaría el buffer de

recepción. Solo habilitando la recepción en el modo SPI (configurando RXENn=1 y TXENn=0) no tiene importancia desde esta transmisión que controla el reloj de transferencia y solo el modo maestro es soportado. • Bit 3 - TXENn: Habilitación de la Transmisión. Escribiendo uno en este bit se habilita la Transmisión de l USART. El Transmisor afectara la normal operación del pórtico cuando el pin TxDn es habilitado. La desabilitación del transmisor no llegara hacer efectiva hasta que se complete una transmisión, por ejemplo cuando el registro de desplazamiento y el buffer de transmisión del registro no contienen datos para ser transmitidos. Cuando se deshabilita, la transmisión no afectara al pórtico 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: Selección de Modo del USART Estos bits selección el modo de operación 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 operación 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 configuración 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 configuración del bit UCPOLn pone la polaridad del reloj XCKn. La combinación de la configuración de los bits UCPOLn y UCPHAn determinan el tiempo de la transferencia de datos.

20. Interfase Serial 2 Hilos (2-wire) 20.1 Descripción • Interfase de comunicación flexible, solo necesita dos líneas del bus. • Soportan la operación de Maestro y Esclavo • Los Dispositivos pueden operar como Transmisor o Receptor • 7- bits de dirección 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 • Circuitería de supresión de ruido y picos en las líneas del bus. • Dirección del Esclavo Totalmente Programable con el Apoyo de Llamada de General • Reconocimiento de la dirección al despertar el AVR del modo Sleep. 20.2 Definición del Bus de Interfase serial (2-wire) La interfase seria de 2-hilos (TWI) es idealmente satisfecha para aplicaciones típicas de los microcontroladores. El protocolo TWI permite el diseño del sistema a interconectar a 128 dispositivos diferentes usando solo dos líneas del bus bi-direccionable, una para reloj (SCL) y otra para datos (SDA). Solo el hardware externo necesita que la implementación del bus sea simplemente una resistencia pull u para cada una de las líneas 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 Terminología TWI Las siguientes definiciones son frecuentemente encontradas en esta sección.

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

20.2.2 Interconexión Eléctrica Ambas líneas del bus con conectadas a la fuente de voltaje positiva a través de las resistencias pull up. Los controladores del bus de todos los dispositivos TWI son de colector-abierto. Esto implementa una función AND con la cual es esencial la operación de la interfase. Un bajo nivel en la línea del bus TWI es generada cuando uno o más dispositivos de salida TWI son cero. Un alto nivel es salida cuando todos los dispositivos TWI están en buen estado a sus salidas, permitiendo a la resistencias pull up una línea en alto. Note que todos los dispositivos AVR conectados al bus TWI serían encendidos a medida que permita cualquier operación del bus. El número de dispositivos que pueden ser conectados es solo limitado por el límite de capacitancia de 400 pF y el 7-bit del espacio de dirección del esclavo. Dos diferentes especificaciones están 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 acompañado por un pulso en la línea del reloj. El nivel de la línea de datos seria estable cuando la línea del reloj esta en alto. La única excepción de esta regla es para generar condiciones de comienzo y finalización.

20.3.2 Condiciones de Inicio y Parada El Maestro inicia y termina la transmisión de datos. La transmisión es inicializada cuando el Maestro emite la condición de Inicio en el bus, y esto es terminada cuando el Maestro emite la condición de Parada. Entre la condición de Inicio y Final, el bus lo considera como basura, y otro maestro no debería intentarlo. Un caso especial ocurre cuando una nueva condición de Inicio es emitida entre la condición de Inicio y Finalización. Esto es referido como una condición de Inicio Repetitiva, y es usada cuando el maestro desea inicializar

una nueva transmisión sin abandonar el control del bus. Después del Inicio Repetitivo, el bus es considera basura hasta la siguiente parada. Esta conducta es idéntica 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 señaladas por la carga del nivel de la línea SDA cuando la línea SCL esta en alto.

20.3.3 Formato del Paquete de Dirección 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 operación de lectura seria realizado, por otra parte la operación de escritura sería realizada. Cuando el esclavo reconoce que esta siendo direccionada, esto debería ser desconocido por pulling SDA low en el noveno ciclo del SCL (ACK). Si la dirección del esclavo es basura, o po r algunas otras razones puede no servir la respuesta del Maestro, la línea SDA debería ser salida en alto en el ciclo de reloj ACK. El Maestro puede luego transmitir la condición de parada, o condiciones de inicio repetitivo al iniciar la nueva transmisión. El paquete de dirección consiste de direcciones esclavo y los bits de Lectura o Escritura son llamados SLA+R o SLA+W respectivamente. El MSB del byte de dirección es transmitido primero. Las direcciones esclavas pueden libremente ser localizadas por el diseñador, perola dirección 0000 000 es reservada para llamadas generales. Cuando un llamada general es emitida, todos los esclavos deberían 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 dirección 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 deberían ser reservadas para propósitos 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 recepción es responsable por desconocidas recepciones. Una desconocida (ACK) es señalada por la recepción pulling the SDA line low durante el noveno ciclo SCL. Si la recepción llega ha ser la línea de alto SDA, el NACK es señalada. Cuando el receptor tiene receptado el ultimo byte, o por algunas razones no puede receptar mas bytes, esto debería informar la transmisión enviando al NACK después del byte final. EL MSB del byte de datos es transmitido primero.

20.3.5 Combinando Direcciones y Paquetes de Datos dentro de la Transmisión La transmisión básica 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 condición de PARADA, es ilegal. Note que el Wired-ANDing de la línea 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 también rápida para el Esclavo, o el Esclavo necesita tiempo extra para procesamiento entre la transmisión de datos. El Esclavo entendiendo el periodo en bajo del SCL no afectaría 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, Sincronización y Arbitración 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 más maestros inician la transmisión al mismo tiempo. Dos problemas suceden en sistemas multi-maestros: • Un algoritmo seria implementado permitiendo solo uno de los maestros para completar la transmisión. Todos los otros maestros deberían cesar la transmisión 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, debería inmediatamente cambiar a modo esclavo para chequear si ha sido direccionado por la ganancia del maestro. De hecho que múltiples maestros tienen comienzo de transmisión al mismo tiempo que no deberían detectar esclavos, por ejemplo, los datos siendo transferidos en el bus no deberían ser interrumpidos. • Diferentes maestros pueden usar diferentes frecuencias SCL. Se utilizaría un esquema para sincronización de relojes seriales para todos los maestros, a medida que se permitiría la transmisión procesada en el lockstep fashion. Esto facilitaría los procesos arbitrarios. The wired-ANDing de las líneas 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 más corto. El periodo en bajo del reloj combinado es igual al periodo en bajo del Maestro con el periodo más largo. Note que todos los maestros escuchan la línea del SCL, efectivamente comenzando a contar su SCL en alto y en bajo en periodos fuera de tiempo cuando la combinación de líneas SCL van en alto o en bajo, respectivamente.

El arbitraje se lleva a cabo por todos los maestros que continuamente monitorean la línea SDA Después de la salida de datos. Si el valor leído desde la línea 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 pérdida del Maestro debería inmediatamente ir al modo esclavo, chequeando si esto esta siendo direccionado por el maestro. La línea SDA debería ser dejada en alto, pero la pérdida del maestro permite generar una señal de reloj hasta el fin del dato actual o paquete de direcciones. Arbitrariamente continuaría hasta solo uno del resto de Maestros, y esto puede tomar muchos bits. Si varios maestros están probando la dirección al mismo esclavo, arbitrariamente continuaría en el paquete de datos.

Este es el uso del software responsable para asegurar que estas condiciones arbitrarias ilegales nunca ocurrirán. Esto implica que en los sistemas multi-maestros, todos los datos contendrán la misma composición 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 supresión unitaria removiendo picos menores que 50 ns. Note que las pull-up internas en el AVR pueden ser habilitadas por la configuración de los bits del PORT correspondientes a los pines SCL y SDA, como se explicó en la sección de Pórticos 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 configuración en el bit TWI del registro de velocidad (TWBR) y los bits del prescalador en el Registro de Estado del TWI (TWSR). La operación esclavo no depende del bit de velocidad o de la

configuración 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 ecuación:

20.5.3 Unidad de Interfase del Bus Esta unidad contiene el Dato y la Dirección del Registro de Desplazamiento (TWDR), el controlador del Inicio/Final la detección del hardware arbitraria. El TWDR contiene la dirección o los bytes de datos a ser transmitidos, o la dirección o los bytes recibidos. Adicionalmente a los 8-bits TWDR, la unidad del bus de interfase también 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 manipulación del registro de control del TWI (TWCR). Cuando en el modo de transmisión, el valor del bit de recepción (N)ACK puede ser determinado por el valor en el TWSR. El controlador de Inicio/Parada es responsable para la generación y detección 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 transmisión como Maestro, la detección arbitraria por hardware continuamente monitorea la transmisión probando y determinando sui la arbitración es procesada. Si el TWI tiene perdida una arbitración, la unidad de control es informada. Una correcta acción puede ser puesta y apropiadamente generar códigos de estado. 20.5.4 Unidad de Dirección La unidad de dirección chequea si la dirección de los bytes recibidos del 7-bit en el registro de dirección 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 también serian comparadas nuevamente las direcciones de las llamadas generales. La unidad de control es informada, permitiendo una acción correcta para ser tomada. El TWI puede o no reconocer estas direcciones, dependiendo de la configuración del TWCR. La unidad de dirección 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 interrupción ocurre durante TWI power-down despierta el CPU, el TWI aborta la operación y retorna al estado idle. Si esto causa algunos problemas, seguramente que la dirección del TWI solamente habilita la interrupción 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 atención de las aplicaciones ocurridas en el bus del TWI, la bandera del Interrupción del TWI (TWINT) es confirmada. En el siguiente ciclo de reloj, el Registro de estado del TWI (TWSR) es actualizado como código de estado identificando el evento. El TWSR solo contiene información de estado relevante cuando la bandera de interrupción es confirmada. Para todos los otros tiempos, el TWSR contiene un código de estado especial indicando que la información de estado relevante no esta disponible. Si la bandera permanece en uno en el TWINT. La línea del SCL es sostenida en bajo. Esto permite la aplicación de software para completar estas tareas antes permitiendo que la transmisión TWI continúe. La bandera TWINT es habilitada en las siguientes situaciones: • Después que el TWI ha transmitido en condición Inicio/Inicio repetitivo. • Después que el TWI ha transmitido SLA+R/W. • Después que el TWI ha transmitido en la dirección del byte. • Después que el TWI ha perdido arbitrariamente. • Después que el TWI ha sido direccionada por su propia dirección esclavo o llamada general. • Después que el TWI ha recibido el byte de datos. • Después de Parar o Comenzar repetitivamente ha sido recibida mientras todavía se direcciona como esclavo. • Cuando un error en el bus ha ocurrido en una condición ilegal del Inicio y Parada. 20.6 Usando el TWI El AVR TWI es un byte-orientado basado en una interrupción. Las interrupciones son emitidas después de todos los eventos del bus, similar a la recepción del byte o transmisión de condiciones de INICIO. Porque el TWI es una base de interrupción, el software de aplicaron es libre al carry en otras operaciones durante el byte transferido en el TWI. Note que el bit de habilitación de la interrupción del TWI (TWIE) en TWCR junto el bit de la Habilitación de Interrupciones Globales en el SREG permitiendo la aplicación a decidir si no hay aserción de la bandera TWINT debería generar una respuesta de interrupción. Si el bit TWIE es limpiado, la aplicación de la bandera TWINT solamente detectaría acciones en el bus del TWI. Cuando la bandera TWINT es afirmada, el TWI ha finalizado una operación 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 aplicación puede luego decidir como el TWI debería comportarse en el siguiente ciclo del bus del TWI por manipulación de los registros TWCR y TWDR. La Figura 20-10 es un simple ejemplo de cómo la aplicación puede ser una interfase al hardware del TWI. En esencia, mayores detalles serán explicados en esta sección.

1. El primer paso en la transmisión TWI es transmitir una condición de INICIO. Esto es hecho escribiendo un valor especifico en TWCR, instruyendo el hardware TWI a transmitir en la condición 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 operación mientras el bit TWINT en TWCR es uno. Inmediatamente después la aplicación ha sido limpiada TWINT, el TWI iniciaría la transmisión de la condición de INICIO. 2. Cuando la condición de INICIO ha sido transmitida, la bandera TWINT en TWCR es uno, y TWSR es actualizada con códigos de estado indicando que la condición de INICIO ha sido enviada satisfactoriamente. 3. El software de aplicación debería ahora examinar el valor de TWSR, para asegurarse que la condición de INICIO fue transmitida satisfactoriamente. Si TWSR indica por otra parte, el software de aplicación podría tomar una acción en especial, llamando una rutina de error. Asumiendo que el código de estado es esperado, la aplicación cargaría SLA+W dentro de TWDR. Recordando que TWDR es usado ambos para direccionar el dato. Después TWDR ha sido cargado con el SLA+W deseado, un valor especifico seria escrito a TWCR, instruyendo el TWI hardware a transmisión del SLA+W presente en TWDR. Cuyo valor a escribirse es descrito después. 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 empezaría ninguna operación mientras el bit de TWINT en TWCR sea uno. Inmediatamente después que la aplicación ha sido limpiada TWINT, el TWI iniciaría la transmisión 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 código de estado indicando que el paquete de direcciones ha sido enviada satisfactoriamente. El código de estado también refleja si el esclavo desconoce o no el paquete.

5. El software de aplicación debería examinar ahora el valor de TWSR, para estar seguros que el paquete de dirección fue transmitido satisfactoriamente, y que el valor del bit ACK fue Esperado. Si TWSR indica por otra parte, el software de aplicación tomara algunas acciones especiales, como llamar una rutina de error. Asumiendo que el código de estado es esperado, la aplicación cargará un paquete de datos dentro del TWDR. Subsecuentemente, un valor específico sería escrito a TWCR, instruyendo el hardware TWI a transmitir el paquete de datos presente en TWDR. Con el cual el valor escrito es descrito después. 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 operación mientras el bit TWINT en TWCR sea uno. Inmediatamente después la aplicación es limpiada en TWINT, el TWI iniciará la transmisión 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 código de estado indicando que el paquete de datos ha sido enviado satisfactoriamente. El código de estado también reflejara si el esclavo desconoce el paquete. 7. El software de aplicación debería 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 aplicación tomara algunas acciones especiales, como llamar una rutina de error. Asumiendo que el código de estado es esperado, la aplicación escribiría el valor específico a TWCR, instruyendo el hardware TWI a condición de transmisión 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 operación mientras el bit TWINT en TWCR sea uno. Inmediatamente después la aplicación es limpiada en TWINT, el TWI inicia la transmisión de parada. Note que TWINT no es habilitada después de una condición de PARADA ha sido enviada. • Cuando el TWI ha finalizado una operación y espera una respuesta a la aplicación, la bandera TWINT es uno. La línea SCL es pulled low hasta que TWINT es limpiada. • Cuando la bandera TWINT es uno, el usuario actualizaría todos los registros TWI con el valor relevante para el siguiente ciclo del bus TWI. Como un ejemplo, TWDR sería cargado con el valor a ser transmitido en el siguiente ciclo del bus. • Después todos los Registros TWI actualizan y otras tareas del software de aplicación han sido completadas, TWCR es escrito. Cuando se escribe en TWCR, el bit TWINT debería ser habilitado. Escribiendo uno en TWINT las

banderas son limpiadas. El TWI luego comenzaría a ejecutar operaciones que fueron especificadas por la configuración del TWCR. En la siguiente implementación del código asembler y C. Note que el código asume que varias definiciones han sido hechas.

20.7 Modos de Transmisión 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 están presentes en el sistema, algunos de estos transmitirían los datos del TWI, y luego el modo SR seria usado. Este es el software de aplicación que decide cuales modos son legales.

La siguiente sección describe cada de estos modos. Estas figuras contienen las siguientes abreviaciones: S: condición INICIO Rs: condición 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: condición de PARADA SLA: Dirección del esclavo 20.7.1 Modo Transmisor Maestro En el modo Transmisor maestro, el número de bytes de datos son transmitidos al Receptor Esclavo (Ver figura 20-11).Al entrar en modo Maestro, la condición 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 códigos de estado mencionados en esta sección asumen que los bits del prescalador son cero y son mascaras a cero.

La condición 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 condición de INICIO y TWINT seria escrita a uno para limpiar las banderas del TWINT. El TWI luego probaría el bus serial 2-hilos y generar una condición de INICIO tan pronto el bus llega a estar libre. Después que la condición de INICIO ha sido transmitida, la bandera TWINT es puesta por hardware, y el código de estado en TWSR sería 0x08. Al entrar en el modo MT, SLA+W sería transmitido. Esto es hecho escribiendo SLA+W a TWDR. Luego el bit TWINT debería 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 número de códigos de estados en TWSR son posibles. Los códigos de estado posibles en modo Maestro son 0X18, 0x20, o 0x38. Las acciones apropiadas a ser tomadas para cada de estos códigos de estado están 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 sería escrito cuando TWINT esta en alto. Por lo tanto, el acceso sería descargado, y la escritura del bit de colisión (TWWC) sería uno en el registro TWCR. Después actualizando TWDR, el bit TWINT seria limpiado (por la escritura de uno) y continuaría 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 condición de PARADA o repitiendo la condición de INICIO. La condición de PARADA es generada escribiendo los siguientes valores a TWCR:

La condición de COMIENZO REPETITIVO es generada escribiendo el valor siguiente a TWCR:

Después de repetir la condición de INICIO (estado 0x10) la interfaz serial 2-hilos puede acceder al mismo tiempo a Esclavo nuevamente, o el nuevo esclavo sin la condición de la transmisión 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 número de bytes de datos son receptados desde Transmisor Esclavo (Ver figura 20-13).Al entrar en modo Maestro, la condición 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 códigos de estado mencionados en esta sección asumen que los bits del prescalador son cero y son mascaras a cero.

La condición 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 condición de INICIO y TWINT seria escrita a uno para limpiar las banderas del TWINT. El TWI luego probaría el bus serial 2-hilos y generar una condición de INICIO tan pronto el bus llega a estar libre. Después que la condición de INICIO ha sido transmitida, la bandera TWINT es puesta por hardware, y el código de estado en TWSR sería 0x08. Al entrar en el modo MT, SLA+R sería transmitido. Esto es hecho escribiendo SLA+R a TWDR. Luego el bit TWINT debería 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 número de códigos de estados en TWSR son posibles. Los códigos de estado posibles en modo Maestro son 0X38, 0x40, o 0x48. Las acciones apropiadas a ser tomadas para cada de estos códigos de estado están detalladas en el Tabla 20-3. Recibiendo datos puede ser leído

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. Después que el último byte ha sido recibido, el MR debería informar al ST enviando a NZCK después del último byte de datos recibido. La transferencia es generada escribiendo el valor siguiente a TWCR:

La condición de COMIENZO REPETITIVO es generada escribiendo el valor siguiente a TWCR:

Después de repetir la condición de INICIO (estado 0x10) la interfaz serial 2-hilos puede acceder al mismo tiempo a Esclavo nuevamente, o el nuevo esclavo sin la condición de la transmisión 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 número de bytes de datos son receptados desde el transmisor Maestro (ver Figura 20-15). Todos los códigos de estado mencionados en esta sección asumen que los bits del prescalador son cero o mascaras a cero.

Para iniciar el modo Receptor esclavo, TWAR y TWCR serían inicializadas como lo siguiente:

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

TWEN sería 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 serían escritos a cero. Cuando TWAR y TWCR han sido inicializadas, el TWI espera hasta este direccionamiento por sus propios direcciones de esclavo (o si están habilitadas las direcciones de llamadas generales) seguido por el bit de dirección de datos. Si el bit de dirección es “0”, el TWI operará en modo SR. Después la propia dirección del esclavo y el bit de escritura ha sido recibida, la bandera TWINT es uno y el código de estado válido puede ser leído desde TWSR. El código de estado es usado para determinar la acción de software adecuado. La acción apropiada puede ser tomada para cada código de estado en la Tabla 20-4- El modo de receptor Esclavo puede también 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 retornaría a “No reconocido (1) a SDA después del siguiente byte de datos recibido. Esto puede ser usado para indicar que el esclavo no es capaz de recibir más bytes. Mientras TWEA es cero, el TWI no reconoce su propia dirección de esclavo. Sin embargo, el bus Serial 2-hilos esta todavía monitoreado y resumiendo direcciones puede resumir a cualquier tiempo por la configuración TWEA. Esto implica que el bit TWEA puede ser usado temporalmente aislando el TWI del Bus Serial de 2-hilos. En modo sleep o modos Idle, el sistema de reloj del TWI es apagado y el bit TWEA es uno, la interfase puede todavía reconocer su propia dirección de esclavo o la dirección 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 sostendría el reloj en bajo del SCL durante el despertado y después la bandera TWINT es limpiada (por la escritura de uno). Mas allá de la recepción 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 línea 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 reflejaría 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 número de bytes de datos son transmitidos desde el receptor Maestro (ver Figura 20-15). Todos los códigos de estado mencionados en esta sección asumen que los bits del prescalador son cero o mascaras a cero.

Para iniciar el modo Transmisión esclavo, TWAR y TWCR serían inicializadas como lo siguiente:

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

TWEN sería 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 serían escritos a cero. Cuando TWAR y TWCR han sido inicializadas, el TWI espera hasta este direccionamiento por sus propios direcciones de esclavo (o si están habilitadas las direcciones de llamadas generales) seguido por el bit de dirección de datos. Si el bit de dirección es “1”, el TWI operará en modo ST. Después la propia dirección del esclavo y el bit de escritura ha sido recibida, la bandera TWINT es uno y el código de estado válido puede ser leído desde TWSR. El código de estado es usado para determinar la acción de software adecuado. La acción apropiada puede ser tomada para cada código de estado en la Tabla 20-5- El modo de transmisor Esclavo puede también 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 transmitiría el último byte de la transferencia. El estado 0xC0 o 0xC8 seria entero, dependiendo se el receptor maestro trasmite a NACK o ACK después del byte final. El TWI es cambiado al no direccionar en modo esclavo, e ignoraría el Maestro si esto continúa 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 transmisión 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 dirección del propio Esclavo. Sin Embargo, el bus serial de 2-hilos es todavía monitoreado y el reconocimiento de dirección 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 todavía reconocer su propia dirección de esclavo o la dirección 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 sostendría el reloj en bajo del SCL durante el despertado y después la bandera TWINT es limpiada (por la escritura de uno). Mas allá de la recepción 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 línea 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

reflejaría el ultimo byte presente en el bus cuando despierta des de el modo sleep.

20.7.5 Miscellaneous States Existen dos códigos de estado que no corresponden a la definición del estado TWI, ver tabla 20-6. Los Estados 0xF8 indican que la información 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 condición de INICIO o PARADA ocurre en una posición ilegal en el formato de trama. Ejemplos de cómo las posiciones ilegales son durante la transferencia serial de los byte de dirección, 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 lógico. 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 líneas 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 acción deseada. Considerar para los datos de los ejemplos leídos desde la EEPROM serial. Típicamente, una transferencia involucra los siguientes pasos: 1. La transferencia debe ser inicializada. 2. La EEPROM debe ser instruida que tipo de localidad debe ser leída. 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 leído desde el Esclavo, empleando el uso del modo MR. La dirección de transferencia seria cambiada. El Maestro guardaría el control del bus durante todos estos pasos, y los pasos deberían ser llevados a cabo como una operación automática. 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 leería la localidad del dato erróneo. Como el cambio en la dirección de transferencia es completado transmitiendo a INICIO REPETITIVO entre la transmisión del byte de direcciones y recepción de los datos. Después 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 múltiples maestros son conectados al mismo bus, las transmisiones pueden ser iniciadas simultáneamente por uno o más de ellos. El TWI estándar asegura estas situaciones en el manual como otra vía 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 situación arbitraria es explicado debajo, cuando dos maestros son probados al transmitir datos al Receptor Esclavo.

Varios escenarios diferentes pueden levantarse durante la situación arbitraria, como se describe a continuación: • Dos o más maestros son realizados con comunicación idénticas con el mismo Esclavo. En este caso, ni el Esclavo ni ninguno de los Maestros conocerían acerca del bus de conexión. • Dos o más maestros son accesibles al mismo Esclavo con datos diferentes o bit de direcciones. En este caso, las situaciones arbitrarias sucederían, 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 direccionaría al modo Esclavo y esperaría hasta que el bus este libre y transmitir una nueva condición de INICIO. • Dos o más maestros son asignados a Esclavos diferentes. En este caso, ocurriría en los bits SLA. Los maestros prueban la salida con uno en SDA mientras otro salida del Maestro esta en cero perdería la arbitrariedad. Los Maestro pendiendo la arbitrariedad en SLA cambiarían al modo Esclavo y chequearían si ellos son direccionados con el Maestro ganador. Si

direccionamos, ellos, cambiarían al modo SR o ST, dependiendo del valor del bit de LECTURA/ESCRITURA. Si ellos nos empiezan a direccionar, el cambio no direccionaría el modo maestro u esperaría hasta que el bus este libre y transmita una nueva condición, dependiendo de la acción del software de aplicación.

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 división 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 operación del TWI. Esto es usado para habilitar el TWI, al iniciar el acceso al Maestro aplicando la condición de INICIO al bus, al generar el reconocimiento del Receptor, al generar una condición de parada, y al detener el control del bus mientras el dato es escroto al bus escribiendo al TWRD. Esto también indica la colisión de escritura al TWRD mientras el registro es inaccesible. • Bit 7 – TWINT: Bandera de Interrupción del TWI Este bit es habilitado por hardware cuando el TWI ha finalizado esto actualiza el trabajo y espera la respuesta de la aplicación por software. Si el bit-I en el SREG y TWIE en TWCR son habilitadas, el MCU saltaría al vector de

interrupción 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 lógico. Note que limpiando estas banderas comienza la operación 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: Habilitación del bit de Reconocimiento del TWI El bit TWEA controla la generación 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 dirección puede Lugo ser resumido escribiendo el bit de TWEA a uno nuevamente. • Bit 5 – TWSTA: Bit de Condición de INICIO del TWI La aplicación 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 condición de INICIO en el bus si este está libre. Sin embargo, si el bus no está libre, el TWI espera hasta que una condición de PARADA sea detectada, y luego genera una nueva condición de INICIO a demanda del estado del bus Maestro. TWSTA sería limpiada por software cuando la condición de INICIO ha sido transmitida. • Bit 4 – TWSTO: Bit de Condición de PARADA del TWI Escribiendo uno al bit del TWSTO en el modo Maestro generaría una condición de PARADA en el bus serial de 2-hilos (2-wire). Cuando una condición de PARADA es ejecutada en el bus, el bit TWSTO es limpiado automáticamente. En modo esclavo, configurando el bit TWSTO puede ser usado para recuperar desde una condición de error. Esto no generaría una condición de PARADA, pero el TWI retornaría bien-definido reconociendo el modo Esclavo y colocando a las líneas 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: Habilitación del Bit TWI El bit TWEN habilita la operación 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 límites 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 operación. • Bit 1 – Res: Bits Reservados Estos bits son reservados y siempre son escritos como cero. • Bit 0 – TWIE: Habilitación de Interrupciones del TWI Cuando este bit es escrito a uno, y el bit-I en SREG es habilitado, la respuesta de interrupción 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 lógico del TWI y del Bus serial de 2-hilos (2-wire). Los diferentes códigos de estado son descritos después en esta sección. Note que el valor leído desde TWSR contiene ambos los valores del estado del 5-bit y el valor del prescalador del 2-bit. El diseño de aplicación 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 leídos, escritos, y controlados por el bit prescalador de velocidad.

20.9.4 TWDR – Registro de Datos del TWI

En modo de Transmisión, 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 Interrupción del TWI (TWINT) es habilitada por hardware. Note que el Registro de Datos no puede ser inicializado por el usuario antes que la primera interrupción ocurra. El dato en TWDR permanece estable mientras TWINT esta en uno. Mientras el dato es desplazado fuera, en el bus el dato simultáneamente es desplazado adentro. TWDR siempre contiene el último byte presente en el bus, excepto después de despertar desde el modo sleep por la interrupción del TWI. En este caso, el contenido de TWDR es indefinido. En este caso de perdida arbitraria del bus, ningún dato es perdido en la transmisión desde el Maestro al Esclavo. Manejando los bits del ACK es automáticamente 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 debería ser localizado con el 7-bit Esclavo direccionado (en el séptimo bit más significativo) con lo cual es TWI respondería 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 dirección del Esclavo (o direcciones de llamado general habilitadas) en la recepción serial de direcciones. . • Bits 7:1 – TWA: Registro de direcciones del TWI (Esclavo) Estos siete bits constituyen la dirección Esclavo de la unidad TWI. • Bit 0 – TWGCE: Bit de Habilitación 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 dirección 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 dirección ignora la comparación 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 leído como cero.

21. Comparador Analógico –AC 21.1 Revisión General El Comparador Analógico comparara el valor de las entradas en el pin positivo AIN0 y pin negativo AIN1. Cuando el voltaje en el pin positivo AIN0 es más alto que el voltaje en el pin negativo AIN1, la salida del Comparador Analógico, ACO, es habilitada. La salida del comparador seria puesta para disparar el Timer/contador1 en función de captura de Entrada. Adicionalmente, el comparador puede disparar una interrupción separada, exclusiva al comparador Analógico. El usuario puede seleccionar el disparo de la interrupción 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 Analógico Multiplexado e Entrada Esto es posible al selecciona cualquiera de los pines del ADC7…0 al reemplazar la entrada negativa del Comparador Analógico. 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 Analógico Multiplexado (ACME en ADCSRB) es habilitado y el ADC es cambiado a apagado (ADEN en ADCSRA es cero), MUX2…0 en ADMUX selecciona el pin de entrada a remplazar en la entrada negativa del Comparador Analógico. Si ACME es limpiado o ADEN es habilitado, AIN1 es aplicado a la entrada negativa del Comparador Analógico.

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

21.3 Descripción de Registros 21.3.1 ADCSRB – Registro de Control y Estado B del ADC

• Bit 6 – ACME: Habilitación del Comparador Analógico Multiplexado Cuando este bit es escrito con uno lógico y el ADC es apagado (ADEN en ADCSRA es cero), el ADC multiplexor selecciona la entrada negativa del Comparador Analógico. Cuando este bit es escrito con cero lógico, AIN1 es aplicado a la entrada negativa del Comparador Analógico. 21.3.2 ACSR – Registro de Control y Estado del Comparador Analógico Digital

• Bit 7 – ACD: Desabilitación del Comparador Analógico Cuando este bit es escrito con uno lógico, la energía del Comparador Analógico es quitada. Este bit puede ser habilitado en cualquier momento y apagar el Comparador analógico. Esto reduce el consumo de emergía en los modos activo e Idle. Cuando se carga el bit de ADC, la Interrupción del Comparador Analógico seria deshabilitada por limpieza del bit ACIE en ACSR. Por otra parte una interrupción puede ocurrir cuando este bit es cambiado. • Bit 6 – ACBG: Selección del Comparador Analógico Bandgap Cuando este bit es puesto, un arreglo bandgap de referencia de voltaje remplaza la entrada positiva del Comparador Analógico. Cuando la referencia bandgap es usada como entrada del Comparador Analógico, esto tomara algún

tiempo para que el voltaje se estabilice. Si no se estabiliza, la primera conversión tiene un valor incorrecto. • Bit 5 – ACO: Salida del Comparador Analógico La salida del Comparador Analógico es sincronizada y luego directamente conecta al ACO. La sincronización introduce un retardo de 1 – 2 ciclos de reloj. • Bit 4 – ACI: Bandera de Interrupción del Comparador Analógico Este bit es habilitado por hardware cuando una salida de comparación dispara las interrupciones en modo definidos por ACIS1 y ACIS0. La rutina del Comparador Analógico 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 interrupción. Alternativamente, ACI es limpiado por la escritura de uno lógico a la bandera. • Bit 3 – ACIE: Habilitación de la Interrupción del Comparador Analógico Cuando el bit del ACIE es escrito con uno lógico y el bit-I en es Registro de Estado es habilitado, la Interrupción del Comparador Analógico es activada. Cuando se escribe con cero, la interrupción es deshabilitada. • Bit 2 – ACIC: Habilitación de la Entrada de Captura del Comparador Cuando se escribe uno lógico, estos bits habilitan la entrada en función de captura en el Timer/Contador1 a ser disparado por el Comparador Analógico. La salida del comparador es en este caso directamente conectada a la entrada de captura, haciendo la comparación utiliza el cancelador de ruido y selección del flanco del Timer/Contador1 Interrupción de Captura a la entrada. Cuando se escribe cero lógico, ninguna conexión entre el Comparador Analógico y la función de captura a la entrada existe. Para hacer la comparación disparar el Timer/contador1 a la salida de la interrupción de captura, el bit ICIE1 en el registro máscara de la Interrupción del Timer (TIMSK1) seria habilitada. • Bits 1:0 – ACIS1:ACIS0: Modo Selector de la Interrupción del Comparador Analógico. Estos bits determinan cual comparador eventualmente dispara la interrupción del Comparador Analógico. Las diferentes configuraciones son mostradas en la tabla 21-2.

Cuando cargando los bits ACIS1/ACIS0, la Interrupción del Comparador Analógico sería deshabilitada limpiando estos bits de habilitación de Interrupciones en el Registro ACSR. Por otra parte una interrupción puede ocurrir cuando los bits son cambiados.

21.3.3 DIDR1 – Desabilitación de los Registros de Entradas Digitales 1

• Bit 1:0 – AIN1D:AIN0D: AIN1: Desabilitación de la Entrada Digital AIN0 Cuando este bit es escrito con uno lógico, el buffer de entrada digital en el pin AIN1/0 es deshabilitada. El correspondiente bit del registro PIN siempre leería como cero cuando este bit es habilitado. Cuando la señal analógica es aplicada en el pin AIN/ la entrada digital desde este pin no es necesaria, este bit debería ser escrito con uno lógico para reducir el consumo de energía en el buffer de entrada digital.

22. ADC – CONVERSOR ANÁLOGO A DIGITAL 22.1 Especificaciones: • Resolución de 10-bits • Integrador no Lineal 0.5 LSB • Presición Absoluta ±2 LSB • Tiempo de Conversión 13 - 260µs • Máxima Resolución 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 Conversión (Free Running) • Inicio de Conversión ADC por Auto-disparo o Fuente de Interrupción • Activación de Interrupción al finalizar la Conversión 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 Esquemático del Conversor Analógico Digital

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

22.9 DESCRIPCIÓN DE REGISTROS 22.9.1 ADMUX –Selección de Registros Multiplexados del ADC

• Bit 7:6 – REFS1:0: Selección 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 conversión, el cambio no será efectuado hasta que la conversión sea completada (ADIF EN ADCSRA es uno). La opción 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 debería usarse 2.56V como voltaje de referencia interna. TABLA 1 REFS1 REFS0 SELECCIÓN DEL VOLTAJE DE REFERENCIA 0 0 AREF, Voltaje de referencia interno apagado 0 1 AVCC con capacitor externo en el pin AREF 1 0 Voltaje de referencia interno 1.1V con capacitor en el pin

AREF 1 1 Voltaje de referencia interno 2.56V con capacitor en el pin

AREF • Bit 5 – ADLAR: Ajuste de resultado hacia la izquierda del ADC El bit ADLAR afecta la presentación del resultado de la conversión 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 selección para Canal Análogo y Ganancia El valor de estos bits seleccionan cual combinación de la entrada analógica son conectadas al ADC. Estos bits también seleccionan la ganancia para los canales diferenciales. Si estos bits son cambiados durante una conversión, el cambio no se vera afectado hasta que se complete la conversión (ADIF en ADCSRA es uno).

22.9.2 ADCSRA – ADC Registro de Control y Estado A

• Bit 7 – ADEN: Habilitación 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 conversión esta en progreso, la conversión terminará. • Bit 6 – ADSC: Inicio de Conversión ADC En modo de Simple Conversión, cada vez que se ponga uno en este bit se inicia cada conversión. En modo de Simple Conversión (Free Running), al escribir uno en este bit inicia la conversión. La primera conversión ADSC ha sido escrita después 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 conversión llega a inicializar el ADC. ADSC estará en uno durante la conversión en progreso. Cuando termina la conversión retorna a cero.

• Bit 5 – ADATE: Habilitación Auto Disparador ADC Cuando se escribe uno en este bit, el auto Disparador del ADC es habilitado. El ADC empezara la conversión con flanco positivo seleccionado con la señal del disparador. La fuente de disparo es seleccionado por la configuración de acuerdo a la selección de los bits ADC, ADTS en ADCSRB. • Bit 4 – ADIF: ADC Banderas de Interrupción Este bit es uno cuando se completa la conversión ADC y los Registros de Datos son actualizados. Cuando la conversión ADC es completada se ejecuta la interrupción si el bit ADIE y el bit I en SREG son uno. ADIF es cero por hardware cuando se ejecuta la correspondiente interrupción. Alternativamente ADIF es cero cuando la bandera se pone en uno. Tener precaución que si se esta haciendo una modificación de lectura-escritura en el ADCSRA, una interrupción pendiente puede ser deshabilitada. Estos también aplica si se utilizan las interrupciones SBI o CBI. • Bit 3 – ADIE: Habilitación de interrupciones del ADC Cuando este bit es uno y el bit I en SREG es uno, la conversión ADC es completada y es activada la interrupción. • Bits 2:0 – ADPS2:0: Bits de selección para el Prescalador Estos bits determinan el factor de división entre la frecuencia del cristal y la entrada del reloj del ADC.

ADPS2 ADPS1 ADPS0 Factor de División 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 conversión 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 leído, el registro de datos ADC no es actualizado hasta que el ADCH es leído. Consecuentemente si el resultado es ajustado a la izquierda y no se requiere una presición 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 leído 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 conversión del ADC. Si ADATE es cero, los bits del ADTS[2:0] no afectan. Una conversión será disparada por un flanco de subida de la selección de la bandera de interrupción.

ADTS2 ADTS1 ADTS0 Fuente de Disparo 0 0 0 Modo Simple Conversión (Free Running) 0 0 1 Comparador Analógico 0 1 0 Interrupción Externa 0 1 1 Timer/Contador 0 Punto de Comparación 1 0 0 Timer/ Contador 0 Desbordamiento 1 0 1 Timer/ Contador 1 Punto de Comparación B 1 1 0 Timer/ Contador 1 Desbordamiento 1 1 1 Timer/ Contador 1 Capture Event

23. JTAG Interface and On-chip Debug System 23.1 Features • JTAG (IEEE std. 1149.1 Compliant) Interface • Boundary-scan Capabilities According to the IEEE std. 1149.1 (JTAG) Standard • Debugger Access to: – All Internal Peripheral Units – Internal and External RAM – The Internal Register File – Program Counter – EEPROM and Flash Memories • Extensive On-chip Debug Support for Break Conditions, Including – AVR Break Instruction – Break on Change of Program Memory Flow – Single Step Break – Program Memory Break Points on Single Address or Address Range – Data Memory Break Points on Single Address or Address Range • Programming of Flash, EEPROM, Fuses, and Lock Bits through the JTAG Interface • On-chip Debugging Supported by AVR Studio® 23.2 Revisión General El AVR IEEE std. 1149.1 con interfase dócil JTAG puede ser usada por • Probando PCBs usando la capacidad del JTAG Boundary-scan • Programando las memorias no volátiles, Fusibles y bits de Bloqueo • On-chip debugging Una breve descripción es dada en la siguiente sección- Una descripción detallada de programación vía la interfase JTAG, y usando el Boundary-scan Chain puede ser encontrada en la sección “Programando vía la interfase JTAG” en la página 312 del datasheet y “IEEE 1149.1 (JTAG) Boundary scan” en la página 266 respectivamente. El On-chip Debug support es considerada siendo instrucciones privadas del JTAG y distribuidas dentro de ATMEL. La Figura 23-1 muestra el diagrama de bloques de la interfase JTAG y el On-chip Debug system. El controlador TAP es una máquina de estado controlada por las señales TCK y TMS. El controlador TAP selecciona el Registro de Instrucciones JTAG o uno de varios Registro de Datos como el scan Caín (Registro de desplazamiento) entre la entrada TDI y la salida TDO. El Registro de Instrucción 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 programación de la Interfase JTAG (actualmente consiste de Registro de datos físicos y virtuales) es usado por la programación serial vía 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 través de cuatro pines del AVR. En la terminología JTAG, estos pines constituyen el Test Access Port-TAP. Estos pines son: • TMS: Test mode select. Este pin es usado para la navegación a través del estado de máquina del controlador TAP. • TCK: Test Clock. Operación 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 también especifica una señal opcional TAP; TRST -Test ReSeT lo cual no esta provisto. Cuando el Fusible JTAGEN no es programado, estos cuatro pines TAP son pines de p´rotico, y el controlador TAP está en Reset. Cuando es programado, las señales 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 también pull low al pin

a reset al sistema entero, asumiendo solo colector abierto en la línea reset son usados en la aplicación.

23.4 Controlador TAP El controlador TAP es un estado de maquina de 16 bits que controla la operación del circuito Boundaryscanm, circuito de programación del JTAG, o On-chip Debug system. Las transiciones de estado descritas en la Figura 23—2 dependen de la señal presente en TMS al tiempo que el flanco de subida en TCK. Es estado inicial después de Encendido en el Reset es probado. Como definición 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 típico 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 sería sostenida en bajo durante la entrada de los 3 LSB para permanecer en el estado Shift-IR. El MSB de la instrucción es desplazado cuando este estado esta a izquierda en la configuración TMS alto. Mientras la instrucción es desplazada desde el pin TDI, la captura IR-state 0x01 es desplazada afuera en el pin TDO. La instrucción 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 instrucción es habilitada en la salida paralela desde el Registro de Desplazamiento en el Update-IR state. Los estados Exit-IR, Pause- IR, and Exit2-IR son solo usados para navegación 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 navegación de la máquina de estados. Como se muestra en este diagrama de estados, el Run-Test/Idle state no necesita ser ingresado entre la selección de la instrucción 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 descripción del Boundary-scan capabilities esta dado en la sección ”IEEE 1149.1 (JTAG) Boundary-scan” en la página 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 periféricos internos • Break Point unit. • Interfase de comunicación 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 vía internal AVR CPU Scan Chain. El CPU envía el resultado a la localidad de memoria de E/S lo cual es parte de la interfase de comunicación 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 más de estos recursos para propósitos internos, permitiendo menos flexiblidad al usuario final. Una lista del On-chip debug de las instrucciones específicas del JTAG es dada en ”On-chip Debug Specific JTAG Instructions” en la página 264 del data sheet. El fusible JTAGEN debería ser programado para habilitar el Pórtico de Acceso de Prueba del JTAG. En suma, el fusible OCDEN debe ser programado y los bits de Bloqueo no debería ser puestos en uno para el sistema de trabajo On-chip debug. Como un sistema de seguridad, el sistema On.chip debug es deshabilitado cuando los bits de bloqueo LB1 o LB2 son peuestos en uno. Además, el sistema On-chip debug debería estar provisto de un back-door dentro del dispositivo. El AVR estudio permite al usuario un control total en la ejecución de los programas en el dispositivo AVR con la capacidad del On-chip debug, AVR In-Circuit Emulator, or the built-in AVR Instruction Set Simulator. La fuente de soporte del AVR estudio ejecuta programas en nivel ensamblador con Atmel Corporation’s 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 descripción total del AVR estudio, por favor refierase a la Guía de Usuario del AVR estudio. Todos los comandos de ejecución están presentes en el AVR estudio. El usuario puede ejecutar el programa, con pasos simples a través de códigos The user can execute the program, single step through the code either by

tracing into or stepping over functions, step out of functions, place the cursor on a statement and execute until the statement is reached, stop the execution, and reset the execution target. In addition, the user can have an unlimited number of code Break Points (using the BREAK instruction) and up to two data memory Break Points, alternatively combined as a mask (range) Break Point. 23.7 On-chip Debug Specific JTAG Instructions The On-chip debug support is considered being private JTAG instructions, and distributed within ATMEL and to selected third party vendors only. Instruction opcodes are listed for reference. 23.7.1 PRIVATE0; 0x8 Private JTAG instruction for accessing On-chip debug system. 23.7.2 PRIVATE1; 0x9 Private JTAG instruction for accessing On-chip debug system. 23.7.3 PRIVATE2; 0xA Private JTAG instruction for accessing On-chip debug system. 23.7.4 PRIVATE3; 0xB Private JTAG instruction for accessing On-chip debug system. 23.8 Using the JTAG Programming Capabilities Programming of AVR parts via JTAG is performed via the 4-pin JTAG port, TCK, TMS, TDI, and TDO. These are the only pins that need to be controlled/observed to perform JTAG programming (in addition to power pins). It is not required to apply 12V externally. The JTAGEN Fuse must be programmed and the JTD bit in the MCUCR Register must be cleared to enable the JTAG Test Access Port. The JTAG programming capability supports: • Flash programming and verifying. • EEPROM programming and verifying. • Fuse programming and verifying. • Lock bit programming and verifying. The Lock bit security is exactly as in parallel programming mode. If the Lock bits LB1 or LB2 are programmed, the OCDEN Fuse cannot be programmed unless first doing a chip erase. This is a security feature that ensures no back-door exists for reading out the content of a secured device. The details on programming through the JTAG interface and programming specific JTAG

instructions are given in the section ”Programming via the JTAG Interface” on page 312. 23.9 Bibliography For more information about general Boundary-scan, the following literature can be consulted: • IEEE: IEEE Std. 1149.1-1990. IEEE Standard Test Access Port and Boundary-scan Architecture, IEEE, 1993. • Colin Maunder: The Board Designers Guide to Testable Logic Circuits, Addison-Wesley, 1992. 23.10 Descripción de Registros 23.10.1 OCDR – Registro On-chip Debug

El Registro OCDR provee un canal de comunicación 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 más significativo es el IDRD. El compilador limpia el bit IDRD cuando este ha leído la información. En algunos dispositivos AVR, este registro está en las localidades estándares 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 estándares 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 Revisión General El Boundary-scan cambia la capacidad del controlador y observando los niveles lógicos en los pines digitales de E/S, así como el límite entre digital y análogo lógico por circuitería analógica Teniendo conexiones off-chip. En el nivel del sistema, todas las ICs tienen JTAG capaces de ser conectadas serialmente por las señales 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 señales TAP. Las cuatro instrucciones definidas por la IEEE 1149.1 en el JTAG son IDCODE, BYPASS, SAMPLE/PRELOAD, y EXTEST, así como la instrucción publica AVR del JTAG AVR_RESET puede ser usada para prueba de las junturas de circuitos impresos. Iniciando la revisión del Registro de datos mostraría el código ID de los dispositivos, desde IDCODE es la definición 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 revisión 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 pórtico instantáneamente entra en estado de alta impedancia, haciendo la instrucción HIGH redundante. Si es necesario, la instrucción BYPASS puede ser emitido hacer la revisión mas corta posible a través del dispositivo. Es dispositivo puede ser puesto en el estado

reset o pulling the external RESET pin low, o emitiendo la instrucción AVR_RESET con configuraciones apropiadas del Reset del Registro de Dato. La instrucción 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 instrucción EXTEST es cangada en el Registro IR del JTAG. Por consiguiente, el SAMPLE/PRELOAD debería también ser usado para configurar valores iniciales en el can ring, Al evitar dañar la tarjeta cuando se usa la instrucción EXTEST por primera vez. SAMPLE/PRELOAD puede también ser usada para tomar instantáneamente de los pines externos durante la operación normal de la parte. El fusible JTAGEN sería programado y el bit JTD en el Registro de E/S MCUCR sería limpiado al habilitar el JTAG Prueba de acceso al pórtico. Cuando se usa la interfase JTAG para Boundary-scan, usando el JTAG TCK con frecuencia de reloj más 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 Desviación • Registro de Identificación del Dispositivo • Registro Reset • Boundary-scan Chain 24.3.1 Registro de Desviación El Registro de Desviación consiste de un simple Registro de Desplazamiento de fase. Cuando el Registro de Desviación 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 Desviación puede ser usado para una revisión corta de la cadena de prueba en el sistema cuando otro dispositivo esta siendo probado. 24.3.2 Registro de Identificación de Registros La Figure 24-1 muestra la estructura del Registro de Identificación de Registros.

Versión Es el número del 4-bit que identifica la revisión del componente. El número de la versión del JTAG sigue la revisión del dispositivo. Revisión A es 0x0, revisión B es 0x1.

Número de Parte Son códigos de 16-bits que identifican el componente. El número de parte del JTAG para el ATmega164P/324P/644P es listado en la Tabla 26-6 en la página 296 del Datasheet. ID del Fabricante Son códigos de 11-bits que identifican el fabricante. EL ID de fabricante del JTAG para ATMEL es listado en la Tabla 26-6 en la página 296. 24.3.3 Registro Reset El Registro Reset es un Registro de Datos de Prueba usado para restablecer la parte. Desde los pines del Pórtico de 3-estados cuando es reseteado, el Registro Reset puede también reemplazar la función de la opción no implementada de la instrucción 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 configuración de los fusibles para las opciones de reloj, la parte permanecerá reseteada por el reset en periodo de tiempo fuera después de dejar el Registro Reset. La salidas desde el Registro de Datos no es habilitada, también el reset tomará lugar inmediatamente, como se muestra en la Figura 24-2.

24.3.4 Boundary-scan Chain The Boundary-scan Chain tiene la capacidad de controlar y observar los niveles lógicos en los pines digitales de E/S, así como el límite entre digital y lógico analógico para circuitos analógicos teniendo conexiones off-chip. Para una completa descripción ver la pagina 269. 24.4 Boundary-scan Specific JTAG Instructions

El Registro de Instrucciones es de 4-bits, soporta 16 instrucciones. El listado de abajo son instrucciones del JTAG útiles para la operación Boundary-scan. Note que la instrucción opcional HIGHZ no esta implementada, pero todas las salidas con 3- estados de capacidad pueden ser puestos en estado de alta impedancia usando la instrucción AVR_RESET, desde el estado de inicio para todo los pines del pórtico es de 3-estados. Como definición de este datasheet, el LSB es desplazado primero hacia adentro y hacia afuera por todos Registros de Desplazamiento. El OPCODE para cada instrucción es mostrado detrás del nombre de la instrucción en el formato hex. El texto describe con cual Registro de Datos es seleccionado como camino entre TDI y TDO para cada instrucción. 24.4.1 EXTEST; 0x0 Obligatoriamente las instrucciones JTAG para seleccionar el Boundary-scan Chain como Registro de Datos para probar los circuitos externos en los paquetes del AVR. Para pines del pórtico, Pull-up Deshabilitadas, Control de Salidas, Datos de Salida, y entrada de Datos son todas accesibles en la revisión en cadena. Para circuitos Analógico teniendo conexiones off-chip, la interfase entre el analógico y el lógico digital es la cadena de revisión. 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 instrucción EXTEST. Los estados activos son: • Captura DR: Datos en los pines externos son probados en el Boundary-scan Chain. • Desplazamiento DR: La cadena de revisión interna es desplazada por la entrada del TCK. • Actualización DR: Datos desde la cadena de revisión es aplicada a los pines de salida. 24.4.2 IDCODE; 0x1 Instrucción opcional del JTAG seleccionando los 32 bits del Registro ID como Registro de Datos. El registro ID consiste de un numero de versión, un número de dispositivo y un código de fabricante escogidos por JEDEC. Esta es la instrucción por defecto después del encendido. Los estados activos son: • Captura DR: Datos en el Registro IDCODE es probado en el Boundary-scan Chain. • Desplazamiento DR: El IDCODE revisa si la cadena es desplazada por la entrada TCK. 24.4.3 SAMPLE_PRELOAD; 0x2 Obligatoriamente las instrucciones del JTAG para pre-carga a la habilitación de salida y tomando instantáneo de los pines de entrada/salida sin afectar la operación del sistema. Sin embargo, la habilitacion de salida no es conectada a los pines. El Boundary-scan Chain es seleccionado como Registro de Datos.

Los estados activos son: • Captura DR: Datos en los pines externos son probados en el Boundary-scan Chain. • Desplazamiento DR: La cadena de revisión interna es desplazada por la entrada del TCK. • Actualización DR: Datos desde la cadena de revisión es aplicada a los pines de salida. Sin embargo, las salidas de habilitacion no son conectadas a los pines. 24.4.4 AVR_RESET; 0xC Las especificaciones publicas del AVR en las instrucciones JTAG son forzadas a los dispositivos AVR en el modo Reset o desconectando la fuente reset del JTAG. El controlador TAP nos es reseteado por esta instrucción. El bit uno del Registro Reset es seleccionado como registro de datos. Note que el reset seria activado tan pronto este uno lógico en la cadena Reset. La salida desde esta cadena no es habilitada. Los estados de activación son: • Desplazamiento DR: El Registro reset es desplazado por la entrada del TCK. 24.4.5 BYPASS; 0xF Obligatoriamente las instrucciones JTAG seleccionan el Registro de desviación para el registro de datos. Los estados de activación son: • Captura DR: cargando 0 lógico en el Registro de Desviación. • Desplazamiento DR: El Registro de Desviación célula entre TDI y TDO es desplazado. 24.5 Boundary-scan Chain El Boundary-scan chain tiene la capacidad manejar y controlar los niveles lógicos de los pines de E/S digital, así como el límite entre digital y lógico digital para circuitos analógicos que tienen conexiones off-chip. 24.5.1 Escaneando Pines de los Pórticos Digitales La Figura 24-3 muestra la célula del Boundary-scan para pin de pórticos bi-direccionales. La función pull-up es deshabilitada durante Boundary-scan cuando el JTAG IC contiene EXTEST o SAMPLE_PRELOAD. La célula consiste de pines bi-direccionales combinando las tres señales 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 pórtico 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 pórtico como se describe en la sección E/S de Pórticos. Cuando ninguna función alternativa en el pórtico 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

Dirección de datos- Registro DD, y habilitación Pull-up-PUExn correspondiente a la expresión lógica

Las funciones alternativas del pórtico digital son conectadas fuera de la caja punteada en la Figura 24-4 para hacer la lectura de verificación encadena en el valor actual del pin. Para funciones Analógicas, esto es conectado directamente desde el pin externo del circuito analógico. No hay revisión en cadena en la interfase entre lo digital y el circuito analógico, pero algunas señales de controles digitales a circuitos analógicos son apagadas para evitar la disputa del manejo en los pads. Cuando el JTAG IR contiene EXTEST o SAMPLE_PRELOAD el reloj no envía hacia fuera de los pines del pórtico si el fusible CKOUT es programado. Incluso a través 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 operación del reset estándar, 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 Caín 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 pórticos. Excepciones de estas reglas son la cadena de escaneo para circuitos analógicos, lo cual constituye los bits más significantes indiferente de la cadena de escaneo de los pines físicos 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 Pórtico 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 Descripción de Registros 24.8.1 MCUCR – Registros de Control MCU

• Bits 7 – JTD: Desabilitación 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 desabilitación o una habilitacion desvoluntaria de la interfase JTAG, la secuencia de tiempo seria seguida cuando cambia este bit. El software de aplicación escribiría a este bit el valor deseado dos vece cada cuatro ciclos al cambio de este valor. Note que este bit no sería alterado cuando se usa el On-chip Debug system.

24.8.2 MCUSR – Registro de Estado MCU El Registro de Estado MCU brinda información 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 lógico en el Registro Reset del JTAG seleccionado por la instrucción del JTAG AVR_RESET. Este bit es reset por el encendido del reset, o por escritura de cero lógico en la bandera.

25. Boot Loader Support – Auto programación de Escritura mientras se realiza la lectura. 25.1 Descripciones • Read-While-Write Self-Programming • Flexible Boot Memory Size • High Security (Separate Boot Lock Bits for a Flexible Protection) • Separate Fuse to Select Reset Vector • Optimized Page(1) Size • Code Efficient Algorithm • Efficient Read-Modify-Write Support Note: 1. A page is a section in the Flash consisting of several bytes (see Table 26-7 on page 296) used during programming. The page organization does not affect normal operation. 25.2 Revisión General El Boot Loader Support proporciona un mecanismo de auto programación de escritura mientras se realiza la escritura para transmitir y transferir el código del programa por el MCU. Esto permite un software de aplicación flexible para actualización 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 código de lectura y escritura con el código en la memoria flash, leyendo el código desde la memoria de programa. El código de programa dentro de la sección Boot Loader tiene la capacidad de escribir enteramente en la Flash, incluyendo la memoria Boot Loader. El Boot Loader puede incluso modificarse y también borrarse desde el código si esto no necesita nada más. El tamaño 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 protección. 25.3 Application and Boot Loader Flash Sections La memoria Flash es organizada en dos secciones, la sección de aplicación y la sección Boot Loader (ver Figura 25-2 en la página 279 del datasheet). El tamaño de las diferentes secciones es configurada por el fusible BOOTSZ como se muestra en la Tabla 25-7 en la página 288 y Figura 25-2 del datasheet. Estas dos secciones pueden tener diferentes niveles de protección desde que tienen diferentes configuraciones de los bits de bloqueo. 25.3.1 Sección de Aplicación La sección de aplicación es la sección de la Flash que es usada para guardar el código de aplicación. El nivel de protección para la sección de Aplicación puede ser seleccionada por la aplicación de los bits del Boot Loader, ver la Tabla 25-2 de la página 280 del datasheet. La sección de aplicación puede nunca almacenar

cualquier código Boot loader desde la instrucción SPM es deshabilitada cuando se ejecuta desde la sección de Aplicación. 25.3.2 BLS – Sección Boot Mientras la sección de Aplicación es usada para almacenamiento del código de aplicación, el software del Boot Loader sería localizado en el BLS desde la instrucción SPM puede acceder a la Flash, incluyendo sus bits BLS. El nivel de protección para la sección Boot Loader puede ser seleccionada por los bits de bloqueo del Boot Loader, ver la Tabla 25-3 en la página 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 actualización del software del Boot Loader la actualización es dependiente de la dirección con la que ha sido programada. Adicionalmente las dos secciones que son configuradas por los fusibles BOOTSZ como se describe a continuación, la Flash también divide en dos secciones arregladas, la sección de lectura mientras se escribe (RWW) y la sección de no lectura mientras se escribe (NRWW). El límite entre las secciones RWW y NRWW es dado en la Tabla 25-1 y la figura 25-1 en la página 278 en el datasheet. La diferencia entre las dos secciones son: • Cuando se borra o escribe en la localidad de página dentro de la sección RWW, la sección NRWW puede ser leída durante la operación. • Cuando se borra o escribe en la localidad de página dentro de la sección NRWW, la CPU es detenida durante la operación entera. Note que el software del usuario puede nunca leer ningún código que es localizado dentro de la sección Boot Loader del software de aplicación. La sintaxis “Lectura mientras se escribe” se refiere a que la sección puede llegar hacer programada (borrado o escritura), con lo que la sección actual no llega hacer leída durante la actualización del software del Boot Loader. 25.4.1 RWW –Sección de Lectura mientras se Escribe Si la actualización del software del Boot Loader es programado dentro de la página de la sección RRW, esto es posible al leer el código desde la Flash, pero solo el código que es localizado en la sección NRWW. Durante la continuación del programa, el software aseguraría que la sección NRWW nunca sea leída. Si el software del usuario esta probando el código de lectura que esta localizado en la sección RWW (por ejemplo, cargando la memoria de programa, llamar, o instrucciones de salto o interrupciones) durante la programación, el software finalizaría en un estado desconocido. Para evitar esto, las interrupciones deberían ser deshabilitadas I movidas a la sección Boot Loader. Esta sección esta siempre localizada en la sección NRWW. La sección ocupada por el bit RWWSB en el programa de almacenamiento de la memoria de control y registro de estado (SPMCSR) sería leído como uno lógico

mientras la sección RRW es bloqueado para la lectura. Después que la programación es completada, el RWWSB sería limpiado por software antes de leer la localidad del código en la sección RWW. Ver la sección “25.9.1” para mayores detalles de cómo limpiar RWWSB: 25.4.2 NRWW – Sección de No lectura mientras se realiza la escritura. La localidad del código en la sección NRWW puede ser leída cuando el software del Boot Loader esta actualizando la página en la sección RRW. Cuando código del Boot Loader actualiza la sección NRWW, el CPU es detenido durante la operación del borrado de página o escritura de página.

25.5 Bits Bloqueados del Boot Loader Si la capacidad del Boot Loader no es necesitada, la Flash esta disponible para códigos de aplicación. 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 protección. El usuario puede seleccionar: • Proteger la Flash desde la actualización de software por el MCU. • Proteger solo la sección Flash Boot loader desde la actualización del software por el MCU. • Proteger solo la sección de Paliación de la Flash desde la actualización del software por el MCU. • Permitir la actualización del software en la Flash. Ver la Tabla 25-2 en la página 280 y la Tabla 25-3 en la página 280 del datasheet para mayores detalles. Los bits de bloqueo del Boot pueden ser puestos en software y en modo de programación 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 programación de la memoria Flash por la instrucción 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 aplicación. Esto puede ser inicializado por un disparo como un comando de recepción vía 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 después del reset. En este caso, el Boot Loader es iniciado después del reset. Después que el código de aplicación es cargado, el programa puede iniciar a ejecutar el código de aplicación. 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 apuntaría al Boot Loader Reset y el fusible puede ser solo cambiado a través de la interfase de programación serial o paralela.

Desde la Flash esta organizada en páginas, el contador de programa puede ser Tratado como si tuviera dos secciones diferentes. Una sección, consiste de los bits menos significantes, están direccionando las palabras dentro de la página, mientras los bits más significativos están direccionando las páginas. Esto es mostrado en la Figura 25-3. Note que las operaciones de Borrado de página y escritura son direccionadas independientemente. Si esto es de mayor importancia que el software del Boot Loader direcciona la misma página en ambas operaciones de Borrado de página y escritura de página. Una vez que la programación es inicializada, la dirección es habilitada y el puntero Z puede ser usado para otras operaciones. La instrucción (E)LPM usa el puntero Z para almacenamiento de la dirección. Desde estas instrucciones direccionan la Flash byte por byte, también el bit Z0 de puntero Z es usado.

25.8 Auto-Programando la Flash La memoria de programa es actualizada en una página por la página de moda. Antes de programar la página con el dato almacenado en buffer de la página temporal, la página seria borrada. El buffer de la página temporal es llenado con una palabra al tiempo que esta usando SPM y el buffer puede ser llenada antes del comando de borrado de página o entre las operaciones de borrado de página y escritura: Alternativa 1, llenar el buffer antes del Borrado de Página • Llenar el buffer de la página temporal • Realice el Borrado de página • Realice la escritura de página Alternativa 2, llenar el buffer antes del Borrado de Página • Realice el Borrado de página • Llenar temporalmente el buffer de página • Realice la escritura de página Si solo una parte de las páginas necesitan ser cambiadas, el resto de las páginas serian almacenadas (por ejemplo en el buffer de página 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 página, 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 página esta listo para ser borrado.

El buffer de página temporal puede ser accedido en cualquier secuencia. Esto es esencial que la dirección de página usada en ambos el borrado de página y la escritura de página es direccionada en la misma página. 25.8.1 Realizando el Borrado de Página por SPM Para ejecutar el borrado de página, configurar la dirección en el puntero Z, escribir “X0000011” a SPMCSR y ejecutar SPM dentro de cuatro ciclos de reloj después escribiendo en SPMCSR. El dato en R1 y R0 es ignorado. La dirección de página seria escrita a PCPAGE en el registro Z. Otros bits en el puntero Z sería ignorados durante esta operación. • Borrar la página en la sección RWW: La sección NRWW puede ser leída durante el borrado de página. • Borrar la Página en la sección NRWW: El CPU es detenido durante esta operación. 25.8.2 Llenando temporalmente el buffer (Cargando la Página) Para escribir una palabra de instrucción, configurar la dirección en el puntero Z y datos en R1:R0, escribir “0000001” a SPMCSR y ejecutar SPM dentro de cuatro ciclos de reloj después 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 después de la operación de escritura de página o por la escritura del bit RWWSRE en SPMCSR. Esto también es borrado después del reset del sistema. Note que esto no es posible al escribir más de una vez cada dirección sin borrar el buffer temporal. Si la EEPROM es escrita en la mitad de la operación de carga de página SPM, todos los datos cargados serían borrados. 25.8.3 Realizando la Escritura de Página Para ejecutar la escritura de página, configurar la dirección del puntero Z, escribir “X0000101”a SPMCSR y ejecutar SPM dentro de cuatro ciclos de reloj después de la escritura de SPMCSR. El dato en r1 y R0 es ignorado. La dirección de página seria escrita a PCPAGE en el registro Z. Otros bits en el puntero Z sería ignorados durante esta operación. • Borrar la página en la sección RWW: La sección NRWW puede ser leída durante el borrado de página. • Borrar la Página en la sección NRWW: El CPU es detenido durante esta operación. 25.8.4 Usando la Interrupción de SPM Si la interrupción SPM es habilitada, esta generaría una interrupción constante cuando el bit SPMEN en SPMCSR es limpiado. Esto significa que la interrupción puede ser usada para un cambio por software en el registro SPMCSR. Cuando se usa la interrupción SPM, el vector de interrupción debería ser movido a la sección BLS para evitar que la interrupción este accediendo a la sección RWW cuando esto es bloqueado para lectura. El como mover las interrupciones se describe en “Interrupciones” en la página 61 de datasheet.

25.8.5 Consideraciones mientras se actualiza el BLS Cuidados especiales deben ser tomados si el usuario permite a la sección 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 actualización 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 sección RWW durante la auto programación Durante la Auto programación (Borrado de Pagina o Escritura de Pagina), la sección RWW es siempre bloqueada por la lectura. El software del usuario prevendría que esta sección sea direccionada durante la operación de auto programación. El RWWSB es SPMCSR sería puesto en uno mientras la sección RWW esta ocupada. Durante la auto programación del vector de interrupción debería ser movida a BLS como se describe en “Interrupciones” en la página 61 del datasheet., o las interrupciones serian deshabilitadas. Antes de direccionar la sección RWW después que la programación es completada, el software del usuario limpiaría 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 después escribiendo a SPMCSR.

Si los bits 5…0 son limpiados (cero), el correspondiente bit Boot Lock sería programado si la instrucción SPM es ejecutada dentro de cuatro ciclos de reloj después BLBSET y SPMEN son puestos en uno a SPMCSR. El puntero Z no tiene cuidado durante esta operación, 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 operación. 25.8.8 EEPROM Write Prevents Writing to SPMCSR

Note que la operación de escritura de la EEPROM bloquearía toda la programación de software en la Flash. Leyendo los fusibles y los bits de bloqueo desde software esto también prevendría durante la operación 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 instrucción (E) LPM es ejecutada dentro de tres ciclos de CPU después los bits BLBSET y SPMEN son puestos en uno en SPMCSR, el valor de los bits de bloqueo serían cargados en el registro de destino. Los bits BLBSET y SPMEN auto limpiarían en la realización de la lectura de los bits de bloqueo o si la instrucción (E) LPM es ejecutada dentro de tres ciclos CPU o la instrucción no es ejecutada dentro de cuatro ciclos de CPU. Cuando BLBSET y SPMEN son limpiados, (E) LPM trabajaría como se describe en la habilitación 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 instrucción (E) LPM es ejecutada dentro de tres ciclos después los bits BLBSET y SPMEN son puestos en uno en SPMCSR, el valor del byte bajo de los Fusibles (FLB) sería cargado en el registro de destino como se muestra a continuación:

Similarmente, cuando se lee el byte alto del Fusible, cargar 0x0003 en el puntero Z. Cuando la instrucción (E) LPM es ejecutada dentro de tres ciclos después que los bits BLBSET y SPEM son puestos en uno en SPMCSR, el valor del byte alto del Fusible (FHB) sería cargado en el registro de destino como se muestra a continuación:

Cuando se lee el byte extendido del fusible, cargar 0x0002 en el puntero Z. Cuando la instrucción (E) LPM es ejecutada dentro de tres ciclos después los

bits BLBSET y SPMEN son puestos en uno en el registro de destino como se muestra a continuación:

Si el Fusible y los bits de bloqueo son programados, serían leídos como cero. Si los bits de Fusible y Bloqueo no son programados serian leídos 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 dirección del byte de firma dado en la Tabla 25-5 y poner en uno los bits SIGRD y SPMEN en SPMCSR. Cuando una instrucción LPM es ejecutada dentro de tres ciclos CPU después los bits SIGRD y SPMEN son puestos en uno en SPMCSR, el valor del byte de firma sería cargado en el registro de destino. Los bits SIGRD y SPMEN auto programaría por completo la lectura de los bits de bloqueo de fila de firma o si la instrucción LPM es ejecutada dentro de tres ciclos CPU. Cuando SIGRD y SPMEN son limpiados, LPM trabajaría como se describe en la habilitación de instrucciones del manual.

25.8.11 Previniendo la corrupción de la Flash Durante periodos de bajo Vcc, la programación 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 corrupción 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 mínimo 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 corrupción de la Flash puede ser fácilmente evitada siguiendo las siguientes recomendaciones:

1. Si no se necesita la actualización para el Boot Loader en el sistema, programar los bits de bloqueo del Boot Loader para prevenir cualquier actualización 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 operación de escritura esta en progreso, esta operación sería completada si la fuente de energía es suficiente. 25.8.12 Programando el tiempo de la Flash cuando se esta usando SPM La calibración del Oscilador RC es usada en el tiempo de acceso de la Flash. La Tabla 25-6 muestra el tiempo de programación típica para la Flash desde la CPU.

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

; execute Page Write subi ZL, low(PAGESIZEB) ;restore pointer sbci ZH, high(PAGESIZEB) ;not required for PAGESIZEB<=256 ldi spmcrval, (1<<PGWRT) | (1<<SPMEN) call Do_spm ; re-enable the RWW section ldi spmcrval, (1<<RWWSRE) | (1<<SPMEN) call Do_spm ; read back and check, optional ldi looplo, low(PAGESIZEB) ;init loop variable ldi loophi, high(PAGESIZEB) ;not required for PAGESIZEB<=256 subi YL, low(PAGESIZEB) ;restore pointer sbci YH, high(PAGESIZEB) Rdloop: elpm r0, Z+ ld r1, Y+ cpse r0, r1 jmp Error sbiw loophi:looplo, 1 ;use subi for PAGESIZEB<=256 brne Rdloop ; return to RWW section ; verify that RWW section is safe to read Return: in temp1, SPMCSR sbrs temp1, RWWSB ; If RWWSB is set, the RWW section is not ready yet ret ; re-enable the RWW section ldi spmcrval, (1<<RWWSRE) | (1<<SPMEN) call Do_spm rjmp Return Do_spm: ; check for previous SPM complete Wait_spm: in temp1, SPMCSR sbrc temp1, SPMEN rjmp Wait_spm ; input: spmcrval determines SPM action ; disable interrupts if enabled, store status in temp2, SREG cli ; check that no EEPROM write access is present Wait_ee: sbic EECR, EEPE rjmp Wait_ee ; SPM timed sequence out SPMCSR, spmcrval spm ; restore SREG (to enable interrupts if originally enabled) out SREG, temp2 ret 25.8.14 ATmega164P Boot Loader Parameters In Table 25-7 through Table 25-9, the parameters used in the description of the Self-Programming are given.

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

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

25.9 Descripción 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: Habilitación de Interrupciones SPM Cuando el bit SPMIE es escrito a uno, y el bit I del Registro de estado es uno, la interrupción estaría lista para ser habilitada. La interrupción SPM sería ejecutada mientras el bit SPMEN en SPMCSR es limpiado. • Bit 6 – RWWSB: Lectura mientras la sección de escritura esta ocupada Cuando la operación de auto programación (Borrado de Página o escritura de Página) en la sección RWW es inicializada, RWWSB seria uno por hardware.

Cuando el bit RWWSB es uno, la sección RWW no puede ser accedida. El bit RWWSB sería limpiado si el bit RWWSRE es escrito a uno después de que la operación de auto programación es completada. Alternativamente el bit RWWSB automáticamente sería limpiado si la operación cargar página 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 instrucción LPM dentro de tres ciclos de reloj leería el byte desde la fila de firma en el registro de destino. Las instrucciones LPM dentro de cuatro ciclos de máquina después SIGRD y SPMEN son puestos en uno y no tendrían efecto. Esta operación es reservada para usos futuros y no debería ser usada. • Bit 4 – RWWSRE: Read-While-Write Section Read Enable Cuando la operación de auto programación (Borrado de Página o escritura de Página) en la sección RWW, la sección RWW es bloqueada para la lectura (RWWSB sería puesto en uno por hardware). Para re-habilitar la sección RWW, el software del usuario esperaría hasta que la programación sea completada (SPMEN sería limpiado). Luego, si el bit RWWWSRE es escrito a uno al mismo tiempo que SPMEN, la siguiente instrucción dentro de cuatro ciclos de reloj re-habilita la sección RWW. La sección RWW no podría ser re-habilitada mientras la flash esta ocupada con el Borrado de Página o Escritura de Pagina (SPMEN es uno). Si el bit RWWSRE es escrito mientras la Flash está siendo cargada, la operación de cargar la Flash abordaría y el dato cargado sería 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 instrucción 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 dirección en el puntero Z son ignoradas. El bit BLSET automáticamente sería limpiado por completo del bit en uno del Lock, o si no la instrucción SPM es ejecutada dentro de cuatro ciclos de reloj. Cuando la instrucción (E) LPM dentro de tres ciclos después 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 Página Si este bit es escrito a uno al mismo tiempo que SPMEN, la siguiente instrucción dentro de cuatro ciclos de reloj ejecutan la escritura de página, con el dato almacenado en el buffer temporal. La dirección de página es tomada desde la parte alta del puntero-Z. el dato en R1 y R0 son ignorados. El bit PGWRT auto-limpiaría completamente la página de escritura, o si no la instrucción SPM es ejecuta dentro de cuatro ciclos de reloj. La CPU es detenida durante la operación de escritura de página si la sección NRWW es direccionada. • Bit 1 – PGERS: Borrado de Página

Si este bit es escrito a uno al mismo tiempo que SPMEN, la siguiente instrucción dentro de cuatro ciclos de reloj ejecutan el borrado de página. La dirección de página es tomada desde la parte alta del puntero-Z. El dato en R1 y R0 son ignorados. El bit PGERS auto-limpiaría completamente el borrado de página, o si no la instrucción SPM es ejecuta dentro de cuatro ciclos de reloj. La CPU es detenida durante la operación de borrado de página si la sección NRWW es direccionada. • Bit 0 – SPMEN: Store Program Memory Enable Este bit habilita la instrucción SPM para los siguientes cuatro ciclos de reloj. Si se escribe una de ambas con RWWSRE, BLBSET, PGWRT’ o PGERS, la siguiente instrucción SPM tendría un significado especial, ver la descripción anterior. Si solo SPMEN es escrito, la siguiente instrucción SPM cargaría el valor en R1:R0 en el buffer temporal de página direccionado por el puntero-Z. El LSB del puntero Z es ignorado. El bit SPMEN auto limpiaría por completo la instrucción SPM, o si no la instrucción SPM es ejecutada dentro de cuatro ciclos de reloj. Durante el borrado de pagina y escritura de página, el bit SPMEN permanece en alto hasta que la operación es completada. Escribiendo cualquier otra combinación “10001”, “01001”, “00101”, “00011” or “00001” en los cinco bits bajos no tendría efecto. Nota: Solo un a instrucción SPM debería 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.

FASTKUNTUR
Highlight
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.

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 leídos con cero lógico, “0”, si son programados.

26.2.1 Habilitación de Fusibles Los valores de los fusibles son habilitados cuando los dispositivos entran al modo de programación. Esto no es aplicable al fusible EESAVE lo cual tendría efecto una vez que es programado. Estos fusibles son también habilitados al encendido en modo normal.

26.3 Bytes de Identificación Todos los microcontroladores de Atmel tienen tres-byte de código de firma con lo cual se identifican los dispositivos. Estos códigos pueden ser leídos en modo serial y paralelo, también 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 Calibración El ATmega164P/324P/644P tiene un byte de calibración con un valor para el oscilador interno RC. Este byte reside en el byte en alto de la dirección 0x000 en el espacio de la dirección de firma. Durante el reset, este byte es automáticamente escrito en el Registro OSCCAL para habilitar la frecuencia correcta de la calibración del Oscilador RC. 26.5 Tamaño de Página

26.6 Parámetros de Programación en Paralelo, Mapamiento del Pin, y Comandos Esta sección 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 sección, algunos pines del ATmega164P/324P/644P son identificados por los nombres de firma describiendo la funcionalidad durante la programación 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 acción a ejecutarse cuando el pin XTAL se le da un pulso positivo, El código 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 Programación El siguiente algoritmo pone al dispositivo en modo de programación 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 causaría que el dispositivo falle en el modo de programación. 5. Esperar 50 us antes de enviar el Nuevo comando. 26.7.2 Consideraciones para una Programación Eficiente Al cargar el comando y la dirección estos son retenidos en el dispositivo durante la programación, lo siguiente debería ser considerado: • El comando necesita solo ser cargado una vez cuando se escribe o se lee múltiples 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 después del Chip Erase. • La dirección del byte en alto necesita solo ser cargada antes de la programación o leyendo 256 nuevas palabras en la Flash o 256 bytes en la EEPROM. Esta consideración también aplica a los bytes de firma leídos. 26.7.3 Chip Erase El Chip Erase borraría las memorias Flash y la EEPROM más 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 después 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 cargaría 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 simultáneamente. 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 a“00”. 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 dirección 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. Habilitación 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 través de E hasta que el buffer sea llenado totalmente por todos los datos si la página es cargada. Mientras los bits más bajos en la dirección son mapeados a palabras dentro de la página, las direcciones de los bits más 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 dirección en la página (tamaño de la pagina < 256), el bit más significante en la dirección de los bytes en bajo son usadas para direccionar la página cuando realizan la escritura de la página. 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 dirección 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 programación de la página de datos en su totalidad. está en bajo.

3. Esperar hasta que este en alto (Ver figura 26-3). J. Repetir B a través de I hasta que la Flash sea programada totalmente o todos los datos han sido programados. K. Programando el Fin de Página 1. Poner XA1, XA0 a “10”. Esto habilita la carga de los comandos. 2. Poner DATA a “0000 0000”. Este el comando de No operación. 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 páginas. Cuando se programa la EEPROM, los datos de programa son habilitados en el buffer de la página. Esto permite una página de datos para ser programada simultáneamente. El algoritmo de programación para la memoria de datos EEPROM se describe a continuación: 1. A: Cargar Comando “0001 0001”. 2. G: Cargar Dirección del byte alto (0x00 - 0xFF). 3. B: Cargar Dirección 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 través de 5 hasta que el buffer este totalmente llenado. L: Programar la página de la EEPROM 1. Poner BS2, BS1 a “00”.

2. Dar a un pulso negativo. Esto inicia la programación de la página de la EEPROM. Están en bajo. 3. Esperar hasta que estén en alto antes de programar la página siguiente. Ver figura 26-4.

26.7.6 Leyendo la Flash El algoritmo para lectura de la memoria Flash se describe a continuación: 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 leída en DATA. 6. Poner BS a “1”. La palabra de la Flash con byte altos puede ser leída en DATA. 7. Poner OE a “1”. 26.7.7 Leyendo la EEPROM El algoritmo para lectura de la EEPROM es descrita a continuación: 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 leída 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 continuación.

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 continuación: 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 continuación: 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 continuación: 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 ningún modo de programación 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 continuación: 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 leídos 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 leídos en DATA (“0” significa que ha sido programado).

4. Poner a “0”, y BS2, BS1 a “10”. El estado de los bits extendidos del Fusible pueden ahora ser leídos 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 leídos 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 continuación: 1. A: Cargar Comando “0000 1000”. 2. Cargar Datos de Byte Bajos (0x00 - 0x02).

3. Poner a “0”, and BS to “0”. La selección de byte de firma ahora puede ser leída en DATO.

4. Poner a “1”. 26.7.14 Lectura de los Bytes de Calibración El algoritmo para lectura del byte de Calibración se describe a continuación:

1. A: Cargar Comando “0000 1000”. 2. B: Cargar Datos de Byte Bajos, 0x00.

3. Poner a “0”, y BS1 a “1”. El byte de calibración puede ahora ser leído en DATA.

4. Poner a “1”. 26.7.15 Características de la Programación en Paralelo

26.8 Descarga Serial Ambas series de memorias la Flash y la EEPROM pueden ser programadas usando un bus serial de programación mientras RESET es puesto a GND. La interfase de programación Serial consiste de pines SCK, MOSI (entrada) y MISO (salida). Después el RESET el puesto en bajo, la instrucción para habilitar la Programación 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 programación serial es listado. No todos los paquetes usan los pines SPI dedicados para los periféricos internos de Interfase Serial-SPI. 26.8.1 Mapamiento del pin de Programación Serial

Cuando programando la EEPROM, el ciclo de auto-borrado es construido en el mismo tiempo de operación de programación (solo en el modo serial) y no necesita ser ejecutada primero en la instrucción Borrado de Chip. La operación 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 válido estaría presente. Los periodos mínimos en bajo y alto para el reloj de salida serial (SCK) son definidas a continuación: 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 Programación 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 programación serial, la siguiente secuencia es recomendada: 1. Secuencia de Encendido:

Aplicando Energía entre Vcc y GND mientras el y SCK son puestos en “0”. En algunos sistemas la programación no puede garantizar que SCK es

mantenida en bajo durante el encendido. En este caso, el daría pulsos positivos de los dos últimos ciclos de reloj del CPU después el SCK ha sido puesto en “0”. 2. Esperar por lo menos 20 ms y habilitar la programación serial enviando la instrucción de habilitación de programación al pin MOSI. 3. Las instrucciones de Programación serial no trabajarían si la comunicación esta fuera de sincronización. Cuando en la sincronización, el segundo byte (0x53), regresaría cuando emite el tercer byte de la habilitación de la instrucción de programación. Por consiguiente el eco es correcto o no, para todos los cuatro bytes de las instrucciones serian transmitidas. Si la 0x53 no retrocedería, dar

con un pulso positivo y emitir el nuevo comando de habilitación de programación. 4. La flash programa una página en un momento. La pagina de memoria carga un byte en un momento supliendo el 7 LSB de la dirección y datos ambos con la instrucción Cargar la pagina de la memoria de programa. Para asegurar la carga correcta de la página, el byte bajo del dato sería cargado antes que el byte alto del dato esto es aplicado para las direcciones dadas. La página de la memoria de programa es almacenada cargando el instrucción de escritura de pagina de la memoria de programa con las líneas de dirección 15..8. Antes emitiendo este comando, estar seguro que la instrucción cargar el byte de dirección extendido ha sido usado para definir la MSB de la dirección. El byte de dirección extendida es almacenado hasta que el comando es re-emitido, por ejemplo, los comandos necesitan solo ser emitidos para la primera página, y cuando cruza el limite de la palabra 64K. Si no es usado, el usuario esperaría al último tWD_FLASH antes de emitir la siguiente página. Ver Tabla 26-16. Accediendo a la interfase de programación serial antes que la operación de escritura de la Flash este completada puede resultar una programación 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 automáticamente borrada antes de que el nuevo datos es escrito. Si el polling no

es usado, el usuario esperaría al ultimo tWD_EEPROM antes de enviar el siguiente byte. Ver la Tabla 26-16. En el borrado del Chip del dispositivo, ningún 0 xFFs en los datos de archivo necesitan ser programados. 6. Ninguna localidad de memoria puede ser verificada usando la instrucción de lectura con la cual retorna el contenido y selecciona la dirección en la salida serial MISO. Cuando se lee la memoria Flash, use la instrucción Cargar el byte de dirección extendido definido arriba del byte de dirección, con lo cual no es incluido la instrucción de la memoria de programa. El byte de dirección extendida es almacenado hasta que el comando es re-emitido, por ejemplo, los comandos necesitan solo ser emitidos para la primera página, y cuando cruzan el limite de la palabra 64K. 7. Al final de la sesión de programación, el puede ser puesto en alto y comenzar una operación normal. 8. Secuencia de Apagado si es necesario. Poner a“1”. Apagar VCC.

26.9 Set de Instrucciones de Programación Serial

Si el LSB en el byte de datos de salida RDY/BSY es “1”, la operación de programación esta todavía pendiente. Esperar hasta que el bit retorne a “0” antes de que la siguiente instrucción es llevada a cabo. Dentro de la misma página, el byte de datos bajo sería cargado antes que el byte de datos alto. Después el dato es cargado en el buffer de página, ver la Figura 26-11.

26.9.1 Características de Programación Serial

26.10 Programando vía la Interfase del JTAG I Programando a través de la interfase del JTAG el control requiere de cuatro pines específicos 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 sería programado. El dispositivo es por defecto desplazado con el programa del fusible. Adicionalmente, el bit JTD en MCUCSR sería limpiado. Alternativamente, si el bit JTD es puesto, el reset externo puede ser forzado en bajo. Luego, el bit JTD sería limpiado después de dos chip de reloj y los pines JTAG como pines de pórtico normales en modo Running mientras todavía permite en la programación del sistema vía la interfase JTAG. Note que esta técnica 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 propósitos. Durante la programación de la frecuencia de reloj de la entrada del TCK seria menos que la frecuencia máxima 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 Específicas del JTAG El Registro de Instrucción es de 4-bits, soportando 16 instrucciones. Las instrucciones del JTAG para programación son listadas debajo. El OPCODE para cada instrucción es mostrado detrás de l nombre de la instrucción en el formato hex. El texto describe con cual Registro de datos es seleccionado como camino entre TDI y TDO para cada instrucción. El estado Run-Test/Idle del controlador TAP es usado como generador de reloj interno. Esto puede también ser usado como estado idle entre las secuencias JTAG. El estado de la secuencia de máquina para cargar la palabra de instrucción es mostrada en la figura 26-13.

26.10.2 AVR_RESET (0xC) El AVR especifica públicamente 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 instrucción. El un bit del registro reset es seleccionado como registro de Datos. Note que el reset seria activado cuando hay uno lógico en la cadena del reset. La salida desde la cadena no es habilitada. Los estados de activación son: • Desplazamiento DR: El Registro reset es desplazado por la entrada del TCK. 26.10.3 PROG_ENABLE (0x4)

El AVR especifica públicamente las instrucciones del JTAG programando vía pórtico 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 habilitación de firma es desplazada en el Registro de Datos. • Actualizando-DR: El programa de habilitación de firma es comparado con el valor correcto y el modo de programación es escogido si la firma es válida. 26.10.4 PROG_COMMANDS (0x5) El AVR especifica públicamente las instrucciones del JTAG programando los comandos vía 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 programación 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 públicamente las instrucciones del JTAG directamente cargando la página de datos de la flash vía el pórtico del JTAG. Unos 8-bits del registro de byte de datos de la Flash es seleccionado como Registro de datos. Esto es físicamente los 8 LSBs del Registro de comandos Programados. El estado activo se describe a continuación: • Desplazamiento DR: El Registro de Byte de Datos de la Flash es desplazado por la entrada TCK. • Actualización-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 automáticamente alterna entre escribir en bajo y en alto el byte para cada nuevo estado de actualización-DR, empezando con el byte bajo para la primera Actualización-DR encontrada después 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 dirección 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 página. 26.10.6 PROG_PAGEREAD (0x7)

El AVR especifica públicamente la instrucción JTAG y captura directamente el contenido de la Flash vía el pórtico del JTAG. Unos 8-bits del Registro de Byte de datos de la Flash es seleccionado como Registro de datos. Esto es físicamente los 8 LSBs del Registro de Comando de Programa. Los estados Activos son los siguientes: • Captura DR: El contenido de selección del bytes de la Flash es capturado en el Registro de Byte de Datos de la Flash. El AVR automáticamente 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 después de comando PROG_PAGEREAD- El contador de Programa es post-incrementado después de leer cada byte alto, incluyendo el primer byte leído. Esto asegura que el primer datos es capturado desde la primera dirección por PROG_COMMANDS, y leyendo la última localidad en la página haciendo que el contador de programa incremente en la siguiente página. • 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 sección “Programación de Instrucciones Especificas del JTAG” Las operaciones más relevantes de programación del Registro de Datos son: • Registro Reset • Programando el Registro de Habilitación • 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 programación. Esto requiere la parte antes del modo de programación. 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 después 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 Habilitación La programación del registro de Habilitación es de 16-bits. El contenido de estos registros es comparado con la programación de la firma de habilitación, con el código binario 0b1010_0011_0111_0000. Cuando el contenido del registro es igual a la programación de la firma de habilitación, programando vía JTAG el pórtico es habilitado. El registro es reseteado a 0 al Encender el Reset, y debería siempre ser reseteado cuando llega al modo de programación.

26.10.10 Programando del Registro de Comandos La Programación 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 Programación 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 programación 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 vía 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 señal de control de la flash y sensa la señal de habilitación 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 página, el estado de actualización 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 página de la Flash. El AVR automáticamente alterna entre escribiendo el byte en bajo y en alto para cada nueva actualización del estado DR, empezando con el byte bajo para la primera actualización encontrada después 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 dirección 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 selección de la Flash es capturado en el registro de byte de datos de la Flash durante el estado de captura DR. El AVR automáticamente 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 después de entrar en el comando PROG_PAGEREAD. El contador de programa es post incrementado después de la lectura de cada byte alto, incluyendo el primer byte leído. Esto asegura que el primer dato es capturado desde la primera dirección preparada por PROG_COMMANDS, y leyendo la última localidad en la página hecha, el contador de programa incrementa a la siguiente página.

El estado de maquina controlando el Registro de Byte de Datos de la Flash es contado por TCK. Durante la operación normal en la cual ocho bits son desplazados por cada byte de la Flash, los ciclos de reloj necesitan navegar a través del controlador TAP automáticamente alimenta al estado de máquina por el Registro de Byte de datos de la Flash con suficiente numero de pulsos reloj para completar esta operación. Sin embargo, si pocos bits son desplazados entre cada estado de actualización DR durante la carga de página, el controlador TAP debería estar en estado Run-Test/Idle para algunos ciclos TCK para asegurar que exista los últimos 11 ciclos TCK entre cada estado de actualización DR:

26.10.12 Algoritmos de Programación Todas la referencias “1a”, “1b, están descritas en la tabla 26-18 de la página 317 del datasheet. 26.10.13 Entrando al Modo de Programación 1. Entrar a la instrucción 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 habilitación del Programa. 26.10.14 Saliendo del Modo de Programación 1. Entrar a la instrucción PROG_COMMANDS. 2. Deshabilitar todas las instrucciones de programación no usar las instrucciones de operación 11a. 3. Entrar a la instrucción PROG_ENABLE y cambiar a 0b0000_0000_0000_0000 en el Registro de habilitación del Programa. 4. Entrar a la instrucción AVR_RESET del JTAG y cambiar a 0 en el Registro Reset. 26.10.15 Realizando el borrado del Chip 1. Entrar a la instrucción PROG_COMMANDS. 2. Empezar con el Borrado del Chip usando las instrucciones de programación 1a. 3. Verificar si el Borrado del Chip se ha completado usando las instrucciones de programación 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 instrucción PROG_COMMANDS. 2. Habilitar la escritura en la Flash usando la instrucción de programación 2a. 3. Cargar la dirección del byte bajo usando la instrucción de programación 2b. 4. Cargar la dirección del byte alto usando la instrucción de programación 2c. 5. Cargar la dirección del byte bajo usando la instrucción de programación 2d. 6. Cargar el dato usando las instrucciones de programación 2e, 2f, y 2g. 7. Repetir los pasos 5 y 6 para todas las palabras de instrucciones en la página. 8. Escribir la página usando la instrucción de programación 2h. 9. Verificar para la escritura de la Flash ha sido completada usando la instrucción de programación 2i, o esperar por tWLRH (Referido en la Tabla 26-14) 10. Repetir los pasos 3 y 9 hasta que todos los datos han sido programados. Una más eficiente transferencia de datos puede ser lograda usando la instrucción de programación PROG_PAGELOAD:

1. Entrar a la instrucción PROG_COMMANDS en el JTAG. 2. Habilitar la escritura en la Flash usando la instrucción de programación 2a. 3. Cargar la dirección de página usando las instrucciones de programación 2b,2c y 2d. PCWORD (Referidos en la Tabla 26-7) es usada para direccionar dentro de una página y seria escrita como 0. 4. Entrar a la instrucción PROG_PAGELOAD en el JTAG. 5. Cargar la página entera moviendo todas las palabras de instrucciones en la página byte por byte, empezando con el LSB de la primera instrucción en la página y finalizando con el MSB de la última instrucción de la página. Usar Actualización DR para copiar los contenidos del Registro de Byte de Datos de la Flash en la localidad de la página de la Flash y con el auto incremento del Contador de Programa antes de cada palabra. 6. Entrar a la instrucción PROG_COMMANDS en el JTAG. 7. Escribir la página usando la instrucción de programación 2h. 8. Verificar para la escritura de la Flash ha sido completada usando la instrucción de programación 2i, o esperar por tWLRH (Referido en la Tabla 26-14) 9. Repetir los pasos 3 y 8 hasta que todos los datos han sido programados. 26.10.17 Leyendo la Flash 1. Entrar a la instrucción PROG_COMMANDS en el JTAG. 2. Habilitar la lectura en la Flash usando la instrucción de programación 3a. 3. Cargar la dirección de página usando las instrucciones de programación 3b, 3c y 3d. 4. Leer el dato usando la instrucción de programación 3e. 5. Repetir los pasos 3 y 4 hasta que todos los datos han sido leídos Una transferencia de datos más eficiente puede ser lograda usando la instrucción de programación PROG_PAGEREAD 1. Entrar a la instrucción PROG_COMMANDS en el JTAG. 2. Habilitar la lectura en la Flash usando la instrucción de programación 3a. 3. Cargar la dirección de página usando las instrucciones de programación 3b, 3c y 3d.. PCWORD (referido en la Tabla 26-7) es usado para direccionar dentro de una página y sería escrito como 0. 4. Entrar a la instrucción PROG_PAGEREAD en el JTAG. 5. Leer la página entera (o Flash) desplazando fuera todas la palabras de instrucciones en la página, empezando con el LSB de la primera instrucción en la página y finalizando con el MSB de la última instrucción de la página. El estado de Captura DR para ambas capturas de datos desde la flash, y también auto incremento del contador de programa después que cada palabra es leída. Note que la captura DR va antes del desplazamiento DR. 6. Entrar a la instrucción PROG_COMMANDS en el JTAG. 7. Repetir los pasos 3 y 6 hasta que todos los datos han sido leídos

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 instrucción PROG_COMMANDS en el JTAG. 2. Habilitar la escritura en la EEPROM usando la instrucción de programación 4a. 3. Cargar la dirección del byte alto usando la instrucción de programación 4b. 4. Cargar la dirección del byte bajo usando la instrucción de programación 4c. 5. Cargar los datos usando las instrucciones de programación 4d y 4e. 6. Repetir los pasos 4 y 5 para todos los bytes de datos en la página. 7. Escribir los datos usando las instrucciones de programación 4f. 8. Verificar para EEPROM que la escritura ha finalizado usando la instrucción de programación 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 instrucción PROG_PAGELOAD no puede ser usada cuando se programa la EEPROM. 26.10.19 Leyendo la EEPROM 1. Entrar a la instrucción PROG_COMMANDS en el JTAG. 2. Habilitar la lectura en la EEPROM usando la instrucción de programación 5a. 3. Cargar los dirección usando las instrucciones de programación 5b and 5c. 4. Leer los datos usando las instrucciones de programación 5d. 5. Repetir los pasos 3 y 4 hasta que todos los datos han sido leídos. Note que la instrucción PROG_PAGEREAD no puede ser usada cuando se lee en la EEPROM. 26.10.20 Programando Fusibles 1. Entrar a la instrucción PROG_COMMANDS en el JTAG. 2. Habilitar la escritura de los Fusibles usando la instrucción de programación 6a. 3. Cargar el dato del byte alto usando la instrucción de programación 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 instrucción de programación 6c. Write Fuse High byte using programming instruction 6c. 5. Verificar que la escritura del fusible ha finalizado usando la instrucción 6d, esperar por tWLRH (referido en la Tabla 26-14). 6. Cargar el dato del byte bajo usando las instrucciones de programación 6e. A “0” programará el fusible, a “1” se desprogramara el fusible. 7. Escribir el fusible en el byte bajo usando la instrucción de programación 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 instrucción PROG_COMMANDS en el JTAG. 2. Habilitar el bloqueo del bit de escritura usando la instrucción de programación 7a. 3. Cargar los datos usando la instrucción de programación 7b. El valor del bit “0” programación el correspondiente bit de bloqueo, a “1” llegaría el bit de bloqueo inesperado. 4. Escribir los bits de bloqueo usando la instrucción de programación 7c. 5. Verificar que la escritura del bit de bloqueo ha finalizado usando la instrucción 6d, esperar por tWLRH (referido en la Tabla 26-14). 26.10.22 Leyendo los Fisibles y Bits de Bloqueo 1. Entrar a la instrucción PROG_COMMANDS en el JTAG. 2. Habilitar Fusible/lectura del bit de bloqueo usando la instrucción de programación 8a. 3. Para leer todos los Fusibles y bits de Bloqueo, use la instrucción de programación 8e. Para solo leer el byte alto del Fusible, use la instrucción de programación 8b. Para solo leer el byte bajo del Fusible, use la instrucción de programación 8c. Para solo leer los bits de Bloqueo, use la instrucción de programación 8d. 26.10.23 Leyendo los bytes de Firma 1. Entrar a la instrucción PROG_COMMANDS en el JTAG. 2. Habilitar la lectura del byte de firma usando la instrucción de programación 9a. 3. Cargar la dirección 0x00 usando la instrucción de programación 9b. 4. Leer el primer del byte de firma usando la instrucción de programación 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 Calibración 1. Entrar a la instrucción PROG_COMMANDS en el JTAG. 2. Habilitar la lectura del byte de calibración usando la instrucción de programación 10a. 3. Cargar la dirección 0x00 usando la instrucción de programación 10b. 4. Leer el byte de calibración usando la instrucción de programación 10c.

27. Características Eléctricas

27.1 Características DC

27.1.1 Características DC del ATmega164P

27.1.2 Características DC del ATmega324P

27.1.3 Características DC del ATmega644P

27.2 Grados de Velocidad La Máxima Frecuencia es dependiente de Vcc. Como se muestra en la Figura 27-1 y 27-2, la curva de Máxima Frecuencia VS. Vcc es lineal entre 1.8V < VCC < 2.7V y entre 2.7V < VCC < 4.5V.

27.3 Características de Reloj

27.3.1 Formas de Onda del Controlador de Reloj Externo

27.3.2 Controlador del Reloj Externo

27.4 Sistema y Características del Reset

27.5 Características de Interrupciones Externas

27.6 Características del Timer SPI

27.7 Características de Interfase Serial 2-hilos (2-wire)

27.8 Características ADC

28. Características Típicas Los siguientes mapas muestran la conducta típica. Estas figuras no son probadas durante la fabricación. 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 Activación y Idle consumo de corriente son hechas con todos los bits en los registros PRR poniendo así, los módulos correspondientes de E/S son apagados. También el comparador Analógico es deshabilitado durante estas mediciones. El consumo de energía en modo Power-down es independiente de la selección del reloj. El consumo de corriente es una función de varios factores como: voltaje de operación, frecuencia de operación, cargando los pines de E/S, cambiando la velocidad del los pines de E/S, ejecutando el código 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 operación y f= frecuencia de cambio promedio de los pines de E/S. Las partes son caracterizadas con más altas frecuencias que los límites de prueba. Las partes no garantizan las propiedades de la función a frecuencias más altas que el código 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 Caracterización Típica del ATmega164P 28.1.1 Suministro Activo Actual

28.1.2 Idle Supply Current

28.1.3 Suministro de Corriente de los módulos E/S Las tablas y formulas pueden ser usadas para calcular el consumo de corriente adicional para los diferentes módulos de E/S en modo Activo y Idle. La habilitación o desabilitación de los módulos de E/S son controlados por el Registro Reducción de Energía. Ver “PPR- Registro de Reducción de Energía” página 48 del datasheet.

Esto es posible es posible calcular con el típico consumo de corriente basado en los números de la Tabla 28-2 página 344 para otro Vcc y frecuencia están listados en la Tabla 28-1 en la página 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

�:��5�I�,��&-��- �������9������

��

��

��

28.1.10 BOD Threshold

28.1.11 Velocidad del Oscilador Interno

��

��

�:��5�5:�� ��� ����� ����������B������,��$(��� ��

��

28.1.13 Current Consumption in Reset and Reset Pulsewidth

28.2 Características Típicas del ATmega324P 28.2.1 Suministro de Corriente Activa

28.2.2 Suministro de Corriente Idle

28.2.3 Suministro de Corriente de los módulos E/S Las tablas y formulas pueden ser usadas para calcular el consumo de corriente adicional para los diferentes módulos de E/S en modo Activo y Idle. La habilitación o desabilitación de los módulos de E/S son controlados por el Registro Reducción de Energía. Ver “PPR- Registro de Reducción de Energía” página 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 Periféricas

28.2.13 Current Consumption in Reset and Reset Pulsewidth

28.3 Características Típicas del ATmega644P 28.3.1 Active Supply Current

28.3.2 Suministro de Corriente Idle

28.3.3 Suministro de Corriente de los módulos E/S Las tablas y formulas pueden ser usadas para calcular el consumo de corriente adicional para los diferentes módulos de E/S en modo Activo y Idle. La habilitación o desabilitación de los módulos de E/S son controlados por el Registro Reducción de Energía. Ver “PPR- Registro de Reducción de Energía” página 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 Periféricas

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