Construye tu propio Arduino en Protoboard

Ya hace un tiempo que escuchaba sobre arduino y la facilidad para desarrollar programas para microcontroladores. En mi ultima visita a República del salvador (una calle en el centro de la ciudad de México) me compré un microcontrolador AVR, un ATMEGA8, y en uno de mis ratos de ocio me puse a jugar con Arduino, que es una plataforma de desarrollo de Hardware/Software abierto basada actualmente en un chip ATMEGA168, pero que también corre sobre mi ATMEGA8.

Arduino Duemilanove, la nueva version de la placa arduino.

Arduino Duemilanove, la nueva version de la placa arduino… ¡Un poco fuera de presupuesto!

En esta entrada te enseñamos como construirte tu propio arduino con un montón de partes que probablemente ya tengas si eres un entusiasta de la electrónica. Si no las tienes, no te preocupes, ¡Son muy fáciles de conseguir!

¿Que es Arduino?

Nuestra querida Wikipedia dice lo siguiente: “Arduino es una plataforma de hardware de fuente abierta basada en una sencilla placa con entradas y salidas (E/S), analógicas y digitales, y en un entorno de desarrollo que implementa el lenguaje Processing/Wiring. Está basado en el procesador Atmega8 (Atmega168 en las nuevas versiones), un chip sencillo y de bajo coste que permite el desarrollo de múltiples diseños”.
Por mi parte les puedo decir que la plataforma Arduino consiste en un IDE (Integrated development environment), una placa con un microcontrolador (hardware), y una pequeña pieza de software previamente grabada en el microcontrolador, conocida como bootloader. Esto, en conjunto, funciona mas o menos así:

  • Se desarrolla un programa o “sketch” como se conoce en el mundo de arduino, usando el IDE que se proporciona en la página oficial.
  • El IDE compila el sketch, “traduciendolo” al lenguaje del microcontrolador.
  • El IDE se comunica con el software previamente grabado en el microcontrolador (bootloader) y transfiere el sketch a la memoria flash del microcontrolador.
  • El programa es ejecutado en el hardware.

En esta entrada del blog, nos concentraremos principalmente en el hardware que hay en la placa arduino de entradas y salidas y trataremos de emular su funcionamiento.

Requisitos previos de este tutorial.

  • Bajarse el IDE de arduino desde la página oficial.
  • Contar con una PC con puertos USB libres y un adaptador de  USB-Serial, o mejor aún, un puerto serial.
  • Tampoco esta de sobra leer un poco sobre como funciona el IDE de arduino.
  • Conseguir los materiales listados más abajo.

Desarrollo del hardware.

El hardware en una placa arduino original se compone básicamente de una interfaz USB-Serial, las placas Duemilanove y Decimilia usan el FT232RL, que es un puente de USB a UART. En mi caso, al no disponer de este circuito y al tratarse de una implementación de bajo costo, voy a construir un adaptador de RS-232 a TTL/CMOS y usaré un cable comprado con anterioridad en una tienda de electrónica que convierte un puerto USB en un puerto serie compatible con la norma RS-232. Por lo tanto la interfaz con el microcontrolador se compone en mi caso de dos partes:

  • El cable USB-Serial (No es indispensable si la PC tiene un puerto serie, pero mi laptop no lo tiene)
  • El adaptador de niveles lógicos usando un MAX232 o compatible

Se podría pensar también en usar otro circuito que convierta los niveles lógicos RS232 a TTL basado en transistores, sin embargo, yo prefiero hacerlo de esta forma por que el MAX232 permite una amplia gama de aplicaciones, de hecho, mi adaptador de RS-232 a TTL/CMOS lo he construido en una tarjeta independiente por comodidad, para poder conectarlo a varios circuitos rápidamente y no tener que armar la interfaz nuevamente en cada experimento.

Para construir el circuito RS232 a  TTL/CMOS necesitamos:

  • 1 x MAX232 o equivalente (en mi caso estoy usando un MAX3232)
  • 1 x Zócalo para circuito integrado de 16 patas
  • 5 x Capacitores cerámicos de 1 uF (0.1 uF  para el MAX3232, la capacitancia varía de acuerdo al convertidor de niveles usado, hay que revisar el datasheet)
  • 1 x Conector Hembra DB-9

El hardware asociado microcontrolador es:

  • 1 x Microcontrolador ATMEGA8 o ATMEGA168
  • 1 x Zócalo para circuito integrado de 28 patas
  • 2 x Capacitores cerámicos de 33 pF (varian de acuerdo al cristal)
  • 1 x Cristal de 16 Mhz
  • 1 x Resistencia de 330 ohms 1/4 W
  • 1 x Resistencia de 10 Kohms 1/4W
  • 1 x Led rojo de 5 mm

