1.2. Arduino como programador ISP.

arduinoispp

En este tutorial se va a explicar como utilizar una placa de Arduino como programador ISP para grabar un programa en el microcontrolador, lo que nos evitará tener que comprar un programador para trabajar con el microcontrolador.

Como se explicaba en el tutorial anterior para grabar el programa que hacemos en la memoria del microcontrolador hay que usar un programador externo, este programador suele costar unas pocas decenas de euros (hay versiones no oficiales de Atmel más baratas).

La opción más económica puede ser usar lo que ya se tiene, usar una placa de Arduino al que se le graba un sketch para convertirlo en un programador ISP, con el que vamos a poder descargar un programa hecho con Atmel Studio en la memoria del microcontrolador.

Podemos usar cualquier placa de Arduino como programador ISP, en este ejemplo vamos a usar un Arduino Leonardo.

Arduino Leonardo

Arduino Leonardo

Para programar un microcontrolador con una placa de Arduino realizamos los siguientes pasos:

1. Convertir Arduino Leonardo en un programador ISP.

Lo primero es abrir el entorno de Arduino y grabar en el Arduino el sketch que lo convierte en un programador ISP.

Abrimos el ejemplo de ArduinoISP.

Abrimos el ejemplo de ArduinoISP.

Seleccionamos el ejemplo de Arduino ISP y lo abrimos, para el caso de Arduino Leonardo hay que modificar una línea de código en el ejemplo ArduinoISP.

Cambiamos #define RESET SS por #define RESET 10

Cambiamos #define RESET SS por #define RESET 10

Al principio del código modificamos el primer #define RESET, cambiando SS por 10 como se ve en la imagen superior, para otras versiones de la placa de Arduino no hay que hacer este cambio.

Una vez que hemos hecho la modificación en el código le damos a la flechita de upload y grabamos el sketch en la placa de Arduino, ahora podemos usar el Arduino para grabar programas en los microcontroladores de 8 bits de Atmel.

2. Conexiones de Arduino Leonardo al microcontrolador.

Lo siguiente es conectar nuestra placa de Arduino al microcontrolador que queremos programar, en este ejemplo vamos a programar el ATtiny841 que encontramos en la placa que usamos en los tutoriales de microcontroladores de 8 bits.

Hay que conectar el Arduino a los pines de programación del microcontrolador que queremos programar. Para una programación ISP el microcontrolador usa 4 señales/conexiones: RESET, SCK, Serial Data in y Serial Data out.

Si miramos la página 226 del datasheet del ATtiny841 encontramos los pines del microcontrolador en donde están las señales anteriores:

Pines de la señales ISP.

Pines de la señales ISP.

Por lo que tendremos que conectar el Arduino a los pines SCK (PA4), MISO (PA5), MOSI (PA6) y RESET (PB3) del ATtiny841.

Pines ATtiny841

Pines ATtiny841

Los pines que se utilizan de Arduino para descargar el programa al microcontrolador los encontramos en su documentación:

En los comentarios del sketch ArduinoISP:

// This sketch turns the Arduino into a AVRISP
// using the following arduino pins:
//
// pin name:    not-mega:         mega(1280 and 2560)
// slave reset: 10:               53 
// MOSI:        11:               51 
// MISO:        12:               50 
// SCK:         13:               52
  • MOSI de Arduino lo conectaremos a Serial Data in del microcontrolador.
  • MISO de Arduino lo conectaremos a Serial Data out del microcontrolador.
  • SCK de Arduino lo conectaremos a Serial Clock del microcontrolador.
  • Y el pin que Arduino elija para hacer el reset (10) a RESET del microcontrolador.

Mostramos con más detalle la conexión entre Arduino Leonardo y ecTiny841 que debemos hacer para programarla.

Conexiones Arduino Leonardo y ATtiny841.

Conexiones Arduino Leonardo y ATtiny841.

En la imagen se pueden ver las siguientes conexiones:

  • Cable rojo: salida de 5V de Arduino al pin V+ de ecTiny841.
  • Cable negro: salida de tierra de Arduino al pin G- de ecTiny841.
  • Cable azul: pin 10 de A. Leonardo al pin B3 (RESET) de ecTiny841.
  • Cable blanco: pin SCK conector ISP de A. Leonardo al pin A4 (SCK/Serial Clock).
  • Cable verde: pin MISO conector ISP de A. Leonardo al pin A5 (MISO/Serial Data out).
  • Cable amarillo: pin MOSI conector ISP de A. Leonardo al pin A6 (MOSI/Serial Data in).

El montaje anterior en la protoboard queda así:

Arduino programando ecTiny841.

Arduino programando ecTiny841.

Para conectar los pines del conector ISP de Arduino a ecTiny841 se usan los cables que se ven en la imagen, por un lado tienen un conector hembra y por el otro macho, tener unos cuantos de estos cables puede venir muy bien si solemos usar placas estilo Arduino.

