Você está na página 1de 81

ATmega16A

Microcontrolador de 8 bits con 16K bytes en el sistema


Flash programable
Características

 Microcontrolador de 8 bits Atmel AVR de alto rendimiento y bajo consumo


 Arquitectura avanzada de RISC
̶ 131 poderosas instrucciones: la mayoría de las ejecuciones de ciclo de un solo reloj
̶ 32 x 8 Registros de trabajo de propósito general
Operation Operación completamente estática
̶ Rendimiento de hasta 16MIPS a 16MHz
Mult Multiplicador de 2 ciclos en chip
 Z segmentos de memoria no volátiles de alta resistencia
̶ 16KBytes de memoria de programa Flash auto-programable en el sistema
̶ 512Bytes EEPROM
SR 1KByte SRAM interna
̶ Ciclos de escritura / borrado: 10,000 Flash / 100,000 EEPROM
Retention Retención de datos: 20 años a 85 ° C / 100 años a 25 ° C (1)
Section Sección de código de arranque opcional con bits de bloqueo independientes
Programación en el sistema z mediante el programa de arranque en chip
 z Verdadera operación de lectura mientras se escribe
Lock Bloqueo de programación para la seguridad del software
 z Interfaz JTAG (IEEE estándar 1149.1)
Cap Capacidades de exploración de límites según el estándar JTAG
̶ Amplio soporte de depuración en chip
̶ Programación de Flash, EEPROM, fusibles y bits de bloqueo a través de JTAG
Interfaz
 z características periféricas
̶ Dos temporizadores / contadores de 8 bits con precalificadores separados y modos de comparación
̶ Un temporizador / contador de 16 bits con preescalador separado, modo de comparación y
Modo de captura
Counter Contador de tiempo real con oscilador separado
̶ Cuatro canales PWM
̶ ADC de 8 canales y 10 bits
 z 8 canales de un solo extremo
 z 7 canales diferenciales solo en el paquete TQFP
 z 2 canales diferenciales con ganancia programable a 1x, 10x o 200x
Interface Interfaz serial de dos hilos orientada a bytes
ART USART Serial Programable
̶ Interfaz serie SPI maestro / esclavo
̶ Temporizador de vigilancia programable con oscilador en chip separado
Compar Comparador analógico en chip
 z Características especiales del microcontrolador
Reset Restablecimiento de encendido y detección de apagón programable
̶ Oscilador RC calibrado interno
̶ Fuentes de interrupción externa e interna
̶ Seis modos de reposo: inactivo, reducción de ruido ADC, ahorro de energía, apagado, espera y espera
extendida
 z I / O y paquetes
̶ 32 líneas de E / S programables
PD PDIP de 40 pines, TQFP de 44 derivaciones y QFN / MLF de 44 almohadillas
voltajes de operación z
̶ 2.7 - 5.5V
Grados de velocidad
̶ 0 - 16MHz
 z Consumo de energía a 1 MHz, 3 V y 25 ° C
̶ Activo: 0.6mA
̶ Modo inactivo: 0.2mA
Mode Modo de apagado: <1µA
2. Descripción general
El ATmega16A es un microcontrolador CMOS de 8 bits de bajo consumo basado en el RISC mejorado de AVR
de Atmel. arquitectura. Al ejecutar instrucciones poderosas en un solo ciclo de reloj, el ATmega16A logra
rendimientos Se acerca a 1MIPS por MHz, lo que permite al diseñador del sistema optimizar el consumo de
energía en comparación con el procesamiento velocidad.

2.1 Diagrama de bloques


El núcleo AVR de Atmel combina un rico conjunto de instrucciones con 32 registros de trabajo de propósito
general. Todos los 32 los registros están conectados directamente a la unidad lógica aritmética (ALU), lo que
permite que dos registros independientes sean
Se accede en una sola instrucción ejecutada en un ciclo de reloj. La arquitectura resultante es más eficiente
en código a la vez que alcanza rendimientos hasta diez veces más rápidos que los microcontroladores CISC
convencionales

El ATmega16A ofrece las siguientes características: 16Kbytes de programa de flash programable en el


sistema memoria con capacidades de lectura mientras escribe; 512bytes EEPROM; 1Kbyte SRAM; 32 líneas
de E / S de propósito general, 32 registros de trabajo de propósito general; una interfaz JTAG para escaneo
de límites; Soporte de depuración en chip y programación; Tres temporizadores / contadores flexibles con
modos de comparación; Interrupciones internas y externas; una serie USART programable; una interfaz
serial de dos hilos orientada a bytes, una de 8 canales; ADC de 10 bits con opcional etapa de entrada
diferencial con ganancia programable (solo paquete TQFP); un temporizador de vigilancia programable con
Oscilador interno; un puerto serie SPI; y seis modos de ahorro de energía seleccionables por software. El
modo inactivo detiene el CPU mientras se permite el USART; Interfaz de dos hilos; Convertidor A / D; SRAM;
Temporizador / contadores; Puerto SPI; y Sistema de interrupción para seguir funcionando. El modo de
apagado guarda el contenido del registro pero congela el Oscilador, deshabilitando todas las demás
funciones del chip hasta la próxima Interrupción Externa o Restablecimiento de Hardware. En ahorro de
energía En este modo, el temporizador asíncrono continúa ejecutándose, lo que permite al usuario
mantener una base de temporizador mientras el resto del El dispositivo está durmiendo. El modo de
reducción de ruido ADC detiene la CPU y todos los módulos de E / S, excepto los asíncronos.
Temporizador y ADC, para minimizar el ruido de conmutación durante las conversiones de ADC. En modo de
espera, el cristal / resonador
El oscilador se está ejecutando mientras el resto del dispositivo está durmiendo. Esto permite una puesta en
marcha muy rápida combinada con un bajo consumo de energía. En el modo de espera extendida, tanto el
oscilador principal como el temporizador asíncrono continúan
correr

El dispositivo se fabrica utilizando la tecnología de memoria no volátil de alta densidad de Atmels. El flash
ISP en chip permite que la memoria del programa se reprograme en el sistema a través de una interfaz serial
SPI, por un programador de memoria no volátil, o por un programa de arranque en chip que se ejecuta en el
núcleo de AVR. El programa de arranque puede utilizar cualquier interfaz para descargar el programa de
aplicación en la memoria Flash de la aplicación. Software en el La sección Boot Flash continuará
ejecutándose mientras se actualiza la sección Application Flash, proporcionando una verdadera operación
de escritura de ReadWhile. Al combinar una CPU RISC de 8 bits con un flash auto-programable en el sistema
en un Con un chip monolítico, el Atmel ATmega16A es un potente microcontrolador que proporciona una
solución altamente flexible y rentable para muchas aplicaciones de control integrado. El ATmega16A es
compatible con un conjunto completo de herramientas de desarrollo de programas y sistemas que incluyen:
compiladores de C, ensambladores de macros, depuradores / simuladores de programas, emuladores en
circuito y kits de evaluación.

2.2 Descripciones de los pines


2.2.1 VCC
Tensión de alimentación digital.
2.2.2 GND
Suelo.
2.2.3 Puerto A (PA7: PA0)
El puerto A sirve como entradas analógicas para el convertidor A / D.
El puerto A también sirve como un puerto de E / S bidireccional de 8 bits, si no se utiliza el convertidor A / D.
Pasadores de puerto pueden proporcionar resistencias internas pull-up (seleccionadas para cada bit). Los
buffers de salida del puerto A tienen características de unidad simétricas con alta capacidad de fuente y
sumidero. Cuando los pines PA0 a PA7 se utilizan como entradas y se extraen externamente bajo, generarán
corriente si se activan las resistencias internas de pull-up. Los pines del Puerto A son de tres estados cuando
la condición de reinicio se activa, incluso si el reloj no está funcionando.
2.2.4 Puerto B (PB7: PB0)
El puerto B es un puerto de E / S bidireccional de 8 bits con resistencias de pull-up internas (seleccionadas
para cada bit). La salida del puerto B los tampones tienen características de unidad simétricas con capacidad
de fuente y sumidero alto. Como entradas, pasadores del puerto B si se extraen externamente, la fuente
generará corriente si las resistencias de pull-up están activadas. Los pines del puerto B están desactivados
cuando se activa una condición de restablecimiento, incluso si el reloj no está funcionando.
El puerto B también cumple las funciones de varias características especiales del ATmega16A como se indica
en la página 57.

2.2.5 Puerto C (PC7: PC0)


El puerto C es un puerto de E / S bidireccional de 8 bits con resistencias de pull-up internas (seleccionadas
para cada bit). La salida del puerto C los tampones tienen características de unidad simétricas con capacidad
de fuente y sumidero alto. Como entradas, pasadores del puerto C si se extraen externamente, la fuente
generará corriente si las resistencias de pull-up están activadas. Los pines del puerto C están desactivados
cuando se activa una condición de restablecimiento, incluso si el reloj no está funcionando. Si la interfaz
JTAG está habilitada, las resistencias de pull-up en los pines PC5 (TDI), PC3 (TMS) y PC2 (TCK) se activarán
incluso si se produce un reinicio.
El puerto C también cumple las funciones de la interfaz JTAG y otras características especiales del
ATmega16A que se enumeran en
página 59.
2.2.6 Puerto D (PD7: PD0)
El puerto D es un puerto de E / S bidireccional de 8 bits con resistencias de pull-up internas (seleccionadas
para cada bit). La salida del puerto D los tampones tienen características de unidad simétricas con capacidad
de fuente y sumidero alto. Como entradas, pasadores del puerto D si se extraen externamente, la fuente
generará corriente si las resistencias de pull-up están activadas. Los pines del Puerto D se desactivan cuando
se activa una condición de restablecimiento, incluso si el reloj no está funcionando. El puerto D también
cumple las funciones de varias características especiales del ATmega16A como se indica en la página 62.
2.2.7 RESET
Restablecer la entrada. Un nivel bajo en este pin por más tiempo que la longitud de pulso mínima generará
un reinicio, incluso si el el reloj no está funcionando La longitud mínima de pulso se indica en la Tabla 27-2
en la página 282. Los pulsos más cortos no son Garantizado para generar un reinicio.
2.2.8 XTAL1
Entrada al amplificador del oscilador inversor y entrada al circuito operativo del reloj interno

2.2.9 XTAL2
Salida desde el amplificador oscilador inversor.
2.2.10 AVCC
AVCC es el pin de voltaje de alimentación para el puerto A y el convertidor A / D. Debe estar conectado
externamente a VCC, incluso
Si no se utiliza el ADC. Si se usa el ADC, se debe conectar a VCC a través de un filtro de paso bajo.
2.2.11 AREF
AREF es el pin de referencia analógico para el convertidor A / D.
3. Recursos
Un completo conjunto de herramientas de desarrollo, notas de aplicación y hojas de datos están disponibles
para descargar en
http://www.atmel.com/avr.
Nota: 1. Retención de datos.
4. Retención de datos
Los resultados de la Calificación de confiabilidad muestran que la tasa de fallas de retención de datos
proyectada es mucho menor que 1 PPM sobre
20 años a 85 ° C o 100 años a 25 ° C.
5. Sobre ejemplos de código
Esta documentación contiene ejemplos de código simples que muestran brevemente cómo usar varias
partes del dispositivo. Estos ejemplos de código asumen que el archivo de encabezado específico de la parte
se incluye antes de la compilación. Ten en cuenta que no todos los proveedores de compilador de C incluyen
definiciones de bits en los archivos de encabezado y el manejo de interrupciones en C es compilador
dependiente. Por favor confirme con la documentación del compilador C para más detalles.

6. AVR CPU
6.1 Resumen
En esta sección se analiza la arquitectura central de Atmel AVR en general. La función principal del núcleo de
la CPU es Asegurar la correcta ejecución del programa. Por lo tanto, la CPU debe poder acceder a las
memorias, realizar cálculos, Controlar periféricos, y manejar interrupciones.

Para maximizar el rendimiento y el paralelismo, el AVR utiliza una arquitectura de Harvard, con
Memorias y autobuses para programa y datos. Las instrucciones en la memoria del programa se ejecutan
con un solo nivel. tubería Mientras se está ejecutando una instrucción, la siguiente instrucción se obtiene de
la memoria del programa. Este concepto permite ejecutar instrucciones en cada ciclo de reloj. La memoria
del programa es In-System. Memoria flash reprogramable.
El archivo de registro de acceso rápido contiene 32 registros de trabajo de propósito general de 8 bits con un
solo ciclo de reloj tiempo de acceso. Esto permite la operación de unidad lógica aritmética (ALU) de ciclo
único. En una operación ALU típica, dos los operandos se emiten desde el archivo de registro, la operación
se ejecuta y el resultado se almacena de nuevo en el archivo de registro.
Registrar archivo - en un ciclo de reloj.
Seis de los 32 registros se pueden utilizar como tres punteros de registro de dirección indirectos de 16 bits
para el direccionamiento del espacio de datos - permitiendo cálculos de direcciones eficientes. Uno de estos
punteros de dirección también se puede utilizar como una dirección Puntero para buscar tablas en la
memoria del programa flash. Estos registros de funciones agregadas son los registros de 16 bits X, Y y Z, que
se describen más adelante en esta sección.
La ALU admite operaciones aritméticas y lógicas entre registros o entre una constante y un registro.
Las operaciones de registro único también se pueden ejecutar en la ALU. Después de una operación
aritmética, el registro de estado es actualizado para reflejar información sobre el resultado de la operación.
El flujo del programa se proporciona mediante instrucciones condicionales e incondicionales de salto y
llamada, capaces de abordar directamente el
Todo el espacio de direcciones. La mayoría de las instrucciones de AVR tienen un formato de palabra de 16
bits. Cada dirección de memoria del programa Contiene una instrucción de 16 o 32 bits.
El espacio de la memoria flash del programa se divide en dos secciones, la sección del programa de arranque
y el programa de la aplicación sección. Ambas secciones tienen bits de bloqueo dedicados para protección
contra escritura y lectura / escritura. La instrucción SPM que las escrituras en la sección de memoria flash de
la aplicación deben residir en la sección del programa de arranque.
Durante las interrupciones y las llamadas de subrutinas, el contador de programas (PC) de la dirección de
retorno se almacena en la pila. Los La pila se asigna de manera efectiva en la SRAM de datos generales y, por
consiguiente, el tamaño de la pila solo está limitado por la
Tamaño total de la SRAM y el uso de la SRAM. Todos los programas de usuario deben inicializar el SP en la
rutina de reinicio (antes de se ejecutan subrutinas o interrupciones). El Stack Pointer SP es de lectura /
escritura accesible en el espacio de E / S. los Se puede acceder fácilmente a la SRAM de datos a través de los
cinco modos de direccionamiento diferentes admitidos en el AVR
arquitectura. Los espacios de memoria en la arquitectura AVR son todos mapas de memoria lineales y
regulares. Un módulo de interrupción flexible tiene sus registros de control en el espacio de E / S con un bit
de habilitación de interrupción global adicional en el registro de estado. Todas las interrupciones tienen un
vector de interrupción separado en la tabla de vectores de interrupción. Las interrupciones
Tienen prioridad de acuerdo con su posición de vector de interrupción. Cuanto menor sea la dirección del
vector de interrupción, mayor la prioridad. El espacio de memoria de E / S contiene 64 direcciones para las
funciones periféricas de la CPU como registros de control, SPI y otros Funciones de E / S. Se puede acceder a
la memoria de E / S directamente, o como las ubicaciones del espacio de datos que siguen a las de
Registrar archivo, $ 20 - $ 5F.
6.2 ALU - Unidad de lógica aritmética
El AVR ALU de alto rendimiento opera en conexión directa con los 32 registros de trabajo de propósito
general. Dentro de un solo ciclo de reloj, las operaciones aritméticas entre registros de propósito general o
entre un registro y Se ejecutan de inmediato. Las operaciones ALU se dividen en tres categorías principales:
aritmética, lógica y bit-funciones. Algunas implementaciones de la arquitectura también proporcionan un
poderoso multiplicador que soporta ambos
Multiplicación firmada / no firmada y formato fraccional. Consulte la sección "Conjunto de instrucciones"
para obtener una descripción detallada.
6.3 Registro de estado
El registro de estado contiene información sobre el resultado de la instrucción aritmética ejecutada más
recientemente. Esta información se puede utilizar para alterar el flujo del programa para realizar
operaciones condicionales. Tenga en cuenta que el El Registro de estado se actualiza después de todas las
operaciones de ALU, como se especifica en la Referencia del conjunto de instrucciones. Esto sera en
muchos casos eliminan la necesidad de usar las instrucciones de comparación dedicadas, lo que resulta en
más rápido y más código compacto El registro de estado no se almacena automáticamente cuando ingresa
una rutina de interrupción y se restaura cuando regresa De una interrupción. Esto debe ser manejado por el
software.
• Bit 7 - I: Habilitación de interrupción global
El bit de habilitación de interrupción global debe configurarse para que se habiliten las interrupciones. La
interrupción individual habilita el control se realiza entonces en registros de control separados. Si se borra el
Registro de habilitación de interrupción global, ninguno de las interrupciones se activan
independientemente de la configuración de habilitación de interrupción individual. El bit I es borrado por
hardware después de que se haya producido una interrupción, y se establece mediante la instrucción RETI
para habilitar interrupciones posteriores. La aplicación también puede configurar y borrar el bit I con las
instrucciones SEI y CLI, como se describe en la instrucciones de referencia del conjunto.
• Bit 6 - T: Bit Copy Storage
Las instrucciones de copia de bits BLD (Bit LoaD) y BST (Bit STore) utilizan el bit T como origen o destino para
la bit operado Un bit de un registro en el archivo de registro se puede copiar en T mediante la instrucción
BST, y un bit en T se puede copiar en un bit en un registro en el archivo de registro mediante la instrucción
BLD.
• Bit 5 - H: Media bandera de acarreo
El indicador de medio transporte H indica un medio de transporte en algunas operaciones aritméticas. Half
Carry es útil en BCD aritmética. Consulte la "Descripción del conjunto de instrucciones" para obtener
información detallada.
• Bit 4 - S: Bit de signo, S = N ⊕ V
El bit S es siempre exclusivo o entre el indicador negativo N y el indicador de desbordamiento
complementario V de los dos. Consulte la "Descripción del conjunto de instrucciones" para obtener
información detallada.
• Bit 3 - V: indicador de desbordamiento de complemento de dos
El Complement Overflow Flag V de Two es compatible con la aritmética del complemento de dos. Vea el
“Conjunto de instrucciones Descripción ”para información detallada.
• Bit 2 - N: Bandera Negativa
El indicador negativo N indica un resultado negativo en una operación aritmética o lógica. Vea el “Conjunto
de instrucciones Descripción ”para información detallada.
• Bit 1 - Z: Bandera Cero
El indicador cero Z indica un resultado cero en una operación aritmética o lógica. Consulte la "Descripción
del conjunto de instrucciones" para información detallada.
• Bit 0 - C: bandera de acarreo
El indicador de acarreo C indica un acarreo en una operación aritmética o lógica. Consulte la “Descripción
del conjunto de instrucciones” para información detallada
6.4 Archivo de registro de propósito general
El archivo de registro está optimizado para el conjunto de instrucciones RISC mejorado. Para lograr el
requerido. rendimiento y flexibilidad, los siguientes esquemas de entrada / salida son compatibles con el
archivo de registro:
z Un operando de salida de 8 bits y una entrada de resultado de 8 bits
z Dos operandos de salida de 8 bits y una entrada de resultado de 8 bits
z Dos operandos de salida de 8 bits y una entrada de resultado de 16 bits
z Un operando de salida de 16 bits y una entrada de resultado de 16 bits
La Figura 6-2 muestra la estructura de los 32 registros de trabajo de propósito general en la CPU.

La mayoría de las instrucciones que operan en el archivo de registro tienen acceso directo a todos los
registros, y la mayoría de ellas son Instrucciones de ciclo único. Como se muestra en la Figura 6-2, a cada
registro también se le asigna una dirección de memoria de datos, asignándolos directamente a la
Las primeras 32 ubicaciones del espacio de datos del usuario. Aunque no se está implementando
físicamente como ubicaciones SRAM, esto La organización de la memoria proporciona una gran flexibilidad
en el acceso a los registros, ya que los registros de puntero X, Y y Z
Se puede configurar para indexar cualquier registro en el archivo.
6.4.1 El registro X, el registro Y y el registro Z
Los registros R26: R31 tienen algunas funciones adicionales para su uso general. Estos registros son de 16
bits. Indicadores de dirección para direccionamiento indirecto del espacio de datos. Los tres registros de
dirección indirectos X, Y y Z son
Se define como se describe en la Figura 6-3.

En los diferentes modos de direccionamiento, estos registros de dirección tienen funciones como
desplazamiento fijo, automático incremento y reducción automática (consulte la Referencia del conjunto de
instrucciones para obtener más información).
6.5 puntero de pila
La pila se utiliza principalmente para almacenar datos temporales, para almacenar variables locales y para
almacenar direcciones de retorno Despues de interrupciones y llamadas de subrutinas. Tenga en cuenta que
la pila se implementa a medida que crece de mayor a menor Ubicaciones de memoria. El Registro de
punteros de pila siempre apunta a la parte superior de la pila. El puntero de pila apunta a

