Páginas

PaperBootloaderSPP: Grabación del bootloader a Paperduino por el puerto paralelo


Descripción

Instrucciones de conexión de paperduino al puerto paralelo para poder grabarle el bootloader.

Introducción

Para convertir el chip ATmega en un Arduino es necesario cargarle un "bootloader" o cargador, es decir, un programa inicial (utilizando un simil con un PC podríamos decir que es una BIOS) que nos facilite la conexión del Arduino con el PC.

Con el bootloader instalado en el chip, el método de grabación de programas (sketches) en el Paperduino (Arduino), es mediante una conexión serie que cumple los protocolos standard RS232, es decir tiene una velocidad (baudios), bit de paridad,  ... definidos.

El Arduino dispone de un chip (FT23RL) que crea un puerto serie a traves de un puerto USB,  pero el paperduino no tiene un chip USB, por lo que para cargar programas en él es necesario utilizar un cable adaptador especial. Si nuestro ordenador tiene puerto serie podríamos utilizarlo, pero tendríamos que modificar las señales (por ejemplo con un chip max232) ya que paperduino trabaja con lógica 0+5v y el puerto serie -12+12v (IC Max232). Pero otra posibilidad es utilizar un cable FTDI

Como podrás observar, esto es la pescadilla que se muerde la cola, ya que si sin bootloader no puedo cargar programas, entonces, ¿cómo cargo el bootloader?

Para grabar el bootloader en el micro, se usan tambien señales de 0-5v pero el protocolo es distinto, las patillas no son Rx y Tx sino MISO, MOSI, SLK y Reset y los tiempos y protocolos de transmisión son diferentes. Es decir para establecer la comunicación quizas se active por un milisegundo una patilla, despues otra, despues se desactiva, siguiendo los ciclos de SLK, es decir nada que ver con la transmisión serie  RS232.


Para grabar el bootloader necesitaremos de un hardware y software especial. El editor Arduino incorpora el software (Menu/Tools/Burn bootloader) compatible con 5 programadores, los dos últimos son un programador paralelo y el propio Arduino.


por sencillez vamos a utilizar el programador paralelo basándonos en lo indicado en la página de Arduino programador paralelo.

PROYECTO FRACASADO (Cable USB-Paralelo)!!!

Este proyecto nació con la idea de modificar un cable USB-Paralelo con el chip PL-2305, de fácil compra en ebay por menos de 3€, para poder cargar el bootloader en ordenadores sin puerto paralelo, pero no lo he conseguido.


Este cable tiene en el interior del conector un chip PL-2305:

 

Este chip crea un puerto paralelo virtual, pero no permite un control directo de sus pines (bitbang mode).  A continuación muestro los pasos que realicé  sin resultado, de forma que si alguien quiere intentarlo, lo tenga un poco más fácil.
(Lo he intentado en Linux, Ubuntu Lucid Lynx 10.04LS)
 
Al conectar el cable, el ordenador lo reconoce:
...:> lsusb
Bus 004 Device 002: ID 067b:2305 Prolific Technology, Inc. PL2305 Parallel Port

y crea un par de archivos en el directorio /dev:

/dev/usblp0
/dev/usb/lp0 

el primero es un enlace simbólico que apunta al segundo

El editor Arduino utiliza el programa avrdude como programador. Y al  programar el chip con el "Parallel programmer" vemos que intenta utilizar en el puerto paralelo parport0.


Esto podemos arreglar de dos formas, ó crear un enlace simbólico entre parport0 y /dev/usblp0:

sudo ln -s /dev/usb/lp0 /dev/parport0

y dar permisos de lectura y escritura. 

O también podemos modificar el archivo avrdude.conf:

Arduino-xx/hardware/tools/avrdude.conf

Lo edité con gedit, buscando el texto "Overall avrdude defaults" que está en la línea ~300 y cambié el paralelo por defecto ("parport0" por "usb/lp0")
  
 
Ahora, al programar, el editor nos dice que no tenemos permisos. Así que ejecuté:
"Alt+F2"

y en la pantalla que salío mandé abrir nautilus con permisos de administrador:


En el directorio /dev/usb cambié los permisos del archivolp0 "otros" a Lectura y escritura:
 
 

Pero al intentar programar, sigue fallando:



Para intentar deducir que ocurre, ejecuté lsusb en modo"verbose":

>lsusb -v

y en el listado no apareció ningún puerto de control (no pongo el listado porque es muy largo) y además la última línea:

cannot read device status, Operation not permitted (1)

Malo, malo...

Lo intenté con el comando:

