Programación Attiny2313. Programación Attiny2313 Cómo escribir un programa para attiny2313

Arquitectura AVR RISC:

RISC (Computadora con conjunto de instrucciones reducido). Esta arquitectura tiene un gran conjunto de instrucciones, la mayoría de las cuales se ejecutan en 1 ciclo de máquina. De ello se deduce que, en comparación con los microcontroladores anteriores basados ​​en la arquitectura CISC (por ejemplo, MCS51), los microcontroladores RISC son 12 veces más rápidos.

O si tomamos como base un cierto nivel de rendimiento, para cumplir esta condición, los microcontroladores basados ​​​​en RISC (Attiny2313) requieren 12 veces menos frecuencia de reloj del generador, lo que conduce a una reducción significativa en el consumo de energía. En este sentido, es posible diseñar varios dispositivos en el Attiny2313 utilizando la energía de la batería.

Dispositivo de Almacenamiento Operacional (RAM) y memoria no volátil de datos y programas:

  • 2 KB de memoria de programa Flash autoprogramable que puede proporcionar 10.000 repeticiones de escritura/borrado.
  • 128 bytes de memoria de datos grabable EEPROM que puede proporcionar 100.000 repeticiones de escritura/borrado.
  • Memoria SRAM de 128 Bytes (RAM de sólo lectura).
  • Es posible utilizar la función para proteger el código del programa y los datos EEPROM.

Propiedades periféricas:

  1. Microcontrolador Attiny2313 equipado con un contador temporizador de ocho bits con un preescalador instalado por separado con un coeficiente máximo de 256.
  2. También hay un contador temporizador de dieciséis bits con un preescalador, un circuito de captura y comparación separados. El temporizador-contador se puede sincronizar desde una fuente de señal externa o interna.
  3. Dos canales. Hay un modo de funcionamiento de modulación PWM rápida y PWM con corrección de fase.
  4. Comparador analógico interno.
  5. Temporizador de vigilancia (programable) con oscilador interno.
  6. Interfaz universal serie (USI).

Indicadores técnicos especiales de Attiny2313:


  • Inactivo- Modo inactivo. En este caso, sólo el procesador central deja de funcionar. El estado inactivo no afecta el funcionamiento del SPI, el comparador analógico, el convertidor A/D, el contador temporizador, el mecanismo de vigilancia o el sistema de interrupción. De hecho, lo único que sucede es que se detiene la sincronización del núcleo de la CPU y la memoria flash. El microcontrolador Attiny2313 vuelve al funcionamiento normal desde el modo inactivo mediante una interrupción externa o interna.
  • Corriente cortada— El modo más económico, en el que el microcontrolador Attiny2313 está realmente desconectado del consumo de energía. En este estado, el generador de reloj se detiene y todos los periféricos se apagan. Sólo el módulo de procesamiento de interrupciones de una fuente externa permanece activo. Cuando se detecta una interrupción, el microcontrolador Attiny2313 sale del apagado y vuelve al funcionamiento normal.
  • Apoyar– el microcontrolador cambia a este modo de espera de consumo de energía mediante el comando SLEE. Esto es similar a apagarse, la única diferencia es que el reloj continúa funcionando.

Puertos de entrada-salida del microcontrolador Attiny2313:

El microcontrolador está equipado con 18 pines de E/S, que pueden programarse en función de las necesidades que surjan al diseñar un dispositivo específico. Los buffers de salida de estos puertos pueden soportar una carga relativamente alta.

  • Puerto A (PA2 - PA0) – 3 bits. Puerto de E/S bidireccional con resistencias pull-up programables.
  • Puerto B (PB7 - PB0) – 8 bits. Puerto de E/S bidireccional con resistencias pull-up programables.
  • Puerto D (PD6 - PD0) – 7 bits. Puerto de E/S bidireccional con resistencias pull-up programables.

Rango de tensión de alimentación:

El microcontrolador funciona correctamente con una tensión de alimentación de 1,8 a 5,5 voltios. El consumo actual depende del modo de funcionamiento del controlador:

Modo activo:

  • 20 µA a una frecuencia de reloj de 32 kHz y una tensión de alimentación de 1,8 voltios.
  • 300 µA a una frecuencia de reloj de 1 MHz y una tensión de alimentación de 1,8 voltios.

Modo de ahorro de energía:

  • 0,5 µA a una tensión de alimentación de 1,8 voltios.

(3,6 Mb, descargado: 5.958)