Como se puede ver no es muy cómodo estar haciendo las conexiones entre Arduino y el microcontrolador para programarlo, por lo que si vamos a programar microcontroladores con cierta frecuencia merece la pena hacerse con un programador que se conecte directamente al conector de programación del microcontrolador.

Ya tenemos un Arduino configurado como programador ISP y conectado al microcontrolador a programar, lo siguiente es ver el software que debemos usar para descargar el programa en el mircocontrolador.

3. Software de programación.

Para descargar el programa en el microcontrolador desde el pc usando una placa de Arduino como programador vamos a usar AVRDUDE, lo encontramos en la carpeta de Arduino y podemos usarlo desde la línea de comandos, pero en este ejemplo lo vamos a instalar con un interfaz de usuario que simplificará su uso.

Vamos a usar AVRDUDESS que encontramos en la siguiente enlace o en su repositorio, lo descargamos e instalamos en nuestro pc y lo abrimos.

AVRDUDESS

AVRDUDESS

Como se puede ver en su interfaz AVRDUDESS nos permite escribir y leer las memorias del microcontrolador y los fuses.

El ATtiny841 es uno de los últimos modelos de la familia ATtiny de Atmel y todavía no está incluido en esta versión de AVRDUDESS, si desplegamos la lista de “Select an MCU…” y no lo encontramos tendremos que añadirlo editando un archivo de configuración. Si lo encontramos en la lista no es necesario hacer el paso siguiente.

Nos vamos a la carpeta donde se ha instalado el programa y abrimos con un editor de textos el archivo avrdude.conf.

Abrimos avrdude.conf con un editor de texto.

Abrimos avrdude.conf con un editor de texto.

En este enlace encontramos las líneas que debemos escribir en avrdude.conf para añadir el ATtiny841 en AVRDUDESS, adjunto el texto del enlace anterior que tenemos que copiar y pegar dentro de avrdude.conf.

Editamos el archivo y a continuación de “parts definition”, línea 1408 en mi avrdude.conf, pegamos el texto adjunto o que encontramos en el enlace anterior.

Añadimos el ATtiny841 a avrdude.conf

Añadimos el ATtiny841 a avrdude.conf

Si ahora abrimos la lista desplegable de selección de microcontrolador encontraremos el ATtiny841.

ATtiny841 añadido a AVRDUDE.

ATtiny841 añadido a AVRDUDE.

Ya está todo listo para descargar un programa en el ATtiny841 usando Arduino Leonardo como programador ISP.

4. Programando el microcontrolador con Arduino Leonardo + AVRDUDESS.

Abrimos AVRDUDESS y conectamos el Arduino Leonardo al puerto USB del ordenador y a los pines de programación del microcontrolador que queremos grabar.

En la lista desplegable de programadores seleccionamos “Arduino” para del caso de Leonardo y el puerto del pc donde tenemos conectado la placa de Arduino, como se ve en la siguiente imagen.

Seleccionamos Arduino y el puerto al que está conectado.

Seleccionamos Arduino y el puerto al que está conectado.

Si todo está correctamente configurado y conectado y pulsamos el botón de Detect arriba a la derecha, nos detecta y dice el microcontrolador que tenemos conectado a Arduino Leonardo.

Pulsamos Detect en la parte superior derecha.

Pulsamos Detect en la parte superior derecha.

En el tutorial anterior explicabamos cómo generar un archivo de programa en Atmel Studio para grabar en el microcontrolador, no estamos usando un programador oficial de Atmel por lo que no podremos descargarlo usando Atmel Studio y tendremos que usar AVRDUDESS.

Atmel guarda el archivo .hex que queremos grabar en el microcontrolador en la carpeta del proyecto que creamos para hacer el programa.

Archivo .hex con el programa para el microcontrolador.

Archivo .hex con el programa para el microcontrolador.

Para grabarlo en el microcontrolador seleccionamos el Archivo .hex en la ruta desplegable de la Flash y pulsamos el botón de Go.

Seleccionamos en Flash el .hex a grabar y pulsamos Go.

Seleccionamos en Flash el .hex a grabar y pulsamos Go.

Si todo ha ido bien el programa se graba en el microcontrolador y en la parte inferior de AVRDUDESS podemos ver el resultado de la programación.

En la parte inferior se muestra el resultado de la programación.

En la parte inferior se muestra el resultado de la programación.

Los leds de TX y RX de Arduino se encienden y se apagan mientras se descarga el programa en el microcontrolador, y una vez descargado el programa empieza a correr en éste como se ve en el siguiente vídeo.

Estos han sido los componentes y pasos necesarios para programar un microcontrolador de Atmel usando una placa de Arduino, en función de la placa de Arduino que tengamos tendremos que conectar unos pines u otros de Arduino al microcontrolador, conectando los pines MOSI, MISO, SCK y un pin digital de Arduino a los pines con las señales Serial Data in, Serial Data out, Serial Clock y RESET del microcontrolador.

Enlaces relacionados: