AVR es una familia de microcontroladores desarrollados desde 1996 por Atmel , adquirida por Microchip Technology en 2016. Se trata de microcontroladores de un solo chip RISC de 8 bits con arquitectura Harvard modificada . AVR fue una de las primeras familias de microcontroladores en utilizar memoria flash en chip para el almacenamiento de programas, a diferencia de la ROM , EPROM o EEPROM programables una sola vez que utilizaban otros microcontroladores en ese momento.
Los microcontroladores AVR tienen muchas aplicaciones como sistemas integrados . Son especialmente comunes en aplicaciones integradas educativas y para aficionados, y se popularizaron gracias a su inclusión en muchas de las placas de desarrollo de hardware abierto de la línea Arduino .
La arquitectura AVR fue concebida por dos estudiantes del Instituto Noruego de Tecnología (NTH), [1] Alf-Egil Bogen [2] y Vegard Wollan. [3]
Atmel afirma que el nombre AVR no es un acrónimo y no significa nada en particular. Los creadores del AVR no dan una respuesta definitiva sobre el significado del término "AVR". [3] Sin embargo, se acepta comúnmente que AVR significa procesador R ISC de Alf y Vegard . [4] Tenga en cuenta que el uso de "AVR" en este artículo generalmente se refiere a la línea RISC de 8 bits de microcontroladores AVR de Atmel.
El MCU AVR original fue desarrollado en una casa local de ASIC [ aclaración necesaria ] en Trondheim, Noruega , llamada Nordic VLSI en ese momento, ahora Nordic Semiconductor , donde Bogen y Wollan trabajaban como estudiantes. [ cita requerida ] Se lo conocía como μRISC (Micro RISC) [5] y estaba disponible como IP de silicio/bloque de construcción de Nordic VLSI. [6] Cuando la tecnología fue vendida a Atmel desde Nordic VLSI , la arquitectura interna fue desarrollada aún más por Bogen y Wollan en Atmel Norway, una subsidiaria de Atmel. Los diseñadores trabajaron en estrecha colaboración con los escritores de compiladores en IAR Systems para garantizar que el conjunto de instrucciones AVR proporcionara una compilación eficiente de lenguajes de alto nivel . [7]
Entre los primeros de la línea AVR se encontraba el AT90S8515, que en un encapsulado DIP de 40 pines tiene la misma distribución de pines que un microcontrolador 8051 , incluido el bus de datos y dirección multiplexado externo. La polaridad de la línea RESET era opuesta (el 8051 tiene un RESET activo-alto, mientras que el AVR tiene un RESET activo-bajo ), pero, aparte de eso, la distribución de pines era idéntica.
La arquitectura del microcontrolador AVR de 8 bits se introdujo en 1997. En 2003, Atmel había enviado 500 millones de microcontroladores flash AVR. [8] La plataforma Arduino , desarrollada para proyectos electrónicos simples, se lanzó en 2005 e incluía microcontroladores AVR ATmega8.
La AVR es una máquina de arquitectura Harvard modificada, donde el programa y los datos se almacenan en sistemas de memoria física separados que aparecen en diferentes espacios de direcciones, pero que tienen la capacidad de leer elementos de datos de la memoria del programa mediante instrucciones especiales.
Los AVR generalmente se clasifican de la siguiente manera:
tinyAVR – la serie ATtiny
La serie ATtiny incluye microcontroladores de encapsulado pequeño con un conjunto limitado de periféricos disponibles. Sin embargo, la serie tinyAVR 0/1/2 mejorada (lanzada en 2016) incluye:
megaAVR – la serie ATmega
La serie ATmega incluye microcontroladores que ofrecen un conjunto de instrucciones ampliado (instrucciones múltiples e instrucciones para manejar memorias de programa más grandes), un extenso conjunto de periféricos, una cantidad considerable de memoria de programa y una amplia gama de pines disponibles. La serie megaAVR 0 (lanzada en 2016) también tiene funciones como:
AVR Dx – La familia AVR Dx presenta múltiples series de microcontroladores, enfocados en HCI , acondicionamiento de señales analógicas y seguridad funcional.
Los números de piezas tienen el formato AVR ff D xpp , donde ff es el tamaño del flash, x es la familia y pp es el número de pines. Ejemplo: AVR128DA64: serie DA de 64 pines con flash de 128k. Todos los dispositivos de la familia AVR Dx incluyen:
XMEGA
La serie ATxmega ofrece una amplia variedad de periféricos y funcionalidades como:
AVR específico de la aplicación
FPSLIC (AVR con FPGA)
AVR de 32 bits
Los AVR tienen 32 registros de un solo byte y están clasificados como dispositivos RISC de 8 bits.
Flash , EEPROM y SRAM están todos integrados en un solo chip, lo que elimina la necesidad de memoria externa en la mayoría de las aplicaciones. Algunos dispositivos tienen una opción de bus externo paralelo para permitir agregar memoria de datos adicional o dispositivos mapeados en memoria. Casi todos los dispositivos (excepto los chips TinyAVR más pequeños) tienen interfaces seriales, que se pueden usar para conectar EEPROM seriales o chips flash más grandes.
Las instrucciones del programa se almacenan en una memoria flash no volátil . Aunque los MCU son de 8 bits, cada instrucción ocupa una o dos palabras de 16 bits. El tamaño de la memoria del programa suele indicarse en el nombre del propio dispositivo (por ejemplo, la línea ATmega64x tiene 64 KB de memoria flash, mientras que la línea ATmega32x tiene 32 KB). No hay ninguna disposición para la memoria del programa fuera del chip; todo el código ejecutado por el núcleo AVR debe residir en la memoria flash del chip. Sin embargo, esta limitación no se aplica a los chips AVR/FPGA AT94 FPSLIC.
El espacio de direcciones de datos consta del archivo de registros , los registros de E/S y la memoria SRAM . Algunos modelos pequeños también asignan la ROM del programa al espacio de direcciones de datos, pero los modelos más grandes no lo hacen.
En las variantes tinyAVR y megaAVR de la arquitectura AVR , los registros de trabajo se asignan como las primeras 32 direcciones de memoria de datos (0000 16 –001F 16 ), seguidas de 64 registros de E/S (0020 16 –005F 16 ). En dispositivos con muchos periféricos, estos registros son seguidos por 160 registros de “E/S extendida”, a los que solo se puede acceder como E/S asignada a la memoria (0060 16 –00FF 16 ).
La SRAM real comienza después de estas secciones de registro, en la dirección 0060 16 o, en dispositivos con "E/S extendida", en 0100 16 .
Si bien existen esquemas de direccionamiento separados y códigos de operación optimizados para acceder al archivo de registros y a los primeros 64 registros de E/S, todos ellos también pueden direccionarse y manipularse como si estuvieran en SRAM.
Las variantes tinyAVR más pequeñas utilizan una arquitectura reducida con solo 16 registros (se omiten r0 a r15) que no son direccionables como ubicaciones de memoria. La memoria de E/S comienza en la dirección 0000 16 , seguida de SRAM. Además, estos dispositivos tienen ligeras desviaciones del conjunto de instrucciones AVR estándar. En particular, las instrucciones de carga/almacenamiento directo (LDS/STS) se han reducido de 2 palabras (32 bits) a 1 palabra (16 bits), lo que limita la memoria direccionable directa total (la suma de E/S y SRAM) a 128 bytes. Por el contrario, el espacio de direcciones de 16 bits de la instrucción de carga indirecta (LD) se expande para incluir también memoria no volátil como Flash y bits de configuración; por lo tanto, la instrucción de carga de memoria de programa (LPM) es innecesaria y se omite. (Para obtener información detallada, consulte el conjunto de instrucciones Atmel AVR ).
En la variante XMEGA, el archivo de registro de trabajo no está mapeado en el espacio de direcciones de datos; por lo tanto, no es posible tratar ninguno de los registros de trabajo de XMEGA como si fueran SRAM. En cambio, los registros de E/S se mapean en el espacio de direcciones de datos comenzando desde el principio del espacio de direcciones. Además, la cantidad de espacio de direcciones de datos dedicado a los registros de E/S ha crecido sustancialmente a 4096 bytes (0000 16 –0FFF 16 ). Sin embargo, como con las generaciones anteriores, las instrucciones de manipulación rápida de E/S solo pueden alcanzar las primeras 64 ubicaciones de registros de E/S (las primeras 32 ubicaciones para instrucciones bit a bit). Después de los registros de E/S, la serie XMEGA reserva un rango de 4096 bytes del espacio de direcciones de datos, que se puede usar opcionalmente para mapear la EEPROM interna al espacio de direcciones de datos (1000 16 –1FFF 16 ). La SRAM real se encuentra después de estos rangos, a partir de 2000 16 .
Cada puerto GPIO de un AVR pequeño o megacontrolador controla hasta ocho pines y está controlado por tres registros de 8 bits: DDR x , PORT x y PIN x , donde x es el identificador del puerto.
Los AVR ATtiny más nuevos, como el ATtiny817 y sus hermanos, tienen sus registros de control de puerto definidos de manera algo diferente. Los xmegaAVR tienen registros adicionales para configuraciones push/pull, totem-pole y pullup.
Casi todos los microcontroladores AVR tienen una EEPROM interna para el almacenamiento de datos semipermanente. Al igual que la memoria flash, la EEPROM puede mantener su contenido cuando se corta la energía eléctrica.
En la mayoría de las variantes de la arquitectura AVR, esta memoria EEPROM interna no está asignada al espacio de memoria direccionable del MCU. Solo se puede acceder a ella de la misma manera que a un dispositivo periférico externo, mediante registros de puntero especiales e instrucciones de lectura/escritura, lo que hace que el acceso a la EEPROM sea mucho más lento que a otras memorias RAM internas.
Sin embargo, algunos dispositivos de la familia SecureAVR (AT90SC) [11] utilizan una asignación especial de la EEPROM a la memoria de datos o de programa, según la configuración. La familia XMEGA también permite que la EEPROM se asigne al espacio de direcciones de datos.
Dado que la cantidad de escrituras en EEPROM es limitada (Atmel especifica 100 000 ciclos de escritura en sus hojas de datos), una rutina de escritura en EEPROM bien diseñada debe comparar el contenido de una dirección EEPROM con el contenido deseado y solo realizar una escritura real si es necesario cambiar el contenido.
Los AVR de Atmel tienen un diseño de canalización de un solo nivel y dos etapas . Esto significa que la siguiente instrucción de la máquina se obtiene mientras se ejecuta la actual. La mayoría de las instrucciones requieren solo uno o dos ciclos de reloj, lo que hace que los AVR sean relativamente rápidos entre los microcontroladores de ocho bits .
Los procesadores AVR fueron diseñados con la ejecución eficiente de código C compilado en mente y tienen varios punteros integrados para la tarea.
El conjunto de instrucciones del AVR es más ortogonal que el de la mayoría de los microcontroladores de ocho bits, en particular los clones del 8051 y los microcontroladores PIC con los que el AVR compite actualmente. Sin embargo, no es completamente regular:
Además, algunas diferencias específicas de cada chip afectan la generación de código. Los punteros de código (incluidas las direcciones de retorno en la pila) tienen una longitud de dos bytes en chips con hasta 128 KB de memoria flash, pero de tres bytes en chips más grandes; no todos los chips tienen multiplicadores de hardware; los chips con más de 8 KB de memoria flash tienen instrucciones de bifurcación y llamada con rangos más largos, y así sucesivamente.
El conjunto de instrucciones, en su mayor parte regular, hace que los compiladores de C (e incluso de Ada) sean bastante sencillos y eficientes. GCC incluye soporte AVR desde hace bastante tiempo, y ese soporte se utiliza ampliamente. LLVM también tiene un soporte AVR rudimentario. De hecho, Atmel solicitó la opinión de los principales desarrolladores de compiladores para microcontroladores pequeños, para determinar las características del conjunto de instrucciones que eran más útiles en un compilador para lenguajes de alto nivel. [7]
La línea AVR normalmente puede soportar velocidades de reloj de 0 a 20 MHz, y algunos dispositivos alcanzan los 32 MHz. El funcionamiento con menor potencia generalmente requiere una velocidad de reloj reducida. Todos los AVR recientes (Tiny, Mega y Xmega, pero no 90S) cuentan con un oscilador en chip, lo que elimina la necesidad de relojes externos o circuitos de resonador. Algunos AVR también tienen un prescaler de reloj del sistema que puede dividir el reloj del sistema hasta por 1024. Este prescaler se puede reconfigurar por software durante el tiempo de ejecución, lo que permite optimizar la velocidad del reloj.
Dado que todas las operaciones (excluyendo la multiplicación y la suma/resta de 16 bits) en los registros R0–R31 son de un solo ciclo, el AVR puede alcanzar hasta 1 MIPS por MHz, es decir, un procesador de 8 MHz puede alcanzar hasta 8 MIPS. Las cargas y los almacenamientos en/desde la memoria toman dos ciclos, la ramificación toma dos ciclos. Las ramificaciones en los últimos componentes de "PC de 3 bytes", como el ATmega2560, son un ciclo más lentas que en los dispositivos anteriores.
Los AVR tienen un gran número de seguidores debido a las herramientas de desarrollo gratuitas y económicas disponibles, incluidas placas de desarrollo a precios razonables y software de desarrollo gratuito. Los AVR se venden con varios nombres que comparten el mismo núcleo básico, pero con diferentes combinaciones de periféricos y memoria. La compatibilidad entre chips de cada familia es bastante buena, aunque las características del controlador de E/S pueden variar.
Consulte los enlaces externos para obtener sitios relacionados con el desarrollo de AVR.
Los AVR ofrecen una amplia gama de funciones:
Existen muchos métodos para cargar el código de programa en un chip AVR. Los métodos para programar chips AVR varían de una familia de AVR a otra. La mayoría de los métodos descritos a continuación utilizan la línea RESET para ingresar al modo de programación. Para evitar que el chip ingrese accidentalmente a dicho modo, se recomienda conectar una resistencia pull-up entre el pin RESET y la fuente de alimentación positiva. [16]
El método de programación de programación en el sistema (ISP) se realiza funcionalmente a través de SPI , más algunos ajustes en la línea de reinicio. Mientras los pines SPI del AVR no estén conectados a nada que los perturbe, el chip del AVR puede permanecer soldado en una PCB mientras se reprograma. Todo lo que se necesita es un conector de 6 pines y un adaptador de programación. Esta es la forma más común de desarrollar con un AVR.
El dispositivo Atmel-ICE o AVRISP mkII (dispositivo heredado) se conecta al puerto USB de una computadora y realiza la programación en el sistema utilizando el software de Atmel.
AVRDUDE (AVR Downloader/UploaDEr) se ejecuta en Linux , FreeBSD , Windows y Mac OS X , y admite una variedad de hardware de programación en el sistema, incluidos Atmel AVRISP mkII, Atmel JTAG ICE, programadores Atmel más antiguos basados en puerto serial y varios programadores de terceros y "hágalo usted mismo". [17]
La interfaz de programación y depuración (PDI) es una interfaz patentada de Atmel para la programación externa y la depuración en chip de dispositivos XMEGA. La PDI admite la programación de alta velocidad de todos los espacios de memoria no volátil (NVM); flash, EEPROM, fusibles, bits de bloqueo y la fila de firma de usuario. Esto se realiza accediendo al controlador NVM de XMEGA a través de la interfaz PDI y ejecutando comandos del controlador NVM. La PDI es una interfaz de 2 pines que utiliza el pin de reinicio para la entrada de reloj (PDI_CLK) y un pin de datos dedicado (PDI_DATA) para entrada y salida. [18]
La interfaz unificada de programación y depuración (UPDI) es una interfaz de un solo cable para la programación externa y la depuración en chip de los dispositivos ATtiny y ATmega más nuevos. El Atmel-ICE y el PICkit 4 son capaces de programar chips UPDI. También es posible utilizar un Arduino gracias a jtag2updi, [19] o un adaptador USB-UART estándar con los pines TX y RX en cortocircuito mediante una resistencia de 1 kΩ y la utilidad pymcuprog proporcionada por Microchip. [20]
La programación serial de alto voltaje (HVSP) [21] es principalmente el modo de respaldo en los AVR más pequeños. Un encapsulado AVR de 8 pines no deja muchas combinaciones de señales únicas para colocar el AVR en un modo de programación. Sin embargo, una señal de 12 voltios es algo que el AVR solo debería ver durante la programación y nunca durante el funcionamiento normal. El modo de alto voltaje también se puede utilizar en algunos dispositivos donde el pin de reinicio se ha desactivado mediante fusibles.
La programación paralela de alto voltaje (HVPP) se considera el "último recurso" y puede ser la única forma de corregir configuraciones de fusibles incorrectas en un chip AVR.
La mayoría de los modelos AVR pueden reservar una región de cargador de arranque , de 256 bytes a 4 KB, donde puede residir el código de reprogramación. Al reiniciar, el cargador de arranque se ejecuta primero y realiza una determinación programada por el usuario sobre si se debe reprogramar o saltar a la aplicación principal. El código se puede reprogramar a través de cualquier interfaz disponible, o puede leer un binario cifrado a través de un adaptador Ethernet como PXE . Atmel tiene notas de aplicación y código pertenecientes a muchas interfaces de bus. [22] [23] [24] [25]
La serie AT90SC de AVR está disponible con una máscara-ROM de fábrica en lugar de flash para la memoria del programa. [26] Debido al alto costo inicial y la cantidad mínima de pedido, una máscara-ROM solo es rentable para tiradas de alta producción.
aWire es una nueva interfaz de depuración de un solo cable disponible en los nuevos dispositivos UC3L AVR32.
El AVR ofrece varias opciones de depuración, la mayoría de las cuales implican la depuración en el chip mientras éste se encuentra en el sistema de destino.
debugWIRE es la solución de Atmel para proporcionar capacidades de depuración en chip a través de un solo pin del microcontrolador. Es particularmente útil para componentes con un menor número de pines que no pueden proporcionar los cuatro pines "de repuesto" necesarios para JTAG. JTAGICE mkII, mkIII y AVR Dragon admiten debugWIRE. debugWIRE se desarrolló después del lanzamiento original de JTAGICE y ahora los clones lo admiten.
La función Joint Test Action Group ( JTAG ) proporciona acceso a la funcionalidad de depuración en el chip mientras el chip se ejecuta en el sistema de destino. [27] JTAG permite acceder a la memoria interna y los registros, establecer puntos de interrupción en el código y ejecutar pasos únicos para observar el comportamiento del sistema.
Atmel proporciona una serie de adaptadores JTAG para el AVR:
JTAG también se puede utilizar para realizar una prueba de escaneo de límites , [34] que prueba las conexiones eléctricas entre los AVR y otros chips con capacidad de escaneo de límites en un sistema. El escaneo de límites es adecuado para una línea de producción, mientras que el aficionado probablemente esté mejor probando con un multímetro o un osciloscopio.
Las herramientas de desarrollo y los kits de evaluación oficiales de Atmel AVR contienen una serie de kits de inicio y herramientas de depuración compatibles con la mayoría de los dispositivos AVR:
El kit de inicio y sistema de desarrollo STK600 es una actualización del STK500. [35] El STK600 utiliza una placa base, una placa de enrutamiento de señales y una placa de destino.
La placa base es similar a la STK500, ya que proporciona una fuente de alimentación, reloj, programación en el sistema, un puerto RS-232 y un puerto CAN (Controller Area Network, un estándar automotriz) a través de conectores DE9 y pines de estaca para todas las señales GPIO del dispositivo de destino.
Las placas de destino tienen zócalos ZIF para paquetes DIP , SOIC , QFN o QFP , según la placa.
La placa de enrutamiento de señales se ubica entre la placa base y la placa de destino, y envía las señales al pin correspondiente en la placa del dispositivo. Hay muchas placas de enrutamiento de señales diferentes que se pueden usar con una sola placa de destino, según el dispositivo que se encuentre en el zócalo ZIF.
El STK600 permite la programación en el sistema desde la PC a través de USB, dejando el puerto RS-232 disponible para el microcontrolador de destino. Un conector de 4 pines en el STK600 etiquetado como "RS-232 spare" puede conectar cualquier puerto USART de nivel TTL en el chip a un chip MAX232 integrado para traducir las señales a niveles RS-232. Las señales RS-232 se conectan a los pines RX, TX, CTS y RTS en el conector DB-9.
El kit de inicio y sistema de desarrollo STK500 incluye programación de alto voltaje (HVP) e ISP para todos los dispositivos AVR, ya sea directamente o a través de placas de extensión. La placa está equipada con conectores DIP para todos los AVR disponibles en encapsulados DIP.
Módulos de expansión STK500: Hay varios módulos de expansión disponibles para la placa STK500:
El kit de inicio y sistema de desarrollo STK200 tiene un zócalo DIP que puede alojar un chip AVR en un encapsulado de 40, 20 u 8 pines. La placa tiene una fuente de reloj de 4 MHz, 8 diodos emisores de luz (LED), 8 botones de entrada, un puerto RS-232 , un zócalo para una SRAM de 32 KB y numerosas E/S generales. El chip se puede programar con un dispositivo conectado al puerto paralelo.
El ICE de Atmel es la herramienta económica que actualmente se admite para programar y depurar todos los dispositivos AVR (a diferencia de los AVRISP/AVRISP mkII, Dragon, etc., que se analizan a continuación). Se conecta a una PC y recibe alimentación de esta a través de USB, y admite interfaces JTAG , PDI , aWire , debugWIRE , SPI , SWD , TPI y UPDI (la interfaz unificada de programación y depuración de Microchip).
El ICE puede programar y depurar todos los AVR a través de la interfaz JTAG y programar con interfaces adicionales según lo admita cada dispositivo:
Se admiten rangos de voltaje operativo objetivo de 1,62 V a 5,5 V, así como los siguientes rangos de reloj:
El ICE es compatible con el IDE de Microchip Studio, así como con una interfaz de línea de comandos (atprogram).
El Atmel-ICE admite una implementación limitada de la interfaz de puerta de enlace de datos (DGI) cuando no se utilizan las funciones de depuración y programación. La interfaz de puerta de enlace de datos es una interfaz para transmitir datos desde un dispositivo de destino a la computadora conectada. Está pensada como un complemento útil de la unidad para permitir la demostración de las funciones de la aplicación y como ayuda en la depuración a nivel de aplicación.
AVRISP y AVRISP mkII son herramientas económicas que permiten programar todos los AVR a través de ICSP .
El AVRISP se conecta a una PC a través de un puerto serial y obtiene energía del sistema de destino. El AVRISP permite utilizar cualquiera de las configuraciones de pines ICSP "estándar", ya sea el conector de 10 pines o el de 6 pines.
El AVRISP mkII se conecta a una PC a través de USB y obtiene energía de este puerto. Los LED visibles a través de la carcasa translúcida indican el estado de la energía del objetivo.
Como el AVRISP mkII carece de circuitos integrados de controlador/búfer, [36] puede tener problemas para programar placas de destino con múltiples cargas en sus líneas SPI. En tales casos, se requiere un programador capaz de generar mayor corriente. Alternativamente, el AVRISP mkII aún se puede usar si se pueden colocar resistencias limitadoras de carga de bajo valor (~150 ohmios) en las líneas SPI antes de cada dispositivo periférico.
Tanto el AVRISP como el AVRISP mkII ya no se fabrican y las páginas de productos se han eliminado del sitio web de Microchip. A julio de 2019, el AVRISP mkII todavía está disponible en varios distribuidores. También hay varios clones de terceros disponibles.
El Atmel Dragon es una herramienta económica que se conecta a una PC a través de USB. El Dragon puede programar todos los AVR a través de JTAG, HVP, PDI, [37] o ICSP. El Dragon también permite la depuración de todos los AVR a través de JTAG, PDI o debugWire; una limitación anterior para dispositivos con 32 KB o menos de memoria de programa se ha eliminado en AVR Studio 4.18. [38] El Dragon tiene un área pequeña para prototipos que puede acomodar un AVR de 8, 28 o 40 pines, incluidas las conexiones a los pines de alimentación y programación. No hay área para ningún circuito adicional, aunque esto puede proporcionarse mediante un producto de terceros llamado "Dragon Rider". [39]
La herramienta de depuración JTAG In Circuit Emulator (JTAGICE) admite la depuración en chip (OCD) de AVR con una interfaz JTAG. El JTAGICE original (al que a veces se hace referencia retroactivamente como JTAGICE mkI) utiliza una interfaz RS-232 para PC y solo puede programar AVR con una interfaz JTAG. El JTAGICE mkI ya no se fabrica, pero ha sido reemplazado por el JTAGICE mkII.
La herramienta de depuración JTAGICE mkII admite la depuración en chip (OCD) de AVR con interfaces SPI, JTAG, PDI y debugWIRE. La interfaz debugWire permite la depuración utilizando solo un pin (el pin de reinicio), lo que permite la depuración de aplicaciones que se ejecutan en microcontroladores con un número bajo de pines.
El JTAGICE mkII se conecta mediante USB, pero existe una conexión alternativa a través de un puerto serial, que requiere el uso de una fuente de alimentación independiente. Además de JTAG, el mkII admite la programación ISP (mediante adaptadores de 6 o 10 pines). Tanto los enlaces USB como seriales utilizan una variante del protocolo STK500.
El JTAGICE3 actualiza el mkII con capacidades de depuración más avanzadas y una programación más rápida. Se conecta a través de USB y es compatible con las interfaces JTAG, aWire, SPI y PDI. [40] El kit incluye varios adaptadores para usar con la mayoría de los pines de interfaz.
AVR ONE! es una herramienta de desarrollo profesional para todos los dispositivos AVR de 8 y 32 bits de Atmel con capacidad de depuración en chip. Admite modos de programación SPI, JTAG, PDI y aWire y depuración mediante interfaces debugWIRE, JTAG, PDI y aWire. [41]
La popular placa de demostración AVR Butterfly es una computadora autónoma alimentada por batería que ejecuta el microcontrolador Atmel AVR ATmega169V. Fue construida para mostrar la familia AVR, especialmente una nueva interfaz LCD incorporada. La placa incluye la pantalla LCD, joystick, altavoz, puerto serie, reloj de tiempo real (RTC), chip de memoria flash y sensores de temperatura y voltaje. Las versiones anteriores de AVR Butterfly también contenían una fotorresistencia CdS ; no está presente en las placas Butterfly producidas después de junio de 2006 para permitir el cumplimiento de RoHS . [42] La pequeña placa tiene un alfiler de camisa en su parte posterior para que pueda usarse como placa de identificación.
El AVR Butterfly viene con software precargado para demostrar las capacidades del microcontrolador. El firmware de fábrica puede mostrar su nombre, las lecturas del sensor y la hora. El AVR Butterfly también tiene un transductor piezoeléctrico que se puede utilizar para reproducir sonidos y música.
El AVR Butterfly demuestra el funcionamiento de una pantalla LCD mediante una pantalla de 14 segmentos y seis caracteres alfanuméricos. Sin embargo, la interfaz LCD consume muchos de los pines de E/S.
La CPU ATmega169 de Butterfly es capaz de alcanzar velocidades de hasta 8 MHz, pero está configurada de fábrica por software a 2 MHz para preservar la vida útil de la batería del botón. Un programa de cargador de arranque preinstalado permite reprogramar la placa a través de un conector serial RS-232 estándar con nuevos programas que los usuarios pueden escribir con las herramientas IDE gratuitas de Atmel.
Esta pequeña placa, de aproximadamente la mitad del tamaño de una tarjeta de visita, tiene un precio ligeramente superior al de una AVR Butterfly. Incluye un AT90USB1287 con soporte USB On-The-Go (OTG), 16 MB de DataFlash , LED, un pequeño joystick y un sensor de temperatura. La placa incluye software que le permite actuar como un dispositivo de almacenamiento masivo USB (su documentación se envía en el DataFlash), un joystick USB y más. Para admitir la capacidad de host USB, debe funcionar con una batería, pero cuando se ejecuta como un periférico USB, solo necesita la energía proporcionada a través de USB.
Solo el puerto JTAG utiliza una distribución de pines convencional de 2,54 mm. Todos los demás puertos de E/S AVR requieren conectores más compactos de 1,27 mm.
El AVR Dragon puede programar y depurar, ya que la limitación de 32 KB se eliminó en AVR Studio 4.18, y el JTAGICE mkII puede programar y depurar el procesador. El procesador también se puede programar a través de USB desde un host Windows o Linux, utilizando los protocolos USB de "Actualización de firmware del dispositivo". Atmel envía programas de ejemplo propietarios (código fuente incluido pero distribución restringida) y una pila de protocolos USB con el dispositivo.
LUFA [43] es una pila de protocolos USB de software libre de terceros ( licencia MIT ) para USBKey y otros AVR USB de 8 bits.
El kit RAVEN admite el desarrollo inalámbrico utilizando chipsets IEEE 802.15.4 de Atmel, para Zigbee y otras pilas inalámbricas. Se parece a un par de tarjetas Butterfly inalámbricas más potentes, más una llave USB inalámbrica; y cuesta aproximadamente lo mismo (menos de 100 dólares estadounidenses). Todas estas placas admiten el desarrollo basado en JTAG.
El kit incluye dos placas AVR Raven, cada una con un transceptor de 2,4 GHz compatible con IEEE 802.15.4 (y una pila Zigbee con licencia libre). Las radios se controlan con procesadores ATmega1284p, que están respaldados por una pantalla LCD segmentada personalizada controlada por un procesador ATmega3290p. Los periféricos Raven se parecen a los Butterfly: altavoz piezoeléctrico, DataFlash (más grande), EEPROM externa, sensores, cristal de 32 kHz para RTC , etc. Estos están pensados para su uso en el desarrollo de nodos de sensores remotos, para controlar relés o lo que sea necesario.
La memoria USB utiliza un AT90USB1287 para las conexiones a un host USB y a los enlaces inalámbricos de 2,4 GHz. Estos están pensados para supervisar y controlar los nodos remotos, y dependen de la energía del host en lugar de las baterías locales.
Existe una amplia variedad de herramientas de programación y depuración de terceros disponibles para el AVR. Estos dispositivos utilizan varias interfaces, entre ellas RS-232, puerto paralelo de PC y USB. [44]
Los AVR se han utilizado en diversas aplicaciones automotrices, como sistemas de seguridad, protección, tren motriz y entretenimiento. Atmel ha lanzado recientemente una nueva publicación, "Atmel Automotive Compilation", para ayudar a los desarrolladores con aplicaciones automotrices. Algunos usos actuales se encuentran en BMW, Daimler-Chrysler y TRW.
La plataforma de computación física Arduino se basa en un microcontrolador ATmega328 (ATmega168 o ATmega8 en versiones de placa anteriores a la Diecimila). El ATmega1280 y el ATmega2560, con más capacidad de pinout y memoria, también se han empleado para desarrollar la plataforma Arduino Mega . Las placas Arduino se pueden utilizar con su lenguaje e IDE , o con entornos de programación más convencionales ( C , ensamblador , etc.) como plataformas AVR estandarizadas y ampliamente disponibles.
Los AVR basados en USB se han utilizado en los controladores portátiles de Microsoft Xbox. El vínculo entre los controladores y la Xbox es USB.
Numerosas empresas producen placas de microcontroladores basadas en AVR destinadas a ser utilizadas por aficionados, constructores de robots, experimentadores y desarrolladores de pequeños sistemas, entre las que se incluyen: Cubloc, [45] gnusb, [46] BasicX , [47] Oak Micros, [48] ZX Microcontrollers, [49] y myAVR. [50] También existe una gran comunidad de placas compatibles con Arduino que apoyan a usuarios similares.
Schneider Electric solía producir el chip de control de movimiento y motor M3000, que incorporaba un núcleo AVR Atmel y un controlador de movimiento avanzado para su uso en una variedad de aplicaciones de movimiento, pero este producto se ha descontinuado. [51]
Con la creciente popularidad de los FPGA entre la comunidad de código abierto, la gente ha comenzado a desarrollar procesadores de código abierto compatibles con el conjunto de instrucciones AVR. El sitio web OpenCores enumera los siguientes proyectos principales de clones de AVR:
Además de los chips fabricados por Atmel, hay clones disponibles de LogicGreen Technologies. [57] Estas piezas no son clones exactos: tienen algunas características que no se encuentran en los chips de los que son "clones" y velocidades de reloj máximas más altas, pero usan SWD ( Serial Wire Debug , una variante de JTAG de ARM ) en lugar de ISP para la programación, por lo que se deben usar diferentes herramientas de programación.
Los microcontroladores que utilizan la arquitectura ATmega están siendo fabricados por NIIET en Voronezh , Rusia, como parte de la serie 1887 de circuitos integrados. Esto incluye un ATmega128 bajo la designación 1887VE7T ( en ruso : 1887ВЕ7Т ). [58]
La línea de reinicio tiene una resistencia pull-up interna, pero si el entorno es ruidoso puede ser insuficiente y, por lo tanto, el reinicio puede ocurrir esporádicamente.