Subir a Inicio

PaperBootloaderFTDI: Cargador de programas y bootloader a partir de un cable de datos Nokia


Descripción

Cable programador de Arduino (sketches y bootloader) realizado modificando un cable de datos NOKIA CA-45 0 KU?????.

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 (que son las utilizadas para cargar los sketches una vez que tiene cargado el bootloader) 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.



Pero... mi ordenador no tiene puerto paralelo y además paperduino no tiene conector ICSP !!!

Vamos a mostrar como realizar un programador serie modificando un cable FTDI de fácil adquisición en ebay, al googlear un poco he visto dos tipos de cables compatibles, el CA-42 y el KU??

Lo que haremos será realizar un cable que nos valga para cargar el bootloader y después los programas.

HARDWARE

Un puerto serie dispone de los siguientes pines:

TxD (salida): Transmisión de datos serie (Transmit Data).
RxD (entrada): Recepción de datos serie (Receive Data).
RTS (salida): Solicitud de Envío (Request To Send).
CTS (entrada): Libre para Envío (Clear To Send).
DTR (salida): Terminal de Datos Listo (Data Terminal Ready).
DSR (entrada): Equipo de Datos Listo (Data Set Ready).
DCD (entrada): Detección de Portadora (Data Carrier Detect).
RI (entrada): Indicador de llamada (Ring Indicator).
GND (masa).

Los 4 primeros pines (de color azul) son los que usaremos para la construcción del conector FTDI.

Para poder programar en la placa (In Sistem Programming) AVR utiliza el sistema SPI (Serial Periphal Interface), que utiliza 6 cables:

SCK (entrada micro) Señal de Reloj serie (Serial Clock)
MISO (entrada micro) (Master In – Slave Out).
MOSI (salida micro) (Master Out – Slave In).
Reset (entrada micro)
GND
Vcc


Lo que necesitamos saber es que pines tenemos disponibles en la pequeña placa situada en el conector del cable.

1 MISO = CTS
2
3 SCK = TxD
4 MOSI  = RTS
5 -Reset = DTR (El cable standar FTDI tiene el reset como RTS, Arduino utiliza el DTR)
6 GND




Lo que necesitamos es  

******************************

Para cargar el bootloader necesitamos por un lado el cable Super-FTDI modificado y un programa que lo gestione.
Lo mismo que hemos modificado un cable FTDI, podemos modificar el editor Arduino para su control.
Primero editaremos (con gedit) el archivo de configuración de avrdude.conf (es el subprograma que se encargará de programar el chip) situado en Arduino-00XX/hardware/tools:


 En el editor buscamos a palabra "bitbang":



Y a continuación añadimos las líneas siguientes:

# programador paperFTDI realizado a partir de un cable de datos NOKIA
# reset=dtr sck=tx mosi=rs miso=cts

programmer
  id    = "paperftdi";
  desc  = "Adaptador paper ftdi bootloader, reset=dtr sck=tx mosi=rts miso=cts";
  type  = serbb;
  reset = ~4;
  sck   = ~3;
  mosi  = ~7;
  miso  = ~8;
;


!!!!!!!!!!!!!!!Poner imagen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Es decir, definimos un nuevo programador denominado paperftdi, con el conexionado que hemos hecho el cable.

Ahora tenemos que modificar el editor para que el nuevo programador aparezca en el menú.  En la carpeta Arduino-00XX/hardware/arduino editaremos el archivo programmers.txt


al final del documento añadiremos las líneas siguientes:

PaperFTDI.name=PaperFTDI
PaperFTDI.communication=serial
PaperFTDI.protocol=paperftdi

Nos quedará de la forma siguiente:


Guardamos el documento, y la próxima vez que abramos el editor de Arduino, ya tendremos el menú disponible:




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


es decir:


Componentes

"Método txapuzas"
Un cable USB-PuertoParalelo(ebay ~3€) 
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 3 Euros en el año 2010 para el método txapuzas y 4,5 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:

 


Realización: método txapuzas


 
Como siempre utilizaremos el método Paper que consiste en ayudarnos en unas pegatinas para facilitarnos el proceso de montaje y soldadura.

Primero imprimiremos el documento PaperShieldAdapter (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:



Aunque antes de recortarla, si quieres puedes protegerla con un plástico autoadhesivo transparente.


Ahora la recortamos.


Y colocamos adhesivo en la parte inferior (yo utilizo cinta de doble cara, pero puedes utilizar cualquier pegamento, incluso si quieres puedes imprimir sobre etiquetas de papel)


Tomando como referencia la Paperetiqueta toma las dimensiones de un trozo de stripboard y recórtalo (17 filas x 20 agujeros). Y con ayuda de una aguja coloca sobre él la Paperetiqueta, haciendo que coincidan los agujeros


Con la misma aguja perforamos todos los agujeros de la placa (sobre un soporte blando).


Y comprobamos al trasluz que no nos hemos dejado ninguno.


Como las bornas de conexionado del Arduino tiene unos pines fuera de la cuadrícula de 2,54mm, tenemos que taladrarlos.


Quedando unos agujeros justo entre las dos pistas (que no te despiste que en esta placa los agujeros originales estén un poco desplazados del centro de las pistas)


Lo que hice a continuación fué eliminar las pistas de cobre en la zona de los agujeros taladrados.


Para todas estas operaciones puedes toma como referencia la imagen de la hoja impresa 

NOTA: Aunque yo he utilizado éste método, creo que es mejor que en vez de eliminar completamente las pistas en la zona del conector, con la fresa del taladrín, elimines con cuidado un lado de las pistas, para que doblando ligeramente las patillas del conector hembra, poder soldarlas directamente. Tal y como se indica e la imagen inferior.



Otro truco es la soldadura de los pines macho en la placa. Como tenemos que soldarlos en el otro lado de la placa. Lo que haremos es desplazar el plástico de fijación que los une hacia un extremo. Tal y como se vé en el conector de 6 pines de la derecha de la imagen.


NOTA: Al realizar el montaje con pines de 12 mm me he dado cuenta de que algunos componentes de paperduino interfieren ligeramente con esta placa, por lo que  creo que es mejor utilizar pines más largos ( de 20 o 25 mm).

Y colocarlos por el lado de la etiqueta...


... pero soldarlos por el lado de las pistas de cobre.


Después soldamos todos los elementos. Los puentes que no se cruzan puedes realizarlos con hilo de cobre unifilar pelado.


Con ayuda de unos trozos de cable soldamos los pines del conector desplazado a las pistas de cobre (Mira la nota anterior donde se explica otro método más sencillo)


Y soldamos todos los puentes y conectores.


Tomando como referencia las soldaduras rompemos las pistas en las zonas indicadas en la hoja impresa.  


Y ya tenemos nuestro adaptador (en este caso sobre Paperduino-Stripboard):


En esta imagen puedes ver, que al haber utilizado pines de 12mm he tenido que doblar el regulador de tensión y un poco uno de los condensadores electrolíticos:


En esta imagen vemos como el pulsador de reset esta accesible para poder programar el Paperduino desde un cable FTDI sin reset automático. 

NOTA: Procura que el Shield que conectes no utilice los pines Rx y Tx ya que podría interferir la grabación del programa. 


Que como ves tiene la disposición de conectores similar al Arduino oficial:





Funcionamiento

Como no dispongo de ningún Shield, 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.


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 :-)