Microcontrolador AVR de 8 bits con 2 KB de memoria Flash programable por el sistema

Características:

  • Arquitectura AVR RISC
  • AVR: arquitectura RISC de alta calidad y bajo consumo
    120 instrucciones, la mayoría de las cuales se ejecutan en un ciclo de reloj.
    32 registros de trabajo de propósito general de 8 bits
    Arquitectura completamente estática
  • RAM y memoria no volátil de programas y datos
    2 KB de memoria de programa Flash autoprogramable capaz de soportar 10.000 ciclos de escritura/borrado
    Memoria de datos EEPROM programable por el sistema de 128 bytes capaz de soportar 100.000 ciclos de escritura/borrado
    128 Bytes de memoria SRAM incorporada (RAM estática)
    Protección programable contra lectura de memoria de programa Flash y memoria de datos EEPROM
  • Características periféricas
    Un temporizador/contador de 8 bits con preescalador independiente
    Un temporizador/contador de 16 bits con preescalador independiente, circuito de comparación, circuito de captura y dos canales PWM
    Comparador analógico incorporado
    Temporizador de vigilancia programable con oscilador incorporado
    USI - Interfaz serie universal
    UART dúplex completo
  • Características especiales del microcontrolador
    Depurador debugWIRE incorporado
    Programación en el sistema a través del puerto SPI
    Fuentes de interrupción externas e internas
    Modos de bajo consumo inactivo, apagado y en espera
    Circuito de reinicio de encendido mejorado
    Circuito de detección de fallas de energía programable
    Generador calibrado incorporado
  • Puertos de E/S y diseño de carcasa
    18 líneas de E/S programables
    Paquetes PDIP de 20 pines, SOIC de 20 pines y MLF de 32 pines
  • Rango de tensión de alimentación
    de 1,8 a 5,5 V
  • Frecuencia de operación
    0 - 16MHz
  • Consumo
    Modo activo:
    300 µA a 1 MHz y tensión de alimentación de 1,8 V
    20 µA a 32 kHz y tensión de alimentación de 1,8 V
    Modo de bajo consumo
    0,5 µA a una tensión de alimentación de 1,8 V

Diagrama de bloques ATtiny2313:


Descripción general:

ATtiny2313 es un microcontrolador CMOS de 8 bits de bajo consumo con arquitectura AVR RISC. Al ejecutar instrucciones en un solo ciclo, el ATtiny2313 logra un rendimiento de 1 MIPS a una velocidad de reloj de 1 MHz, lo que permite al diseñador optimizar la relación potencia-rendimiento.

El núcleo AVR integra un rico conjunto de instrucciones y 32 registros de trabajo de propósito general. Los 32 registros están conectados directamente a la Unidad Lógica Aritmética (ALU), lo que permite el acceso a dos registros independientes mientras se ejecuta una sola instrucción. Como resultado, esta arquitectura permite un rendimiento decenas de veces mayor que la arquitectura CISC estándar.

ATtiny2313 tiene las siguientes características: memoria de programa programable Flash de 2 KB, memoria de datos EEPROM de 128 bytes, SRAM (RAM estática) de 128 bytes, 18 líneas de E/S de uso general, 32 registros de trabajo de uso general, interfaz de un cable para el incorporado depurador, dos temporizadores/contadores flexibles con circuitos de comparación, fuentes de interrupción internas y externas, USART serial programable, interfaz serial universal con detector de condición de inicio, temporizador guardián programable con oscilador incorporado y tres modos de bajo consumo inicializados por software. En el modo inactivo, el núcleo se detiene, pero la RAM, los temporizadores/contadores y el sistema de interrupción continúan funcionando. En el modo de apagado, los registros conservan sus valores, pero el generador se detiene, desactivando todas las funciones del dispositivo hasta la siguiente interrupción o reinicio del hardware. En modo de espera, el oscilador maestro se ejecuta mientras el resto del dispositivo está inactivo. Esto permite que el microprocesador se inicie muy rápidamente mientras mantiene la energía cuando está inactivo.

El dispositivo está fabricado utilizando tecnología de memoria no volátil de alta densidad de Atmel. El ISP Flash incorporado le permite reprogramar la memoria del programa en el sistema a través de una interfaz SPI en serie o con un programador de memoria no volátil convencional. Al combinar un núcleo RISC de 8 bits con memoria Flash autoprogramable en un solo chip, el ATtiny2313 es un potente microcontrolador que proporciona mayor flexibilidad al diseñador de sistemas de microprocesadores.