el área de apilamiento de SRAM de datos donde se ubican las subrutinas y las pilas de interrupción. Un
comando Stack PUSH lo hará disminuir el puntero de pila. La Pila en la SRAM de datos debe ser definida por
el programa antes de ejecutar cualquier llamada de subrutina o las interrupciones están habilitadas. El valor
del puntero de pila inicial es igual a la última dirección de la SRAM interna y la pila El puntero debe estar
configurado para apuntar por encima del inicio de la SRAM, consulte la Figura 7-2 en la página 17. Consulte
la Tabla 6-1 para obtener detalles sobre el puntero de pila.
El puntero de pila AVR se implementa como dos registros de 8 bits en el espacio de E / S. El número de bits
realmente utilizados es dependiente de la implementacion Tenga en cuenta que el espacio de datos en
algunas implementaciones de la arquitectura AVR es tan Pequeño que solo se necesita SPL. En este caso, el
Registro SPH no estará presente.

6.6 Tiempo de ejecución de instrucciones


Esta sección describe los conceptos generales de tiempo de acceso para la ejecución de instrucciones. La
CPU AVR es manejada por el reloj de la CPU clkCPU, generado directamente desde la fuente de reloj
seleccionada para el chip. No hay división de reloj interno.
usado. La Figura 6-4 muestra las búsquedas de instrucciones paralelas y las ejecuciones de instrucciones
habilitadas por la arquitectura de Harvard.
y el concepto de archivo de registro de acceso rápido. Este es el concepto básico de canalización para
obtener hasta 1 MIPS por MHz con los correspondientes resultados únicos para funciones por costo,
funciones por relojes y funciones por unidad de potencia.

Figura 6-4. Los parches de instrucción paralelos y las ejecuciones de instrucción.

Primera instrucción Fetch


Primera Instrucción Ejecutar
Segunda instrucción de búsqueda
2da Instrucción Ejecutar
3ra instrucción Fetch
Tercera Instrucción Ejecutar
4ta instrucción de búsqueda

La Figura 6-5 muestra el concepto de tiempo interno para el archivo de registro. En un solo ciclo, una
operación de ALU usando
se ejecutan dos operandos de registro y el resultado se almacena de nuevo en el registro de destino.
6.7 Reinicio y manejo de interrupciones
El AtmelAVR proporciona varias fuentes de interrupción diferentes. Estas interrupciones y el vector de
reinicio separado cada uno tener un vector de programa separado en el espacio de memoria del programa.
Todas las interrupciones tienen asignados bits de habilitación individuales. que debe escribirse de forma
lógica junto con el bit de Habilitación de Interrupción Global en el Registro de Estado para
habilitar la interrupcion. Dependiendo del valor del contador del programa, las interrupciones se pueden
desactivar automáticamente cuando Los bits de bloqueo de arranque BLB02 o BLB12 están programados.
Esta característica mejora la seguridad del software. Ver la sección “Programación de la memoria” en la
página 251 para más detalles. Las direcciones más bajas en el espacio de la memoria del programa se
definen por defecto como los Vectores de reinicio e interrupción.
La lista completa de vectores se muestra en “Interrupciones” en la página 44. La lista también determina los
niveles de prioridad de los vectores. Diferentes interrupciones. Cuanto más baja es la dirección, más alto es
el nivel de prioridad. RESET tiene la más alta prioridad, y el siguiente es INT0: la solicitud de interrupción
externa 0. Los vectores de interrupción se pueden mover al inicio del arranque
Sección de flash al configurar el bit IVSEL en el Registro de Control de Interrupción General (GICR). Consulte
“Interrupciones” en página 44 para más información. El Vector de reinicio también se puede mover al inicio
de la sección de arranque de Flash mediante programación del fusible BOOTRST, consulte "Compatibilidad
con el cargador de arranque - Programación automática de lectura durante la escritura" en
página 237. Cuando ocurre una interrupción, el bit de habilitación de interrupción global se borra y todas las
interrupciones se desactivan. El usuario el software puede escribir una lógica en el bit I para habilitar
interrupciones anidadas. Todas las interrupciones habilitadas pueden entonces interrumpir la
rutina de interrupción actual. El bit I se establece automáticamente cuando una instrucción de retorno de
interrupción (RETI) es ejecutado.

Hay básicamente dos tipos de interrupciones. El primer tipo se desencadena por un evento que establece el
indicador de interrupción. Por estas interrupciones, el contador del programa se transmite al vector de
interrupción real para ejecutar la interrupción rutina de manejo, y el hardware borra el indicador de
interrupción correspondiente. Las banderas de interrupción también pueden ser borradas por
escribiendo una lógica en las posiciones de bit de bandera a borrar. Si se produce una condición de
interrupción mientras el bit de habilitación de interrupción correspondiente se borra, el indicador de
interrupción se activará y recordará hasta que se interrumpa la interrupción. habilitado, o la bandera es
borrada por el software. De manera similar, si una o más condiciones de interrupción ocurren mientras el
Global El bit de habilitación de interrupción se borra, los indicadores de interrupción correspondientes se
configurarán y recordarán hasta que el bit de habilitación de interrupción se establece, y luego se ejecutará
por orden de prioridad. El segundo tipo de interrupciones se activará siempre que la condición de
interrupción esté presente. Estas interrupciones no necesariamente tienen banderas de interrupción. Si la
condición de interrupción desaparece antes de que se habilite la interrupción, la la interrupción no se
activará.
Cuando el AVR sale de una interrupción, siempre volverá al programa principal y ejecutará uno más.
instrucción antes de que se sirva cualquier interrupción pendiente. Tenga en cuenta que el registro de
estado no se almacena automáticamente cuando ingresa una rutina de interrupción, ni se restaura cuando
Regresando de una rutina de interrupción. Esto debe ser manejado por el software. Cuando se usa la
instrucción CLI para deshabilitar interrupciones, las interrupciones se deshabilitarán inmediatamente.
Ninguna interrupcion será ejecutarse después de la instrucción CLI, incluso si ocurre simultáneamente con la
instrucción CLI. El seguimiento el ejemplo muestra cómo se puede usar esto para evitar interrupciones
durante la secuencia de escritura EEPROM cronometrada.

Ejemplo de código de montaje


en r16, SREG;
almacenar valor SREG
cli desactivar interrupciones durante
secuencia cronometrada
sbi EECR, EEMWE;
iniciar EEPROM escribir
sbi EECR, EEWE
fuera SREG, r16;
restaurar el valor SREG (I-bit)
Ejemplo de código C
char cSREG;
cSREG = SREG; / *
almacenar el valor de SREG * /
/ * deshabilitar interrupciones durante la secuencia cronometrada * /
_CLI ();
EECR | = (1 << EEMWE); / * comience la escritura de EEPROM * /
EECR | = (1 << EEWE);
SREG = cSREG; / * restaurar el valor SREG (I-bit) * /

Cuando se usa la instrucción SEI para habilitar interrupciones, la instrucción que sigue a SEI se ejecutará
antes de cualquier
interrupciones pendientes, como se muestra en este ejemplo

6.7.1 Tiempo de respuesta de interrupción


La respuesta de ejecución de interrupción para todas las interrupciones AVR habilitadas es de cuatro ciclos
de reloj como mínimo. Despues de las cuatro
el ciclo del reloj se ejecuta la dirección del vector de programa para la rutina de manejo de interrupciones
real. Durante este cuatro período de ciclo de reloj, el contador de programa se empuja en la pila. El vector
suele ser un salto a la interrupción. Rutina, y este salto lleva tres ciclos de reloj. Si se produce una
interrupción durante la ejecución de un ciclo múltiple instrucción, esta instrucción se completa antes de que
se sirva la interrupción. Si ocurre una interrupción cuando la MCU está en En el modo de suspensión, el
tiempo de respuesta de la ejecución de interrupción se incrementa en cuatro ciclos de reloj. Este aumento
viene en Además del tiempo de inicio del modo de suspensión seleccionado. Un retorno de una rutina de
manejo de interrupciones requiere cuatro ciclos de reloj. Durante estos cuatro ciclos de reloj, el Programa El
contador (dos bytes) se devuelve de la pila, el puntero de pila se incrementa en dos y el bit I en SREG está
establecido

7. Memorias de AVR
7.1 Resumen
Esta sección describe los diferentes recuerdos en el ATmega16A. La arquitectura AVR tiene dos memorias
principales. espacios, la memoria de datos y el espacio de memoria de programa. Además, el ATmega16A
cuenta con una EEPROM Memoria para almacenamiento de datos. Los tres espacios de memoria son
lineales y regulares.

7.2 Memoria de programa flash reprogramable


en el sistema El ATmega16A contiene 16Kbytes de memoria flash reprogramable en el sistema en el chip
para el almacenamiento de programas. Dado que todas las instrucciones del AVR tienen 16 o 32 bits de
ancho, el Flash está organizado como 8K x 16. Para la seguridad del software, el El espacio de memoria del
programa flash se divide en dos secciones, la sección Programa de arranque y el Programa de aplicación
sección. La memoria Flash tiene una duración de al menos 10.000 ciclos de escritura / borrado. El contador
de programas ATmega16A (PC) tiene 13 bits de ancho, por lo que se dirige a las ubicaciones de memoria de
programa de 8K. El funcionamiento de la sección del programa de arranque. y los bits de bloqueo de
arranque asociados para la protección del software se describen en detalle en “Compatibilidad con el
cargador de arranque - Programación automática de lectura de escritura” en la página 237. “Programación
de la memoria” en la página 251 contiene una Descripción de la descarga en serie de datos Flash utilizando
los pines SPI o la interfaz JTAG. Las tablas constantes se pueden asignar dentro del espacio completo de
direcciones de la memoria del programa (consulte el LPM - Cargar Memoria de programa Descripción de la
instrucción). Los diagramas de tiempo para la obtención y ejecución de instrucciones se presentan en
"Tiempo de ejecución de instrucciones" en la página 12
7.3 Memoria de datos SRAM
La Figura 7-2 muestra cómo está organizada la memoria SRAM ATmega16A.
Las ubicaciones de la memoria de datos 1120 inferiores se refieren al archivo de registro, la memoria de E /
S y la SRAM de datos interna.
Las primeras 96 ubicaciones abordan el archivo de registro y la memoria de E / S, y las siguientes 1024
ubicaciones abordan la
SRAM de datos internos.
Los cinco modos de direccionamiento diferentes para la memoria de datos abarcan: Directo, Indirecto con
desplazamiento, Indirecto,
Indirecto con Pre-decremento, e Indirecto con Post-incremento. En el archivo de registro, se registra la
característica R26 a R31.
El apuntador de direccionamiento indirecto se registra.
El direccionamiento directo llega a todo el espacio de datos.
El modo Indirecto con desplazamiento llega a 63 ubicaciones de direcciones desde la dirección base
proporcionada por Y- o Zregister.
Cuando se utilizan modos de direccionamiento indirecto de registro con reducción previa automática y
posterior al incremento, la dirección
los registros X, Y y Z disminuyen o se incrementan.
Los 32 registros de trabajo de propósito general, 64 registros de E / S y los 1024 bytes de SRAM de datos
internos en el
ATmega16A son accesibles a través de todos estos modos de direccionamiento. El archivo de registro se
describe en “General
Propósito Registrar archivo ”en la página 10.
7.3.1 Tiempos de acceso a la memoria de datos
Esta sección describe los conceptos generales de tiempo de acceso para el acceso a la memoria interna. Los
datos internos de la SRAM.
el acceso se realiza en dos ciclos clkCPU como se describe en la Figura 7-3.

7.4 Memoria de datos EEPROM


El ATmega16A contiene 512 bytes de memoria EEPROM de datos. Se organiza como un espacio de datos
separado, en
cuales bytes individuales se pueden leer y escribir La EEPROM tiene una resistencia de al menos 100,000 de
escritura / borrado
ciclos El acceso entre la EEPROM y la CPU se describe a continuación, especificando la EEPROM
Registros de direcciones, el registro de datos EEPROM y el registro de control EEPROM.
Para obtener una descripción detallada de la descarga de datos SPI, JTAG y en paralelo a la EEPROM,
consulte la página 262, página
267, y la página 254, respectivamente

7.4.1 Acceso de lectura / escritura de EEPROM


Se puede acceder a los registros de acceso EEPROM en el espacio de E / S.
El tiempo de acceso de escritura para la EEPROM se muestra en la Tabla 7-1. Una función de temporización,
sin embargo, permite al usuario
El software detecta cuándo se puede escribir el siguiente byte. Si el código de usuario contiene instrucciones
que escriben la EEPROM,
Se deben tomar algunas precauciones. En fuentes de alimentación muy filtradas, es probable que el VCC
aumente o disminuya lentamente en el encendido / apagado. Esto hace que el dispositivo funcione durante
un período de tiempo a un voltaje inferior al especificado como mínimo para
La frecuencia de reloj utilizada. Consulte “Cómo evitar la corrupción de EEPROM” en la página 19 para
obtener detalles sobre cómo evitar
Problemas en estas situaciones.
Para evitar escrituras no intencionales de EEPROM, se debe seguir un procedimiento de escritura específico.
Referirse a
Descripción del registro de control de EEPROM para detalles sobre esto.
Cuando se lee la EEPROM, la CPU se detiene durante cuatro ciclos de reloj antes de que se ejecute la
siguiente instrucción.
Cuando se escribe la EEPROM, la CPU se detiene durante dos ciclos de reloj antes de que se ejecute la
siguiente instrucción.

7.4.2 Escritura de EEPROM durante el modo de espera de apagado


Cuando se ingresa en el modo de reposo apagado mientras una operación de escritura de EEPROM está
activa, la escritura de EEPROM
la operación continuará y se completará antes de que haya transcurrido el tiempo de Acceso de escritura.
Sin embargo, cuando la escritura
se completa la operación, el Oscilador continúa funcionando y, como consecuencia, el dispositivo no ingresa
Apagado por completo. Por lo tanto, se recomienda verificar que la operación de escritura de EEPROM se
haya completado.
antes de entrar en el apagado.

7.4.3 Prevención de la corrupción de EEPROM


Durante los períodos de baja VCC, los datos de EEPROM pueden corromperse porque la tensión de
alimentación es demasiado baja para el
La CPU y la EEPROM para funcionar correctamente. Estos problemas son los mismos que para los sistemas
de nivel de placa que usan
EEPROM, y las mismas soluciones de diseño deben ser aplicadas.
Una corrupción de datos EEPROM puede ser causada por dos situaciones cuando el voltaje es demasiado
bajo. Primero, una escritura regular.
La secuencia a la EEPROM requiere un voltaje mínimo para funcionar correctamente. En segundo lugar, la
propia CPU puede
Ejecute las instrucciones incorrectamente, si la tensión de alimentación es demasiado baja.
La corrupción de datos de EEPROM se puede evitar fácilmente siguiendo esta recomendación de diseño:
Mantenga el RESTABLECIMIENTO AVR activo (bajo) durante los períodos de voltaje de alimentación
insuficiente. Esto se puede hacer por
habilitar el detector interno de caída de tensión (BOD). Si el nivel de detección de la DBO interna no coincide
Para el nivel de detección necesario, se puede usar un circuito externo de protección de restablecimiento de
VCC bajo. Si se produce un reinicio mientras
una operación de escritura está en progreso, la operación de escritura se completará siempre que el voltaje
de la fuente de alimentación
es suficiente.

7.5 Memoria de E / S
La definición de espacio de E / S del ATmega16A se muestra en “Resumen de registro” en la página 319.
Todas las E / S y periféricos de ATmega16A se colocan en el espacio de E / S. Se accede a las ubicaciones de E
/ S mediante el IN y
Instrucciones de salida, transfiriendo datos entre los 32 registros de trabajo de propósito general y el
espacio de E / S. I / O
Los registros dentro del rango de direcciones $ 00 - $ 1F son directamente accesibles a través de las
instrucciones SBI y CBI. En
En estos registros, el valor de los bits individuales se puede verificar utilizando las instrucciones SBIS y SBIC.
Referirse a
Conjunto de instrucciones de la sección para más detalles. Cuando se utilizan los comandos específicos de E
/ S IN y OUT, las direcciones de E / S
$ 00 - $ 3F deben ser utilizados. Al direccionar los registros de E / S como espacio de datos usando
instrucciones LD y ST, $ 20 deben
ser añadido a estas direcciones.
Para compatibilidad con dispositivos futuros, los bits reservados deben escribirse a cero si se accede.
Memoria de E / S reservada
Las direcciones nunca deben ser escritas.
Algunos de los indicadores de estado se borran al escribirles uno lógico. Tenga en cuenta que las
instrucciones CBI y SBI
opere en todos los bits en el Registro de E / S, escribiendo un uno en cualquier marca que se lea como se
establece, borrando así la bandera. El CBI
y las instrucciones de SBI funcionan solo con registros de $ 00 a $ 1F.
Los registros de E / S y control de periféricos se explican en secciones posteriores.

7.6 Descripción del registro


7.6.1 EEARH y EEARL - El registro de direcciones EEPROM

• Bits 15: 9 - Res: Bits reservados Estos bits son bits reservados en el ATmega16A y siempre se leerán como
cero.
• Bits 8: 0 - EEAR8: 0: Dirección EEPROM Los registros de direcciones de EEPROM (EEARH y EEARL)
especifican la dirección de EEPROM en los 512 bytes Espacio EEPROM. Los bytes de datos EEPROM se
direccionan linealmente entre 0 y 511. El valor inicial de EEAR es indefinido. Se debe escribir un valor
adecuado antes de poder acceder a la EEPROM.

7.6.2 EEDR - El registro de datos EEPROM

• Bits 7: 0 - EEDR7.0: datos de EEPROM


Para la operación de escritura de la EEPROM, el registro EEDR contiene los datos que se escribirán en la
EEPROM en la
Dirección dada por el Registro EEAR. Para la operación de lectura de EEPROM, el EEDR contiene los datos
leídos
de la EEPROM a la dirección dada por la EEAR.
7.6.3 EECR - El Registro de Control de EEPROM

• Bits 7: 4 - Res: Bits Reservados


Estos bits son bits reservados en el ATmega16A y siempre se leerán como cero.
• Bit 3 - EERIE: habilitación de interrupción lista para EEPROM
Escribir EERIE en uno habilita la interrupción de EEPROM Ready si el bit I en SREG está configurado. Escribir
EERIE a cero
desactiva la interrupción. La interrupción EEPROM Ready genera una interrupción constante cuando se
borra EEWE.
• Bit 2 - EEMWE: Habilitación de escritura maestra de EEPROM
El bit EEMWE determina si configurar EEWE en uno hace que se escriba la EEPROM. Cuando EEMWE es
Si configura EEWE dentro de cuatro ciclos de reloj, los datos se escribirán en la EEPROM en la dirección
seleccionada. Si EEMWE es Cero, el ajuste de EEWE no tendrá efecto. Cuando EEMWE ha sido escrito en uno
por software, el hardware borra el
poco a cero después de cuatro ciclos de reloj. Consulte la descripción del bit EEWE para un procedimiento
de escritura de EEPROM

• Bit 1 - EEWE: Habilitar escritura de EEPROM


La señal de habilitación de escritura de EEPROM EEWE es la luz estroboscópica de escritura en la EEPROM.
Cuando la dirección y los datos son
correctamente configurado, el bit EEWE debe escribirse en uno para escribir el valor en la EEPROM. El bit
EEMWE debe
debe escribirse en uno antes de que se escriba uno lógico en EEWE; de lo contrario, no se realizará ninguna
escritura EEPROM. los
Se debe seguir el siguiente procedimiento al escribir la EEPROM (el orden de los pasos 3 y 4 no es esencial):
1. Espere hasta que EEWE se convierta en cero.
2. Espere hasta que SPMEN en SPMCR se convierta en cero.
3. Escriba la nueva dirección EEPROM en EEAR (opcional).
4. Escribir nuevos datos EEPROM en EEDR (opcional).
5. Escriba una lógica en el bit EEMWE mientras escribe un cero en EEWE en EECR.
6. Dentro de cuatro ciclos de reloj después de configurar EEMWE, escriba uno lógico en EEWE.
La EEPROM no se puede programar durante una escritura de CPU en la memoria Flash. El software debe
comprobar que
La programación de Flash se completa antes de iniciar una nueva escritura EEPROM. El paso 2 solo es
relevante si el
el software contiene un cargador de arranque que permite a la CPU programar el Flash. Si el flash nunca es
actualizado por
La CPU, paso 2 se puede omitir. Consulte "Compatibilidad con el cargador de arranque - Programación
automática de lectura durante la escritura" en
página 237 para detalles sobre la programación de arranque.
Precaución: una interrupción entre el paso 5 y el paso 6 hará que el ciclo de escritura falle, ya que la
escritura principal de EEPROM
Habilitar será el tiempo de espera. Si una rutina de interrupción que accede a la EEPROM está
interrumpiendo otro acceso de la EEPROM,
Se modificará el registro de EEAR o EEDR, lo que provocará un error en el acceso interrumpido de EEPROM.
Se recomienda
haga que se borre el indicador de interrupción global durante todos los pasos para evitar estos problemas.
Cuando el tiempo de acceso de escritura ha transcurrido, el bit EEWE se borra por hardware. El software del
usuario puede encuestar esto
bit y esperar un cero antes de escribir el siguiente byte. Cuando se ha configurado EEWE, la CPU se detiene
durante dos ciclos
Antes de que se ejecute la siguiente instrucción.

