Attiny: Programa tus chips con Arduino y mejora tu proyecto

La mayor parte del mundo Maker actual conoce Arduino y Raspberry Pi, pero para determinados proyectos son demasiado grandes, o tienen demasiadas partes que no nos interesan.

Si os habéis fijado en el chip de vuestra placa Arduino, veréis que hay unas letras escritas, donde estará escrito algo así como Atmel Atmega y algún número. Pues bien, ese es el microprocesador, el cerebro de Arduino y hoy vamos a aprender a programarlo, especialmente la serie Attiny x5 y Attiny x4.

Los chips de la serie Attiny x5 son muy pequeños, tienen solo 8 pines y entre ellos se diferencian tan solo en la memoria disponible. De la serie x5 recomiendo el Attiny 45, ya que cuenta con suficiente memoria en relación con el número de pines disponibles que tenemos.

Los chips de la serie Attiny x4 tienen 14 pines, por lo que podremos llevar a cabo proyectos que utilicen más componentes, y del mismo modo, entre ellos se diferencian tan solo por la memoria. Del mismo modo, recomiendo utilizar el chip Attiny 84.

En primer lugar, tenemos varias opciones para programar los chips, como utilizar un programador AVR o, como voy a explicar hoy en DrMaker.es, a utilizar Arduino para programar estos pequeños chips que darán vida a nuestros proyectos.

Preparación

En primer lugar necesitamos descargar unos archivos para que el IDE de Arduino reconozca los Attiny y pueda grabar el sketch sobre ellos. Para ello, hay que descargar este archivo y colocarlo en la carpeta Hardware dentro del Sketchbook o en Aplicaciones/Arduino/Contents/Java/Hardware si estás en Mac OsX. Recuerda que tienes que copiar la carpeta llamada attiny, no la carpeta llamada attiny-master.

Una vez que hemos copiado el complemento para que el IDE reconozca los chips Attiny, reiniciamos el IDE y al volver a abrir en Herramientas deberíamos poder ver la lista de chips actualizada.

attiny

 

Una vez que podemos escoger los procesadores Attiny entre la lista, el siguiente paso es preparar nuestra placa Arduino para que actúe como programador de los chips Attiny, es decir, será nuestro puente entre el software y el hardware.

Para ello, escogemos la placa que vayamos a utilizar y cargamos el ejemplo ArduinoISP, que podréis encontrar en Archivo/Ejemplos.

Conexión

Para programar el Attiny es necesario realizar algunas conexiones entre la placa y el chip que queramos programar.

Pin Name No mega Mega (1280 y 2560)
Reset Slave 10 53
Mosi 11 51
Miso 12 50
SCK 13 52

Para saber que pines corresponden a que denominación, podemos ir al datasheet de cada uno de los attiny, pero para los dos recomendados anteriormente Attiny45 y Attiny84, podéis ver el pinout en la siguiente imagen:

ATtiny45-85-Arduino-pins ATtiny44-84

Si queréis obtener información sobre que esta pasando en vuestro Arduino mientras funciona como programador ISP, podéis conectar tres leds a los pines 9, 8 y 7 para que actúen como Heartbeat, Error y Programming respectivamente. El led de heartbeat mostrará que la placa está funcionado, Error se encenderá cuando haya algún problema (merece la pena ponerlo de color rojo) y programming, nos dará información de cuando se está enviando el programa a través de Arduino al pequeño Attiny.

Una vez que hemos realizado las conexiones correctamente, escogemos la placa, el chip y el reloj (recomiendo 1MHz si no se tiene un reloj externo)que correspondan a nuestro procesador y dentro del menú programador, escogemos Arduino as ISP. El puerto debemos dejar el correspondiente al que tenga conectado el Arduino.

!Hola, Mundo! con Attiny

Ya estamos listos para programar el chip, con el correspondiente código “Hola, mundo!”. Para ello cargamos el ejemplo Blink (podéis encontrarlo dentro de Ejemplos/ 01.Basic/Blink) y modificamos el 13 por el pin donde hayamos conectado el led (en mi caso se trata del pin 0 del chip Attiny45), obteniendo un código similar a este:

 

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the Uno and
  Leonardo, it is attached to digital pin 13. If you're unsure what
  pin the on-board LED is connected to on your Arduino model, check
  the documentation at http://arduino.cc

  This example code is in the public domain.

  modified 1 Feb 2015
  by Luis Díaz
 */


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

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

Una vez que hemos programado podemos retirar Arduino o seguir utilizandolo como alimentación para nuestro chip.

 

5 comentarios


  1. Saludos
    Me parece bastante interesante; buscaba la forma de utilizar micros de menos componentes; en mi caso no grabare el bootloader, solo tomare el .hex y lo grabare con un programador.
    Excelente nota para poder tener mas herramientas de donde elegir para reducir costos y optimizar diseño.

    Responder

  2. HOLA,
    REALICE LOS PASOS Y ME FUNCIONO EL EJEMPLO Blink, PERO QUIERO CARGAR UN PROGRAMA PARA CONTROLAR UN RELE MEDIANTE BLUETOOTH Y NO ME CARGA ME SALE EL SIGUIENTE ERROR:
    exit status 1
    ‘Serial’ was not declared in this scope , LA VERDAD SOY NUEVO EN ESTO Y LE AGRADESCO CUALQUIER AYUDA QUE ME PUEDES DAR PARA SOLUCIONAR ESTE INCONVENIENTE . EL PROGRAMA ES EL SIGUIENTE EL CUAL SI ME FUNCIONA CON ARDUINO UNO

    int led0=0;
    int estado=0;

    void setup(){
    Serial.begin(9600);
    pinMode(led0,OUTPUT);
    }

    void loop(){
    if(Serial.available()>0){
    estado = Serial.read();
    }
    if (estado ==’2′){
    digitalWrite(led0,HIGH);
    }
    if(estado==’1′){
    digitalWrite(led0,LOW);
    }
    }

    Responder

  3. YO SOY NUEVO TAMBIEN Y TUVE EL MISMO PROBLEMA PERO BUSCANDO ENCONTRO UN CODIGO QUE ME SIRVIO PERFECTAMENTE
    #include

    SoftwareSerial TinySerial(3, 4);
    int led0 = 0;

    void setup()
    {
    pinMode(led0, OUTPUT);
    TinySerial.begin(9600);
    }

    void loop(){
    if (TinySerial.available())
    {
    int received = TinySerial.parseInt();
    if(received == 2){
    digitalWrite(led0, HIGH);
    TinySerial.println(” Device ON”);
    }
    if(received == 1){
    digitalWrite(led0, LOW);
    TinySerial.println(” Device OFF”);
    }
    }
    }
    ESPERO QUE SEA DE AYUDA

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *