Sie sind auf Seite 1von 10

Tarea 1

Taller de Microcontroladores
Cmo usar Arduino como
Programador AVR ISP
Carlos Flores Melndez
Ingeniera Mecatrnica, Facultad de Ingeniera, Universidad de Talca
charlylabs@gmail.com

Resumen Este documento es una gua paso a paso para el uso de placas arduino como
programadores de microcontroladores AVR. Adicionalmente se explica cmo programar
estos mismos usando el lenguaje e IDE de arduino.
Palabras Claves Arduino, Programador, AVR, ISP, SPI, Avrdude.

I. INTRODUCCIN
En este documento se explica paso a paso el procedimiento necesario para convertir una placa arduino
UNO en un programador AVR ISP STK500v1 compatible. Mencionando tambin algunos de los
procedimientos ms comunes para programar microcontroladores AVR usando el lenguaje AVR-GCC y su
respectiva conversin a archivos HEX y consecuente quemado de estos en el microcontrolador.
Adicionalmente se presenta un mtodo para facilitar la programacin de microcontroladores AVR usando
el lenguaje propio de arduino y la IDE de este, de tal forma de evitar la programacin usando AVR-GCC y
permitir la creacin de placas arduino en un solo chip, grabando el bootloader de la plataforma arduino en
un microcontrolador AVR independiente y sin la necesidad de un reloj externo.

II. ARDUINO COMO PROGRAMADOR AVR


El proceso para convertir cualquier placa arduino en un programador AVR consta de 4 etapas bsicas:
1.

Cargar el Sketch Arduino ISP en la placa arduino

2.

Armar circuito de estado del programador

3.

Conectar un microcontrolador AVR compatible

4.

Compilar y quemar archivo HEX en el microcontrolador

A continuacin el detalle de cada etapa:


A. Sketch Arduino ISP
Para usar una placa arduino como programador AVR es necesario cargar en esta un sketch que tenga todas
las instrucciones necesarias para que el arduino acte como programador. Este sketch se puede encontrar en la
seccin de ejemplos del propio IDE de arduino con el nombre de ArduinoISP (ver fig. 1).

Fig. 1

Una vez abierto el sketch, se puede apreciar en el apartado comentado las instrucciones bsicas para el uso
del mismo (ver fig. 2).

Fig. 2

Como se aprecia en la figura 2, nos dicen que el programa utiliza los pines 10, 11, 12 y 13 (Arduino UNO)
para la programacin AVR usando el protocolo SPI, el cual utiliza 6 conexiones para programar un
microcontrolador AVR, 4 de las cuales son: RESET, MOSI, MISO y SCK respectivamente. Las 2 conexiones
restantes son las de alimentacin (VCC y GND) las cuales corresponden a la salida de 5v y GND en el
arduino respectivamente.
Adems de indicarnos cules sern los pines utilizados para programar, nos recomiendan conectar 3 LED a
los pines 7, 8 y 9, los cuales servirn para indicar el estado del programador.

B. Circuito de estado del programador


Una vez cargado el sketch ArduinoISP en el Arduino UNO, debemos conectar un capacitor de 10uF
entre los pines Reset y GND para evitar el reinicio del arduino mientras lo utilizamos como programador. Es
importante recordar conectar este capacitor despus de grabado el sketch en el arduino.
Adicionalmente debemos conectar los 3 LED de estado a los pines 7, 8 y 9 y conectar un cristal de cuarzo
y sus respectivos capacitores al microcontrolador que queremos programar. Esto es solo necesario en caso de
que se quiera utilizar un reloj externo (ver fig. 3). De lo contrario se puede utilizar el reloj interno del
microcontrolador, para lo que se deben quemar adecuadamente los fuses del microcontrolador. Este ajuste se
realiza en el programa que utilicemos para programar (Avrdude por ejemplo) y lo profundizaremos ms
adelante.

Fig. 3
Tambin es posible desarrollar un Shield para el arduino (ver fig. 4), que contenga los LED de estado, el
capacitor y los cables de las salidas para la programacin mediante SPI.

Fig. 4

Fig. 5

Una vez encendido el arduino el LED conectado al pin 9 parpadear suavemente indicando que el
programador est funcionando (ver fig. 5). A su vez mientras se est programando un microcontrolador se
encender el LED conectado al pin 7 y cuando surja un error al programar se encender el LED conectado al
pin 8 del arduino.

C. Conexin SPI
Una vez cargado el sketch de programador y conectados
los respectivos LED de estado y el capacitor de 10uF,
debemos conectar las salidas de programacin de nuestro
arduino