• Bit 0 - EERE: EEPROM Lectura Habilitada


La señal de habilitación de lectura de EEPROM (EERE) es la luz estroboscópica de lectura de la EEPROM.
Cuando la dirección correcta es
configurado en el registro EEAR, el bit EERE debe escribirse en uno lógico para activar la lectura EEPROM. los
El acceso de lectura de EEPROM toma una instrucción y los datos solicitados están disponibles de inmediato.
Cuando el
Se lee EEPROM, la CPU se detiene durante cuatro ciclos antes de que se ejecute la siguiente instrucción.
El usuario debe sondear el bit EEWE antes de iniciar la operación de lectura. Si una operación de escritura
está en curso, es
no es posible leer la EEPROM, ni cambiar el Registro EEAR.
El oscilador calibrado se usa para sincronizar los accesos EEPROM. La tabla 7-1 muestra el tiempo de
programación típico para
Acceso a la EEPROM desde la CPU.

Nota: 1. Utiliza un reloj de 1 MHz, independiente de la configuración del fusible CKSEL

Los siguientes ejemplos de código muestran un ensamblaje y una función C para escribir en la EEPROM. Los
ejemplos
Supongamos que las interrupciones están controladas (por ejemplo, deshabilitando las interrupciones
globalmente) para que no se produzcan interrupciones
Durante la ejecución de estas funciones. Los ejemplos también asumen que ningún cargador de arranque
Flash está presente en el
software. Si dicho código está presente, la función de escritura EEPROM también debe esperar a que se
ejecute cualquier comando SPM en curso.
terminar
Los siguientes ejemplos de código muestran las funciones de ensamblaje y C para leer la
EEPROM. Los ejemplos asumen que las interrupciones se controlan para que no se
produzcan interrupciones durante la ejecución de estas funciones

Ejemplo de código de montaje


