Pequeños Proyectos con Attiny45/Attiny85

En cuantas ocasiones hemos tenido la necesidad de construir un pequeño proyecto basado en microcontrolador donde solo necesitamos un par de pines y las plataformas en el mercado nos resultas muy costosas para el producto que traemos en mente, por lo que solemos quedarnos en espera de una mejor solución para ponernos en practica, económica al menos.

AVR

La idea en esta entrega es enseñarnos a programar los pequeños microcontroladores ATtiny45 o ATtiny85 cargados con un bootloader de Arduino, tomando como referencia el tutorial elaborado por un equipo del MIT (ver aqui en ingles), quienes han echo un estupendo trabajo adecuando el firmware para poder trabajar con el pequeño microcontrolador y permitiéndonos cubrir las pequeñas y simples necesidad con el menor costo económico posible.

Los AttinyXX

Los microcontroladores ATtiny45 y ATtiny85 son algunos de los chips mas económicos y fáciles de usar que podemos encontrar en el mercado, sin embargo, al ser mas pequeño sus características, en comparación con el ATmega328 (Arduino UNO), también son algo reducidas. Para el ejemplo que veremos, estaremos usando solo el ATtiny85, por ninguna razón en particular, en teoría los dos chips mencionados deberían funcionar del mismo modo, veamos algunas características:

  • Memoria Flash: 8Kb
  • Memoria RAM: 512 bytes
  • Memoria EPROM: 512 bytes
  • Pines I/O: 6
  • Frecuencia de operación (Max.): 8Mhz y hasta 20Mhz con cristal externo.
  • CPU: 8-bit AVR

Como vemos su capacidad es bastante menor que la de un Arduino común, pero creo que suficiente para los pequeños proyectos que podemos construir. La diferencia con el ATtiny45, es que este viene con la mitad en memorias que el ATtiny85 y el costo es muy parecido, 2USD aproximadamente, así que por eso creo que el ATtiny85 es una mejor opción, aunque para mejor referencia pueden consultar la hoja de datos aquí.

¿Como hacerlo?

Bien! antes de empezar a grabar código en nuestro micro necesitamos un programador (ISP), existen varios dispositivos en el mercado que podemos usar, pero como estoy seguro que la mayoría de los que pasan por este blog tienen al menos un Arduino, nos inclinaremos por esta opción.

Podemos convertir nuestro Arduino en un programador ISP para grabar otros microcontroladores muy fácilmente, esto sin duda es otra de las grandes ventajas de esta plataforma, solo necesitaremos la versión del IDE 1.0.1 o superior. Una ves instalado y corriendo, abrimos el sketch en ejemplos “ArduinoISP”, ¡ojo! para los que vayan a usar Arduino UNO es necesario hacer una pequeña modificación cerca de la linea 112, dentro de la función “heartbeat()” cambiamos delay(40) por delay(20), seleccionamos la placa y el puerto correspondiente desde el menú Herramientas y subimos el sketch, y así de sencillo es como tendríamos listo un programador ISP para seguir 🙂

ArdISP

Ya que tenemos listo nuestro Arduino toca el turno al pequeño ATtiny, para continuar necesitamos agregar a nuestro entorno de desarrollo el soporte para este tipo de micros, que gracias al trabajo que ha echo el MIT lo podemos encontrar disponible para descarga:

Descargar (Github)

Lo agregamos/instalamos únicamente descomprimiendo el archivo descargado y copiando la carpeta contenida “attiny” a la dirección donde tengamos instalado nuestro IDE, tendría que quedar algo como Documentos > Arduino > hardware > attiny, si tenemos abierto el IDE lo reiniciamos y en el listado de Tarjetas tendríamos que ver algunas adicionales a las que están por default.

Tarjetas

Con esto nuestro software estaría preparado para seguir, solo nos restaría la parte del hardware, donde ocuparemos la siguiente lista de componentes:

  • Arduino UNO o Duemilanove (cualquiera con ATmega328)
  • ATtiny85 por supuesto
  • Capacitor de 10 uF (Para evitar el reset del Arduino al terminar de grabar)
  • Led + Resistencia (Para la prueba)
  • Protoboard
  • Jumpers/Cables

Y tendríamos que conectar tal y como se muestra en el siguiente circuito:

ATtiny by ISP

De esta manera usaremos el Arduino a modo de programador ISP para cargar el sketch en nuestro pequeño micro, para hacer la prueba abrimos el ya clásico sketch de ejemplo “Blink” que viene con el software de Arduino y cambiaremos el valor del pin de 13 a 4, en el listado de tarjeta seleccionamos el microcontrolador a programar que en este caso es el ATtiny85 (internal 1 Mhz clock) y en la opción Herramientas > Programador seleccionamos la opción “Arduino as ISP” ya que es el que estamos usando, y por ultimo subimos el sketch…

Genial no?!, hay un par de cosas que tenemos que saber en relación al entorno, primero, al finalizar la carga del sketch aparecen en la consola de nuestro IDE los mensajes:

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85

Esto es totalmente normal y no tendríamos que preocuparnos por ello, y segundo, en el ejemplo hemos seleccionado como Tarjeta la opción de 1MHz para el ATtiny85, para poder usar el chip a 8MHz seleccionamos esta opción en la lista de tarjetas y ejecutamos Menu > Grabar secuencia de inicio (“Burn Bootloader” si esta en ingles), no precisamente nos grabara el bootloader pero configurara de manera interna el ATtiny para correr a 8MHz, en teoría solo tendríamos que hacerlo una ves para cada chip que estemos utilizando y después solo bastaría con cargar el sketch normalmente.

En la imagen siguiente vemos el Pin Out del microcontrolador, en nuestro ejemplo hemos utilizado el Pin 4 dentro del código que corresponde al pin físico numero 3 del chip, podríamos hacer una prueba rápida con cada uno para familiarizarnos con la posición física y su numero correspondiente por código.

ATtiny45-85

Según la información en el tutorial del MIT las siguientes funciones son soportadas para trabajarlas con los ATtiny, bastante bien creo yo, suficientes para buenas aplicaciones:

  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogRead()
  • analogWrite()
  • shiftOut()
  • pulseIn()
  • millis()
  • micros()
  • delay()
  • delayMicroseconds()
  • SoftwareSerial (has been updated in Arduino 1.0)

Plus: 

En el Vine se aprecia una placa casera en lugar de las conexiones en una Protoboard, es un prototipo que hicimos para no tener que conectar todo cada que necesitemos usar un ATtiny pero es prácticamente lo mismo y el diseño esta basado en el circuito de ejemplo, les dejo el Archivo para quien se anime a hacerla 🙂

Descargar