los

pines

correspondientes

en

el

microcontrolador, segn el estndar SPI (ver fig. 6)


proporcionando las 6 conexiones de este protocolo a los
Fig. 6

pines correspondientes segn el microcontrolador que


queramos programar.

En la figura 7 se pueden apreciar las 6 conexiones del protocolo SPI conectadas a un microcontrolador
Atmega 328P, las cuales son vlidas tambin para los modelos Atmega48, Atmega168 y Atmega328.

PIN 1

RESET

PIN 7

VCC

PIN 8

GND

SCK

PIN 19

MISO

PIN 18

MOSI

PIN 17

Fig. 7

D. Compilado y quemado de archivo HEX


Habiendo conectado correctamente el arduino que usaremos como programador al microcontrolador solo
queda compilar el programa que queremos grabar y convertirlo en un archivo HEX. Esto se puede realizar
utilizando diversas suites de programacin que soporten AVR-GCC, como CodeBlocks, AVR Studio o
incluso el IDE de arduino el cual tambin genera un archivo HEX.
Una vez generado el archivo HEX podemos quemar este en un microcontrolador usando el arduino que
tenemos como programador. Para esto es necesario utilizar algn programa compatible con el protocolo
STK500v1 al cual pertenece el programador que hemos creado con el arduino, como por ejemplo AVRDUDE.

Para quemar un archivo HEX usando AVRDUDE, es necesario instalar en el caso de Windows la
aplicacin WinAVR y luego utilizar la terminal de comandos de Windows para utilizar los comandos de
AVRDUDE (ver fig. 8), a travs de los cuales se deben determinar los siguientes parmetros:
1.

Microcontrolador a programar (comando -p)

2.

Programador a utilizar (comando -c)

3.

Puerto a utilizar (comando -P)

4.

Velocidad en baudios del programador (comando -b)

5.

Ubicacin del archivo HEX a quemar (comando -U)

Fig. 8

En este caso se program un microcontrolador atmega328p utilizando un programador compatible con el


protocolo STK500v1 (Arduino ISP) y se quem el archivo Blink.cpp.hex a 19200 baudios a travs del
puerto COM23. Al apretar la tecla ENTER se quema el archivo en el microcontrolador y el programa nos
muestra diversas barras de progreso y el estado en que finaliz el quemado del microcontrolador (ver fig. 9).

Fig. 9

III. ARDUINO IDE PARA PROGRAMAR AVR


Una de las ventajas de utilizar la plataforma arduino, es su lenguaje simplificado para programar
microcontroladores AVR, el cual es ampliamente ms amigable que C# propiamente tal usando AVR-GCC.
El problema es que para utilizar este lenguaje simplificado es necesario utilizar nicamente placas arduino
debidamente cargadas con el bootloader de la plataforma arduino. Impidiendo aparentemente la programacin
de microcontroladores directamente usando el IDE y lenguaje de arduino.
Una solucin a esto es utilizar la IDE de arduino para compilar los sketches y luego buscar los
archivos HEX generados y quemarlos en un microcontrolador AVR usando algn programador (como se vio
en la seccin anterior de este documento). Pero este proceso es engorroso ya que debemos utilizar un
programador AVR y un programa adicional al IDE de arduino para quemar los archivos HEX.
Para evitar los problemas mencionados es posible editar el IDE de arduino para que reconozca
microcontroladores solos como si se tratasen de placas arduino. De esta forma no solo se consigue programar
directamente microcontroladores AVR usando el lenguaje arduino sino que adems es posible quemar el
bootloader adecuado para cada microcontrolador y convertir este en una placa arduino completamente
funcional. Incluso es posible configurar el microcontrolador para que utilice el reloj interno de 8Mhz (las
placas arduino utilizan relojes externos de 16Mhz) logrando as un arduino en un solo chip, reduciendo
considerablemente el tamao y costo de esta placa arduino, ya que es solo un microcontrolador AVR que
bsicamente fue convertido en un arduino.

Por lo tanto, para convertir un microcontrolador AVR en un arduino completamente funcional, es


necesario realizar 3 pasos bsicos:
1.

Editar el IDE de arduino agregando una nueva tarjeta para que reconozca el microcontrolador

2.

Quemar el bootloader en el microcontrolador usando un programador

3.

Utilizar un programador o convertidor serial para programar el nuevo arduino usando el IDE de la
plataforma arduino.

A. Agregar nueva Board


