Вы находитесь на странице: 1из 160

Descripción general

Cada uno de estos decodificadores de 4 líneas a 16 líneas utiliza el trazado de circuito de


la TTL para descifrar cuatro entradas codificadas en binario en una de dieciséis
mutuamente salidas de la exclusiva cuando ambas las entradas del estroboscópico, G1and
G2, son bajas. La función demultiplexaje es realizada usando las 4 líneas de entrada para
tratar la línea de salida, pasando los datos a partir de la una de las entradas del
estroboscópico con el otro estroboscópico entraron punto bajo. Cuando cualquier entrada
del estroboscópico es alta, todas las salidas son altas. Estos demultiplexores se satisfacen
idealmente para poner los decodificadores de alto rendimiento de la memoria en
ejecución. Se protegen todas las entradas y la entrada que afianza los diodos con
abrazadera se proporciona para reducir al mínimo la transmisión-línea efectos y de tal
modo simplifica diseño del sistema.

Características:

-Descifra 4 entradas codificadas en binario en una de 16 mutuamente salidas de la


exclusiva.
- Realiza la función demultiplexaje distribuyendo datos a partir de una línea de entrada de
16 salidas
- La entrada que afianza los diodos con abrazadera simplifica diseño del sistema
- Alto fan salida, bajo-impedancia, salidas del tótem
- La propagación típica retrasa:
3 niveles de la lógica 23 ns
Estroboscópico 19 ns
- Disipación típica 45 mW de la energía
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 fase 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 espera (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).
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.

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

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


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

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

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

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 E/S Pull- Comentario
MCUCR) up
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.

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


Nombre Nombre Completo Descripción
de la
Señal
PUOE Habilitación Pull- Si esta señal es uno, la habilitación pull up es controlada por la
up overriddes 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 Si esta señal es uno, el control de habilitación de salida es
Dirección de Datos 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 Si DDOE es uno, manejo de la salida es habilitado/deshabilitado
valor de Dirección cuando DDOV es uno/cero, indiferente de la configuración del
de Datos bit del registro DDxn.
PVOE Habilitación del Si esta señal es uno y el manejo de la salida es habilitado, el
valor del pórtico 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 Esto es la Entrada/salida analógica para funciones alternativas.
Analógica 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

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)

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 f OC2A = 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:
f clk I / o
f OCnxPWM
N 256
La variable N representa el factor prescalador (1,8, 64, 256 o1024). El valor extremo para el OCR0A
es igual a uno en 0X00, la salida será un pico estrecho para cada MAX+1 del ciclo de 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 TOP Actualización Bandera
Modo de OCRx TOV
Operación
0 0 0 0 Normal 0xFF Inmediato MAX
1 0 0 1 PWM, fase 0xFF TOP Parte
Correcta 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 OCRA TOP Parte
correcta Inferior
6 1 1 0 reservado - - -
7 1 1 1 Rápida, PWM OCRA 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
• 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


Mod WGMn WGMn WGMn1 WGMn0 Modo de TOP Actualizaci Encend
o 3 2 (PWMn (PWMn Operación ón er
(CTCn) 1) 0) Timer/Contad OCRnX bander
or a TOVn
0 0 0 0 0 Normal 0xFFF Inmediato 0xFF
F
1 0 0 0 1 PWM, Fase 0x00F TOP 0X00
Correcta, 8 F
bits
2 0 0 1 0 PWM, Fase 0x01F TOP 0X00
Correcta, 9 F
bits
3 0 0 1 1 PWM, Fase 0x03F TOP 0X00
Correcta, 10 F
bits
4 0 1 0 0 CTC OCRn Inmediato 0xFF
A
5 0 1 0 1 Rápida PWM, 0x00F 0X00 TOP
8 bits F
6 0 1 1 0 Rápida PWM, 0x01F 0X00 TOP
9 bits F
7 0 1 1 1 Rápida PWM, 0x03F 0X00 TOP
10 bits F
8 1 0 0 0 PWM, Fase y ICRn 0X00 0X00
Frecuencia
Correcta
9 1 0 0 1 PWM, Fase y OCRn 0X00 0X00
Frecuencia A
Correcta
10 1 0 1 0 PWM, Fase y ICRn TOP 0X00
Correcta
11 1 0 1 1 PWM, Fase y OCRn TOP 0x00
Correcta A
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 PWM OCRn 0x00 TOP
A

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.

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:
f clk I / o
f OCnxPWM
N 256
La variable N representa el factor prescalador (1,8, 64, 256 o1024). El valor extremo para el OCR0A
es igual a uno en 0X00, la salida será un pico estrecho para cada MAX+1 del ciclo de 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 Valor Actualización TOV
Operación Máximo Del OCRx Encender
Timer/Counter (TOP) bandera (1)(2)
0 0 0 0 Normal 0XFF Inmediato MAX
1 0 0 1 Modo Fase 0XFF TOP
Correcta (PWM)
2 0 1 0 CTC OCRA Inmediato MAX
3 0 1 1 Rápida PWM 0XFF BOTTON MAX
4 1 0 0 Reservado - - -
5 1 0 1 Modo Fase OCRA TOP BOTTON
Correcta (PWM)
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

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

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.

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

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:

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

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.

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

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

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.

Вам также может понравиться