Programando ATtinys para miniaturizar nuestros proyectos electrónicos

Publicado el 11 agosto 2017 por Gaspar Fernández Moreno @gaspar_fm


Un Arduino, ¡es muy grande! Es una placa que luego no sabes dónde meter, un circuito integrado que ocupa mucho y en algunas ocasiones no usamos la miad de las entradas y salidas. Así que, para pequeños montajes que requieran algo de lógica de programación o comunicación que debamos meter en una pequeña placa sin complicarnos mucho la vida, y hemos trabajado antes con la plataforma Arduino. Un buen siguiente paso es comprar un pequeño ATtiny, un circuito integrado que cuesta alrededor de 2€. Ya que tiramos de ATtiny, vamos a dedicarnos al ATtiny84 y ATtiny85 que son los más grandes de la gama.


Este circuito cuenta con:

  • 8 patillas
  • Funciona desde 1.8V a 5V
  • 300uA a 1MHz y 1.8V
  • Frecuencia de operación de 20MHz como máximo si utilizamos un oscilador externo. Aunque puede funcionar entre 1MHz y 8MHz con el propio oscilador interno. Ideal para operaciones de bajo consumo.
  • 8KB de memoria Flash para nuestros programas.
  • 512bytes de EEPROM para almacenar constantes o valores de forma permanente. EEPROM es una memoria de escritura limitada, así que no es conveniente para almacenar datos que vayan cambiando mucho.
  • 0.5Kb de SRAM. Como memoria temporal para nuestros programas.
  • 6 canales GPIO, para interactuar con el exterior.
  • 4 de ellos soportan entrada analógica a través de un conversor analógico-digital de 10bit.
  • 5 de ellos soportan PWM

Y muchas más cosas que iremos descubriendo y experimentando.


Este circuito cuenta con:

  • 14 patillas
  • Funciona desde 1.8V a 5V
  • 300uA a 1MHz y 1.8V
  • Frecuencia de operación de 20MHz como máximo si utilizamos un oscilador externo. Aunque puede funcionar entre 1MHz y 8MHz con el propio oscilador interno. Ideal para operaciones de bajo consumo.
  • 8KB de memoria Flash para nuestros programas.
  • 512bytes de EEPROM para almacenar constantes o valores de forma permanente. EEPROM es una memoria de escritura limitada, así que no es conveniente para almacenar datos que vayan cambiando mucho.
  • 0.5Kb de SRAM. Como memoria temporal para nuestros programas.
  • 12 canales GPIO, para interactuar con el exterior.
  • 8 de ellos soportan entrada analógica a través de un conversor analógico-digital de 10bit.
  • 4 de ellos soportan PWM

Configurando el entorno Arduino

El método más sencillo para hacer la programación es con el entorno Arduino, que a estas alturas de 2017 va por la versión 1.8.3 y tiene muchas cosas más que cuando empecé. Así que vamos a configurar nuestro entorno para que soporte los chips ATtiny. Para ello vamos a Archivo / Preferencias y en la línea Gestor de URLs adicionales de tarjetas pegamos la siguiente dirección: https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json:

Ahora bien. Para relizar la programación del circuito integrado, voy a utilizar mi propia placa Arduino. Por lo tanto voy a instalar un programador en mi Arduino que se encargará de escribir la memoria del ATtiny. Para ello, seleccionamos nuestro Arduino, el puerto donde está conectado y seleccionamos Archivo / Ejemplos / ArduinoISP. Una vez abierto el programa lo subimos a nuestra placa Arduino.

Seguidamente vamos a Herramientas / Placa / Gestor de tarjetas, nos aparecerá una ventana como la siguiente, donde podemos escribir attiny en la barra de búsqueda. Nos aparecerá la configuración para incluir estos circuitos integrados a nuestro entorno Arduino. Así que seleccionamos la última versión y pulsamos Instalar:

