Arduino es una herramienta excelente para controlar sistemas de modo sencillo a través de una programación básica y un interfaz de programación amigable pero, ¿realmente necesito una placa Arduino para controlar un simple motor o unos LEDs? Demasiado caro no? Afortunadamente, a través de Arduino podemos programar pequeños integrados que nos permiten realizar un control básico de nuestros dispositivos. Un ejemplo es el ATtiny85 de Atmel. Os dejo su hoja de características aquí. Una vez programado, realizará los controles que antes nos hacía nuestro programa Arduino pero a un coste muuuuy inferior (5 por 6$).

Dependiendo de la placa Arduino que tengáis cambia un poco el procedimiento porque la programación ha de realizarse a través de la comunicación ISP. El IC ATtiny 85 tiene la siguiente disposición de pines:

Tenemos 5 entradas/salidas, 2 de las cuales también pueden ser usadas como salidas PWM.

En el caso de la placa Leonardo (de la que hay menos tutoriales que de la versión Uno), la programación se realiza a través de nuestros conectores ISP, tal como se muestra en la imagen:

Tres pasos importantes:

  1. Antes de conectar el ATtiny, debemos que decirle a la placa Leonardo que queremos que se convierta en un programador ISP. Para esto, abrimos el ejemplo que se llama ArduinoISP (podemos acceder a él desde el IDE, Archivo -> Ejemplos -> 11.ArduinoISP) y subimos el sketch a la placa. Bualá, ya tenemos un programador ISP.
  2. Hemos de conseguir que la ATtiny nos aparezca seleccionable entre las placas disponibles. La forma más sencilla que he conseguido para esto es editar la ruta de placas seleccionables añadiendo nuevas urls. Vamos a Archivo -> Preferencias y abajo en Gestos de URLs adicionales de tarjetas, incluimos esta dirección: https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json.
  3. Ahora en la sección Herramientas -> Placas nos deben aparecer las placas ATtiny.

Ya está. Sólo queda meter en nuestra placa el programa deseado. Iluminemos un LED desde el ATtiny a ver qué tal…

const int ledpin = 3; // Asi usaremos el pin analogico 3 del ATtiny como salida, o sea, su pin numero 2 de hardware

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(ledpin, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
digitalWrite(ledpin, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(ledpin, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

Ahora, comprobamos que en el IDE Arduino tenemos la siguiente selección de placa y programador:

y ala, ya podemos subir el sketch. Peeero, os va a dar fallo. La leonardo es así. Una placa complicada. Funciona bien con la versión Uno. El fallo será algo parecido a esto:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x03

Pero después de mucho indagar, vamos a ver cómo lo solucionamos. Necesitamos realizar un par de arreglos:

  1. Poner un condensador, en mi caso estoy poniendo uno de 22uF, entre los pines RESET y GND de la Leonardo para evitar que la placa se autoresetée durante el arranque.
  2. Incluir un nuevo programador en el menú del IDE de Arduino ya que el “Arduino as ISP” original no nos sirve. Cómo implementamos este programador? Sencillo.
      1. Abrir la carpeta dónde tenemos instalado el IDE Arduino, e ir a …\hardware\arduino\avr y abrir el archivo programmers.txt
      2. Buscar las siguiente líneas
            arduinoasisp.name=Arduino as ISP
            arduinoasisp.communication=serial
            arduinoasisp.protocol=stk500v1
            arduinoasisp.speed=19200
            arduinoasisp.program.protocol=stk500v1
            arduinoasisp.program.speed=19200
            arduinoasisp.program.tool=avrdude
            arduinoasisp.program.extra_params=-P{serial.port} -b{program.speed}
            

    Incluir debajo de ellas este nuevo programador en el que se cambia el protocolo stk500v1 (esto son protocolos de los chips ATMEL) por arduino.

            arduinoasisp.name=Arduino as ISP (Leonardo)
            arduinoasisp.communication=serial
            arduinoasisp.protocol=arduino
            arduinoasisp.speed=19200
            arduinoasisp.program.protocol=arduino
            arduinoasisp.program.speed=19200
            arduinoasisp.program.tool=avrdude
            arduinoasisp.program.extra_params=-P{serial.port} -b{program.speed}
            

Volvemos a subir nuestro código usando como programador el recientemente creado Arduino as ISP (Leonardo). Ojo, que quizá necesitéis reiniciar el IDE de Arduino para que aparezca y……….

Casi hemos finalizado

El LED que hemos conectado al pin de salida del ATtiny85 se enciende y se apaga. Funciona!!! Ala, ya podéis usar vuestra Leonardo como un programador para estos chips de ATMEL y usarlos en vuestros proyectos definitivos en lugar de tener que dejar puesta una placa Arduino. Seguid experimentando y contadme a ver qué tal…

PS. El montaje final:

Si todo va bien, el LED rojo estará parpadeando (lo que significa que el bootloader del Arduino está preprarado para subir programas al chip ATMEL) y el LED verde parpadeará con la cadencia de nuestro programa, y este es el que está siendo alimentado realmente a través del ATtiny85. Ahora puedes quitar el Arduino y alimentar el ATtiny directamente con 5V entre sus pines 8 y 4 el LED verde parpadeará sin el Arduino: ahora lo comanda el ATtiny.

Anuncios