El microcontrolador ATTiny2313 es un renacimiento de una nueva serie del antiguo microcontrolador AT90S2313, que tuvo bastante éxito en su época. ATTiny2313 es una versión mejorada de su antecesor. Pero también heredó una periferia bastante modesta. Entonces, en términos de funcionalidad, ATTiny2313 es modesto. El microcontrolador está disponible en dos versiones: normal (ATTiny2313) y con potencia reducida (ATTiny2313 V). Por nutrición reducida tienes que pagar con una degradación. frecuencia de reloj microcontrolador (funcionamiento más lento).

Características generales:

  • 120 instrucciones optimizadas para programación en lenguajes de alto nivel;
  • 32 registros de propósito general (me encanta esto);
  • casi todas las instrucciones se ejecutan en 1 ciclo de reloj del generador, por lo que el rendimiento alcanza 20 MIPS (20 millones de operaciones por segundo);
  • 2 kilobytes de memoria flash para programas. La memoria flash se puede programar directamente desde el propio controlador;
  • EEPROM de 128 bytes (memoria no volátil);
  • 128 bytes SRAM (memoria de acceso aleatorio).

¿Qué tenemos a bordo de este chip periférico?

  • un temporizador/contador de 8 bits;
  • un temporizador/contador de 16 bits;
  • cuatro canales PWM;
  • comparador analógico;
  • Temporizador de vigilancia;
  • Interfaz serie universal USI;
  • USART (esta es una computadora COM RS232).

Regalos especiales:

Frecuencia de poder:

1,8 – 5,5 V (para ATTiny2313V) hasta 10 MHz
2,7 – 5,5 V (para ATTiny2313) hasta 20 MHz
En modo de funcionamiento consume 230 µA con una alimentación de 1,8 V y una frecuencia de oscilador maestro de 1 MHz. En modo de ahorro de energía, el apagado consume menos de 1 µA a 1,8 V

Programación

ATTiny2313 logró sobrevivir a otra revisión y adquirió una carta A al final. Entre las novedades cabe destacar:
— Aparecieron interrupciones externas en todas las piernas.
— Se ha eliminado la separación entre suministro eléctrico normal y de baja tensión. ATTiny2313A se puede alimentar de 1,8 a 5,5 V, mientras que solo es necesario cumplir con restricciones de frecuencia de 4 MHz (para 1,8 V) a 20 MHz.
— El consumo de corriente se ha reducido significativamente, tanto en modo normal como en modo de ahorro de energía: 190 µA y 0,1 µA, respectivamente.
Además, como resultado de la última revisión, ATTiny2313 adquirió un hermano mayor ATTiny4313 (sin la letra A). El hermano mayor es similar al ATTiny2313A, con la excepción del doble de memoria (4 kB Flash, 256 bytes EEPROM, 256 bytes SRAM). Estos cambios muestran las intenciones de Atmel de seguir dando soporte a este microcontrolador.

Debido a la escasa disponibilidad y al precio incomprensible de las nuevas versiones de ATTiny2313A y ATTiny4313, mis dispositivos se desarrollarán en la versión anterior de ATTiny2313. Pero dado que las nuevas versiones son compatibles con las antiguas, en teoría, el firmware debería funcionar en microcontroladores nuevos.

Conclusiones:

Como todo microcontroladores AVR La serie ATTiny2313 es productiva y económica. Tiene una carcasa SOIC que es conveniente para diseñar placas y soldar. Las distancias entre las piernas son relativamente grandes (incluso puedes lograr poner un rastro en el tablero entre las piernas adyacentes). Fácil de aprender. Hay mucha literatura en ruso. Debido a la gran popularidad de su predecesor AT90S2313, se han desarrollado en la red muchos circuitos interesantes para su repetición. Ampliamente disponible comercialmente. Barato. Para empezar a estudiar microcontroladores, este es el lugar indicado. Entre las deficiencias, cabe destacar los periféricos bastante modestos en la actualidad. Y como desventaja, el caso SOIC es un poco grande (aunque ya estoy siendo quisquilloso). Pequeñas cantidades de memoria no le permitirán crear proyectos a gran escala en ATTiny2313. En general, un buen controlador de alto rendimiento para proyectos pequeños que no requieren periféricos especiales. Planeo usarlo ampliamente en mis dispositivos debido a su mejor disponibilidad y bajo costo.

