lunes, 12 de junio de 2017

Programación de un Arduino UNO a través de ICSP


En este POST voy a explicar cómo programar un Arduino UNO a través de ICSP, que no es más que un método de programación serie en circuito que se realiza mediante un conector de 6 pines (MOSI, MISO, SCK, RESET, VCC y GND ) que nuestra placa Arduino tiene para tal fin, teniendo acceso a la memoria de programa (Flash) del microcontrolador AVR (Atmega328) y poderle grabar directamente desde el PC el Bootloader, que es un gestor de arranque interno necesario para que nuestro Arduino se pueda comunicar correctamente con el IDE, o cargarle cualquiera de los programas (Sketchs) que nos interesen, sin necesidad de utilizar el puerto USB de nuestro Arduino.


Conector ICSP en un Arduino UNO

Para poder hacer uso de este método de programación va a ser necesario un hardware adicional denominado programador. En nuestro caso vamos a utilizar como programador ICSP un Arduino UNO, un USBTinty y un USBasp, aunque también existan otros métodos alternativos a los citados.
 

1º MÉTODO ICSP: Arduino UNO como programador ICSP.

Para este método de programación ICSP vamos a necesitar inicialmente un Arduino UNO configurado como programador ICSP. Para ello le debemos de cargarle un “Sketch” especial que viene en el IDE de Arduino, dirigiéndonos hacia el menú “Archivo à Ejemplos à ArduinoISP”, como se muestra en la siguiente imagen:


Ruta del programa “ArduinoISP” que incluye el IDE de Arduino

A continuación se nos abrirá el programa que debemos de cargar en el Arduino UNO que vamos a utilizar como programador ICSP, como si de cualquier programa se tratara, es decir, conectando el Arduino UNO al PC a través del puerto USB, seleccionando la placa Arduino UNO y el puerto COM en el que conectamos el Arduino UNO, y por último, presionando el icono subir (Ctrl + U).
 

Programa “ArduinoISP” que incluye el IDE de Arduino

Una vez cargado el programa correctamente en el Arduino UNO que vamos a utilizar como programador ICSP, debemos de realizar la conexión ICSP entre los dos Arduinos como se muestra en la siguiente tabla:

Conexiones para la programación ICSP entre los dos Arduinos UNO

Una vez conectados los dos Arduinos mediante ICSP, conectamos el Arduino UNO programador ICSP al USB de nuestro PC y abrimos el IDE de Arduino para cargar el Bootloader o el programa que queramos al otro Arduino a través de él. Para ello debemos de tener configurado el IDE de Arduino como se muestra a continuación, teniendo muy presente que tenemos que seleccionar el puerto COM en el que tengamos conectado nuestro Arduino programador ICSP.

Configuración del IDE de Arduino para programación con Arduino ICSP

Para finalizar debemos de abrir el programa que deseamos cargar en nuestro Arduino y dirigirnos hacia el menú ”Archivo à Subir Usando Programador” para poder subir el programa correctamente a la placa. Si deseamos cargar el “Bootloader” en la placa, simplemente pulsamos la opción “Quemar Bootloader” en el menú de Herramientas.


Menú ”Archivo” del IDE de Arduino



Lista de Materiales:


·         2 Arduino UNO Rev.3.

·         IDE 1.6.4 de Arduino (vale cualquier otra versión).

·         Cable USB tipo A-B.

·         Cables de conexiones.

 

2º MÉTODO ICSP: Programador ICSP “USBTinty”

Para poder utilizar este método de programación ICSP vamos a necesitar un programador ICSP denominado comercialmente como “USBTinty”.

Programador ICSP “USBTiny”

Lo primero que tendremos que hacer es conectarlo al puerto USB de nuestro PC y posteriormente cargarle los driver como si de cualquier otro HARDWARE se tratase, es decir, entrando en el administrador de dispositivos si estamos trabajando con un sistema operativo Windows. En el siguiente enlace podéis obtener los drivers actualizados.

Una vez que nuestro PC haya reconocido y configurado para su uso el programador “USBTinty”, tendremos que conectar el bus de 6 pines que trae el programador a nuestro Arduino como se muestra a continuación y no de cualquier otra manera, aunque podemos realizar la conexión ICSP entre el programador y el Arduino “pin a pin” siempre que respetemos el orden de conexiones ICSP que el “USBTinty” trae serigrafiado en su parte posterior.

Conexión entre el “USBTinty” y nuestro Arduino UNO

A continuación tenemos que conectar el “USBTiny” al puerto USB de nuestro PC y abrir el IDE de Arduino para configurarlo como se muestra en la siguiente imagen.

Configuración del IDE de Arduino para programación ICSP con “USBTiny”


