/ATtiny11_programmer_AVR_8_bit

project of a programmer for the ATtiny 11 microcontroller

Primary LanguageC++

ATtiny11_programmer_AVR_8_bit

Este proyecto es básicamente un programador para el microcontrolador ATtiny11, basado en la arquitectura AVR RISC de 8bits. El cual cuenta con una interfaz grafica para acceder al archivo .hex a grabar y un código que se puede quemar en cualquier Arduino UNO (o similar) para usarlo como programador con una pequeña electrónica para su correcto funcionamiento. Además, incluye un par de códigos de ejemplo que desarrolle para este microcontrolador, el cual al no contar con memoria dinámica debe obligatoriamente ser escritos en ASSEMBLER (AVR 8bits).

Uso del programador

La interfaz gráfica Programador_ATtiny11.exe permite seleccionar el puerto COM a utilizar, verifica la correcta comunicación con el Arduino que se este usando, el cual previamente tiene que haber sigo quemado con el proyecto ATtiny11_programmer.ino, sumado a una sencilla electrónica debido a la lógica de tensión que exige este microcontrolador para acceder al grabado de la memoria flash.

Alt text

Alt text

¿Por qué hice un programador para el ATtiny11?

Una de las primeras cosas que se encuentra en la documentación oficial de este microcontrolador es una advertencia “no se recomienda para nuevos diseños”, esto ya nos da un indicio de por donde viene la cosa… Este micro, además de estar actualmente discontinuado ya hace tiempo que no se consiguen programadores para esta familia. El ultimo programador que desarrollo la comunidad corría en Windows 3.1 :’) En una primera instancia pensé en correr una maquina virtual con Windows XP en modo compatibilidad para probar el programador, pero previendo los problemas de compatibilidad con los puertos COM virtuales y lo aburrido de encontrar una solución sencilla pensé en desarrollarlo desde cero. Pero antes que nada ¿Por qué termine queriendo programar un ATtiny11? Bueno vamos con la historia resumida:

Año 2020, pandemia, aislamiento social y mucho tiempo libre. Decidí encarar un proyecto personal muy simple pero que requería de varios microcontroladores corriendo en simultaneo, debido al bajo presupuesto que pensaba destinarle empecé a ver opciones de cual era el microcontrolador más barato que podía conseguir para comprar y que cumpliera los requisitos mínimos. Encontré un comercio este microcontrolador que nunca había visto, leí rápidamente la documentación, vi el tamaño de memoria flash, el pin_out y fui a comprarlos. Debido al bajo precio compre las 14 unidades que tenían en stock, probablemente las ultimas unidades a las cuales pudiera acceder.

En ATMEL studio (versión previa a la compra por parte de MICROCHIP) quise iniciar un proyecto para este micro y me di cuenta que solo me dejaba crear un proyecto .asm. Extrañado volví a ver la documentación y ahí caí en cuenta de que no poseen memoria dinámica. Por lo cual querer correr lenguaje C en ellos no era factible. Lejos de desalentarme me puse a escribir el código en ASSEMBLER de AVR 8bits y asegurándome que entre en las 512 líneas disponibles debido al tamaño de la memoria e intentar comprimir suficiente el código para utilizar como variable los aproximados 14 registros libres de la ALU. también preste atención al detalle que la flash solo garantiza 1000 ciclos de grabados, por lo que tenia que debuggear muy bien el código para evitar quemar repetidamente la memoria. Aquí me tope con otra sorpresa, ATMEL studio no poseía simulación para estos micros. Por alguna razón se me ocurrió revisar la librería de microcontroladores de la versión de PROTEUS que tenia instalada en ese entonces y… tenía el ATtiny11 en su librería.

Termine el código, lo simule y todo en orden. Contaba con tres PWM de baja frecuencia generados por software, una comunicación asíncrona también por software basada en interrupciones del pin de entrada y poca cosa más (igualmente mucho para los pocos recursos que posee el micro en cuestión). Ya para esto eran las 03:00AM sin animo de ponerme a grabar los micros con el programador para ATMEL que poseía, decidí dejar esa tarea para el siguiente día pero no si antes googlear por curiosidad algún proyecto o instructivo para programar este modelo en específico. Me sorprendió que al llegar a la 5° página de resultados en Google no vi nada relacionado al ATtiny11. Solo encontré una página resubida de archivo (aproximadamente año 2003) en la cual alertaba a los programadores sobre las dificultades para grabar este micro ya que utiliza el protocolo de “alto voltaje” y redireccionaba a otra pagina aun mas antigua donde se veía el proyecto creado por un alemán si mal no recuerdo. El cual corría en Windows 3.1. Me fui a dormir.

El protocolo de programación serie “alto voltaje” es un recurso secundario con el que cuentan casi todos los micros de la familia AVR 8bits para acceder a la flash. En la mayoría de los casos solo se utiliza para regrabar los fusibles de estas arquitecturas ya que un error en la programación de estos inhabilita la programación mediante el método convencional de “bajo voltaje”. Pero en el caso del ATtiny11 no contaba con este último. Por lo cual decidí basarme en el proyecto http://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/ el cual estaba destinado principalmente a regrabar los valores por defecto del ATtiny85 o similar, pero utilizaban la electrónica y el protocolo de la programación serial de “alto voltaje”. Así que basado en las instrucciones de este protocolo y el formato de envío y recepción de mensajes ¡pude finalmente acceder a la memoria flash del micro!. La felicidad duro poco cuando me di cuenta que nunca me toco leer un archivo .hex o .bin así que buscando un poco finalmente encontré la documentación necesaria para corresponder cada dato de estos archivos al espacio de memoria correspondiente del microcontrolador.

Luego solo basto hacer una interfaz grafica bonita, acomodar un poco el código para el proyecto de Arduino con la idea de que cualquiera pueda tener su programador para el ATtiny11 si por alguna extraña razón lo necesitara.

Cualquier comentario, sugerencia, queja, insulto o consulta no dudes en escribirme santiagocian97@gmail.com