Hoy intentaremos utilizar un microcontrolador más simple. ATtiny2313 y conectarle una pantalla LCD de caracteres que contiene dos líneas de 16 caracteres.

Conectaremos la pantalla. de forma estándar Modo de 4 bits.

Primero, comencemos, por supuesto, con el microcontrolador, ya que ya estamos muy familiarizados con la pantalla en lecciones anteriores.

Abramos la hoja de datos del controlador. ATtiny2313 y veamos su pinout

Vemos que este controlador existe en dos tipos de carcasas, pero como lo compré en un paquete DIP, consideraremos esta versión particular de la carcasa y, en principio, no difieren mucho, excepto en apariencia, entonces, ¿cómo es el número? de patas es el mismo: 20 cada una.

Dado que hay 20 patas en comparación con las 28 patas del controlador ATMega8, en el que hemos estado trabajando todo el tiempo y continuaremos trabajando, entonces, en consecuencia, también habrá menos posibilidades.

En principio aquí está todo lo que tenía el ATmega8, lo único es que hay menos garras de puerto. Pero como la tarea que tenemos ante nosotros es intentar conectarlo a través del bus SPI con otro controlador, esto no nos deprime mucho.

Hay algunas otras diferencias, pero son menores y las conoceremos según sea necesario.

Armemos un circuito como este (haga clic en la imagen para ampliarla)

La pantalla está conectada a los pines del puerto D. PD1 y PD2 están a las entradas de control, y el resto están conectados a los pines del módulo de pantalla D4-D7.

Creemos un proyecto con el nombre TINY2313_LCD, transfiramos todo a él excepto el módulo principal del proyecto para conectar la pantalla a Atmega8.

Por supuesto, será necesario rehacer algunas cosas. Para hacer esto, debe estudiar cuidadosamente qué pierna está conectada a qué. El bus E de la pantalla está conectado a PD2 y el bus RS está conectado a PD1, así que hagamos cambios en el archivo. lcd.h

#definire1PORTADO|=0b0000 01 00 // establece la línea E en 1

#definire0PORTADO&=0b1111 10 11 // establece la línea E en 0

#definirrs1PORTADO|=0b00000 01 0 // establece la línea RS en 1 (datos)

#definirrs0PORTADO&=0b11111 10 1 // establece la línea RS en 0 (comando)

Como podemos ver en la fuente en negrita, no hemos tenido cambios tan drásticos.

Ahora entradas de información. Aquí usamos las patas PD3-PD6, es decir, están desplazadas 1 punto en comparación con la conexión a Atmega8, por lo que también corregiremos algo en el archivo. lcd.c en función enviar medio byte

PORTADO&=0b 1 0000 111; // borra información en las entradas DB4-DB7, deja el resto en paz

Pero eso no es todo. Anteriormente cambiamos los datos transmitidos en 4, pero ahora, debido a los cambios anteriores, solo tendremos que cambiarlos en 3. Por lo tanto, en la misma función también corregiremos la primera línea.

C<<=3 ;

Esos son todos los cambios. De acuerdo, ¡no son tan buenos! Esto se logra por el hecho de que siempre intentamos escribir código universal y utilizar sustituciones de macros. Si no hubiéramos dedicado tiempo a esto de una vez, habríamos tenido que corregir el código en casi todas las funciones de nuestra biblioteca.

En el módulo principal, no tocamos la inicialización del puerto D; dejamos que todo el módulo entre en el estado de salida, como en la lección 12.

Intentemos armar el proyecto y primero veamos el resultado en Proteus, ya que también hice un proyecto para él, que también estará en el archivo adjunto con el proyecto para Atmel Studio.

¡Todo funciona muy bien para nosotros! Así es como puedes rehacer rápidamente un proyecto para un controlador para otro.

Proteus es muy bueno, pero siempre es mejor mirar los detalles reales. Todo el circuito se ensambló en una placa de pruebas, ya que no hice ni ensamblé una placa de depuración para este controlador. Conectaremos el programador mediante un conector estándar como este

Aquí está el diagrama completo.

Aquí todo es estándar. Resistencia pull-up para RESET, etc.

Ahora, antes de flashear el controlador en avrdude, debemos seleccionar el controlador y leer su memoria flash.

Luego vaya a la pestaña FUSIBLES y configure los fusibles correctamente. Como no tenemos resonador de cuarzo, instalamos los fusibles de esta manera.


Arriba