Como podemos observar,  tenemos que seleccionar el puerto COM donde está conectado el USBTiny, el tipo de placa a programar, que en nuestro caso es un Arduino UNO y  además debemos de seleccionar el USBTinyISP como programador. Para quemar el Bootloader, que es el Firmware de arranque de la placa, simplemente presionaríamos la opción realizándose el proceso automáticamente.
Por último, para cargar un programa a la placa a través del USBTiny, presionaríamos la opción “Subir usando Programador” del menú “Archivo” del IDE de la misma manera que lo hemos hecho para el primer método ICSP.

 

Lista de Materiales:


·         Arduino UNO Rev.3.

·         Programador ICSP “USBTinty”.

·         Drivers “USBTinty”.

·         IDE 1.6.4 de Arduino (vale cualquier otra versión).

·         Cable USB tipo A-B.

·         Cables de conexiones (Cable de 6 pines opcional)

 

3º MÉTODO ICSP: Programador ICSP “USBasp”

Para poder trabajar con este último método de programación ICSP vamos a necesitar un programador ICSP llamado “USBasp”.

Programador ICSP “USBasp”

Antes de comenzar os tengo que avisar de que este método es el más tedioso y complicado de configurar por lo que no os lo recomiendo si podemos utilizar alguno de los dos anteriores, puesto que además de instalar los drivers correspondientes es necesario actualizar el firmware del “USBasp” para que pueda ser reconocido por el IDE de Arduino. Para ello vamos a seguir una serie de pasos que a continuación os detallo.
Para comenzar vamos a conectar el “USBasp” a nuestro PC a través del puerto USB para que lo reconozca y podamos instalar los drivers correspondientes como si de cualquier otro dispositivo “Hardware” se tratara. En este enlace os dejo los drivers actualizados y funcionando correctamente.
Una vez que tengamos los drivers instalados, vamos a pasar a actualizar el firmware del “USBasp”, para ello, vamos a necesitar un Arduino UNO configurado como programador ICSP, como os he explicado en el primer método de este POST, además de tener instalado el software “AVRDUDESS 2.4” que podéis descargar desde aquí. Antes de continuar con la conexión entre el “USBasp” y el Arduino UNO configurado como programador ICSP, debemos de abrir el “USBasp” y puentear mediante un Jumper o cablecito los dos orificios que trae en su parte posterior, para que pueda ser programado (una vez programado hay que retirarlo para que “USBasp” funcione correctamente).

Jumper de programación en el “USBasp”

Las conexiones a realizar entre el Arduino UNO configurado como programador ICSP y el “USBasp” son las que se muestran en la siguiente tabla:
 
Tabla de conexiones entre el Arduino Uno configurado como programador ICSP y el USBasp
 
 
 
Configuración de los pines en el programador “USBasp”
 
Por último, una vez realizadas las oportunas conexiones, vamos a descargar de aquí  el nuevo firmware para poder cargárselo al “USBasp” a través del software “AVRDUDESS 2.4” que hemos instalado anteriormente, para ello, una vez abierto el software tenemos que realizar las siguientes operaciones: 

A.      Programador à Arduino. 

B.      Atmega8 MCU (suponiendo que el USBasp tiene un atmega8). 

C.      Puerto COM à Elegimos el puerto donde está conectado el Arduino Uno configurado como programador ICSP.  

D.     Velocidad en baudios de la comunicación à19200.  

E.      Seleccionamos el archivo firmware que hemos descargado anteriormente. 

F.       Presionar el botón “Program!”.



 
Configuración del software “AVRDUDESS 2.4”



Una vez actualizado el “USBasp” ya podrá ser reconocido por el IDE de Arduino para poder programar un Arduino Uno a través de él. Para ello debemos de conectar los pines ICSP del Arduino a programar a los pines del “USBasp”, respetando las conexiones “pin a pin”, para posteriormente conectar el “USBasp” al puerto USB de nuestro PC,  abrir el IDE de Arduino y configurarlo como a continuación se muestra.
 
Configuración del IDE de Arduino para programación ICSP con “USBasp”


Para ello abrimos el programa que queremos cargar en el Arduino UNO, seleccionamos la placa Arduino UNO y el puerto “COM” donde conectamos el “USBasp”, y por último, tenemos que seleccionar el “USBasp” como programador. Si queremos “Quemar el Bootloader” simplemente pulsaríamos en la opción y se realizaría automáticamente en pocos segundos. Para cargar el programa nos tenemos que ir al menú “Archivo à Subir Usando Programador” como se ha venido haciendo en los métodos ICSP anteriormente explicados.




Lista de Materiales:



·         Arduino UNO Rev.3.

·         Programador ICSP “USBasp”.

·         Drivers “USBasp”.

·         IDE 1.6.4 de Arduino (vale cualquier otra versión).

·         Software “AVRDUDESS 2.4”.

·         Firmware “USBasp”.

·         Cable USB tipo A-B.

·         Cables de conexiones (Cable de 10 pines opcional).