cat /proc/ioports
Para ver que puertos de entrada salida tengo en el ordenata, pero no muestra ningún puerto paralelo.

CONCLUSION: No he podido programar el Paperduino con el cable USB-Paralelo.

No obstante si tu ordenador tiene puerto paralelo, sí puedes programar el bootloader con el "Parallel programmer" en tu Paperduino.

Tu ordenador tendrá un conector con estas señales:



Ahora lo que necesitaremos es conectar este conector DB25 a Paperduino, que no tiene conector ICSP y lo haremos de  acuerdo a la tabla siguiente:


es decir:


Componentes

"Método txapuzas"
Un ordenador con puerto paralelo conector DB25
2 Resistencias de 470 Ohmnios 1/4W (0,02x2=0,02€)
1 Resistencia de 220 Omnios 1/4W (0,02€)
unos cuantos cables unifilares
(tubo termoretráctil)

"Método Paper"
lo anterior más...
1 barra de pines macho de 25mm
un trozo de stripboard

El coste total es de unos 0,6 Euros en el año 2010 para el método txapuzas y ~1€ para el método Paper.


Realización: método "txapuzas"

Si sólo necesitamos grabar un paperduino, podemos utilizar un método un poco txapuzas pero rápido, utilizando unas resistencias y unos cables uniremos el conector DB25 al paperduino.

NOTA: En la imagen sólo se han representado los cables de programación, los de alimentación no. Para programar el Paperduino es necesario alimentar al Paperduino.


Lo único que hay que hacer es empalmar las resistencias con el cable, podemos soldarlas, o simplemente enrrollar el cable en los terminales de las resistencias, pero si tenemos un poco de tubo termoretráctil, podemos hacer rápidamente una conexión fiable:


colocamos el "macarrón"
 
 le aplicamos un poco de calor





y el tubo se encoje, aislando el cable y haciendo más robusta la unión.

Como el diámetro del cable unifilar y el de las resistencias es menor que los agujeros de los conectores, puedes doblar sus extremos para hacer que la conexión sea un poco más segura:
 


Realización: método "paper"

NOTA: como no tengo puerto paralelo en mi ordenador, no he realizado físicamente este proyecto y no he comprobado su correcto funcionamiento. Si ves algún fallo por favor comunícamelo.
 
El método Paper consiste en ayudarnos en unas pegatinas para facilitarnos el proceso de montaje y soldadura.

Primero imprimiremos el documento PaperBootloaderSPP (disponible en la parte inferior de esta página en el apartado de descargas):


Una vez impresa comprobaremos que la impresión se ha realizado a la escala correcta con la ayuda de la regla impresa situada en el lateral izquierdo de la hoja. Al colocar a su lado un regla en centímetros deberán coincidir las marcas.



Después recortamos la Paperetiqueta:


La pegamos sobre un trozo de 13 filas por 7 agujeros, y se sueldan los puentes, las resistencias y los pines. Los pines grises situados en el centro de la placa, se sueldan hacia arriba para que se puedan introducir en el conector DB25, pero los negros (reset, mosi,mis,csk y gnd) hay que soldarlos hacia abajo para conectarlos a los pines del paperduino, para lo cual, debes desplazar los plásticos a un extremo del pin para posteriormente soldarlos por la zona de cobre:

NOTA: como los pines del concector no coinciden con la distribución de los agujeros de la placa stripboard, quizás tengas que doblar ligeramente los pines para que encajen con el conector (es por ello que recomiendo utilizar pines largos de 25mm)



La vista del adaptador sería:

como ves no es necesario realizar ningún corte en las pistas.

El montaje sería el siguiente:
La referencia para montar el adaptador sobre la placa es el pin de reset. Y luego para conectar correctamente el cable al adaptador, nos fijaremos en el dibujo en gris que representa el conector.



Funcionamiento

Como no dispongo de puerto paralelo en mi ordenador, no puedo realizar ningún montaje de ejemplo de funcionamiento. Eso puede ocasionar que el adaptador tenga algún error que no he podido corregir. Si es así y encuentras un error, dímelo para corregirlo.

Este adaptador funciona (al menos eso espero) con Paperduino-Stripboard, con Paperduino-Perfboard y con Paperduino-PCB.

Con el Paperduino original si utilizas pines de 25mm creo que también se podrá conectar correctamente, ya que al ser los pines tan largos permiten cierto margen en la posición del conector.

Nota: Tal como indica anónimo en sus comentarios, si utilizas el parallel programmer en Windows, es necesario instalar previamente Giveio tal como se indica en ParallelProgrammer