EEPROM_write:
; Espera a que se complete la escritura anterior
sbic EECR, EEWE
rjmp EEPROM_write
; Configurar la dirección (r18: r17) en el registro de direcciones
fuera de EEARH, r18
fuera de EEARL, r17
; Escribir datos (r16) en el registro de datos.
fuera EEDR, r16
; Escribir una lógica a EEMWE.
sbi EECR, EEMWE
; Iniciar eeprom escribir estableciendo EEWE
sbi EECR, EEWE
jubilado
Ejemplo de código C
void EEPROM_write (unsigned int uiAddress, unsigned char ucData)
{
/ * Espera a que se complete la escritura anterior * /
while (EECR & (1 << EEWE))
;
/ * Configurar registros de direcciones y datos * /
EEAR = uiAddress;
EEDR = ucData;
/ * Escribir lógico a EEMWE * /
EECR | = (1 << EEMWE);
/ * Iniciar eeprom write mediante el ajuste de EEWE * /
EECR | = (1 << EEWE);
Ejemplo de código de montaje
EEPROM_read:
; Espera a que se complete la escritura anterior
sbic EECR, EEWE
rjmp EEPROM_read
; Configurar la dirección (r18: r17) en el registro de direcciones
fuera de EEARH, r18
fuera de EEARL, r17
; Comience eeprom leer escribiendo EERE
sbi EECR, EERE
; Leer datos del registro de datos
en r16, EEDR
jubilado
Ejemplo de código C
unsigned char EEPROM_read (unsigned int uiAddress)
{
/ * Espera a que se complete la escritura anterior * /
while (EECR & (1 << EEWE))
;
/ * Configurar registro de direcciones * /
EEAR = uiAddress;
/ * Comience a leer eeprom escribiendo EERE * /
EECR | = (1 << EERE);
/ * Devolver datos del registro de datos * /
8. Sistema de reloj y opciones de reloj
8.1 Sistemas de reloj y su distribución
La Figura 8-1 presenta los principales sistemas de reloj en el AtmelAVR y su distribución. Todos los relojes no
necesitan
estar activo en un momento dado Con el fin de reducir el consumo de energía, los relojes a los módulos que
no se utilizan pueden ser
se detiene mediante el uso de diferentes modos de suspensión, como se describe en “Administración de
energía y modos de suspensión” en la página 31.
Los sistemas de reloj están detallados en la Figura 8-1.

8.1.1 Reloj de CPU - clkCPU


El reloj de la CPU se envía a partes del sistema relacionadas con el funcionamiento del núcleo AVR. Ejemplos
de tales
Los módulos son el archivo de registro de propósito general, el registro de estado y la memoria de datos que
contiene la pila.
Puntero. La detención del reloj de la CPU impide que el núcleo realice operaciones y cálculos generales.

8.1.2 Reloj de E / S - clkI / O


El reloj de E / S es utilizado por la mayoría de los módulos de E / S, como Temporizador / Contadores, SPI y
USART. El reloj de E / S es
También es utilizado por el módulo de Interrupción Externa, pero tenga en cuenta que algunas
interrupciones externas son detectadas por asíncronos
lógica, lo que permite detectar dichas interrupciones incluso si se detiene el reloj de E / S. También tenga en
cuenta que el reconocimiento de direcciones en
el módulo TWI se lleva a cabo de forma asíncrona cuando se detiene clkI / O, lo que permite la recepción de
la dirección TWI en todos los tiempos
modos

8.1.3 Flash Clock - clkFLASH


El reloj Flash controla el funcionamiento de la interfaz Flash. El reloj Flash suele estar activo
simultáneamente con
el reloj de la CPU

8.1.4 Reloj temporizador asíncrono - clkASY


El reloj del temporizador asíncrono permite que el temporizador / contador asíncrono se sincronice
directamente desde un reloj externo.
Cristal de reloj de 32kHz. El dominio de reloj dedicado permite usar este temporizador / contador como
contador en tiempo real, incluso
cuando el dispositivo está en modo de suspensión

8.1.5 Reloj ADC - clkADC


El ADC se proporciona con un dominio de reloj dedicado. Esto permite detener la CPU y los relojes de E / S
para
reducir el ruido generado por los circuitos digitales. Esto da resultados de conversión de ADC más precisos.

8.2 Fuentes de reloj


El dispositivo tiene las siguientes opciones de fuente de reloj, seleccionables por los bits de Flash Fuse como
se muestra a continuación. El reloj
desde la fuente seleccionada se ingresa al generador de reloj y se enruta a los módulos apropiados

Nota: 1. Para todos los fusibles, "1" significa no programado, mientras que "0" significa programado.
Las diversas opciones para cada opción de reloj se dan en las siguientes secciones. Cuando la CPU se
despierta de
Apagado o Ahorro de energía, la fuente de reloj seleccionada se usa para cronometrar la puesta en marcha,
lo que garantiza un oscilador estable
Operación antes de que comience la ejecución de la instrucción. Cuando la CPU se inicia desde el reinicio,
hay un retraso adicional
permitiendo que la potencia alcance un nivel estable antes de comenzar la operación normal. El oscilador de
vigilancia es
utilizado para sincronizar esta parte en tiempo real del tiempo de inicio. El número de ciclos de osciladores
WDT utilizados para cada tiempo de espera se muestra en la Tabla 8-2. La frecuencia del oscilador Watchdog
depende de la tensión, como se muestra en “Típica
Características ”en la página 290.

8.3 Fuente de reloj predeterminada


El dispositivo se envía con CKSEL = "0001" y SUT = "10". La configuración de la fuente de reloj por defecto es
por lo tanto el 1
MHz. Oscilador RC interno con tiempo de arranque más largo. Esta configuración predeterminada garantiza
que todos los usuarios puedan hacer su
configuración de fuente de reloj deseada usando un programador interno o paralelo.

8.4 Oscilador de cristal


XTAL1 y XTAL2 son entradas y salidas, respectivamente, de un amplificador inversor que puede configurarse
para su uso
como un oscilador en chip, como se muestra en la Figura 8-2. Se puede usar un cristal de cuarzo o un
resonador cerámico.
El Fusible CKOPT selecciona entre dos modos diferentes de amplificador de oscilador. Cuando se programa
CKOPT, el
La salida del oscilador oscilará en un giro completo de riel a riel en la salida. Este modo es adecuado cuando
se opera en un
Un entorno muy ruidoso o cuando la salida de XTAL2 impulsa un segundo búfer de reloj. Este modo tiene
una amplia
rango de frecuencia. Cuando CKOPT no está programado, el oscilador tiene una oscilación de salida más
pequeña. Esto reduce Consumo de energía considerablemente. Este modo tiene un rango de frecuencia
limitado y no se puede utilizar para impulsar otros
buffers de reloj.
Para los resonadores, la frecuencia máxima es de 8 MHz con CKOPT no programado y de 16 MHz con CKOPT
programado. C1 y C2 siempre deben ser iguales tanto para los cristales como para los resonadores. El valor
óptimo de la
Los condensadores dependen del cristal o resonador en uso, la cantidad de capacitancia parásita y la
capacidad electromagnética.
El ruido del ambiente. Algunas pautas iniciales para elegir capacitores para usar con cristales se dan en la
Tabla
8-3. Para resonadores cerámicos, se deben usar los valores de condensador dados por el fabricante.

El oscilador puede operar en tres modos diferentes, cada uno optimizado para un rango de frecuencia
específico. los
el modo de funcionamiento se selecciona con los fusibles CKSEL3: 1 como se muestra en la Tabla 8-3.

Nota: 1. Esta opción no debe usarse con cristales, solo con resonadores cerámicos.
El fusible CKSEL0 junto con los fusibles SUT1: 0 selecciona los tiempos de inicio como se muestra en la Tabla
8-4.
Notas: 1. Estas opciones solo deben usarse cuando no se opera cerca de la frecuencia máxima del
dispositivo, y
solo si la estabilidad de frecuencia en el arranque no es importante para la aplicación. Estas opciones no son
adecuadas para
cristales
2. Estas opciones están diseñadas para su uso con resonadores cerámicos y garantizarán la estabilidad de la
frecuencia en el inicio. Ellos
También se puede usar con cristales cuando no se opera cerca de la frecuencia máxima del dispositivo, y si
La estabilidad de frecuencia en la puesta en marcha no es importante para la aplicación.

8.5 Oscilador de cristal de baja frecuencia


Para utilizar un cristal de reloj de 32.768 kHz como fuente de reloj para el dispositivo, el Oscilador de Cristal
de baja frecuencia debe
seleccionarse al configurar los Fusibles CKSEL en "1001". El cristal debe estar conectado como se muestra en
la Figura 8-2. Por
programando el Fusible CKOPT, el usuario puede habilitar los condensadores internos en XTAL1 y XTAL2, por
lo tanto
Eliminando la necesidad de condensadores externos. Los condensadores internos tienen un valor nominal
de 36pF.
Cuando se selecciona este oscilador, los tiempos de inicio se determinan mediante los fusibles SUT, como se
muestra en la Tabla 8-5
Nota: 1. Estas opciones solo deben usarse si la estabilidad de frecuencia en el inicio no es importante para la
aplicación.

8.6 Oscilador RC externo


Para aplicaciones no sensibles al tiempo, se puede usar la configuración RC externa que se muestra en la
Figura 8-3. los
la frecuencia se estima aproximadamente por la ecuación f = 1 / (3RC). C debe ser al menos 22pF.
Programando el
CKOPT Fuse, el usuario puede habilitar un condensador interno de 36pF entre XTAL1 y GND, eliminando así
el
Necesidad de un condensador externo. Para obtener más información sobre el funcionamiento del oscilador
y detalles sobre cómo elegir R y
C, refiérase a la nota de aplicación del oscilador RC externo.

El oscilador puede operar en cuatro modos diferentes, cada uno optimizado para un rango de frecuencia
específico. La operacion
el modo se selecciona con los fusibles CKSEL3: 0 como se muestra en la Tabla 8-6.

Cuando se selecciona este oscilador, los tiempos de inicio se determinan mediante los fusibles SUT, como se
muestra en la Tabla 8-7
Nota: 1. Esta opción no debe utilizarse cuando se opera cerca de la frecuencia máxima del dispositivo.

8.7 Oscilador RC Calibrado Interno


El oscilador RC interno calibrado proporciona un reloj fijo de 1.0, 2.0, 4.0 o 8.0MHz. Todas las frecuencias
son nominales. Valores a 5V y 25 ° C. Este reloj se puede seleccionar como el reloj del sistema programando
los Fusibles CKSEL como mostrado en la Tabla 8-8. Si se selecciona, funcionará sin componentes externos. El
fusible CKOPT siempre debe estar unpro-grammed cuando se utiliza esta opción de reloj. Durante el reinicio,
el hardware carga el byte de calibración en el Registre OSCCAL y, por lo tanto, calibre automáticamente el
oscilador RC. A 5 V, 25 ° C y 1.0, 2.0, 4.0 o
Frecuencia del oscilador seleccionada de 8.0MHz, esta calibración da una frecuencia dentro de ± 3% de la
frecuencia nominal. Usando métodos de calibración como se describe en las notas de aplicación disponibles
en www.atmel.com/avr, es posible lograr una precisión de ± 1% en cualquier VCC y temperatura dadas.
Cuando este Oscilador se usa como el Reloj Chip, el Watchdog Oscillator se seguirá utilizando para el
temporizador de vigilancia y para el tiempo de espera de reinicio. Para más información sobre
Para el valor de calibración preprogramado, consulte la sección "Byte de calibración" en la página 253.

Nota: 1. El dispositivo se envía con esta opción seleccionada.


Cuando se selecciona este oscilador, los tiempos de inicio se determinan mediante los fusibles SUT, como se
muestra en la Tabla 8-9. XTAL1 y XTAL2 debe dejarse desconectado (NC).

Nota: 1. El dispositivo se envía con esta opción seleccionada

8.8 reloj externo


Para conducir el dispositivo desde una fuente de reloj externa, XTAL1 debe manejarse como se muestra en
la Figura 8-4. Para ejecutar el en un reloj externo, los fusibles CKSEL deben programarse en "0000".
Programando el CKOPT Fusible, el usuario puede habilitar un condensador interno de 36pF entre XTAL1 y

GND
Cuando se selecciona esta fuente de reloj, los tiempos de inicio se determinan mediante los fusibles SUT,
como se muestra en la Tabla 8-10.

Al aplicar un reloj externo, se requiere evitar cambios repentinos en la frecuencia de reloj aplicada para
Asegurar el funcionamiento estable de la MCU. Una variación en la frecuencia de más del 2% de un ciclo de
reloj a otro. Puede llevar a un comportamiento impredecible. Es necesario asegurarse de que la MCU se
mantenga en restablecimiento durante dichos cambios en
La frecuencia del reloj.

8.9 Temporizador / contador oscilador


Para microcontroladores con pines de temporizador / contador oscilador (TOSC1 y TOSC2), el cristal se
conecta directamente entre los pines. No se necesitan condensadores externos. El oscilador está optimizado
para su uso con un 32.768kHz reloj de cristal No se recomienda aplicar una fuente de reloj externa a TOSC1.
Nota: el temporizador / contador oscilador utiliza el mismo tipo de oscilador de cristal que el oscilador de
baja frecuencia y el interno Los condensadores tienen el mismo valor nominal de 36pF.

8.10 Descripción del registro

8.10.1 OSCCAL - Registro de calibración del oscilador

• Bits 7: 0 - CAL7: 0: Valor de calibración del oscilador Al escribir el byte de calibración en esta dirección, se
recortará el oscilador interno para eliminar las variaciones del proceso de la Frecuencia del oscilador. Esto se
hace automáticamente durante Chip Reset. Cuando OSCCAL es cero, el más bajo disponible Se elige la
frecuencia. La escritura de valores distintos de cero en este registro aumentará la frecuencia de las
funciones internas. Oscilador. Escribir $ FF en el registro da la frecuencia más alta disponible. El oscilador
calibrado se utiliza para Tiempo de acceso a EEPROM y Flash. Si se escribe EEPROM o Flash, no calibre a más
del 10% por encima del frecuencia nominal De lo contrario, la escritura EEPROM o Flash puede fallar. Tenga
en cuenta que el oscilador está destinado a Calibración a 1.0, 2.0, 4.0 o 8.0MHz. La sintonización con otros
valores no está garantizada, como se indica en la Tabla 8-11.

9. Administración de energía y modos de


sueño
9.1 Resumen
Los modos de suspensión permiten que la aplicación cierre los módulos no utilizados en la MCU, lo que
ahorra energía. Los El AVR de Atmel proporciona varios modos de suspensión que permiten al usuario
adaptar el consumo de energía a la aplicación. requisitos

9.2 Modos de dormir


La Figura 8-1 en la página 24 presenta los diferentes sistemas de reloj en theATmega16A y su distribución. La
figura es útil en la selección de un modo de reposo adecuado. La tabla 9-1 muestra los diferentes modos de
sueño y su activación. fuentes.

Notas:
1. Cristal externo o resonador seleccionado como fuente de reloj.
2. Si se establece AS2 bit en ASSR.
3. Solo INT2 o interrupción de nivel INT1 e INT0.
Para ingresar a cualquiera de los seis modos de suspensión, el bit SE en MCUCR debe escribirse en la lógica
uno y una instrucción SLEEP debe ser ejecutado Los bits SM2, SM1 y SM0 en el Registro MCUCR seleccionan
qué modo de suspensión (Inactivo, ADC La reducción de ruido, el apagado, el ahorro de energía, el modo de
espera o el modo de espera extendido) se activarán con el SLEEP instrucción. Vea la Tabla 9-2 para un
resumen. Si se produce una interrupción habilitada mientras la MCU está en modo de suspensión, la MCU se
activa. La MCU se detiene para Cuatro ciclos además del tiempo de inicio, ejecuta la rutina de interrupción y
reanuda la ejecución desde el instrucción después de SLEEP. El contenido del archivo de registro y la SRAM
no se modifican cuando el dispositivo se activa levantado del sueño Si se produce un reinicio durante el
modo de suspensión, la MCU se activa y se ejecuta desde el Vector de reinicio.

9.3 Modo inactivo


Cuando se escriben los bits SM2: 0 en 000, la instrucción SLEEP hace que la MCU entre en el modo inactivo,
deteniendo CPU pero permitiendo SPI, USART, comparador analógico, ADC, interfaz serial de dos hilos,
temporizador / contadores, Watchdog, y el sistema de interrupción para seguir funcionando. Este modo de
suspensión básicamente detiene clkCPU y clkFLASH, mientras permite que los otros relojes corran.
El modo inactivo permite que la MCU se despierte de interrupciones activadas externas, así como internas
como el temporizador Desbordamiento y USART Transmiten interrupciones completas. Si la activación de la
interrupción del comparador analógico no es requerido, el Comparador analógico se puede apagar
configurando el bit ACD en el Comparador analógico Registro de Control y Estado - ACSR. Esto reducirá el
consumo de energía en el modo inactivo. Si el ADC está habilitado, un la conversión se inicia
automáticamente cuando se ingresa este modo.

9.4 Modo de reducción de ruido ADC


Cuando los bits SM2: 0 se escriben en 001, la instrucción SLEEP hace que la MCU ingrese en la reducción de
ruido ADC modo, deteniendo la CPU pero permitiendo el ADC, las interrupciones externas, la dirección de
interfaz en serie de dos hilos Watch, Timer / Counter2 y Watchdog para continuar funcionando (si está
habilitado). Este modo de suspensión básicamente se detiene clkI / O, clkCPU y clkFLASH, a la vez que
permite que se ejecuten los otros relojes. Esto mejora el entorno de ruido para el ADC, permitiendo
mediciones de mayor resolución. Si el ADC es habilitado, una conversión se inicia automáticamente cuando
se ingresa este modo. Aparte de la conversión ADC Interrupción completa, solo un restablecimiento externo,
un restablecimiento de Watchdog, un restablecimiento de reducción de tensión, una interfaz en serie de dos
hilos Interrupción de coincidencia de direcciones, una interrupción del temporizador / contador2, una
interrupción lista para SPM / EEPROM, un nivel externo la interrupción en INT0 o INT1, o una interrupción
externa en INT2 puede activar la MCU de la reducción de ruido ADC modo.

9.5 Modo de apagado


Cuando los bits SM2: 0 se escriben en 010, la instrucción SLEEP hace que la MCU entre en el modo de
apagado. En esto modo, el Oscilador Externo se detiene, mientras que el Interruptor Externo, la dirección de
Interfaz Serial de Dos hilos Mira, y el Watchdog continúa funcionando (si está habilitado). Solo un
restablecimiento externo, un restablecimiento de Watchdog, un restablecimiento de reducción de tensión,
una interrupción de coincidencia de dirección de interfaz en serie de dos hilos, una interrupción de nivel
externo en INT0 o INT1, o una interrupción externa en INT2 puede activar la MCU. Este modo de suspensión
básicamente detiene todos los relojes generados, Permitiendo el funcionamiento de módulos asíncronos
únicamente. Tenga en cuenta que si se utiliza una interrupción activada por nivel para la activación desde el
modo de apagado, el nivel modificado debe ser Mantenido durante algún tiempo para despertar al MCU.
Consulte “Interrupciones externas” en la página 66 para obtener más información. Al activarse desde el
modo de apagado, se produce un retraso desde la condición de activación hasta que se activa la activación.
se hace efectivo. Esto permite que el reloj se reinicie y se estabilice después de haberse detenido. El
despertar el período está definido por los mismos fusibles CKSEL que definen el período de tiempo de
espera de reinicio, como se describe en “Reloj
Fuentes ”en la página 25.

9.6 Modo de ahorro de energía


Cuando los bits SM2: 0 se escriben en 011, la instrucción SLEEP hace que la MCU entre en el modo de ahorro
de energía. Esta el modo es idéntico al apagado, con una excepción: Si Timer / Counter2 se sincroniza de
manera asíncrona, es decir, se establece el bit AS2 en ASSR, Timer / Counter2 se ejecutará durante
dormir. El dispositivo puede activarse desde el evento Desbordamiento del temporizador o Comparación de
salida desde el Temporizador / Contador2 si el los bits correspondientes de habilitación de interrupción del
temporizador / contador2 se configuran en TIMSK, y el bit de habilitación de interrupción global en
SREG está establecido. Si el temporizador asíncrono NO se sincroniza de forma asíncrona, se recomienda el
modo de apagado en lugar de Modo de ahorro de energía porque se debe considerar el contenido de los
registros en el temporizador asíncrono no definido después de la activación en el modo de ahorro de
energía si AS2 es 0. Este modo de suspensión básicamente detiene todos los relojes excepto clkASY, lo que
permite la operación solo de módulos asíncronos, incluyendo Timer / Counter2 si se sincroniza de forma
asíncrona.

9.7 Modo de espera


Cuando los bits SM2: 0 son 110 y se selecciona una opción de reloj de cristal / resonador externo, la
instrucción SLEEP hace que la MCU entre en modo de espera. Este modo es idéntico al apagado, con la
excepción de que El oscilador se mantiene funcionando. Desde el modo de espera, el dispositivo se activa en
seis ciclos de reloj.

9.8 Modo de espera extendida


Cuando los bits SM2: 0 son 111 y se selecciona una opción de reloj de cristal / resonador externo, la
instrucción SLEEP hace que la MCU entre en el modo de espera extendida. Este modo es idéntico al modo de
ahorro de energía con la excepción que el oscilador se mantiene funcionando. Desde el modo de espera
extendida, el dispositivo se activa en seis ciclos de reloj.

9.9 Minimizar el consumo de energía


Hay varios aspectos a considerar cuando se trata de minimizar el consumo de energía en un AVR controlado
sistema. En general, los modos de reposo deben usarse lo más posible, y el modo de reposo debe
seleccionarse para que funcionen lo menos posible las funciones del dispositivo. Todas las funciones no
necesarias deben estar deshabilitadas. En particular, los siguientes módulos pueden necesitar una
consideración especial cuando se trata de lograr lo más bajo posible. el consumo de energía.

9.9.1 Convertidor analógico a digital


Si está habilitado, el ADC se habilitará en todos los modos de suspensión. Para ahorrar energía, el ADC debe
estar deshabilitado antes Entrando en cualquier modo de suspensión. Cuando el ADC se apaga y se vuelve a
encender, la siguiente conversión será una extensión conversión. Consulte “Convertidor analógico a digital”
en la página 196 para obtener detalles sobre la operación ADC.

9.9.2 Comparador analógico


Al ingresar al modo inactivo, el comparador analógico se debe desactivar si no se utiliza. Al ingresar al ruido
ADC Modo de reducción, el comparador analógico debe estar deshabilitado. En los otros modos de
suspensión, el comparador analógico Se desactiva automáticamente. Sin embargo, si el Comparador
analógico está configurado para usar la Referencia de voltaje interno como de entrada, el comparador
analógico debe estar deshabilitado en todos los modos de suspensión. De lo contrario, la referencia de
tensión interna. Se habilitará, independientemente del modo de suspensión. Consulte “Comparador
analógico” en la página 193 para obtener detalles sobre cómo configurar el comparador analógico.

9.9.3 Detector de apagón


Si no se necesita el Detector de reducción de voltaje en la aplicación, este módulo debe estar apagado. Si el
Brown-out El detector está habilitado por el fusible BODEN, se habilitará en todos los modos de suspensión
y, por lo tanto, siempre consumirá poder. En los modos de sueño más profundo, esto contribuirá
significativamente al consumo de corriente total. Referirse a “Detección de reducción de tensión” en la
página 38 para obtener detalles sobre cómo configurar el Detector de reducción de tensión.

9.9.4 Referencia de voltaje interno


La Referencia de voltaje interno se habilitará cuando sea necesario por el Detector de reducción de voltaje,
el Analógico Comparador o el ADC. Si estos módulos están deshabilitados como se describe en las secciones
anteriores, el voltaje interno La referencia se deshabilitará y no consumirá energía. Cuando se enciende de
nuevo, el usuario debe permitir Referencia para iniciar antes de utilizar la salida. Si la referencia se mantiene
en modo de suspensión, se puede utilizar la salida inmediatamente. Consulte “Referencia de voltaje interno”
en la página 39 para obtener detalles sobre el tiempo de inicio.

9.9.5 temporizador de vigilancia


Si el temporizador de vigilancia no es necesario en la aplicación, este módulo debe estar apagado. Si el
temporizador de vigilancia está habilitado, se habilitará en todos los modos de suspensión y, por lo tanto,
siempre consumirá energía. En los modos de sueño más profundo, Esto contribuirá significativamente al
consumo total actual. Consulte “Temporizador de vigilancia” en la página 40 para detalles sobre cómo
configurar el temporizador de vigilancia.

9.9.6 Pasadores de puerto


Al ingresar a un modo de suspensión, todos los pines del puerto deben configurarse para usar la potencia
mínima. El más importante La cosa es entonces asegurar que no haya pasadores que conduzcan cargas
resistivas. En los modos de suspensión en los que tanto el reloj de E / S (clkI / O) como el
el reloj ADC (clkADC) se detiene, los buffers de entrada del dispositivo se desactivarán. Esto asegura que no
haya energía. Es consumido por la lógica de entrada cuando no es necesario. En algunos casos, la lógica de
entrada es necesaria para detectar la activación condiciones, y entonces será habilitado. Consulte la sección
“Habilitación de la entrada digital y los modos de suspensión” en la página 53 para detalles sobre qué pines
están habilitados. Si el búfer de entrada está habilitado y la señal de entrada se deja flotando o tiene un
nivel de señal analógica cerca de VCC / 2, el búfer de entrada utilizará una potencia excesiva.

9.9.7 Interfaz JTAG y sistema de depuración en chip


Si el sistema de depuración en chip está habilitado por el fusible OCDEN y el chip ingresa en Apagado o
Ahorro de energía Modo de suspensión, la fuente principal del reloj permanece habilitada. En estos modos
de sueño, esto contribuirá significativamente a El consumo total de corriente. Hay tres formas alternativas
de evitar esto:
 z Desactivar el fusible OCDEN.
 z Desactivar Fusible JTAGEN.
 z Escribir uno en el bit JTD en MCUCSR.
El pin TDO se deja flotando cuando la interfaz JTAG está habilitada mientras el controlador JTAG TAP no está
cambiando datos. Si el hardware conectado al pin TDO no eleva el nivel lógico, el consumo de energía
incrementar. Tenga en cuenta que el pin TDI para el siguiente dispositivo en la cadena de escaneo contiene
un pull-up que evita este problema. Escribir el bit JTD en el registro MCUCSR en uno o dejar el fusible JTAG
sin programar desactiva el JTAG interfaz.

9.10 Descripción de Registro


9.10.1 MCUCR - Registro de control de MCU
El MCU Control Register contiene bits de control para la administración de energía.

• Bits 7, 5, 4 - SM2: 0: modo de suspensión Seleccione los bits 2, 1 y 0 Estos bits seleccionan entre los seis
modos de suspensión disponibles como se muestra en la Tabla 9-2.

Nota: 1. El modo de espera y el modo de espera extendida solo están disponibles con cristales externos o
resonadores.

• Bit 6 - SE: Sleep Enable


El bit SE debe escribirse en la lógica uno para hacer que la MCU entre en el modo de suspensión cuando la
instrucción SLEEP es ejecutado. Para evitar que la MCU ingrese al modo de suspensión a menos que sea el
propósito de los programadores, se recomienda para escribir el bit de habilitación de reposo (SE) en uno
justo antes de la ejecución de la instrucción SLEEP y borrarla Inmediatamente después de despertarse.
10. Control y reinicio del sistema
10.1 Reiniciando el AVR
Durante el reinicio, todos los registros de E / S se configuran a sus valores iniciales y el programa
comienza a ejecutarse desde el reinicio. Vector. La instrucción colocada en el Vector de reinicio
debe ser una instrucción JMP (salto absoluto) para el reinicio rutina de manejo Si el programa
nunca habilita una fuente de interrupción, los vectores de interrupción no se utilizan, y código de
programa regular se puede colocar en estos lugares. Este es también el caso si el Vector de reinicio
está en el Sección de aplicación mientras que los vectores de interrupción están en la sección de
arranque o viceversa. El diagrama del circuito en la figura 10-1 muestra la lógica de reinicio.
“Características del sistema y de reinicio” en la página 282 define los parámetros eléctricos del
circuito de reinicio. Los puertos de E / S se restablecen inmediatamente a su estado inicial cuando
se activa una fuente de restablecimiento. Esto no requiere Cualquier fuente de reloj para estar
funcionando. Después de que todas las fuentes de reinicio se hayan vuelto inactivas, se invoca un
contador de demora, extendiendo el reinicio interno. Esto permite la potencia para alcanzar un
nivel estable antes de que comience la operación normal. El tiempo de espera del contador de
demoras es Definido por el usuario a través de los Fusibles CKSEL. Las diferentes selecciones para
el período de retraso se presentan en “Fuentes de reloj” en la página 25.

10.1.1 Restablecer fuentes


El ATmega16A tiene cinco fuentes de reinicio:
z reinicio de encendido. La MCU se restablece cuando la tensión de alimentación está por debajo
del umbral de reinicio de encendido
(VPOT).
z reinicio externo. La MCU se reinicia cuando hay un nivel bajo en el pin RESET durante más
tiempo que el
Longitud mínima de pulso.
z Watchdog Reset. La MCU se restablece cuando el período del temporizador de vigilancia caduca
y el regulador está en espera.
habilitado.
z Restablecimiento de salida de tensión. La MCU se restablece cuando la tensión de alimentación
VCC está por debajo del umbral de restablecimiento de reducción de voltaje
(VBOT) y el detector Brown-out está habilitado.
z JTAG AVR Reset. La MCU se reinicia siempre que haya una lógica en el Registro de reinicio, una
de las exploraciones
Cadenas del sistema JTAG. Consulte la sección “Exploración de límites IEEE 1149.1 (JTAG)” en la
página 219 para
detalles
10.1.2 Reinicio de encendido
Un impulso de reinicio de encendido (POR) es generado por un circuito de detección en chip. El
nivel de detección se define en
“Características del sistema y de reinicio” en la página 282. El POR se activa cuando VCC está por
debajo de la detección
nivel. El circuito POR se puede usar para activar el reinicio de arranque, así como para detectar un
fallo en el voltaje de suministro.
Un circuito de reinicio de encendido (POR) garantiza que el dispositivo se reinicie desde el
encendido. Alcanzando el reinicio de encendido
la tensión de umbral invoca el contador de demora, que determina cuánto tiempo se mantendrá
el dispositivo en RESET después de VCC
subir. La señal RESET se activa nuevamente, sin demora, cuando VCC disminuye por debajo del
nivel de detección.
10.1.3 Reset externo
Un reinicio externo es generado por un nivel bajo en el pin RESET. Restablecer los pulsos más
largos que el mínimo.
El ancho (consulte "Características del sistema y de reinicio" en la página 282) generará un reinicio,
incluso si el reloj no está
corriendo. No se garantiza que los impulsos más cortos generen un reinicio. Cuando la señal
aplicada alcanza el Reset
Voltaje de umbral - VRST - en su flanco positivo, el contador de demora inicia la MCU después del
período de tiempo de espera
tTOUT ha caducado.

10.1.4 Detección de exclusión


El ATmega16A tiene un circuito de Detección de salida de tensión (BOD) en el chip para
monitorear el nivel de VCC durante
Operación comparándola con un nivel de disparo fijo. El nivel de disparo para el BOD puede ser
seleccionado por el fusible
BODLEVEL será 2.7V (BODLEVEL no programado), o 4.0V (BODLEVEL programado). El nivel de
disparo tiene
una histéresis para asegurar la detección de paro libre de espiga. La histéresis en el nivel de
detección debe ser
interpretado como VBOT + = VBOT + VHYST / 2 y VBOT- = VBOT - VHYST / 2.
El circuito BOD puede activarse / desactivarse mediante el fusible BODEN. Cuando el BOD está
habilitado (BODEN
programado), y VCC disminuye a un valor por debajo del nivel de activación (VBOT-en la Figura 10-
5), el restablecimiento de salida de tensión
se activa inmediatamente. Cuando VCC aumenta por encima del nivel de disparo (VBOT + en la
Figura 10-5), el contador de demora
inicia el MCU después de que el tiempo de espera tTOUT haya expirado.
El circuito BOD solo detectará una caída en VCC si el voltaje permanece por debajo del nivel de
disparo durante más tiempo que tBOD
dado en "Características del sistema y de reinicio" en la página 282.

10.1.5 Reinicio de vigilancia


Cuando el Watchdog expira, generará un breve impulso de reinicio de una duración de ciclo CK. En
el borde de la caída
de este impulso, el temporizador de demora comienza a contar el período de tiempo de espera
tTOUT. Para obtener más información, consulte "Temporizador de vigilancia" en
página 40.

10.2 Referencia de voltaje interno


ATmega16A cuenta con una referencia de banda interna. Esta referencia se usa para la Detección
de Torsión, y puede
ser utilizado como una entrada para el comparador analógico o el ADC. La referencia de 2.56V al
ADC se genera desde
La referencia de banda interna.

10.2.1 Señales de habilitación de referencia de voltaje y tiempo de


arranque
La referencia de voltaje tiene un tiempo de inicio que puede influir en la forma en que debe
usarse. El tiempo de puesta en marcha es
en "Características del sistema y restablecimiento" en la página 282. Para ahorrar energía, la
referencia no siempre se gira
en. La referencia está activada durante las siguientes situaciones:
1. Cuando el BOD está habilitado (programando el fusible BODEN).
2. Cuando la referencia de intervalo de banda está conectada al comparador analógico
(configurando el bit ACBG en ACSR).
3. Cuando el ADC está habilitado.
Por lo tanto, cuando el BOD no está habilitado, después de configurar el bit ACBG o habilitar el
ADC, el usuario siempre debe permitir
la referencia para iniciar antes de que se use la salida del Comparador analógico o ADC. Para
reducir la potencia
En el modo de apagado, el usuario puede evitar las tres condiciones anteriores para garantizar que
la referencia
se apaga antes de entrar en el modo de apagado.

10.3 Temporizador de vigilancia


El temporizador Watchdog se sincroniza desde un oscilador en chip independiente que funciona a
1MHz. Este es el valor típico
a VCC = 5V. Ver datos de caracterización para valores típicos en otros niveles de VCC. Al controlar
el temporizador de vigilancia
Antes de comenzar, el intervalo de restablecimiento de Watchdog se puede ajustar como se
muestra en la Tabla 10-1 en la página 42. El WDR -
Restablecimiento de Watchdog: la instrucción restablece el temporizador Watchdog. El
temporizador de vigilancia también se reinicia cuando está desactivado
y cuando se produce un reinicio de chip. Se pueden seleccionar ocho períodos de ciclo de reloj
diferentes para determinar el período de reinicio.
Si el período de reinicio expira sin otro reinicio de Watchdog, el ATmega16A se reinicia y ejecuta
desde el
Restablecer Vector. Para obtener más información sobre la sincronización del restablecimiento de
Watchdog, consulte la página 39.
Para evitar una desactivación involuntaria del Watchdog, se debe seguir una secuencia de apagado
especial cuando
El perro guardián está deshabilitado. Consulte la descripción del Registro de control del
temporizador de vigilancia para obtener más información.
10.4 Descripción del registro
10.4.1 MCUCSR - MCU Control y registro de estado
El MCU Control and Status Register proporciona información sobre qué fuente de reinicio causó un
reinicio de MCU

• Bit 4 - JTRF: Indicador de restablecimiento de JTAG


Este bit se establece si un restablecimiento está siendo causado por uno lógico en el Registro de
restablecimiento de JTAG seleccionado por el JTAG
instrucción AVR_RESET. Este bit se restablece mediante un reinicio de encendido o escribiendo un
cero lógico en el indicador.
• Bit 3 - WDRF: marca de restablecimiento de watchdog
Este bit se establece si se produce un reinicio de Watchdog. El bit se restablece mediante un
reinicio de encendido, o escribiendo un cero lógico en el
bandera.
• Bit 2 - BORF: indicador de restablecimiento de reducción de tensión
Este bit se establece si se produce un restablecimiento de reducción de tensión. El bit se
restablece mediante un reinicio de encendido, o escribiendo un cero lógico en el
bandera.
• Bit 1 - EXTRF: Indicador de reinicio externo
Este bit se establece si se produce un restablecimiento externo. El bit se restablece mediante un
reinicio de encendido, o escribiendo un cero lógico en el
bandera.
• Bit 0 - PORF: Indicador de reinicio de encendido
Este bit se establece si se produce un reinicio de encendido. El bit se restablece solo escribiendo
un cero lógico en el indicador.
Para utilizar los indicadores de restablecimiento para identificar una condición de
restablecimiento, el usuario debe leer y luego restablecer el MCUCSR
tan pronto como sea posible en el programa. Si el registro se borra antes de que ocurra otro
reinicio, la fuente del reinicio
se puede encontrar examinando las banderas de reinicio.
10.4.2 WDTCR - Registro de control del temporizador de vigilancia

• Bits 7: 5 - Res: Bits reservados


Estos bits son bits reservados en el ATmega16A y siempre se leerán como cero.
• Bit 4 - WDTOE: habilitación de desactivación de watchdog
Este bit debe establecerse cuando el bit WDE se escribe en la lógica cero. De lo contrario, el
Watchdog no se desactivará.
Una vez escrito en uno, el hardware borrará este bit después de cuatro ciclos de reloj. Consulte la
descripción del bit WDE para
un procedimiento de desactivación de Watchdog.

• Bit 3 - WDE: Watchdog Enable


Cuando el WDE se escribe en la lógica uno, el temporizador de vigilancia está habilitado, y si el
WDE se escribe en la lógica cero, La función del temporizador de vigilancia está deshabilitada.
WDE solo se puede borrar si el bit WDTOE tiene un nivel lógico uno. A deshabilite un temporizador
de vigilancia habilitado, se debe seguir el siguiente procedimiento:
1. En la misma operación, escriba una lógica en WDTOE y WDE. Una lógica se debe escribir en
WDE
incluso aunque esté configurado en uno antes de que comience la operación de desactivación.
2. Dentro de los siguientes cuatro ciclos de reloj, escriba un 0 lógico en WDE. Esto desactiva el
Watchdog.
• Bits 2: 0 - WDP2, WDP1, WDP0: Watchdog Timer Prescaler 2, 1 y 0
Los bits WDP2, WDP1 y WDP0 determinan la preescala del temporizador de vigilancia cuando el
temporizador de vigilancia está
habilitado. Los diferentes valores de preescalamiento y sus correspondientes períodos de tiempo
de espera se muestran en la Tabla 10-1.

El siguiente ejemplo de código muestra un ensamblaje y una función C para apagar el WDT. El
ejemplo
asume que las interrupciones están controladas (por ejemplo, deshabilitando interrupciones
globalmente) para que no haya interrupciones
Ocurren durante la ejecución de estas funciones.

Ejemplo de código de montaje


WDT_off:
; Restablecer WDT
WDR
; Escribir uno lógico a WDTOE y WDE.
en r16, WDTCR
ori r16, (1 << WDTOE) | (1 << WDE)
fuera WDTCR, r16
; Apagar WDT
ldi r16, (0 << WDE)
fuera WDTCR, r16
jubilado
Ejemplo de código C
void WDT_off (void)
{
/ * Restablecer WDT * /
_WDR ();
/ * Escribir uno lógico a WDTOE y WDE * /
WDTCR | = (1 << WDTOE) | (1 << WDE);
/ * Desactivar WDT * /
WDTCR = 0x00;
}
11. Interrupciones
11.1 Descripción general
Esta sección describe los aspectos específicos del manejo de interrupciones realizado en ATmega16A. Para
un general
Para obtener más información sobre el manejo de interrupciones del AVR, consulte “Reinicio y manejo de
interrupciones” en la página 13.

11.2 Vectores de interrupción

Notas:
1. Cuando se programe el fusible BOOTRST, el dispositivo saltará a la dirección del cargador de arranque al
reiniciarse, vea "Arranque Compatibilidad con el cargador: autoprogramación de lectura mientras escribe
”en la página 237.
2. Cuando se establece el bit IVSEL en GICR, los vectores de interrupción se moverán al inicio de la sección
Boot Flash. los
La dirección de cada Vector de Interrupción será la dirección en esta tabla agregada a la dirección de inicio
del Arranque Sección de flash
La tabla 11-2 muestra la ubicación de los vectores de reinicio e interrupción para las diversas combinaciones
de BOOTRST e IVSEL
ajustes Si el programa nunca habilita una fuente de interrupción, los vectores de interrupción no se utilizan,
y
El código del programa se puede colocar en estos lugares. Este es también el caso si el Vector de reinicio
está en la aplicación
sección mientras que los vectores de interrupción están en la sección de arranque o viceversa.

Nota: 1. La dirección de reinicio de inicio se muestra en la Tabla 25-6 en la página 249. Para el fusible
BOOTRST "1" significa
no programado mientras que "0" significa programado.

La configuración de programa más típica y general para las direcciones de reinicio e interrupción de vectores
en ATmega16A es:

Cuando el fusible BOOTRST no está programado, el tamaño de la sección de arranque se establece en 2K


bytes y el bit IVSEL en el
El registro GICR se establece antes de habilitar las interrupciones, la configuración más típica y general del
programa para el
Restablecer e interrumpir las direcciones de vectores es:
Cuando se programa el fusible BOOTRST y el tamaño de la sección de arranque se establece en 2K bytes, el
más típico y
La configuración general del programa para las direcciones de reinicio e interrupción de vectores es:

Cuando se programa el fusible BOOTRST, el tamaño de la sección de arranque se establece en 2K bytes y el


bit IVSEL en el GICR
El registro se establece antes de habilitar las interrupciones, la configuración más típica y general del
programa para el reinicio y
Direcciones de vectores de interrupción es:

11.2.1 Mover interrupciones entre la aplicación y el espacio de arranque


El Registro de control de interrupción general controla la ubicación de la tabla Vector de interrupción
11.2.2 GICR - Registro de control de interrupción general

• Bit 1 - IVSEL: Selección de vector de interrupción


Cuando se borra el bit IVSEL (cero), los vectores de interrupción se colocan al inicio de la memoria Flash.
Cuando
este bit se establece (uno), los vectores de interrupción se mueven al principio de la sección del cargador de
arranque de Flash. los
La dirección real del inicio de la sección Boot Flash está determinada por los fusibles BOOTSZ. Consulte la
sección
“Compatibilidad con el cargador de arranque - Programación automática de lectura durante la escritura” en
la página 237 para obtener más información. Para evitar involuntarios
En los cambios de las tablas de vectores de interrupción, se debe seguir un procedimiento de escritura
especial para cambiar el bit IVSEL:
1. Escriba el bit de habilitación de cambio de vector de interrupción (IVCE) en uno.
2. Dentro de cuatro ciclos, escriba el valor deseado en IVSEL mientras escribe un cero en el IVCE.
Las interrupciones se desactivarán automáticamente mientras se ejecuta esta secuencia. Las interrupciones
están deshabilitadas en el ciclo. El IVCE está configurado y permanecen deshabilitados hasta después de la
instrucción que sigue a la escritura en IVSEL. Si IVSEL no es Escrito, las interrupciones permanecen
deshabilitadas durante cuatro ciclos. El bit I en el registro de estado no se ve afectado por la automática
incapacitante
Nota: Si los vectores de interrupción se colocan en la sección del cargador de arranque y el bit de bloqueo
de arranque BLB02 está programado, las interrupciones son Deshabilitado mientras se ejecuta desde la
sección de aplicaciones. Si se colocan vectores de interrupción en la sección de aplicaciones y
El bit de bloqueo de arranque BLB12 está programado, las interrupciones se deshabilitan mientras se
ejecuta desde la sección Cargador de arranque. Referirse a la sección “Compatibilidad con el cargador de
arranque - Autoprogramación de lectura durante la escritura” en la página 237 para obtener detalles sobre
los bits de bloqueo de arranque.

• Bit 0 - IVCE: Habilitar cambio de vector de interrupción


El bit IVCE debe escribirse en la lógica uno para permitir el cambio del bit IVSEL. IVCE es aprobado por
hardware cuatro
ciclos después de que se escribe o cuando se escribe IVSEL. La configuración del bit IVCE deshabilitará las
interrupciones, como se explica en la
Descripción del IVSEL arriba. Vea el Ejemplo de Código a continuación.
Ejemplo de código de montaje
Move_interrupts:
; Habilitar el cambio de vectores de interrupción
ldi r16, (1 << IVCE)
fuera GICR, r16
; Mueve las interrupciones para arrancar la sección Flash
ldi r16, (1 << IVSEL)
fuera GICR, r16
jubilado

Ejemplo de código C
void Move_interrupts (void)
{
/ * Habilitar cambio de vectores de interrupción * /
GICR = (1 << IVCE);
/ * Mueve las interrupciones para arrancar la sección de Flash * /
GICR = (1 << IVSEL);

Página 49
12. I/O Ports
12.1 Descripción general
Todos los puertos tienen una verdadera funcionalidad de lectura-modificación-escritura cuando se usan
como puertos de E / S digitales generales. Esto significa que el la dirección de un pin de puerto se puede
cambiar sin cambiar involuntariamente la dirección de cualquier otro pin con el Instrucciones SBI y CBI. Lo
mismo se aplica al cambiar el valor del variador (si está configurado como salida) o habilitación /
deshabilitación de resistencias pull-up (si se configura como entrada). Cada búfer de salida tiene unidad
simétrica Características con alta capacidad de fuente y sumidero. El controlador de pines es lo
suficientemente fuerte como para conducir pantallas LED directamente. Todos los pines del puerto tienen
resistencias de pull-up seleccionables individualmente con una resistencia invariante de voltaje de
alimentación. Todos Los pines de E / S tienen diodos de protección tanto para VCC como para tierra, como
se indica en la Figura 12-1. Consulte “Eléctrico Características ”en la página 279 para obtener una lista
completa de los parámetros.
Figura 12-1. Esquema equivalente de pin de E / S

Todos los registros y referencias de bits en esta sección están escritos en forma general. Una "x" minúscula
representa el la letra de numeración para el puerto, y una minúscula "n" representa el número de bit. Sin
embargo, al utilizar el registro o el bit se define en un programa, la forma precisa debe ser utilizada. es decir,
PORTB3 para el bit no. 3 en el puerto B, aquí documentado en general como PORTxn. Los registros de E / S
físicos y las ubicaciones de los bits se enumeran en "Registro Descripción ”en la página 64.
Se asignan tres ubicaciones de direcciones de memoria de E / S para cada puerto, una para el Registro de
datos - PORTx, Data
Registro de dirección - DDRx, y los pines de entrada del puerto - PINx. La ubicación de E / S de los pines de
entrada del puerto es de solo lectura, mientras que
El registro de datos y el registro de dirección de datos son de lectura / escritura. Además, el Pull-up Disable -
PUD bit in SFIOR desactiva la función de extracción para todos los pines en todos los puertos cuando se
establece.
El uso del puerto de E / S como E / S digital general se describe en “Puertos como E / S digital general” en la
página 50. La mayoría de los pines del puerto
se multiplexan con funciones alternativas para las funciones periféricas del dispositivo. Como cada función
alterna
Las interferencias con el pin del puerto se describen en “Funciones de puerto alternativas” en la página 53.
Consulte el módulo individual Secciones para una descripción completa de las funciones alternativas.
Tenga en cuenta que habilitar la función alternativa de algunos de los pines del puerto no afecta el uso de
los otros pines en el puerto como E / S digital general
12.2 Puertos como E / S digital general
Los puertos son puertos de E / S bidireccionales con pull-ups internos opcionales. La figura 12-2 muestra una
descripción funcional de un pin de puerto de E / S, aquí llamado genéricamente Pxn.

Figura 12-2. E / S digital general (1)


Nota: 1. WPx, WDx, RRx, RPx y RDx son comunes a todos los pines dentro del mismo puerto. clkI / O, SLEEP y
PUD son
comunes a todos los puertos.

12.2.1 Configuring the Pin


Cada pin de puerto consta de tres bits de registro: DDxn, PORTxn y PINxn. Como se muestra en "Descripción
del registro" en página 64, se accede a los bits DDxn en la dirección de E / S de DDRx, a los bits PORTxn en la
dirección de E / S de PORTx, y Los bits PINxn en la dirección de E / S PINx. El bit DDxn en el registro DDRx
selecciona la dirección de este pin. Si DDxn es una lógica escrita, Pxn es configurado como un pin de salida.
Si DDxn se escribe cero lógico, Pxn se configura como un pin de entrada.
Si PORTxn está escrito como lógico cuando el pin está configurado como un pin de entrada, se activa la
resistencia de pull-up. A apague el resistor pull-up, PORTxn debe escribirse en cero lógico o el pin debe
configurarse como salida alfiler. Los pines del puerto tienen tres estados cuando una condición de
restablecimiento se activa, incluso si no hay relojes en ejecución. Si PORTxn está escrito como lógico cuando
el pin está configurado como un pin de salida, el pin del puerto es alto (uno). Si PORTxn se escribe cero
lógico cuando el pin se configura como un pin de salida, el pin del puerto se pone bajo (cero).
Cuando se cambia entre tri-state ({DDxn, PORTxn} = 0b00) y salida alta ({DDxn, PORTxn} = 0b11), un
estado intermedio con pull-up habilitado ({DDxn, PORTxn} = 0b01) o salida baja ({DDxn, PORTxn} =
0b10) debe ocurrir. Normalmente, el estado de activación activada es totalmente aceptable, ya que un
entorno de alta impedancia No note la diferencia entre un conductor alto y fuerte y un pull-up. Si este no es
el caso, el bit PUD en el El registro SFIOR se puede configurar para deshabilitar todos los pull-ups en todos
los puertos. Switching between input with pull-up and output low generates the same problem. The user
must use either the tri-state ({DDxn, PORTxn} = 0b00) or the output high state ({DDxn, PORTxn} = 0b11) as
an intermediate step.
La tabla 12-1 resume las señales de control para el valor de pin.

12.2.2 Leyendo el valor del pin


Independientemente de la configuración del bit de dirección de datos DDxn, el pin del puerto se puede leer
a través del bit de registro PINxn.Como se muestra en la Figura 12-2, el bit de registro PINxn y el cierre
anterior constituyen un sincronizador. Esto es necesario para evitar la metastabilidad si el pin físico cambia
de valor cerca del borde del reloj interno, pero también introduce un retraso. La Figura 12-3 muestra un
diagrama de temporización de la sincronización al leer un externo valor de pin aplicado. Los retrasos
máximos y mínimos de propagación se indican como tpd, max y tpd, min respectivamente

Figura 12-3. Sincronización al leer un valor de pin aplicado externamente

Considere el período de reloj que comienza poco después del primer flanco descendente del reloj del
sistema. El pestillo está cerrado cuando el reloj es bajo y se vuelve transparente cuando el reloj está alto,
como lo indica la región sombreada de la "SYNC Señal de "LATCH". El valor de la señal se bloquea cuando el
reloj del sistema baja. Se registra en el PINxn Regístrese en el siguiente borde positivo del reloj. Como lo
indican las dos flechas tpd, max y tpd, min, una sola señal la transición en el pin se retrasará entre ½ y 1½
período de reloj del sistema dependiendo de la hora de afirmación.

Al leer un valor de pin asignado por software, se debe insertar una instrucción nop como se indica en la
Figura 12- 4. La instrucción de salida establece la señal de "SINCESO DE ENCENDIDO" en el borde positivo
del reloj. En este caso, la demora tpd. a través del sincronizador es un período de reloj del sistema

Figura 12-4. Sincronización al leer un valor de pin asignado por software

El siguiente ejemplo de código muestra cómo configurar los pines de puerto B 0 y 1 alto, 2 y 3 bajo y definir
los pines del puerto de 4 a 7 como entrada con pull-ups asignados a los pines 6 y 7 del puerto. Los valores de
los pines resultantes se vuelven a leer, pero como se mencionó anteriormente, se incluye una instrucción
nop para poder leer el valor asignado recientemente a algunos de los pines.
Nota: 1. Para el programa de ensamblaje, se utilizan dos registros temporales para minimizar el tiempo
desde el que se establecen los pull-ups en los pines.
0, 1, 6 y 7, hasta que los bits de dirección se establecen correctamente, definiendo los bits 2 y 3 como bajos
y redefiniendo los bits 0 y 1 como
fuertes conductores altos.

12.2.3 Habilitación de entrada digital y modos de suspensión


Como se muestra en la Figura 12-2, la señal de entrada digital se puede conectar a tierra en la entrada del
disparador schmitt. Los la señal indicada como SLEEP en la figura, se establece mediante el MCU Sleep
Controller en el modo de apagado, ahorro de energía modo, modo de espera y modo de espera extendido
para evitar un alto consumo de energía si algunas señales de entrada son se deja flotando, o tiene un nivel
de señal analógica cercano a VCC / 2. SLEEP se reemplaza para los pines del puerto habilitados como pines
de interrupción externa. Si la Solicitud de Interrupción Externa no es habilitado, SLEEP está activo también
para estos pines. SLEEP también está anulado por otras funciones alternativas como descrito en “Funciones
de puerto alternativo” en la página 53. Si un nivel alto lógico ("uno") está presente en un pin de Interrupción
Externa Asíncrono configurado como "Interrumpir en Rising Edge, Falling Edge, o cualquier cambio lógico en
el Pin ”mientras la Interrupción externa no está habilitada, el el indicador de interrupción externa
correspondiente se activará cuando se reanude desde los modos de suspensión mencionados
anteriormente, ya que El pinzamiento en estos modos de suspensión produce el cambio lógico solicitado.

12.2.4 Pines desconectados


Si algunos pines no están en uso, se recomienda asegurarse de que estos pines tengan un nivel definido.
Aunque la mayoría de las entradas digitales están deshabilitadas en los modos de suspensión profunda
como se describe anteriormente, se deben evitar las entradas flotantes para reducir el consumo de
corriente en todos los demás modos en los que las entradas digitales están habilitadas (Reinicio, modo
activo y Modo inactivo). El método más simple para garantizar un nivel definido de un pin no utilizado, es
habilitar el pull-up interno. En este caso, el pull-up se desactivará durante el reinicio. Si el bajo consumo de
energía durante el reinicio es importante, se recomienda para utilizar un pull-up externo o pull-down. No se
recomienda conectar los pines no utilizados directamente a VCC o GND, ya que esto puede causar corrientes
excesivas si el pin se configura accidentalmente como una salida.
12.3 Funciones de puerto alternativo
La mayoría de los pines del puerto tienen funciones alternativas además de ser E / S digitales generales. La
figura 12-5 muestra cómo el puerto Las señales de control de pin de la Figura 12-2 simplificada pueden ser
anuladas por funciones alternativas. La anulación las señales pueden no estar presentes en todos los pines
del puerto, pero la figura sirve como una descripción genérica aplicable a todos los puertos
Pines de la familia de microcontroladores AVR.

Figure 12-5. Alternate Port Functions(1)

Nota: 1. WPx, WDx, RRx, RPx y RDx son comunes a todos los pines dentro del mismo puerto. clkI / O, SLEEP y
PUD son comunes a todos los puertos. Todas las demás señales son únicas para cada pin.
La Tabla 12-2 resume la función de las señales de anulación. Los índices de pin y puerto de la Figura 12-5 no
son Se muestra en las tablas siguientes. Las señales de anulación se generan internamente en los módulos
que tienen la función alterna

Tabla 12-2. Descripción genérica de las señales de reemplazo para funciones alternativas
Nombre de la señal Nombre completo Description

PUOE Pull-up Override Si se establece esta señal, la habilitación


Enable de pull-up es controlada por el
Señal PUOV. Si se borra esta señal, se
habilita el pull-up
cuando {DDxn, PORTxn, PUD} = 0b010.

PUOV Pull-up Override Value Si se establece PUOE, el pull-up se


habilita / deshabilita cuando PUOV
se configura / borra, independientemente
de la configuración del DDxn,
PORTxn, y PUD Registrar bits.

DDOE Data Direction Si se establece esta señal, la activación del


Override Enable controlador de salida se controla mediante
La señal DDOV. Si esta señal se borra, el
controlador de salida
Está habilitado por el bit de registro
DDxn.

DDOE Data Direction Si se establece DDOE, el controlador de


Override Value salida se activa / desactiva cuando
DDOV se configura / borra,
independientemente de la configuración
del DDxn
Registrar bit.

PVOE Port Value Override Si se establece esta señal y el controlador


Enable de salida está habilitado, el puerto
El valor es controlado por la señal PVOV.
Si se despeja PVOE,
y el controlador de salida está habilitado,
el valor del puerto está controlado
por el bit de registro PORTxn.

PVOV Port Value Override Si se establece PVOE, el valor del puerto


Value se establece en PVOV,
independientemente de
La configuración del bit de registro
PORTxn.

DIEOE Digital Input Enable Si se establece este bit, la Habilitación de


Override Enable Entrada Digital es controlada por la
Señal DIEOV. Si esta señal se borra, la
entrada digital
La habilitación está determinada por el
estado MCU (Modo normal, reposo
modos).

DIEOV Digital Input Enable Si se configura DIEOE, la entrada digital


Override Value se habilita / deshabilita cuando
DIEOV se configura / borra,
independientemente del estado de la MCU
(Normal
Modo, modos de dormir).

DI Digital Input Esta es la entrada digital para alternar


funciones. En la figura,
La señal está conectada a la salida del
disparador schmitt.
pero antes del sincronizador. A menos que
se use la entrada digital
como fuente de reloj, el módulo con la
función alternativa
usa su propio sincronizador

AIO Analog Input/ output Esta es la entrada / salida analógica hacia


/ desde funciones alternativas.
La señal está conectada directamente al
pad, y puede ser utilizada
bidireccional

Las siguientes subsecciones describen brevemente las funciones alternativas para cada puerto y relacionan
las señales de anulación a la función alternativa. Consulte la descripción de la función alternativa para
obtener más detalles.

12.3.1 Alternate Functions of Port A


El puerto A tiene una función alternativa como entrada analógica para el ADC como se muestra en la Tabla
12-3. Si algunos pines del Puerto A son configurados como salidas, es esencial que estos no cambien cuando
una conversión está en curso. Esto podría
Corromper el resultado de la conversión.

Tabla 12-3. Pasadores A A Funciones alternativas


La Tabla 12-4 y la Tabla 12-5 relacionan las funciones alternativas del Puerto A con las señales de anulación
que se muestran en la Figura 12-5
en la página 54.
Tabla 12-4. Anulación de señales para funciones alternativas en PA7: PA4

Tabla 12-5. Anulación de señales para funciones alternativas en PA3: PA0

12.3.2 Funciones alternativas del puerto B


Los pines del Puerto B con funciones alternativas se muestran en la Tabla 12-6
Tabla 12-6. Pasadores de puerto B Funciones alternativas

La configuración de pin alternativa es la siguiente:


• SCK - Puerto B, Bit 7
SCK: salida del reloj maestro, pin de entrada del reloj esclavo para el canal SPI. Cuando el SPI está habilitado
como esclavo, este pin se configura como una entrada independientemente de la configuración de DDB7.
Cuando el SPI está habilitado como maestro, los datos La dirección de este pin es controlada por DDB7.
Cuando el pin es forzado por el SPI a ser una entrada, el pull-up aún puede
Ser controlado por el bit PORTB7.

• MISO - Puerto B, Bit 6


MISO: Entrada de datos maestros, Pin de salida de datos esclavos para el canal SPI. Cuando el SPI está
habilitado como maestro, este pin
se configura como una entrada independientemente de la configuración de DDB6. Cuando el SPI está
habilitado como esclavo, los datos
La dirección de este pin es controlada por DDB6. Cuando el pin es forzado por el SPI a ser una entrada, el
pull-up aún puede Ser controlado por el bit PORTB6.

• MOSI - Puerto B, Bit 5


MOSI: salida de datos maestros SPI, entrada de datos esclavos para el canal SPI. Cuando el SPI está
habilitado como esclavo, este pin
se configura como una entrada independientemente de la configuración de DDB5. Cuando el SPI está
habilitado como maestro, los datos
La dirección de este pin es controlada por DDB5. Cuando el pin es forzado por el SPI a ser una entrada, el
pull-up aún puede Ser controlado por el bit PORTB5

• SS - Puerto B, Bit 4
SS: Entrada de selección de esclavo. Cuando el SPI está habilitado como esclavo, este pin se configura como
una entrada independientemente de la ajuste de DDB4. Como esclavo, el SPI se activa cuando este pin se
baja. Cuando el SPI está habilitado como Maestro, la dirección de datos de este pin es controlada por DDB4.
Cuando el pin es forzado por el SPI a ser una entrada, el pin el pull-up todavía puede ser controlado por el bit
PORTB4.

• AIN1 / OC0 - Puerto B, Bit 3


AIN1, comparador analógico negativo de entrada. Configure el pin del puerto como entrada con el pull-up
interno apagado para evitar que la función del puerto digital interfiera con la función del comparador
analógico. OC0, salida de coincidencia de comparación de salida: el pin PB3 puede servir como una salida
externa para el temporizador / contador0 Comparar partido. El pin PB3 debe configurarse como una salida
(conjunto DDB3 (uno)) para cumplir esta función. Los El pin OC0 también es el pin de salida para la función
del temporizador del modo PWM.

• AIN0 / INT2 - Puerto B, Bit 2


AIN0, comparador analógico de entrada positiva. Configure el pin del puerto como entrada con el pull-up
interno apagado para evite que la función del puerto digital interfiera con la función del comparador
analógico.
INT2, Fuente de interrupción externa 2: El pin PB2 puede servir como fuente de interrupción externa a la
MCU.

• T1 - Puerto B, Bit 1
T1, Timer / Counter1 Counter Source.

• T0 / XCK - Puerto B, Bit 0


T0, Fuente contador contador temporizador / contador.
XCK, USART Reloj externo. El registro de dirección de datos (DDB0) controla si el reloj sale (DDB0).
establecido) o entrada (DDB0 borrado). El pin XCK está activo solo cuando el USART funciona en modo
Sincrónico. La Tabla 12-7 y la Tabla 12-8 relacionan las funciones alternativas del Puerto B con las señales
de anulación que se muestran en la Figura 12-5
en la página 54. SPI MSTR INPUT y SPI SLAVE OUTPUT constituyen la señal MISO, mientras que MOSI
se divide en
SPI MSTR OUTPUT y SPI SLAVE INPUT.
Tabla 12-8. Anulación de señales para funciones alternativas en PB3: PB0

12.3.3 Funciones alternativas del puerto C


Los pines del Puerto C con funciones alternativas se muestran en la Tabla 12-9. Si la interfaz JTAG está
habilitada, el pull-up Las resistencias en los pines PC5 (TDI), PC3 (TMS) y PC2 (TCK) se activarán incluso
si se produce un reinicio.

Tabla 12-9. Pasadores de puerto C Funciones alternativas

La configuración de pin alternativa es la siguiente:


• TOSC2 - Puerto C, Bit 7
TOSC2, pin 2 del oscilador del temporizador: cuando el bit AS2 en ASSR se configura (uno) para habilitar la
sincronización asincrónica de Timer / Counter2, el pin PC7 se desconecta del puerto y se convierte en la
salida inversora del oscilador amplificador. En este modo, un Cristal Oscilador está conectado a este pin, y el
pin no puede usarse como un pin de E / S.

• TOSC1 - Puerto C, Bit 6


TOSC1, pin 1 del oscilador del temporizador: cuando el bit AS2 en ASSR se configura (uno) para habilitar la
sincronización asincrónica de Timer / Counter2, el pin PC6 se desconecta del puerto y se convierte en la
entrada del oscilador inversor amplificador. En este modo, un Cristal Oscilador está conectado a este pin, y el
pin no puede usarse como un pin de E / S.
• TDI - Puerto C, Bit 5
TDI, JTAG Test Data In: Los datos de entrada en serie se deben cambiar al registro de instrucciones o al
registro de datos (exploración cadenas). Cuando la interfaz JTAG está habilitada, este pin no se puede usar
como un pin de E / S.

• TDO - Puerto C, Bit 4


TDO, JTAG Prueba de salida de datos: datos de salida en serie del registro de instrucciones o registro de
datos. Cuando el jtag la interfaz está habilitada, este pin no puede usarse como un pin de E / S.
El pin TD0 tiene tres estados a menos que el TAP indique que se ingresaron datos de desplazamientos.

• TMS - Puerto C, Bit 3


Selección de modo de prueba TMS, JTAG: este pin se utiliza para navegar a través de la máquina de estado
del controlador TAP. Cuand la interfaz JTAG está habilitada, este pin no puede usarse como un pin de E / S.

• TCK - Puerto C, Bit 2


TCK, JTAG Test Clock: la operación JTAG está sincronizada con TCK. Cuando la interfaz JTAG está
habilitada, este pin No se puede utilizar como pin de E / S.

• SDA - Puerto C, Bit 1


SDA, datos de la interfaz en serie de dos hilos: cuando el bit TWEN en TWCR se configura (uno) para
habilitar la serie de dos hilos La interfaz, el pin PC1 se desconecta del puerto y se convierte en el pin de E / S
de datos en serie para el Serial de dos hilos
Interfaz. En este modo, hay un filtro de picos en el pin para suprimir picos de menos de 50 ns en la señal de
entrada, y el pasador es accionado por un impulsor de drenaje abierto con limitación de velocidad de giro.
Cuando este pin es usado por el de dos hilos. Interfaz en serie, el pull-up aún puede ser controlado por el bit
PORTC1.

• SCL - Puerto C, Bit 0


SCL, reloj de interfaz en serie de dos cables: cuando el bit TWEN en TWCR está configurado (uno) para
habilitar la serie de dos cables
La interfaz, el pin PC0 se desconecta del puerto y se convierte en el pin Serial Clock I / O para el Serial de
dos cables. Interfaz. En este modo, hay un filtro de picos en el pin para suprimir picos de menos de 50 ns en la
señal de entrada, y el pasador es accionado por un impulsor de drenaje abierto con limitación de velocidad de
giro. Cuando este pin es usado por el de dos hilos. Interfaz serial, el pull-up todavía puede ser controlado por
el bit PORTC0. La Tabla 12-10 y la Tabla 12-11 relacionan las funciones alternativas del Puerto C con las
señales de anulación que se muestran en la Figura
12-5 en la página 54

Tabla 12-10. Anulación de señales para funciones alternativas en PC7: PC4


Tabla 12-11. Anulación de señales para funciones alternativas en PC3: PC0 (

Nota: 1. Cuando está habilitada, la interfaz en serie de dos cables permite controles de velocidad de respuesta
en los pines de salida PC0 y PC1. Esta No se muestra en la figura. Además, los filtros de picos están
conectados entre las salidas AIO que se muestran en el puerto Figura y la lógica digital del módulo TWI.

12.3.4 Alternate Functions of Port D


The Port D pins with alternate functions are shown in Table 12-12.
Tabla 12-12. Port D Pins Funciones alternativas

La configuración de pin alternativa es la siguiente:


• OC2 - Puerto D, Bit 7
Salida OC2, Temporizador / Contador2 Comparación de salida coincidente: el pin PD7 puede servir como
una salida externa para el
Comparar temporizador / contador2 salidas. El pin debe configurarse como una salida (conjunto DDD7 (uno))
para servir a este función. El pin OC2 también es el pin de salida para la función del temporizador del modo
PWM.

• ICP1 - Puerto D, Bit 6


ICP1 - Pin de captura de entrada: El pin PD6 puede actuar como un pin de captura de entrada para Timer /
Counter1.

• OC1A - Puerto D, Bit 5


OC1A, salida Match Match Match A: el pin PD5 puede servir como una salida externa para el temporizador /
contador1 Comparación de salida A. El pin debe configurarse como una salida (conjunto DDD5 (uno)) para
cumplir esta función. los
El pin OC1A también es el pin de salida para la función del temporizador del modo PWM.
• OC1B - Puerto D, Bit 4
OC1B, salida de comparación Match B: el pin PD4 puede servir como una salida externa para el temporizador
/ contador1
Comparación de salida B. El pin debe configurarse como salida (conjunto DDD4 (uno)) para cumplir esta
función. los
El pin OC1B también es el pin de salida para la función del temporizador del modo PWM.
• INT1 - Puerto D, Bit 3
INT1, fuente de interrupción externa 1: el pin PD3 puede servir como fuente de interrupción externa.
• INT0 - Puerto D, Bit 2
INT0, fuente de interrupción externa 0: el pin PD2 puede servir como fuente de interrupción externa.
• TXD - Puerto D, Bit 1
TXD, datos de transmisión (pin de salida de datos para el USART). Cuando el transmisor USART está
habilitado, este pin es
configurado como una salida independientemente del valor de DDD1.
Tabla 12-12. Port D Pins Funciones alternativas
Función alternativa de pin de puerto
PD7 OC2 (salida de coincidencia de comparación de temporizador / contador2)
PD6 ICP1 (pin de captura de entrada del temporizador / contador1)
PD5 OC1A (la salida del temporizador / contador1 compara una salida coincidente)
PD4 OC1B (Salida del temporizador / Contador1, comparación B, salida coincidente)
PD3 INT1 (entrada de interrupción externa 1)
PD2 INT0 (entrada de interrupción externa 0)
PD1 TXD (pin de salida USART)
PD0 RXD (pin de entrada USART)
ATmega16A [HOJA DE DATOS] 63
Atmel-8154C-8-bit-AVR-ATmega16A_Datasheet-07/2014
• RXD - Puerto D, Bit 0
RXD, recibir datos (pin de entrada de datos para el USART). Cuando el receptor USART está habilitado, este
pin está configurado
como una entrada independientemente del valor de DDD0. Cuando el USART obliga a este pin a ser una
entrada, el pull-up aún puede
ser controlado por el bit PORTD0.
La Tabla 12-13 y la Tabla 12-14 relacionan las funciones alternativas del Puerto D con las señales de
anulación que se muestran en la Figura
12-5 en la página 54.

Table 12-13. Overiding Signals for Alternate Functions PD7:PD4


Tabla 12-14. Anulación de señales para funciones alternativas en PD3: PD0

12.4 Descripción del registro


12.4.1 SFIOR - Registro de E / S de funciones especiales

• Bit 2 - PUD: desactivación de pull-up


Cuando este bit se escribe en uno, las extensiones en los puertos de E / S se desactivan incluso si los
registros DDxn y PORTxn
están configurados para habilitar los pull-ups ({DDxn, PORTxn} = 0b01). Consulte “Configuración del pin” en
la página 50 para obtener más información.
detalles sobre esta característica

12.4.2 PORTA - Registro de datos del puerto A

12.4.3 DDRA - Registro de dirección de datos del puerto A

12.4.4 PINA - Dirección de los pines de entrada del puerto A

12.4.5 PORTB - Registro de datos del puerto B

12.4.6 DDRB - Registro de dirección de datos del puerto B

12.4.7 PINB - Dirección de pines de entrada del puerto B


12.4.8 PORTC - Registro de datos del puerto C

12.4.9 DDRC - Registro de dirección de datos del puerto C

12.4.10 PINC - Dirección de pines de entrada del puerto C

12.4.11 PORTD - Registro de datos del puerto D

12.4.12 DDRD - Registro de dirección de datos del puerto D

12.4.13 PIND - Dirección de pines de entrada del puerto D


13. Interrupciones externas
Las interrupciones externas se activan mediante los pines INT0, INT1 e INT2. Observe que, si está habilitado,
las interrupciones se activará incluso si los pines INT0: 2 están configurados como salidas. Esta característica
proporciona una manera de generar un Interrupción de software. Las interrupciones externas pueden ser
activadas por un flanco descendente o ascendente o por un nivel bajo (INT2 es solo
una interrupción de borde activada). Esto se configura como se indica en la especificación para el registro de
control de MCU: MCUCR - y MCU Control y registro de estado - MCUCSR. Cuando la interrupción externa
está habilitada y es configurada como nivel disparado (solo INT0 / INT1), la interrupción se disparará
mientras el pin se mantenga bajo. Tenga en cuenta que el reconocimiento de interrupciones de flanco
descendente o ascendente en INT0 e INT1 requiere la presencia de un reloj de E / S, descrito
en “Sistemas de reloj y su distribución” en la página 24. Interrupciones de bajo nivel en INT0 / INT1 y la
interrupción de borde En INT2 se detectan de forma asíncrona. Esto implica que estas interrupciones
pueden usarse para despertar la parte también. desde los modos de suspensión distintos del modo inactivo.
El reloj de E / S se detiene en todos los modos de suspensión, excepto en el modo inactivo.
Tenga en cuenta que si se utiliza una interrupción activada por nivel para la activación desde el modo de
apagado, el nivel modificado debe ser Mantenido durante algún tiempo para despertar al MCU. Esto hace
que la MCU sea menos sensible al ruido. El nivel cambiado es muestreado dos veces por el reloj Watchdog
Oscillator. El período del oscilador Watchdog es de 1 µs (nominal) a 5.0 V y 25 ° C. La frecuencia del oscilador
Watchdog depende de la tensión, como se muestra en “Electricidad Características ”en la página 279. La
MCU se activará si la entrada tiene el nivel requerido durante este muestreo o si Se mantiene hasta el final
del tiempo de puesta en marcha. El tiempo de puesta en marcha se define mediante los fusibles SUT como
se describe en “Reloj del sistema y opciones de reloj” en la página 24. Si el reloj del oscilador Watchdog
muestrea el nivel dos veces pero desaparece antes de que finalice el tiempo de inicio, la MCU aún se
activará, pero no se generará ninguna interrupción.
El nivel requerido debe mantenerse el tiempo suficiente para que la MCU complete la activación para activar
la interrupción de nivel.

13.1 Descripción del registro


13.1.1 MCUCR - Registro de control de MCU
El MCU Control Register contiene bits de control para el control de detección de interrupciones y funciones
generales de MCU.

• Bit 3, 2 - ISC11, ISC10: Control de detección de interrupción 1 Bit 1 y Bit 0


La Interrupción Externa 1 es activada por el pin externo INT1 si el bit SREG I y la interrupción
correspondiente máscara en el GICR se establecen. El nivel y los bordes en el pin INT1 externo que activan la
interrupción se definen en Tabla 13-1. El valor en el pin INT1 se muestrea antes de detectar bordes. Si se
selecciona la interrupción de borde o de palanca, Los pulsos que duran más de un período de reloj
generarán una interrupción. Los pulsos más cortos no están garantizados generar una interrupcion Si se
selecciona la interrupción de nivel bajo, el nivel bajo debe mantenerse hasta que se complete el
Actualmente ejecutando instrucciones para generar una interrupción.

Tabla 13-1. Interruptor 1 Sentido Contro


• Bit 1, 0 - ISC01, ISC00: Control de detección de interrupción 0 Bit 1 y Bit 0
El pin externo INT0 activa la Interrupción externa 0 si el indicador SREG I y la interrupción correspondiente
la máscara se establece El nivel y los bordes en el pin INT0 externo que activan la interrupción se definen en
la Tabla 13-2.
El valor en el pin INT0 se muestrea antes de detectar bordes. Si se selecciona la interrupción de borde o de
palanca, los pulsos que durar más de un período de reloj generará una interrupción. No se garantiza que los
pulsos más cortos generen un interrumpir. Si se selecciona la interrupción de nivel bajo, el nivel bajo debe
mantenerse hasta que se complete el Ejecutando instrucción para generar una interrupción.

Tabla 13-2. Interrupción 0 Control de sentido

13.1.2 MCUCSR - MCU Control y registro de estado

• Bit 6 - ISC2: Control de detección de interrupción 2


La Interrupción Externa Asíncrona 2 es activada por el pin externo INT2 si el bit SREG I y el
Se establece la máscara de interrupción correspondiente en GICR. Si ISC2 se escribe en cero, un flanco
descendente en INT2 activa el interrumpir. Si ISC2 se escribe en uno, un flanco ascendente en INT2 activa la
interrupción. Los bordes en INT2 están registrados. asíncrono. Los pulsos en INT2 son más anchos que el
ancho de pulso mínimo dado en "Interrupciones externas Características ”en la página 283 generará una
interrupción. No se garantiza que los pulsos más cortos generen un interrumpir. Al cambiar el bit ISC2, puede
producirse una interrupción. Por lo tanto, se recomienda deshabilitar primero INT2 al borrar su bit de
habilitación de interrupción en el registro GICR. Entonces, el bit ISC2 se puede cambiar. Finalmente, el
INT2. El indicador de interrupción debe borrarse escribiendo un lógico en su bit de indicador de interrupción
(INTF2) en el registro GIFR antes de que la interrupción se vuelva a habilitar.

13.1.3 GICR - Registro de control de interrupción general

• Bit 7 - INT1: Habilitar solicitud de interrupción externa 1


Cuando se establece el bit INT1 (uno) y se establece el bit I en el registro de estado (SREG) (uno), la
interrupción del pin externo está habilitado. El control de detección de interrupción 1 bits 1/0 (ISC11 e
ISC10) en el Registro de control general de MCU (MCUCR) define si la Interrupción Externa se activa en el
flanco ascendente y / o descendente del pin o nivel INT1
sentido La actividad en el pin provocará una solicitud de interrupción incluso si INT1 está configurado como
una salida. Los la interrupción correspondiente de la solicitud de interrupción externa 1 se ejecuta desde el
vector de interrupción INT1.

• Bit 6 - INT0: Solicitud de interrupción externa 0 Habilitar


Cuando se establece el bit INT0 (uno) y se establece el bit I en el registro de estado (SREG) (uno), la
interrupción del pin externo está habilitado. El control de detección de interrupción 0 bits 1/0 (ISC01 e
ISC00) en el registro de control general de la MCU (MCUCR) define si la Interrupción externa se activa en el
flanco ascendente y / o descendente del pin o nivel INT0 sentido La actividad en el pin provocará una
solicitud de interrupción incluso si INT0 está configurado como una salida. Los la interrupción
correspondiente de la solicitud de interrupción externa 0 se ejecuta desde el vector de interrupción INT0.

• Bit 5 - INT2: Habilitar solicitud de interrupción externa 2


Cuando se establece el bit INT2 (uno) y se establece el bit I en el registro de estado (SREG) (uno), la
interrupción del pin externo está habilitado. El bit de Control2 de detección de interrupción (ISC2) en el
registro de estado y control de MCU (MCUCSR) define si la Interrupción Externa está activada en el borde
ascendente o descendente del pin INT2. La actividad en el pin causará una solicitud de interrupción incluso si
INT2 está configurado como una salida. La correspondiente interrupción de la interrupción externa.
La solicitud 2 se ejecuta desde el vector de interrupción INT2.

13.1.4 GIFR - Registro de bandera de interrupción general

• Bit 7 - INTF1: Indicador de interrupción externa 1


Cuando un cambio de borde o lógica en el pin INT1 activa una solicitud de interrupción, INTF1 se establece
(uno). Si la Ibit en SREG y el bit INT1 en GICR están configurados (uno), la MCU saltará al vector de
interrupción correspondiente. La bandera se borra cuando se ejecuta la rutina de interrupción.
Alternativamente, la bandera se puede borrar escribiendo un una lógica para ello. Este indicador siempre se
borra cuando INT1 se configura como una interrupción de nivel.
• Bit 6 - INTF0: Indicador de interrupción externa 0
Cuando un cambio de borde o lógica en el pin INT0 activa una solicitud de interrupción, INTF0 se establece
(uno). Si la Ibit en SREG y el bit INT0 en GICR están configurados (uno), la MCU saltará al vector de
interrupción correspondiente. Los La bandera se borra cuando se ejecuta la rutina de interrupción.
Alternativamente, la bandera se puede borrar escribiendo una lógica
uno para ello Este indicador siempre se borra cuando INT0 se configura como una interrupción de nivel.
• Bit 5 - INTF2: Indicador de interrupción externa 2
Cuando un evento en el pin INT2 dispara una solicitud de interrupción, INTF2 se establece (uno). Si el bit I
en SREG y el bit INT2 en GICR está establecido (uno), la MCU saltará al vector de interrupción
correspondiente. La bandera esta despejada Cuando se ejecuta la rutina de interrupción. Alternativamente, la
bandera se puede borrar escribiendo una lógica en ella.

Nota que al entrar en algunos modos de suspensión con la interrupción INT2 desactivada, el búfer de entrada
en este pin será discapacitado. Esto puede causar un cambio lógico en las señales internas que establecerá el
indicador INTF2. Consulte “Entrada digital
Habilitar y los modos de suspensión "en la página 53 para obtener más información.
14. Temporizador / contador de 8 bits con PWM
14.1 Característica
• Contador de unidades de comparación única
• Borrar temporizador en comparación de coincidencias (recarga automática)
• Modulador de ancho de pulso (PWM) de fase correcta sin fallas
• Generador de frecuencia
• Contador de eventos externos
• Prescaler de reloj de 10 bits
• Desbordamiento y comparación de fuentes de interrupción de coincidencia (TOV0 y OCF0)

14.2 Descripción general


Timer / Counter0 es una unidad de comparación única de propósito general, Timer / Counter de 8 bits. Un
bloque simplificado
El diagrama del temporizador / contador de 8 bits se muestra en la Figura 14-1. Para conocer la ubicación real
de los pines de E / S, consulte "Pinout
ATmega16A ”en la página 3. Los registros de E / S accesibles desde la CPU, incluidos los bits de E / S y los
pines de E / S, se muestran en negrita. los
El registro de E / S específico del dispositivo y las ubicaciones de los bits se enumeran en la “Descripción del
registro” en la página 79

Figura 14-1. Diagrama de bloques de contador / contador de 8 bits

14.2.1 Registros
El temporizador / contador (TCNT0) y el registro de comparación de salida (OCR0) son registros de 8 bits.
Solicitud de interrupción (abreviadas a Int.Req. en la figura) todas las señales son visibles en el Registro de
indicadores de interrupción del temporizador (TIFR). Todos las interrupciones se enmascaran
individualmente con el registro de máscara de interrupción del temporizador (TIMSK). TIFR y TIMSK no son
mostrado en la figura ya que estos registros son compartidos por otras unidades de temporizador. El
temporizador / contador se puede sincronizar internamente, a través del prescaler, o mediante una fuente
de reloj externa en el pin T0. El bloque lógico de selección de reloj controla qué fuente de reloj y borde usa
el temporizador / contador para incrementar (o decremento) su valor. El temporizador / contador está
inactivo cuando no se selecciona ninguna fuente de reloj. La salida del reloj.
La lógica de selección se conoce como el reloj del temporizador (clkT0).
El registro de comparación de salida con doble búfer (OCR0) se compara con el valor del temporizador /
contador en todo momento.
El generador de forma de onda puede utilizar el resultado de la comparación para generar un PWM o una
frecuencia variable
Salida en el Pin de Comparación de Salida (OC0). Consulte “Unidad de comparación de salida” en la página
71. para más detalles. La comparación
el evento de coincidencia también establecerá el indicador de comparación (OCF0) que se puede utilizar para
generar una interrupción de comparación de salida
solicitud.

14.2.2 Definiciones
Muchos registros y referencias de bits en este documento están escritos en forma general. Una minúscula "n"
sustituye a la
Número de temporizador / contador, en este caso 0. Sin embargo, cuando se utiliza el registro o el bit definido
en un programa, el
el formulario debe utilizarse, es decir, TCNT0 para acceder al valor del contador Temporizador / Contador y
así sucesivamente.
Las definiciones en la Tabla 14-1 también se utilizan ampliamente en todo el documento.

Tabla 14-1. Definiciones


BOTTOM The counter reaches the BOTTOM when it becomes 0x00.
MAX The counter reaches its MAXimum when it becomes 0xFF (decimal 255)
TOP The counter reaches the TOP when it becomes equal to the highest value in the
count sequence. The TOP value can be assigned to be the fixed value 0xFF (MAX) or
the value stored in the OCR0 Register. The assignment is dependent on the mode of
operation.

14.3 Fuentes de reloj temporizador / contador


El temporizador / contador se puede sincronizar con una fuente de reloj interna o externa. La fuente del reloj
es seleccionada por
la lógica de selección de reloj que se controla mediante los bits de selección de reloj (CS02: 0) ubicados en el
control del contador / temporizador
Registro (TCCR0). Para obtener más información sobre las fuentes de reloj y el prescaler, consulte
“Temporizador / Contador0 y Temporizador / Contador1
Prescalers ”en la página 83.

14.4 Unidad de contador


La parte principal del temporizador / contador de 8 bits es la unidad de contador bidireccional programable.
La figura 14-2 muestra una
Diagrama de bloques del mostrador y sus alrededores.

Figura 14-2. Diagrama de bloques de la unidad de contador


Descripción de la señal (señales internas):
Coun Incremento o decremento TCNT0 en 1.
directionn Seleccione entre incremento y decremento.
Clear Borrar TCNT0 (poner todos los bits a cero).
clkT Temporizador / contador de reloj, denominado clkT0 en lo siguiente.
TOP Señale que TCNT0 ha alcanzado el valor máximo.
BOTTOM Señale que TCNT0 ha alcanzado el valor mínimo (cero).

Dependiendo del modo de operación utilizado, el contador se borra, incrementa o disminuye en cada
temporizador reloj (clkT0). clkT0 se puede generar desde una fuente de reloj externa o interna, seleccionada
por los bits de selección de reloj (CS02: 0). Cuando no se selecciona ninguna fuente de reloj (CS02: 0 = 0), el
temporizador se detiene. Sin embargo, el valor TCNT0 puede ser accedido por la CPU, sin importar si clkT0
está presente o no. Una CPU sobrescribe la escritura (tiene prioridad sobre) Todas las operaciones de
contra-borrar o contar. La secuencia de conteo se determina mediante la configuración de los bits WGM01 y
WGM00 ubicados en el Registro de temporizador / control de contador (TCCR0). Hay conexiones cercanas
entre cómo se comporta el contador. (recuentos) y cómo se generan las formas de onda en la salida de
comparación de salida OC0. Para más detalles sobre secuencias de conteo avanzadas y generación de
formas de onda, consulte “Modos de operación” en la página 73. El indicador de desbordamiento del
contador / temporizador (TOV0) se establece de acuerdo con el modo de operación seleccionado por el
WGM01: 0 pedacitos TOV0 se puede utilizar para generar una interrupción de CPU.

14.5 Unidad de comparación de salida


El comparador de 8 bits compara continuamente TCNT0 con el registro de comparación de salida (OCR0).
CuandoTCNT0 es igual a OCR0, el comparador señala una coincidencia. Una coincidencia establecerá el
indicador de comparación de salida (OCF0) en la siguiente temporizador ciclo de reloj. Si está habilitado
(OCIE0 = 1 y se establece el Indicador de interrupción global en SREG), la Comparación de salida
La bandera genera una interrupción de comparación de salida. El indicador OCF0 se borra automáticamente
cuando la interrupción es ejecutado. Alternativamente, el indicador OCF0 puede borrarse mediante
software escribiendo un lógico en su ubicación de bit de E / S. El generador de forma de onda utiliza la señal
de coincidencia para generar una salida de acuerdo con el modo de operación establecido por el
WGM01: 0 bits y modo de comparación de salida (COM01: 0) bits. Las señales max y bottom son utilizadas
por el Generador de forma de onda para manejar los casos especiales de los valores extremos en algunos
modos de operación (Ver “Modos de funcionamiento” en la página 73.). La figura 14-3 muestra un diagrama
de bloques de la unidad de comparación de salida.
Figura 14-3. Unidad de comparación de salida, diagrama de bloques
El registro OCR0 tiene doble búfer cuando se utiliza cualquiera de los modos de modulación de ancho de
pulso (PWM). Para el Los modos de operación normal y Clear Timer on Compare (CTC), el doble búfer está
desactivado. El doble el almacenamiento en búfer sincroniza la actualización del registro de comparación
OCR a la parte superior o inferior del conteo secuencia. La sincronización evita la aparición de pulsos PWM
no simétricos de longitud impar, por lo que Haciendo la salida libre de fallos. El acceso al Registro OCR0
puede parecer complejo, pero este no es el caso. Cuando el doble buffering está habilitado, el La CPU tiene
acceso al Registro de Buffer OCR0, y si el doble búfer está deshabilitado, la CPU accederá al OCR0
directamente

14.5.1 Comparación de salida de fuerza


En los modos de generación de formas de onda que no son PWM, la salida de coincidencia del comparador
puede forzarse escribiendo un uno para
el bit de comparación de salida de fuerza (FOC0) La comparación forzada forzada no establecerá el indicador
OCF0 ni recargará / borrará el
temporizador, pero el pin OC0 se actualizará como si hubiera ocurrido una comparación de comparación real
(la configuración COM01: 0 bits
defina si el pin OC0 está activado, desactivado o activado).
14.5.2 Compare Match Blocking por TCNT0 Write
Todas las operaciones de escritura de la CPU en el registro TCNT0 bloquearán cualquier comparación de
comparación que ocurra en el siguiente reloj temporizador
ciclo, incluso cuando el temporizador se detiene. Esta característica permite que OCR0 se inicialice al mismo
valor que TCNT0
sin disparar una interrupción cuando el temporizador / contador está habilitado.
14.5.3 Uso de la unidad de comparación de salida
Dado que escribir TCNT0 en cualquier modo de operación bloqueará todas las comparaciones de
comparación para un ciclo de reloj del temporizador, habrá
¿Existen riesgos al cambiar TCNT0 al usar la unidad de comparación de salida, independientemente de si el
El temporizador / contador está funcionando o no. Si el valor escrito en TCNT0 es igual al valor OCR0, la
comparación de comparación
perderse, lo que resulta en la generación de forma de onda incorrecta. Del mismo modo, no escriba el valor
TCNT0 igual a
ABAJO cuando el contador es downcounting.
La configuración del OC0 debe realizarse antes de configurar el registro de dirección de datos para que el pin
del puerto salga.
La forma más fácil de configurar el valor OC0 es usar los bits de luz estroboscópica de comparación de salida
(FOC0) en Normal
modo. El registro OC0 mantiene su valor incluso cuando se cambia entre los modos de generación de forma
de onda.
Tenga en cuenta que los bits COM01: 0 no tienen doble búfer junto con el valor de comparación. Cambiando
el
COM01: 0 bits tomarán efecto inmediatamente.
14.6 Comparar la unidad de salida del partido
Los bits del modo Comparar salida (COM01: 0) tienen dos funciones. El generador de forma de onda usa el
COM01: 0
bits para definir el estado de comparación de salida (OC0) en la siguiente comparación de comparación.
Además, los bits COM01: 0 controlan la
Fuente de salida pin OC0. La Figura 14-4 muestra un esquema simplificado de la lógica afectada por el bit
COM01: 0
ajuste. Los registros de E / S, los bits de E / S y los pines de E / S en la figura se muestran en negrita. Solo las
partes de la E / S general.
Se muestran los registros de control de puerto (DDR y PORT) que se ven afectados por los bits COM01: 0. Al
referirse a la
En el estado OC0, la referencia es para el registro interno de OC0, no para el pin OC0. Si se produce un
reinicio del sistema, el OC0
El registro se restablece a "0".
Figura 14-4. Comparar la unidad de salida de coincidencia, esquema

La función de puerto de E / S general se anula mediante la Comparación de salida (OC0) del Generador de
forma de onda si:
de los COM01: se establecen 0 bits. Sin embargo, la dirección del pin OC0 (entrada o salida) todavía está
controlada por los Datos
Registro de dirección (DDR) para el pin del puerto. El bit de Registro de Dirección de Datos para el pin OC0
(DDR_OC0) debe ser
establecer como salida antes de que el valor OC0 sea visible en el pin. La función de anulación de puerto es
independiente de la
Modo de generación de forma de onda.
El diseño de la lógica de pines de comparación de salida permite la inicialización del estado OC0 antes de
habilitar la salida.
Tenga en cuenta que algunas configuraciones de bit COM01: 0 están reservadas para ciertos modos de
operación. Ver "Descripción de Registro" en
página 79

14.6.1 Compare el modo de salida y la generación de forma de onda


El generador de forma de onda usa los bits COM01: 0 de manera diferente en los modos normal, CTC y
PWM. Para todos los modos,
el ajuste de COM01: 0 = 0 le dice al generador de forma de onda que no se debe realizar ninguna acción en el
Registro OC0 en
el siguiente partido de comparación. Para comparar acciones de salida en los modos sin PWM, consulte la
Tabla 14-3 en la página 80.
Para un modo rápido de PWM, consulte la Tabla 14-4 en la página 80, y para la fase correcta de PWM
consulte la Tabla 14-5 en
página 81.
Un cambio del estado COM01: 0 bits tendrá efecto en la primera comparación de comparación después de
que se escriban los bits. Para los modos que no son PWM, se puede forzar la acción para que tenga un efecto
inmediato utilizando los bits estroboscópicos FOC0.
14.7 modos de operación
El modo de operación, es decir, el comportamiento del temporizador / contador y los pines de comparación de
salida, está definido por la
Combinación del modo de generación de forma de onda (WGM01: 0) y el modo de salida de comparación
(COM01: 0) bits. los
Los bits del modo Comparar salida no afectan la secuencia de conteo, mientras que los bits del modo de
generación de forma de onda sí lo hacen.
Los bits COM01: 0 controlan si la salida PWM generada debe invertirse o no (PWM invertida o no invertida).
Para los modos que no son PWM, los bits COM01: 0 controlan si la salida se debe configurar, borrar o
alternado en una comparación de comparación (consulte “Comparar la unidad de salida de coincidencia” en la
página 72.).
Para obtener información detallada sobre la sincronización, consulte la Figura 14-8, la Figura 14-9, la Figura
14-10 y la Figura 14-11 en
“Diagramas de temporización del contador / temporizador” en la página 77.
14.7.1 Modo normal
El modo de operación más simple es el modo normal (WGM01: 0 = 0). En este modo la dirección de conteo
es
siempre arriba (incrementando), y no se realiza ningún borrado de contador. El contador simplemente se
sobrepasa cuando pasa su Valor máximo de 8 bits (TOP = 0xFF) y luego se reinicia desde la parte inferior
(0x00). En funcionamiento normal el
El Indicador de desbordamiento del contador / temporizador (TOV0) se configurará en el mismo ciclo de reloj
del temporizador cuando el TCNT0 se vuelva cero. los
El indicador TOV0 en este caso se comporta como un noveno bit, excepto que solo se establece, no se borra.
Sin embargo, combinado con la interrupción por desbordamiento del temporizador que borra
automáticamente el indicador TOV0, la resolución del temporizador se puede aumentar en
software. No hay casos especiales a considerar en el modo normal, se puede escribir un nuevo valor de
contador en cualquier momento.
La unidad de comparación de salida se puede utilizar para generar interrupciones en un momento dado.
Usando la salida en comparación con
no se recomienda generar formas de onda en el modo Normal, ya que esto ocupará demasiado tiempo de
CPU.
14.7.2 Temporizador de borrado en el modo de comparación de partidos
(CTC)
En el temporizador de borrado en modo de comparación o CTC (WGM01: 0 = 2), el registro OCR0 se utiliza
para manipular el contador resolución. En el modo CTC, el contador se borra a cero cuando el valor del
contador (TCNT0) coincide con el OCR0. El OCR0 define el valor superior para el contador, de ahí también
su resolución. Este modo permite un mayor control de
La comparación compara la frecuencia de salida. También simplifica la operación de contar eventos externos.
El diagrama de tiempo para el modo CTC se muestra en la Figura 14-5. El valor del contador (TCNT0)
aumenta hasta que la coincidencia de comparación se produce entre TCNT0 y OCR0, y luego se borra el
contador (TCNT0).
Figura 14-5. Modo CTC, Diagrama de tiempo

An interrupt can be generated each time the counter value reaches the TOP value by using the OCF0 Flag. If
the interrupt is enabled, the interrupt handler routine can be used for updating the TOP value. However,
changing TOP to a value close to BOTTOM when the counter is running with none or a low prescaler value
must be done with care since the CTC mode does not have the double buffering feature. If the new value
written to OCR0 is lower than the current value of TCNT0, the counter will miss the compare match. The
counter will then have to count to its maximum value (0xFF) and wrap around starting at 0x00 before the
compare match can occur. For generating a waveform output in CTC mode, the OC0 output can be set to
toggle its logical level on each compare ma tch by setting the Compare Output mode bits to toggle mode
(COM01:0 = 1). The OC0 value will not be visible on the port pin unless the data direction for the pin is set to
output. The waveform generated will have a maximum frequency of fOC0 = fclk_I/O/2 when OCR0 is set to
zero (0x00). The waveform frequency is defined by the following equation:

La variable N representa el factor de preescala (1, 8, 64, 256 o 1024).


En cuanto al modo de operación Normal, el indicador TOV0 se establece en el mismo ciclo de reloj del
temporizador que cuenta el contador
de MAX a 0x00.

14.7.3 Modo PWM rápido


La rápida Modulación de ancho de pulso o el modo PWM rápido (WGM01: 0 = 3) proporciona una forma de
onda PWM de alta frecuencia Opción de generación. El PWM rápido se diferencia de la otra opción de PWM
por su operación de pendiente única. El contador los conteos de BOTTOM a MAX luego se reinician desde
BOTTOM. En el modo de salida de comparación sin inversión, la salida La comparación (OC0) se borra en la
comparación de comparación entre TCNT0 y OCR0, y se establece en BOTTOM. En inversión
Compare el modo de salida, la salida se establece en la comparación de comparación y se borra en BOTTOM.
Debido a la pendiente única En funcionamiento, la frecuencia de funcionamiento del modo PWM rápido
puede ser el doble que el modo PWM de fase correcta. que utilizan la operación de doble pendiente. Esta alta
frecuencia hace que el modo rápido PWM sea adecuado para la regulación de potencia, Rectificación, y
aplicaciones DAC. La alta frecuencia permite componentes externos físicamente pequeños (bobinas,
condensadores), y por lo tanto reduce el costo total del sistema. En el modo PWM rápido, el contador se
incrementa hasta que el valor del contador coincide con el valor MAX. El contador es
luego se borra en el siguiente ciclo de temporizador. El diagrama de tiempo para el modo PWM rápido se
muestra en la Figura 14-6. El valor TCNT0 se encuentra en el diagrama de tiempo que se muestra como un
histograma para ilustrar la operación de pendiente única. El diagrama incluye salidas PWM no invertidas e
invertidas. Las pequeñas marcas de línea horizontal en el TCNT0. las pendientes representan comparaciones
entre OCR0 y TCNT0.

Figura 14-6. Modo PWM rápido, diagrama de tiempo


El indicador de desbordamiento del contador / temporizador (TOV0) se establece cada vez que el contador
alcanza el valor MAX. Si la interrupción está habilitada,
La rutina de manejo de interrupciones se puede usar para actualizar el valor de comparación.
En el modo rápido PWM, la unidad de comparación permite la generación de formas de onda PWM en el pin
OC0. Configurando el COM01: 0 bits a 2 producirán un PWM no invertido y se puede generar una salida
PWM invertida configurando
COM01: 0 a 3 (consulte la Tabla 14-4 en la página 80). El valor OC0 real solo será visible en el pin del puerto
si el La dirección de datos para el pin del puerto se establece como salida. La forma de onda PWM se genera
al configurar (o borrar) el OC0
Regístrese en el partido de comparación entre OCR0 y TCNT0, y borre (o ajuste) el Registro OC0 en el
temporizador ciclo de reloj el contador se borra (cambia de MAX a ABAJO).
La frecuencia PWM para la salida se puede calcular mediante la siguiente ecuación:

La variable N representa el factor de preescala (1, 8, 64, 256 o 1024).


Los valores extremos para el Registro OCR0 representan casos especiales al generar una salida de forma de
onda PWM
en el modo rápido PWM. Si el OCR0 se establece igual a BOTTOM, la salida será un pico estrecho para cada
MAX + 1
temporizador ciclo de reloj. Configurar el OCR0 igual a MAX dará como resultado una salida constantemente
alta o baja (dependiendo de la
polaridad de la salida ajustada por COM01: 0 bits.)
Se puede lograr una salida de forma de onda de frecuencia (con un ciclo de trabajo del 50%) en el modo
PWM rápido configurando OC0 en
cambie su nivel lógico en cada comparación de comparación (COM01: 0 = 1). La forma de onda generada
tendrá un máximo
frecuencia de fOC0 = fclk_I / O / 2 cuando OCR0 se establece en cero. Esta característica es similar a la
alternancia OC0 en modo CTC,
excepto que la función de doble búfer de la unidad de comparación de salida está habilitada en el modo rápido
PWM.

14.7.4 Modo PWM de fase correcta


El modo PWM de fase correcta (WGM01: 0 = 1) proporciona una forma de onda PWM correcta de fase de
alta resolución Opción de generación. El modo PWM de fase correcta se basa en una operación de doble
pendiente. El contador cuenta repetidamente de BOTTOM a MAX y luego de MAX a BOTTOM. En el modo
de salida de comparación sin inversión, el La comparación de salida (OC0) se borra en la comparación de
comparación entre TCNT0 y OCR0 mientras se realiza el recuento, y se establece en el partido de
comparación mientras que el conteo descendente. En el modo de comparación de salida invertida, la
operación se invierte. Los La operación de pendiente doble tiene una frecuencia de operación máxima más
baja que la operación de pendiente única. Sin embargo, debido a la característica simétrica de los modos
PWM de doble pendiente, estos modos son los preferidos para aplicaciones de control de motores. La
resolución PWM para el modo PWM de fase correcta se fija en ocho bits. En el modo PWM de fase correcta
el el contador se incrementa hasta que el valor del contador coincide con MAX. Cuando el contador llega a
MAX, cambia el direccion de cuenta El valor TCNT0 será igual a MAX para un ciclo de reloj del
temporizador. El diagrama de tiempo para el el modo PWM de fase correcta se muestra en la Figura 14-7. El
valor TCNT0 se encuentra en el diagrama de tiempo que se muestra como Histograma para ilustrar la
operación de doble pendiente. El diagrama incluye PWM no invertido e invertido salidas Las pequeñas
marcas de línea horizontal en las pendientes TCNT0 representan comparaciones entre OCR0 y
TCNT0.
Figura 14-7. Modo PWM de fase correcta, diagrama de tiempo

El indicador de desbordamiento del contador / temporizador (TOV0) se establece cada vez que el contador
llega a INFERIOR. La bandera de interrupción se puede usar para generar una interrupción cada vez que el
contador alcanza el valor INFERIOR. En el modo PWM de fase correcta, la unidad de comparación permite
la generación de formas de onda PWM en el pin OC0. Ajuste El COM01: 0 bits a 2 producirá un PWM no
invertido. Se puede generar una salida PWM invertida configurando
COM01: 0 a 3 (consulte la Tabla 14-5 en la página 81). El valor OC0 real solo será visible en el pin del puerto
si el La dirección de datos para el pin del puerto se establece como salida. La forma de onda PWM se genera
al borrar (o configurar) el OC0 Regístrese en la comparación de comparación entre OCR0 y TCNT0 cuando
el contador se incremente, y la configuración (o borrando) el registro OC0 en la comparación de comparación
entre OCR0 y TCNT0 cuando el contador disminuye. los
La frecuencia de PWM para la salida cuando se usa PWM de fase correcta se puede calcular mediante la
siguiente ecuación:

La variable N representa el factor de preescala (1, 8, 64, 256 o 1024).


Los valores extremos para el Registro OCR0 representan casos especiales al generar una salida de forma de
onda PWM en el modo PWM de fase correcta. Si el OCR0 se establece igual a BOTTOM, la salida será
continuamente baja y si igual a MAX, la salida será continuamente alta para el modo PWM no invertido. Para
PWM invertida la salida. Tendrá los valores lógicos opuestos.
Al comienzo del Período 2 en la Figura 14-7, OCn tiene una transición de alta a baja, aunque no hay
Comparar partido. El punto de esta transición es garantizar la simetría alrededor de BOTTOM. Hay dos casos
que dan una transición sin comparación de comparación:
 OCR0A cambia su valor de MAX, como en la Figura 14-7. Cuando el valor OCR0A es MAX el pin
OCn
el valor es el mismo que el resultado de una comparación de comparación descendente. Para asegurar la
simetría alrededor
ABAJO, el valor de OCn en MAX debe corresponderse con el resultado de una comparación de
comparaciones.
 El temporizador comienza a contar desde un valor más alto que el de OCR0A, y por esa razón
pierde el
Compare Match y por lo tanto el cambio de OCn que habría ocurrido en el camino hacia arriba.
14.8 Diagramas de temporización / contador
El temporizador / contador es un diseño síncrono y, por lo tanto, el reloj temporizador (clkT0) se muestra
como un reloj habilitado Señal en las siguientes figuras. Las cifras incluyen información sobre cuándo se
establecen los indicadores de interrupción. Figura 14-8 contiene datos de tiempo para la operación básica del
temporizador / contador. La figura muestra la secuencia de conteo cerca del MAX.
Valor en todos los modos distintos del modo PWM de fase correcta.

Figura 14-8. Diagrama de temporización / contador de temporizador, sin preescalado

La Figura 14-9 muestra los mismos datos de tiempo, pero con el prescaler habilitado.

Figura 14-9. Diagrama de temporización del contador / temporizador, con Prescaler (fclk_I / O / 8)

La Figura 14-10 muestra la configuración de OCF0 en todos los modos, excepto el modo CTC.

Figura 14-10. Diagrama de temporización del contador / temporizador, ajuste de OCF0, con Prescaler (fclk_I
/ O / 8)

La Figura 14-11 muestra la configuración de OCF0 y la eliminación de TCNT0 en modo CTC.


Figura 14-11. Diagrama de temporización de contador / temporizador, temporizador de borrado en modo de
comparación de coincidencias, con precalificador (fclk_I / O / 8)

14.9 Descripción de Registro


14.9.1 TCCR0 - Registro de control de contador / temporizador

• Bit 7 - FOC0: Comparación de fuerza de salida


El bit FOC0 solo está activo cuando el bit WGM00 especifica un modo no PWM. Sin embargo, para asegurar
compatibilidad con los dispositivos futuros, este bit debe establecerse en cero cuando se escribe TCCR0
cuando se opera en PWM modo. Cuando se escribe una lógica en el bit FOC0, se fuerza una comparación de
comparación inmediata en la forma de onda Unidad de generación. La salida OC0 se cambia de acuerdo con
su configuración COM01: 0 bits. Tenga en cuenta que el bit FOC0 es
implementado como un estroboscopio. Por lo tanto, es el valor presente en los bits COM01: 0 lo que
determina el efecto de la comparación forzada
Un estroboscopio FOC0 no generará ninguna interrupción, ni borrará el temporizador en modo CTC
utilizando OCR0 como TOP.
El bit FOC0 siempre se lee como cero.

• Bit 3, 6 - WGM0 [1: 0]: Modo de generación de forma de onda


Estos bits controlan la secuencia de conteo del contador, la fuente del valor máximo del contador (TOP) y
qué tipo de generación de forma de onda se utilizará. Los modos de operación soportados por la unidad de
temporizador / contador son:
Modo normal, temporizador de borrado en el modo de comparación de coincidencias (CTC) y dos tipos de
modulación de ancho de pulso (PWM)
modos Consulte la Tabla 14-2 y “Modos de funcionamiento” en la página 73.

Tabla 14-2. Descripción del bit de modo de generación de forma de onda (1)

Nota: 1. Los nombres de definición de bit CTC0 y PWM0 ahora están obsoletos. Utilice las definiciones
WGM01: 0. sin embargo, el
La funcionalidad y la ubicación de estos bits son compatibles con versiones anteriores del temporizador.

• Bit 5: 4 - COM01: 0: Comparación del modo de salida coincidente


Estos bits controlan el comportamiento del pin de comparación de salida (OC0). Si uno o ambos COM01: 0
bits están configurados, el OC0
la salida anula la funcionalidad de puerto normal del pin de E / S al que está conectado. Sin embargo, tenga en
cuenta que los datos El bit de registro de dirección (DDR) correspondiente al pin OC0 debe configurarse para
habilitar el controlador de salida. Cuando OC0 está conectado al pin, la función de los bits COM01: 0
depende de la configuración de WGM01: 0 bits.
La Tabla 14-3 muestra la funcionalidad de bit COM01: 0 cuando los bits WGM01: 0 están configurados en
modo normal o CTC (no PWM).

Tabla 14-3. Compare el modo de salida, el modo no PWM

La Tabla 14-4 muestra la funcionalidad de bit COM01: 0 cuando los bits WGM01: 0 están configurados en
modo PWM rápido.

Nota: 1. Se produce un caso especial cuando OCR0 es igual a TOP y se configura COM01. En este caso, la
comparación de comparación se ignora,
pero el set o clear se hace en TOP. Consulte “Modo PWM rápido” en la página 75 para obtener más detalles.
La Tabla 14-5 muestra la funcionalidad de bit COM01: 0 cuando los bits WGM01: 0 están configurados para
el modo PWM de fase correcta.

Tabla 14-5. Compare el modo de salida, el modo PWM de corrección de fase (1)

Nota: 1. Se produce un caso especial cuando OCR0 es igual a TOP y se configura COM01. En este caso, la
comparación de comparación se ignora,
pero el set o clear se hace en TOP. Consulte “Modo PWM de corrección de fase” en la página 76 para obtener
más detalles.
• Bit 2: 0 - CS02: 0: Selección de reloj
Los tres bits de selección de reloj seleccionan la fuente de reloj que utilizará el temporizador / contador
Tabla 14-6. Clock Select Bit Descripción
Si se utilizan modos de pin externo para el temporizador / contador0, las transiciones en el pin T0 marcarán el
contador incluso si el
pin se configura como una salida. Esta característica permite el control por software del conteo.

14.9.2 TCNT0 - Registro temporizador / contador

El registro de temporizador / contador proporciona acceso directo, tanto para operaciones de lectura como
de escritura, a la unidad de temporizador / contador 8-
contador de bits Escribir en el TCNT0 Register bloquea (elimina) la comparación de comparación en el
siguiente reloj temporizador.
La modificación del contador (TCNT0) mientras se está ejecutando el contador, presenta el riesgo de perder
una comparación de comparación
entre TCNT0 y el Registro OCR0.

14.9.3 OCR0 - Registro de comparación de salida

El Registro de comparación de salida contiene un valor de 8 bits que se compara continuamente con el valor
del contador
(TCNT0). Se puede usar una coincidencia para generar una interrupción de comparación de salida, o para
generar una salida de forma de onda en
el pin OC0.

14.9.4 TIMSK – Timer/Counter Interrupt Mask Register

• Bit 1 - OCIE0: habilitación de interrupción de comparación de temporizador / contador0 salida


Cuando el bit OCIE0 se escribe en uno, y el bit I en el registro de estado se establece (uno), el temporizador /
contador0
La interrupción de comparación de partidos está habilitada. La interrupción correspondiente se ejecuta si una
comparación compara en El temporizador / contador0 se produce, es decir, cuando el bit OCF0 se establece
en el registro de indicador de interrupción de contador / temporizador - TIFR.
• Bit 0 - TOIE0: habilitación de interrupción de desbordamiento temporizador / contador0
Cuando el bit TOIE0 se escribe en uno, y el bit I en el registro de estado se establece (uno), el temporizador /
contador0 La interrupción por desbordamiento está habilitada. La interrupción correspondiente se ejecuta si
ocurre un desbordamiento en Timer / Counter0,
es decir, cuando el bit TOV0 se establece en el registro de indicador de interrupción de contador /
temporizador - TIFR.
14.9.5 Registro de indicador de interrupción del contador / temporizador
qP TIFR

• Bit 1 - OCF0: Indicador de comparación de salida 0


El bit OCF0 se establece (uno) cuando se produce una comparación de comparación entre el temporizador /
contador0 y los datos en OCR0 -
Registro de comparación de salida0. La OCF0 se borra mediante hardware al ejecutar el manejo de
interrupciones correspondiente
vector. Alternativamente, OCF0 se borra al escribir una lógica en la bandera. Cuando el I-bit en SREG,
OCIE0
(Timer / Counter0 Compare Match Enable Interrup Enable), y OCF0 están configurados (uno), el
temporizador / Counter0 Compare
Match Interrupt se ejecuta.
• Bit 0 - TOV0: Indicador de desbordamiento del temporizador / contador0
El bit TOV0 se establece (uno) cuando se produce un desbordamiento en Timer / Counter0. TOV0 se borra
por hardware cuando ejecutando el correspondiente vector de manejo de interrupciones. Alternativamente,
TOV0 se borra al escribir una lógica para la bandera. Cuando se establece el bit I de SREG, TOIE0
(habilitación de interrupción de desbordamiento del contador / temporizador) y TOV0 (uno), el
Se ejecuta la interrupción de desbordamiento temporizador / contador0. En el modo PWM de fase correcta,
este bit se establece cuando El temporizador / contador cambia la dirección de conteo a $ 00.
15. Timer/Counter0 and Timer/Counter1 Prescalers
15.1 Descripción general
Timer / Counter1 y Timer / Counter0 comparten el mismo módulo de prescaler, pero el Timer / Counters
puede tener diferentes configuraciones pre-escaladoras. La siguiente descripción se aplica a Timer / Counter1
y Timer / Counter0.
15.2 Fuente de reloj interno
El temporizador / contador se puede sincronizar directamente con el reloj del sistema (configurando CSn2: 0
= 1). Esto proporciona la La operación más rápida, con una frecuencia máxima de reloj / contador igual a la
frecuencia del reloj del sistema (fCLK_I / O). Alternativamente, uno de los cuatro toques del prescaler puede
usarse como fuente de reloj. El reloj preescalado tiene una la frecuencia de fCLK_I / O / 8, fCLK_I / O / 64,
fCLK_I / O / 256 o fCLK_I / O / 1024.
15.3 Restablecimiento de preescala
El preescalador funciona libremente, es decir, funciona independientemente de la lógica de selección de reloj
del temporizador / contador, y es compartido por Timer / Counter1 y Timer / Counter0. Dado que el prescaler
no se ve afectado por el reloj del contador / temporizador Al seleccionar, el estado del preescalador tendrá
implicaciones para situaciones en las que se utiliza un reloj preescalado. Uno un ejemplo de artefactos de
preescalamiento ocurre cuando el temporizador está habilitado y sincronizado por el prescaler (6> CSn2: 0>
1). El número de ciclos de reloj del sistema desde que se activa el temporizador hasta el primer conteo puede
ser de 1 a N + 1 ciclos de reloj del sistema, donde N es igual al divisor del prescaler (8, 64, 256 o 1024).
Es posible usar el reinicio de Prescaler para sincronizar el temporizador / contador para programar la
ejecución. Sin embargo, se debe tener cuidado si el otro Temporizador / Contador que comparte el mismo
preescalador también usa el preescalado. Un preescala el reinicio afectará el período de preescala para todos
los temporizadores / contadores a los que está conectado.
15.4 Fuente de reloj externo
Una fuente de reloj externa aplicada al pin T1 / T0 se puede usar como reloj temporizador / contador (clkT1 /
clkT0). El T1 / T0 pin se muestrea una vez cada ciclo de reloj del sistema por la lógica de sincronización de
pin. El sincronizado (muestreado) La señal pasa luego a través del detector de borde. La figura 15-1 muestra
un diagrama de bloques equivalente funcional del Sincronización T1 / T0 y lógica de detección de bordes.
Los registros están sincronizados en el borde positivo de la interna. reloj del sistema (clkI / O). El pestillo es
transparente en el período alto del reloj interno del sistema.
El detector de bordes genera un pulso clkT1 / clkT0 para cada borde positivo (CSn2: 0 = 7) o negativo (CSn2:
0 = 6)
lo detecta

Figura 15-1. Muestreo de pin T1 / T0

La lógica de la sincronización y del detector de bordes introduce un retardo de 2.5 a 3.5 ciclos de reloj del
sistema desde un borde Se ha aplicado al pin T1 / T0 para que el contador se actualice.
La activación y desactivación de la entrada del reloj se debe hacer cuando T1 / T0 se ha mantenido estable al
menos en un sistema. ciclo del reloj, de lo contrario, existe el riesgo de que se genere un pulso de
temporizador / contador falso.
Cada medio período del reloj externo aplicado debe ser más largo que un ciclo de reloj del sistema para
garantizar la correcta
muestreo. Se debe garantizar que el reloj externo tenga menos de la mitad de la frecuencia de reloj del sistema
(fExtClk < fclk_I / O / 2) dado un ciclo de trabajo de 50/50%. Dado que el detector de bordes utiliza
muestreo, la frecuencia máxima de un El reloj externo que puede detectar es la mitad de la frecuencia de
muestreo (teorema de muestreo de Nyquist). Sin embargo, debido a variación de la frecuencia del reloj del
sistema y del ciclo de trabajo causado por la fuente del oscilador (cristal, resonador y de condensadores), se
recomienda que la frecuencia máxima de una fuente de reloj externa sea inferior a
fclk_I / O / 2.5.
Una fuente de reloj externa no puede ser preescalada.

Figura 15-2. Prescaler para Timer / Counter0 y Timer / Counter1 (1)

Nota: 1. La lógica de sincronización en los pines de entrada (T1 / T0) se muestra en la Figura 15-1.

15.5 Descripción del registro


15.5.1 SFIOR - Registro de funciones especiales IO

• Bit 0 - PSR10: Temporizador / contador de reinicio de prescaler1 y temporizador / contador0


Cuando este bit se escribe en uno, se reiniciarán el prescaler Timer / Counter1 y Timer / Counter0. El bit sera
borrado por el hardware después de la operación se realiza. Escribir un cero en este bit no tendrá efecto.
Tenga en cuenta que
Timer / Counter1 y Timer / Counter0 comparten el mismo prescaler y un reinicio de este prescaler afectará a
ambos
temporizadores Este bit siempre se leerá como cero.
16. Temporizador / contador1 de 16 bits
16.1 Características
• Verdadero diseño de 16 bits (es decir, permite PWM de 16 bits)
• Dos unidades de comparación de salida independientes
• Registros de comparación de salida de doble búfer
• Una unidad de captura de entrada
• Capturador de ruido de captura de entrada
• Borrar temporizador en comparación de coincidencias (recarga automática)
• Modulador de ancho de pulso (PWM) de fase correcta sin fallas
• Período de PWM variable
• Generador de frecuencia
• Contador de eventos externos
• Cuatro fuentes de interrupción independientes (TOV1, OCF1A, OCF1B e ICF1)

16.2 Descripción general


La unidad de temporizador / contador de 16 bits permite la ejecución precisa del programa (gestión de
eventos), generación de ondas, y medición de la temporización de la señal. La mayoría de las referencias de
registro y bits en esta sección están escritas en forma general. UNA la minúscula "n" reemplaza el número del
temporizador / contador, y la minúscula "x" reemplaza la unidad de comparación de salida.
Sin embargo, cuando se utiliza el registro o el bit definido en un programa, se debe usar la forma precisa (es
decir, TCNT1 para accediendo al valor del contador Timer / Counter1 y así sucesivamente).
En la Figura 16-1 se muestra un diagrama de bloques simplificado del temporizador / contador de 16 bits.
Para la colocación real de E / S pines, consulte la Figura 1-1 en la página 3. Los registros de E / S accesibles
desde la CPU, incluidos los bits de E / S y los pines de E / S, se muestran en negrita. El registro de E / S
específico del dispositivo y las ubicaciones de los bits se enumeran en la “Descripción del registro” en la
página 105.

Figura 16-1. Diagrama de bloques de contador / contador de 16 bits (1)

Nota: 1. Consulte la Figura 1-1 en la página 3, la Tabla 12-6 en la página 57 y la Tabla 12-12 en la página 62
para el pin Temporizador / Contador1 Colocación y descripción.
16.2.1 Registros
El temporizador / contador (TCNT1), los registros de comparación de salida (OCR1A / B) y el registro de
captura de entrada (ICR1) son todos
Registros de 16 bits. Se deben seguir procedimientos especiales al acceder a los registros de 16 bits. Estos
procedimientos
se describen en la sección “Acceso a los registros de 16 bits” en la página 87. Los registros de control del
contador / temporizador
(TCCR1A / B) son registros de 8 bits y no tienen restricciones de acceso a la CPU. Solicitudes de interrupción
(abreviadas a Int.Req.
en la figura) todas las señales son visibles en el Registro de indicadores de interrupción del temporizador
(TIFR). Todas las interrupciones son individualmente.
enmascarado con el registro de máscara de interrupción del temporizador (TIMSK). TIFR y TIMSK no se
muestran en la figura ya que
estos registros son compartidos por otras unidades de temporizador.
El temporizador / contador se puede sincronizar internamente, a través del prescaler, o mediante una fuente de
reloj externa en el pin T1.
El bloque lógico de selección de reloj controla qué fuente de reloj y borde usa el temporizador / contador para
incrementar (o decremento) su valor. El temporizador / contador está inactivo cuando no se selecciona
ninguna fuente de reloj. La salida del reloj.
La lógica de selección se conoce como el reloj del temporizador (clkT1).
Los registros de comparación de salida con doble búfer (OCR1A / B) se comparan con el valor del
temporizador / contador en absoluto hora. El generador de forma de onda puede utilizar el resultado de la
comparación para generar un PWM o variable Salida de frecuencia en el pin de comparación de salida (OC1A
/ B). Consulte “Unidades de comparación de salida” en la página 93. La comparación el evento de
coincidencia también establecerá el indicador de comparación de coincidencia (OCF1A / B) que se puede
utilizar para generar una salida comparar la solicitud de interrupción.
El registro de captura de entrada puede capturar el valor del temporizador / contador en un evento externo
determinado (activado por flanco) en ya sea el Pin de captura de entrada (ICP1) o en los pines del comparador
analógico (consulte “Comparador analógico” en la página 193).
La unidad de captura de entrada incluye una unidad de filtrado digital (cancelador de ruido) para reducir la
posibilidad de captura picos de ruido.
El valor TOP, o el valor máximo de Timer / Counter, en algunos modos de operación puede ser definido por
el Registro OCR1A, el Registro ICR1, o por un conjunto de valores fijos. Cuando se utiliza OCR1A como
valor TOP en un PWM En este modo, el registro OCR1A no se puede utilizar para generar una salida PWM.
Sin embargo, el valor TOP estará en este
el caso debe tener doble búfer, lo que permite cambiar el valor TOP en el tiempo de ejecución. Si se requiere
un valor SUPERIOR fijo, el
El registro ICR1 se puede utilizar como una alternativa, liberando el OCR1A para que se use como salida
PWM.

16.2.2 Definiciones
Las siguientes definiciones se utilizan ampliamente en todo el documento:
Tabla 16-1. Definiciones

87

Você também pode gostar