Ahora podremos seleccionar nuestro ATtiny en Herramientas / Placa / ATtiny. Para este ejemplo vamos a programar un ATtiny85, aunque colocando los cables correctamente podremos programar también los ATtiny84 o incluso los Atmega.

Ahora seleccionamos el resto de opciones dentro de herramientas:

  • Procesador. Donde especificamos el chip que vamos a programar.
  • Clock. Donde decimos la velocidad de reloj. Estos ATtiny tienen un reloj interno que puede ir hasta los 8MHz, aunque parece que con algunos modelos puede llegar hasta 16MHz, aunque a mayor frecuencia, mayor consumo eléctrico. Además, estos chips soportan una fuente de reloj externa hasta 20MHz.
  • Puerto. Mi USB está en /dev/ttyUSBx (con la placa Duemilanove) o en /dev/ttyACMx (con Arduino Uno), usando GNU/Linux. O tal vez en otros sistemas COM3/COM4... ya depende de cómo esté enchufado el dispositivo.
  • Programador: Arduiono as ISP. Le estamos diciendo que el propio Arduino va a actuar como programador del chip.

Montando el circuito para programar nuestro ATtiny

Debemos montar algo así:

En este circuito conectamos los pins:

Arduino PIN 10 -> ATTiny Reset PIN
Arduino PIN 11 -> ATTiny PIN 0
Arduino PIN 12 -> ATTiny PIN 1
Arduino PIN 13 -> ATTiny PIN 2
Arduino GND PIN -> ATTiny PIN GND PIN
Arduino +5V PIN -> ATTiny PIN VCC PIN


Los diodos led, los he conectado como indicación (no es necesario tenerlos, y me podéis matar por no colocar resistencias, pero están muy chulos):

  • PIN 9 - Es el heartbeat. Indica que nuestra placa Arduino como programador funciona y está lista
  • PIN 8 - Error.
  • PIN 7 - El programador se está comunicando con el ATtiny

NOTA: En las placas Leonardo, Yun y seguro que algunas otras utilizan el puerto ICSP para realizar la programación del chip. Como se indica a continuación (aunque no lo he probado. Si alguien se atreve que me deje un comentario):

Arduino PIN 10 -> ATTiny Reset PIN
Arduino ICSP MOSI PIN -> ATTiny PIN 0
Arduino ICSP MISO PIN -> ATTiny PIN 1
Arduino ICSP SCK PIN -> ATTiny PIN 2
Arduino GND PIN -> ATTiny PIN GND PIN
Arduino +5V PIN -> ATTiny PIN VCC PIN

El condensador entre RESET y GND evita que Arduino se reinicie actuando como ISP. De todas formas muchas veces no es necesario poner el condensador. Depende de la placa que estemos usando. Si no tenéis ninguno a mano, intentadlo sin él.

Programando el chip

Lo primero será cargar un programa, como por ejemplo el Blinking Led, ese ejemplo típico, aunque por defecto el led suele estar conectado al Pin13, y en Attiny no tenemos tantos, así que podemos conectarlo al 0 o al 1 para hacer la prueba. O si no, podemos utilizar mi versión modificada que utiliza la salida analógica, ya que el Pin 0 del Attiny85 soporta PWM, vamos a hacer algo con él:

Programando ATtiny84

Para programar este circuito, tendremos que conectar nuestra placa Arduino al chip. Para ello, debemos conectar VCC, GND y reset a los sitios correspondientes, y luego los pins MOSI, MISO y SCK. De la siguiente forma:

Arduino PIN 10 -> ATTiny Reset PIN
Arduino PIN 11 -> ATTiny PIN 7
Arduino PIN 12 -> ATTiny PIN 8
Arduino PIN 13 -> ATTiny PIN 9
Arduino GND PIN -> ATTiny PIN GND PIN
Arduino +5V PIN -> ATTiny PIN VCC PIN

Ahora, con nuestro ATtiny conectado, le damos a Subir y listo! Se compilará y se subirá a nuestra placa.

Foto principal: Uwe Herman (Flickr CC)

También podría interesarte...