Una vez que tengas conectado el paperduino con el puerto paralelo, lo único que tienes que hacer es desde el editor de Arduino programarlo:


Información legal

1. Propiedad intelectual
Todos los derechos de propiedad intelectual del contenido de Txapuzas eléctronicas, están bajo una licencia Creative Commons Share-Alike, cuyo contenido podéis revisar en este enlace.
Por tanto queda permitido copiar, distribuir, comunicar públicamente la obra y hacer obras derivadas de la misma, siempre que se respeten los términos de la licencia arriba reseñada.
3. Actualizaciones y modificaciones de Txapuzas electrónicas
El autor se reserva el derecho a actualizar, modificar o eliminar la información contenida en Txapuzas eléctrónicas, y la configuración o presentación del mismo, en cualquier momento, sin previo aviso, y sin asumir responsabilidad alguna por ello.
4. Indicaciones sobre aspectos técnicos
El autor no asume ninguna responsabilidad que se pueda derivar de problemas técnicos o fallos en los equipos informáticos, que se produzcan a causa de los circuitos e ideas expuestos en el blog de txapuzas electrónicas, así como de los daños que pudieran ocasionar.
El autor se exime de toda responsabilidad ante posibles daños o perjuicios que pueda sufrir el usuario a consecuencia de errores, defectos u omisiones en la información facilitada.


Descargas

El esquema, descripción e imágenes están disponibles en el siguiente enlace:

Si tienes problemas con el enlace anterior, aquí puedes descargar todos los archivos de txapuzas

Notas
Para la realización de este proyecto se han utilizado los programas: Arduino, Inkscape, Openoffice, Gimp, Picasa, Fritzing
Si encuentras algún fallo, se te ocurre alguna mejora, o simplemente quieres hacer algún comentario, te lo agradeceré: Gracias :-)