Otros:

  • Capacitores cerámicos de 0.1 uF para alimentación (usaremos uno o dos por cada integrado)
  • Bloques de terminales de tornillo para circuito impreso
  • Fuente de alimentación de 5V (revisa los diagramas más abajo si no tienes una)
  • Pin Header doble hembra de 8 pines (normalmente se venden como tiras completas, yo la he cortado a la medida)
  • Conviene tener a mano algunos leds y resistencias adicionales para hacer pruebas
  • Tarjetas perforadas para prototipos
Algunos componentes para el adaptador RS232 - TTL

Algunos componentes para el adaptador RS232 – TTL

Grabando el Bootloader

Cuando se compra la tarjeta previamente armada, esta ya viene con el bootloader grabado y listo para transferir los programas, sin embargo al comprar el microcontrolador suelto, debemos primero grabar el software una única vez antes de poder usarlo con Arduino.
El bootloader de arduino viene con la distribución del IDE, junto con un buen paquete de librerías, drivers USB-Serial,  codigo fuente, etc. Podemos encontrarlo dentro del directorio “hardwarebootloaders”. En este directorio hay varias carpetas que contienen varios bootloaders para las distintas versiones de hardware Arduino y el código fuente de los mismos. En mi caso usé el hex precompilado para ATMEGA8.

El programador, junto a las partes usadas en este artículo

El programador, junto a las partes usadas en este artículo

Para efectuar este paso es necesario contar con un programador de AVR. En mi caso estoy usando un programador universal EasyPro 90B, que ademas de AVR programa un montón de otros dispositivos. Existen otras alternativas más económicas, como por ejemplo un programador de puerto paralelo. En este caso se puede grabar directamente el bootloader desde el IDE de arduino, haciendo click en Tools>Burn Bootloader> w/ Parallel Programmer. Como no tengo ninguno de los programadores soportados, el ajuste de los fuses hay que hacerlo manualmente en el programa de grabación y queda de la siguiente forma:

  • El valor 0xCA se debe programar en el byte alto de los fuses del ATmega8.
  • El valor 0xDF se debe programar en el byte bajo de los fuses del ATmega8.
  • El valor 0xCF se debe programar en en el byte “lock” para evitar que se sobreescriba la porción de memoria del bootloader.
Configuración de fuses en mi software de grabación

Configuración de fuses en mi software de grabación

Montaje, Esquemas y archivos.

A continuación tienes los diagramas del hardware que ves en las fotos. En el diagrama del microcontrolador detallamos la correspondencia entre los pines del ATMEGA 8 y los nombres que tienen asociados en la placa arduino original.

Te recomendamos construir el adaptador de RS-232 a TTL y la fuente de alimentación (si la requieres) en la placa perforada  para prototipos, ya que de esta manera la puedas aprovechar en otras aplicaciones. El hardware asociado al microcontrolador es bastante sencillo y puedes construirlo en un protoboard o en una tarjeta perforada, según tus preferencias.

Compilando y probando un programa

Para probar que nuestro hardware y el bootloader funcionan, es recomendable grabar un programa en el microcontrolador, la forma mas sencilla de lograr esto es usando uno de los ejemplos que vienen con el IDE de Arduino. Conviene compilar y cargar el sketch de “led blink” que hace parpadear un led conectado al pin 13 de arduino.

Ejectutando el ejemplo Led Blink

Ejectutando el ejemplo Led Blink

Conclusión

En este artículo vimos que es fácil implementar uno mismo y con un presupuesto bajo, un hardware similar al de las tarjetas arduino. Muchas de las partes requeridas ya se encontrarán en el almacén personal de muchos entusiastas de la electrónica, por lo que “tener un arduino” debería ser tan fácil como buscar un puñado de componentes.

La plataforma arduino brinda una forma fácil y económica de introducirse en la programación de microcontroladores, específicamente en la programación de AVR, ya que excepto para grabar el bootloader no se requiere de un programador. Una vez que se tiene el bootloader grabado (como en las tarjetas comerciales), es fácil cambiar el programa y ver reflejados los cambios en el circuito físico. Además, el microcontrolador puede usarse tanto en una tarjeta como el arduino Duemilanove o bien en una tarjeta y aplicación diseñada por nosotros.

Unas últimas palabras.

Esta es la primera vez que trabajo un microcontrolador AVR, si notas algún error, por favor, ponte en contacto conmigo, mi dirección de correo electrónico (ruben en tech-freaks.net). Cualquier comentario que tengas será un placer escucharlo ( o más bien leerlo :D) en mi correo electrónico o en la sección correspondiente de este blog.

