Escolar Documentos
Profissional Documentos
Cultura Documentos
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.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.
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.
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
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.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.
• 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.
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
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.
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.
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.
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.
• 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.
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.
• 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.
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.
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:
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.
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
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.
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
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.
• 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.
• T1 - Puerto B, Bit 1
T1, Timer / Counter1 Counter Source.
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.
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.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.
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.
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
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:
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 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)
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.
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.
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.
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.
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.
Nota: 1. La lógica de sincronización en los pines de entrada (T1 / T0) se muestra en la Figura 15-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