Para que el IDE de arduino reconozca al microcontrolador que queremos programar, debemos agregarlo
como una tarjeta o board al sistema. Para ello nos dirigimos a la carpeta de instalacin del IDE siguiendo la
siguiente ruta (considerando a Arduino como la carpeta donde se encuentra el IDE de arduino):
Arduino\hardware\arduino\boards.txt
Buscamos el archivo boards.txt y lo abrimos con algn editor de texto. Una vez abierto el archivo
boards.txt podremos apreciar los parmetros de cada tarjeta que puede reconocer el IDE de arduino,
empezando por la placa Arduino UNO y seguida de otras placa como la Arduino Duemilanivove y otras.
A cada una de las placas o boards se les asignan diferentes parmetros para que puedan ser reconocidas
correctamente por el IDE de arduino (ver fig. 10).

Algunos de los parmetros


definidos son:
Nombre de la tarjeta
Memoria mxima
Velocidad de programacin
Configuracin de fuses
Microcontrolador utilizado
Velocidad de reloj

Para que el IDE reconozca al


microcontrolador que queremos
programar como otra tarjeta ms,
debemos agregar en este archivo
todos los parmetros requeridos
para que este pueda reconocerlo
Fig. 10

correctamente y nos permita


programarlo.

Como una mala configuracin de fuses en un microcontrolador puede estropearlo fcilmente, es


importante introducir cada uno de los parmetros correctamente, haciendo hincapi en configurar
correctamente los fuses de acuerdo a si se utilizar un reloj externo o el reloj interno del microcontrolador.
En nuestro caso agregaremos un microcontrolador Atmega328P (ver fig. 11) y un Atmega168 (ver fig. 12)
los cuales se configurarn para usar el reloj interno del microcontrolador. Por lo tanto pegamos la siguiente
informacin en el archivo boards.txt y lo guardamos:

Atmega 328P (usando reloj interno)


atmega328bb.name=ATmega328p on a breadboard (8 MHz internal clock)

atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard

Fig. 11

Atmega 168 (usando reloj interno)


atmega168bb.name=ATmega168 on a breadboard (8 MHz internal clock)
atmega168bb.upload.protocol=stk500
atmega168bb.upload.maximum_size=14336
atmega168bb.upload.speed=57600
atmega168bb.bootloader.low_fuses=0xE2
atmega168bb.bootloader.high_fuses=0xDA
atmega168bb.bootloader.extended_fuses=0x05
atmega168bb.bootloader.path=arduino:atmega
atmega168bb.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex
atmega168bb.bootloader.unlock_bits=0x3F
atmega168bb.bootloader.lock_bits=0x0F
atmega168bb.build.mcu=atmega168
atmega168bb.build.f_cpu=8000000L
atmega168bb.build.core=arduino:arduino
atmega168bb.build.variant=arduino:standard

Fig. 12

Una vez modificado el archivo boards.txt procedemos a abrir el IDE de arduino y nos dirigimos a la
pestaa: Herramientas > Tarjeta, donde aparecern las nuevas tarjetas como opcin (ver fig. 13).

Fig. 13

B. Quemado del Bootloader


Ahora que podemos seleccionar el microcontrolador por si solo como una tarjeta arduino podemos
quemar en este el bootloader de arduino usando algn programador AVR, e incluso utilizar el programador
que creamos con un arduino en la seccin II de este documento.
Para ello seleccionamos el microcontrolador en la seccin de tarjetas (ver fig. 13) y luego nos
dirigimos a la pestaa Herramientas > Programador y seleccionamos el programador a utilizar, en nuestro
caso elegimos la opcin Arduino as ISP (ver fig. 14) ya que utilizaremos el programador que construimos
previamente utilizando un Arduino UNO.

Fig. 14
Luego de seleccionar el programador y verificar que se encuentra seleccionado el puerto COM
correcto, hacemos click en la opcin Grabar Secuencia de inicio. El programa comenzar a grabar el
bootloader en el microcontrolador, convirtiendo a este en un arduino todo-en-uno en un mismo chip.

C. Programar Microcontrolador
Una vez quemado el booloader es posible programar
nuestro microcontrolador directamente con el IDE de arduino,
para ello una vez terminado el sketch seleccionamos la opcin
Cargar usando programador (ver fig. 15).
Para programar el microcontrolador usando el IDE de
arduino pero sin utilizar un programador AVR es necesario
utilizar un convertidor serial, como los utilizados en la
programacin de arduinos LilyPad, conectando el convertidor
serial al USB y a los pines correspondientes a comunicacin
serial y alimentacin del microcontrolador.

Fig. 15

Das könnte Ihnen auch gefallen