Referencias

  • mariano

    hola hace un año que estoy tratando de programar un avr atmega 8 con boot de arduino pero no lo es logrado me darias algunos accesoa paguin as que tengan programadores que sean compatibles con el boot

  • Lino

    Saludos! hola, me podrias dar la direccion de la tienda de electronica donde consigues micros de ATMEL? Es que yo no soy del DF y en el pueblo en el que vivo no venden más que puro pto microchip =P . Gracias

  • Ruben

    Mariano:
    Yo tengo entendido que cualquier programador que soporte el ATMEGA8 puede servirte para grabar el bootloader, sin embargo no estoy seguro.

    Aquí hay algunos enlaces:
    El más sencillo:
    http://arduino.cc/en/Hacking/ParallelProgrammer?from=Main.ParallelProgrammer
    Otro por pto paralelo
    http://elm-chan.org/works/avrx/report_e.html

    Este último programador me gusta mucho, por que es USB y de código abierto, si no tuviera ya uno seguro inentaria armar este:

    http://tuxgraphics.org/electronics/200705/article07052.shtml

    Lino:

    El ATMEGA8 lo compre en AG electrónica, en su página tienen la dirección, aunque es fácil dar con la tienda, esta sobre República del Salvador. Desconozco si en otras tiendas lo tengan (me imagino que si) pero sería cuestion de buscarlo y yo llebaba algo de prisa.

    http://www.agelectronica.com/

    Suerte ;)

  • http://www.parana-tecnologica.km6.net mariano

    :) victoria….¡¡¡ por fin e logrado programar el atmega 8 use un programador diferente a al de arduino si bien es por lpt, pero este es diferente la configuracion de los contactos a y lo programe con el ponyprog 2.6… a el que quiere comprar un atmge 8 o 168 en argentina le conviene http://www.sycelectronica.com.ar tienen buen precio y disponivilidad…

  • Sandro

    Yo estoy tratando de cargar el bootloader al atmega8 con el puerto paralelo, como te indica la web de arduino, pero no he podido hacerlo.

    saludos de Peru

    • http://tech-freaks.net Rubén

      Hola Sandro.

      ¿Estas probando con el programador que puse en los comentarios anteriores (http://arduino.cc/en/Hacking/ParallelProgrammer?from=Main.ParallelProgrammer)?.

      Desgraciadamente no tengo mucha experiencia programando micros de Atmel de forma “casera”, ya que cuento con un programador comercial. Te voy a hacer algunas recomendaciones de acuerdo a lo que yo leí en su momento en la página de arduino.

      Revisa que tengas la alimentación conectada al circuito.

      Verifica las consideraciones al quemar el bootloader en Win XP que estan en la página de arduino http://arduino.cc/en/Hacking/Bootloader

      Desconozco cual sea el problema que te arroja al intentar grabar, pero vuelve a revisar todas las conexiones de ICSP, si tienes algun dispositivo (impresoras o scanners) que se conecte por puerto paralelo conectalo y hazlo funcionar para probar el puerto paralelo y asegurarte que no este mal el puerto en si.

      Me gustaría ayudarte a resolver el problema, si gustas contactame por correo a ver si podemos solucionarlo.

      Saludos coordiales.

  • ROBERTO

    en el diagrama explícame por favor xq colocas VCC a tierra

    Saludos coordiales

    • http://tech-freaks.net Rubén

      Hola. Se trata de un error.

      Saludos

  • http://none Ricardo

    Hola que tal!!
    muchos Saludos!!
    pues ya he armado el circuito y grabado el bootloader en el ATmega8 estoy utilizado un pl2303 para la comunicación serial!
    y lo reconoce la IDE de arduino cuando subo un Sketch lo sube y no hay problema se encienden los led RX y TX del PL2303 y la ide me pone Subido
    el problema es que el circuito no hace lo que le mande en el Sketch y cuando presiono el Reset parpadea el (pin 13) en ATmega 8 (el 19) y no pasa de ahí! alguna solución?

  • Jesus

    Conecte todo igual que en tu circuito, pero no logro poder programar el atmega. Me sale el error: avrdude: stk500_getsync(): not in sync: resp=0x00 cuando trato de cargar el programa. No pude conseguir un crystal de 16MHz por lo cual estoy usando uno de 15MHz, podria ser por eso?

    • http://geekfactory.mx Jesus Ruben

      Hola.

      Se trata de un error de comunicación. Lo más probable es que se deba al cristal que comenta. En este caso, se pueden realizar varias cosas, como que compile su propio bootloader y cree su propia “tarjeta compatible con Arduino” desde el IDE, de forma que pueda utilizar el cristal de su preferencia. Si gusta puede contactarnos por correo para darle más información.

      Saludos.