20 comentarios:

  1. Hola, quería decirte que me he leido las entradas referidas al paperduino y me parace genial cómo está explicado todo.
    Pero leyendo esta página me he dado cuenta de dos cosas que vienen en la web de Arduino.
    http://arduino.cc/en/Hacking/Programmer en esta pone que para un programador paralelo se debe modificar un archivo y demás cosas. Creo que eso podría solucionar el problema del USB (no estoy seguro)
    http://arduino.cc/en/Hacking/ParallelProgrammer en esta se explica lo del paperbootloaderSPP o metodo txapuzas, pero pone al final que es necesario ejecutar gimeo.
    Espero que esto haya sido de ayuda.

    ResponderEliminar
  2. Hola Anónimo.
    Ante todo, Gracias por tu interés!!.
    Respondiendo a tus comentarios:
    1.- Es necesario modificar el archivo de configuración para instalar programas desde el Arduino-editor sin utilizar el bootloader con un grabador externo. Pero para instalar el bootloader, el Arduino-editor ya tiene su propia entrada en menú (Tools/Burn Bootloader/w/ Parallel Programmer).
    El problema del cable-USB es que hoy en día (que yo conozca) sólo hay dos chips dedicados que conviertan USB-RS232TTL uno es de FTDI (FT23RL o similar) y el otro es de Prolific (PL2305). El primero permite el método bitbang, es decir el acceso independiente a cada pin, con lo que se puede utilizar para programar el Arduino, pero el de Prolific no tiene esta posibilidad(o al menos yo no he podido utilizarla).
    2.- Tienes razón. Se me había olvidado comentar que para utilizar el Parallel Programmer en Windows, es necesario instalar Gimeo. (yo utilizo Linux).
    De nuevo muchas gracias.

    ResponderEliminar
  3. por casualidad nadie tendrá un esquema para sacar 5v de 3.7v con un MC34063A ??

    ResponderEliminar
  4. No has intentado ejecutar el programa como usuario root

    "sudo arduino", en linux solo accedes a los puertos si eres root segun tengo entendido

    ResponderEliminar
  5. hola hay otra opcion a las resistencuas de 470ohnios

    muy bien los tutos

    ResponderEliminar
  6. Hola Iñigo.
    Lo primero que quería era felicitarte por todo el blog, tienes unos tutoriales muy buenos, me están sirviendo muchísimo.
    He leído en un comentario superior que deciais que hay que istalar Gimeo para Windows, pues te comento mi problema, tengo acceso a un ordenador con puerto paralelo, pero solo tiene puesto Windows y no me permite instalar nada... Hay alguna posibilidad de que ese gimeo se pudiese ejecutar desde un pincho o similar?
    Muchas gracias de antemano y disculpa las molestias.
    Casi007

    ResponderEliminar
  7. Hola anónimo, siento no poder ayudarte, ya que utilizo linux. no obstante lo que si podrías hacer es ejecutar linux desde un pendrive en un ordenador con windows:
    http://sourceforge.net/projects/portableubuntu/
    (no lo he probado)

    Saludos

    ResponderEliminar
  8. Hola
    Soy nuevo en esto. Quisiera felicitarte por tus ideas.Escribo este mensaje para solicitar ayuda.
    Tengo montado paper-bootloader SPP por el metodo Txapuzas conectado a un arduino uno, instale Gimeo en la misma carpeta que arduino en winXP, seleciono board>arduino uno,el serial port, programmer>parallel programmer, burn bootloader y me da el siguiente error
    "avrdude: verification error, first mismatch at byte 0x7e00
    0x11 !=0xff
    avrdude: verification error, content mismatch"
    alguien sabe a que se debe dicho error.
    Muchas gracias de entemano

    ResponderEliminar
  9. Hello,
    Your blog is super helpful, thanks.

    Can You tell me are there any batter or worse bootloaders for this project?
    I've seen several of them (optiboot, adaboot...), which do you think will be most appropriate for this setup?

    Sorry if this question seems kind of trivial - I'm newbie in microcontrolers :)

    ResponderEliminar
  10. Hello Anónimo,

    The easiest way is to use the default bootloader built into the Arduino programming environment, so the circuit is 100% compatible with arduino.

    ResponderEliminar
  11. Hi there!
    I did (at my best) what you said.
    Connected my paperduino with the parallel port of the PC, BUT it doesn't work!!
    Could you please give me some directions? I posted the results also here: http://arduino.cc/forum/index.php/topic,98480.0.html
    Thanks

    ResponderEliminar
  12. Hi,

    Is possible use the RS232 ?? Becouse i dont have DB25 !!

    ResponderEliminar
  13. Hola te quería preguntar que cual es el programa que usas para hacer los dibujos de las placas. Me refiero a los dibujos que se imprimen se ponen en una placa universal y se colocan los componentes.
    Contéstame si te es posible a mi correo:
    davidp1995@hotmail.com . Muchas gracias de antemano.

    ResponderEliminar
  14. se puede utilizar el puerto RS232 para cargar el bootloader conectadolo como se muestra en este lugar:
    http://arduinodiy.files.wordpress.com/2012/03/rs232-ttl4.jpg

    ResponderEliminar
  15. Hola ,soy nuevo en esto,tengo realizada ya la placa paperduino PCB con el atmega328 pero no se que es el programa Gimeo alguien podria decirme que es para poder programar el paperduino a traves del puerto paralelo?Gracias de antemano

    ResponderEliminar
  16. no hay misterio en por que no funciona....has echo todo de manera correcta. peroooo...... ningun programador serial funciona en adaptadores. por que el voltaje esta limitado a los 5v de el usb. y el serial real utiliza voltajes mas altos.... asi de simple es .... tal vez se pudiera hacer una interface que eleve los voltajes a un nivel adecuado

    ResponderEliminar
    Respuestas
    1. En la pagina http://txapuzas.blogspot.com.ar/2009/12/paperrs232-convertidor-rs232-ttl-para.html?m=1 se explica como conectar un arduino a un puerto serie de computadora con un adaptador

      Eliminar
  17. o analizando el problem pues.. estas usando las recistencia que son para puerto normal que funciona a 12v. lo adecuado seria bajar el valor de ellas y adecuarlas a los 5v de el adaptador usb-serial en el arduino no habra problemas por que se programa a 5v..... en pics y otros dispositivos que usan 13v ( Es un voltaje entre 12-14 VDC aplicado al pin MCLR/VPP del PIC )para su programacion no funcionara jamas....

    ResponderEliminar
  18. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  19. Hola Iñigo, quería comentarte que el problema del adaptador se deba a que tal ves el integrado pl-2305 que se aprecia en la foto sea falsificado y por eso puedes tener problemas, acá te mando un link con la foto del chip con el encapsulado original de http://prolificusa.com/portfolio/pl-2305i-usb-printer-bridge-controller/. He encontrado foros en donde tienen el mismo tipo de problemas con el pl-2303 ya que vienen también falsificados con ese tipo de encapsulados como el que se ve en tu foto y eso me ha hecho sospechar, ojala puedas confirmar mis sospechas, que es solo eso, sospechas.
    Mi comentario anterior lo elimine debido a que me explique mal.

    ResponderEliminar