viernes, 7 de octubre de 2011

PaperMux 4067

Con el siguiente "shield" podremos añadir hasta 96 pines analógicos al Paperduino, de forma relativamente sencilla. El inconveniente es que ocupa cuatro pines digitales, cosa de la que nos ocuparemos más adelante.

La parte principal del circuito es un multiplexor/demultiplexor 16:1 de la serie 4067, el que uso es un HCF 4067 BE, hay otros modelos, como el que usan en este interesante proyecto del que he fusilado la idea, o entre los foros de Arduino, básicamente todos se comportan igual, y nos permiten usar sin problemas los pines analógicos para nuestros propósitos. El que he usado es bastante ancho (600 mil), y un conector DIP normal no llegaba, por lo que usé unas tiras de pines redondos.

La idea es que conectando los cuatro pines de control del multiplexor (4 bit), podemos decirle de qué pin va a darnos la lectura, y usando un pin analógico conectado a la salida común del multiplexor leamos los datos que hayamos seleccionado. También se puede usar en modo de escritura. Para saber que pin vamos a usar debemos mirar la tabla de verdad del IC, luego pasamos el número a binario y averiguamos qué bit corresponde a cada pin. El 7 es 0111, luego el pin A debe ser 1 a, el B 1, el C1 y el D 0 (van al revés).

Para conectar los aparatos que vayamos a usar (yo he puesto distintos tipos de sensores, y en cuanto haga un "paperteclado" analógico lo probaré) se pueden poner los conectores que vayamos a usar, como no tengo preferencias en esto, me he basado en la cantidad disponible de tiras de pines que tenía y los he puesto en proporción.

Para soldar los pines, he soldado primero los redondos, luego los hembra cuadrados y por ultimo los pines macho. Estos dos últimos los sujetaba entre sí con pines contrarios para que no se separaran al soldar y luego no se pudieran encajar bien los conectores de los sensores.PaperMux_ExtPwr_a_1.jpg

(Los colores de la foto responden a que la impresora está en las últimas y ya no me sale tinta cyan, el amarillo ya se atascó hace tiempo y no he podido limpiar el cabezal.)

Conviene a su vez lijar bastante ajustados los bordes de las tiras de pines hembra cuadradas, pues pueden tropezar con los redondos y después encajar mal al soldar.

He hecho dos "shields", uno espejo del otro, para que se puedan ir apilando sin estrorbar a los sensores, quizá fuea buena idea encontrar un modo sencillo de pasar tornillos de sujección entre los "shields". También, en los esquemas adjuntos he puesto un esquema del shield con alimentación externa, que no he probado por falta de material y que garantizo aún menos que el resto.

PaperMux_montado.jpg

PaperMux_funcionando_3.jpg

Papermux_AB_1.jpg

Papermux_AB_cruz_1.jpg

Hardware necesario.

  • Un multiplexor 4067 por cada 16 señales analógicas que queramos añadir.
  • Perfboard 26x16 agujeros. Puede ser 25x15, pero me gusta andar un poquito holgado.
  • Tiras de pines redondos, 3 de 4 pines, 1x13 y 1x12.
  • Tiras de pines hembra 4x4, 1x6, 1x8 y 1x14.
  • Tiras de pines macho, 3x8.
  • Cables de colores, estaño un soldador (mirada de rayos láser en su defecto), papel, cinta de dos caras, celo, si queremos alimentar el multiplexor externamente, una clema o borna, y liquidos hidratantes para nosotros.

Software necesario.

Entorno Arduino o similar, lector o editor de .SVG, PDF, PNG o Postcript para imprimir la paperetiqueta y se puede usar el sketch que adjunto más abajo como ejemplo para leer los pines. También este es un buen ejemplo.

Para leer los datos se puede usar el puerto serie, y pasarlos a fichero si se necesitan, usar matrices donde almacenarlos, teniendo en cuenta que la memoria del ATMega es bastante limitada, o también pasarlos por el LCD, como he hecho yo, usando el Papershield LCD.

PaperMux_funcionando_1.jpg

El sketch usa tres bucles, cada uno incluído dentro del anterior. El primero es para decidir qué pin se usa, es mejor alternarlos ya que si no el pin analógico del ATMega puede no refrescarse bien, el segundo decide que pin del multiplexor leemos, y en el tercero hacemos un ciclo de relecturas para mostrar por pantalla y que se pueda ver. Los tiempos se pueden alterar, pero es siempre recomendable dejar un lapso entre la lectura de un shield y el otro para que el pin se estabilice. En la pantalla se refleja el número de pin del sensor, el número de pin analógico que recibe la lectura y la tabla de verdad de los pines de control del multiplexor, con el bit más significativo a la izquierda. En la segunda línea aparece el valor que da el dispositivo conectado a ese pin, entre 0 y 1023 en pasos de 0,47V, y si no tiene nada puede dar un valor cualquiera por diversas inducciones, o hasta por acercar las manos al circuito.

Para el montaje, como siempre, os remito a la página de Txapuzas, que explica muy bien el "método paper".

Este es el archivo donde se encuentran los gráficos imprimibles, y el sketch a usar.

Datasheet e info del IC HCF 4067.

Proyecto donde usan el 4067 para leer 64 sensores y moldear una escultura virtual.

Usando el LCD mas el multiplexor me quedo sin pines digitales libres, cosa que intentaré solucionar en la próxima entrega usando un 595, y más tarde quizá me anime a multiplexar los PWM. Pero antes debo también hacerme un "shield" de interconexión para el Arduino, por si el ATMega16 se me va quedando sin memoria con tanta cosa que le voy metiendo.

Revisión 1

La guía aquí presentada es a modo informativo, manejar y modificar aparatos electrónicos conlleva riesgos que aquel que repita los pasos aquí mostrados debe asumir por sí mismo, no siendo el autor ni el publicante del documento responsables de los accidentes o daños materiales o personales ocasionados por la perpetración de las modificaciones descritas.

Powered by Zoundry Raven

martes, 20 de septiembre de 2011

Papershield LCD

Una vez que parece que puedo subir programas al microcontrolador, estaría bien ver alguna información de lo que hace para cuando no lo tenga conectado al ordenador. Para eso Arduino tiene una librería de uso de pantallas de cuarzo líquido (LCD) y unas instrucciones de uso muy curras. El problema es que son diez cables a conectar cada vez que se quiera usar, mejor hacerme uno de esos chismes que llaman "shields" y que sirven para enchufar un aparato al Arduino, en este caso paperduino, directamente y ya se pueden empezar a usar.

El método usado es el método paper, con el que con una pegatina que nos imprimimos tenemos una guía de donde va cada componente y por donde iría cada cable. Uso "perfboard" ya que me permite más libertad a la hora de ir colocando los componentes según vaya encontrando problemas o se me ocurran nuevas soluciones, aunque se tiene que soldar más. Para instrucciones detalladas de cómo hacer un "paper" os recomiendo la página de Txapuzas, mi cámara no es ninguna maravilla y las fotos de cerca no salen nada bien, asin que paso a relatar los pormenores.

Hardware necesario:

Un Paperduino.

Tiras de pines hembra una de 1x14, dos de 1x4, una de 1x6 y una de 1x8, como las tiras vienen con más agujeros se recortan con cuidado y es buena idea lijar los bordes.

Tiras de pines macho, para la placa preferiblemente largos, los del LCD a gusto de cada cual. Recomiendo antes de soldar estos últimos, hacer pruebas de cómo quedarían en el "paperLCD Shield". Para la placa uno de 1x14, uno de 1x4 y uno de 1x8 para conectar con el Paperduino. Para el LCD uno de 1x4 y otro de 1x6.

Una placa de prototipos 15x14 agujeros, es recomendable lijar y ajustar bien los bordes para que el cable del FTDI no tropiece con la placa si es un Paperduino Perfboard o PCB.

Una pantalla LCD 16x2 compatible con las de Hitachi.

Un potenciómetro pequeño de 10k.

Cables de colores, aunque uso una gama, puede ser cualquier otra pero para que sea fácil identificarlos, se necesitan nueve colores distintos.

Líquidos nutritivos y sabrosos para no deshidratarnos, agua, café, zumo etc.

Software necesario:

Entorno Arduino.

La librería de LCD de Arduino nos permite usar LCDs de 16x2 (dieciséis caracteres y dos líneas), tienen que ser compatibles con los LCD de Hitachi, eso se ve en que deberían tener 16 conexiones y en el "datasheet" debe especificar la siguiente distribución de pines. Por lo general con cinco voltios se alimentan correctamente, aunque hay que tener en cuenta que si tiene luz trasera, esta va a otro voltaje y debería regularse el voltaje que va a usar la luz.

1 VSS (Tierra de la fuente de alimentación).

2 Vdd Alimentación (+5v).

3 Vo Ajuste de contraste.

4 RS Señal de selección de registro.

5 R/W Lectura/escritura de datos.

6 E Señal de activación (enable).

7 DB0 Bus de datos.

...

14 DB7 Bus de datos.

Y adicionalmente, si tiene luz trasera, A (ánodo, positivo de la luz) y K (cátodo, el negativo), también funcionan el 15 y el 16 para este menester.

Arduino va a usar los pines del uno al seis y del once al catorce, por lo que podemos soldar unas tiras pines a la pantalla para luego poderla enchufar directamente al shield e ir intercambiando entre pantallas según las vayamos rompiendo (yo suelo confundirlas con galletas al desayunar) o necesitemos que estén orientadas de distintas formas. Por ejemplo tengo una soldada con pines doblados, y otra normales.

LCDpindoblado.jpg

LCDpinrecto.jpg

El shield es bastante sencillo, consiste en pines macho que pondríamos a un lado, y pines hembra al otro. Primero pondríamos la tira de pines hembra que quisiéramos colocar en su lugar, y a continuación, con el plástico que junta los pines la más alejado de la placa, encajaríamos los pines macho con el conector para soldar de los pines hembra.

Pinchos.jpg

En la foto he usado pines macho del doble de longitud, eso permite poder conservar el plástico y tenerlos un poco más estables. Al soldar y juntar las piezas de cobre de los pines hembra con los machos, no podemos bajar el plástico hasta el fondo, y eso puede causar malas conexiones al quedar demasiado cortos los pines. Conviene también comprobar bien la soldadura antes y después de soldar los cables y conexiones, pues es un sistema un tanto endeble a menos que se infiltre bien el estaño.

Luego sueldo el potenciómetro que regula el contraste y paso a conectar los pines con los cables correspondientes. El negativo del pot al pin AGnd del paper, el positivo al pin AVcc, y luego los pines del LCD.
LCD Potenciómetro Paperduino
1 VssNegativoAGND
2 VddPositivoAVcc
3 Vo Regulado -------
4 RS --------- D11
5 R/W Negativo AGND
6 E --------- D10
11 DB4 --------- D5
12 DB5 --------- D4
13 DB6 --------- D3
14 DB7 --------- D2

Una vez acabado, queda así. Nótese que hay cables a ambos lados, al ser una placa relativamente pequeña y con muchos cables cruzándose he optado por irlos poniendo un poco repartidos entre los dos lados para evitar líos. Por otro lado las dimensiones del potenciómetro pueden variar, quedan como referencia los colores azul para el contraste, negro para tierra y rojo para positivo, por si alguien que use esto tenga un "pot" distinto.

LCDShield01.jpg

LCDShield01B.jpg

Hay mil formas de hacerse un shield, esta es una "afoto" de una prueba anterior en la que conecté el voltaje y la tierra a las entradas del Paperduino y además conecté el FTDI. De paso descubrí que hay que tener cuidado con la longitud de los pines y su soldadura.



Podemos hacer pruebas subiendo los distintos sketchs que hay en los ejemplos del entorno Arduino. Y usando el paperFTDI modificado queda tal que asin.



El documento con la pegatina se puede descargar aquí. He puesto también un sketch que permite el scroll de una sola línea en vez de toda la pantalla.

Estas son las instrucciones de cómo conectar un LCD al Arduino.

Página de Txapuzas, con instrucciones detalladas sobre el "método paper" y un bonito adaptador de este "shield" para usarlo con un Arduino.

En el siguiente post iré contando mis venturas y desventuras con los multiplexores para poder leer muchas señales analógicas de distintos sensores y ahorrar pines del Paperduino.

Revisión 2

La guía aquí presentada es a modo informativo, manejar y modificar aparatos electrónicos conlleva riesgos que aquel que repita los pasos aquí mostrados debe asumir por sí mismo, no siendo el autor ni el publicante del documento responsables de los accidentes o daños materiales o personales ocasionados por la perpetración de las modificaciones descritas.

domingo, 11 de septiembre de 2011

Revisión del FTDI de Txapuzas

Después de muchos cabezazos con el 50$robot, pensé que debería haber una forma sencilla de ver los datos de los sensores para ver si se ajustaban al programa. Buscando buscando, encontré esta magnífica página donde te explican cómo hacerte un arduino sencillo, el Paperduino, con un poco de paciencia y fusilando los shields de .......... me hice un par de shields, uno para los sensores y servos, y otro para pinchar un lcd que me pudiera mostrar los parámetros de los sensores del flamante paper50$bot que estaba maquinando.


Hete aquí que me resultaba bastante incómoda la forma de programar el paperduino, y me compré en ebay el cable ca-42 para hacer el paperFTDI. Como quiera que uso XP-x64 y los drivers no iban muy bien, empecé a buscar por la "Hinternec" los controladores actualizados, encontrando de paso algunas utilidades para identificar los dispositivos USB, documentación del chip Prolific 2303, que es el que usa el cable, y algunos "hacks" para activar el reset y la alimentación.




Me entró el gusanillo por saber si podría modificar el cableado del chip para activar las señales necesarias, y a base de ensayo, error, multímetro y estaño parece que lo he conseguido. A continuación detallo los pasos a seguir para hacer un USB-232 funcional para el paperduino. Se puede hacer un adaptador para que coincida con los pines ISP del Uno, y supongo, no lo he probado aún, que para coincidir con el ISP del 50$bot, ya que los pines van a las mismas patillas.





Lista de piezas:


Cable compatible Nokia DKU-4 o CA-42. ~4€ en E-bay


Cables de colores de aproximadamente un metro. Dependiendo del cable que te haya tocado uno o tres.


Un retal de stripboard.


Cinta aislante, fixo y cinta adhesiva de dos caras.


Café, agua o refrescos para no deshidratarse.


Herramientas:


Un soldador, estaño, pela cables (yo uso las uñas y un mechero) y un destornillador o algo similar para abrir el encapsulado.


Software necesario:


El entorno Arduino.

Software recomendable:


Enumerador de puertos USB (windows), nos permitirá identificar el chip usado. En Linux podemos usar el hardware info o mirar el dmesg.


Drivers actualizados (windows). Linux ya trae los controladores para este tipo de chips.




Esquema de pines, PaperFTDI-Paperduino-Adaptador RS-232-USB


Modificación respecto al post anterior. Puse CTS en el MISO, cuando debería estar en SCK. Me lié al mirar el circuito, y soldé donde no era. Me llama la atención que funcionara de sin problemas de vez en cuando, pero saltaba muy a menudo un error de sincronzación.




1 GND - GND - GND


2 CTS - D13 (SCK) - CTS


3 Vcc - Vcc (+5v.)- (Vcc del chip adaptador)


4 Rx - D0(Rx) - TXD


5 Tx -D1(Tx) -RXD


6 RTS - Reset - DTR (curioso)


Los pines del adaptador no coinciden con los pines de un RS-232 de 9 pines, se corresponderían con los de un AVR-ISP.




Lo primero es abrir el encapsulado del USB-RS232, yo lo hice con un cúter y rompí unos cuantos soportes para encajar, alguien más mañoso seguro que lo abre sin romper nada, dentro hay un pequeño PCB de dos capas, con el chip y varios puntos de conexión.


Prolific cara A.jpg Prolific cara B.jpg




Localización de VCC, CTS y DTR en el chip Prolific 2303.


El chip soporta una tensión de 5v a través del VCC, midiendo con el multímetro, esta corriente es constante a 100mA desde el momento en que se enchufa al puerto USB. En el datasheet indica que es para alimentación externa, o al menos eso he creído entender, así que decidí alimentar al Paperduino con ella, soldando un cable del pin Vcc hasta el inicio de la entrada de 5v en mi Paperduino perfboard tal que así.


Paperduino VCC.jpg




Y soldar un cable desde el chip hasta el conector.


Prolific VCC.jpg




En mi chip venían identificados los puertos, en caso de no ser así, para identificar VCC basta con poner tierra en el metal externo del USB e ir probando hasta encontrar un voltaje de +5v, el resto son de 3,3 o menos.




(No son las mejores soldaduras del mundo, ni soy un gran soldador ni el soldador está para muchos sustos, que me senté encima de el y el pobre quedó así. El caso es que parece funcionar.)




Localizando DTR y CTS.




Hay tres señales de 3,3v, una es DTR , otra RTS y otra CST, la principal diferencia es el momento en que empiezan a ponerse a cero y los saltos que hagan. Mi multímetro no reacciona muy rápido, por lo que lo hice mirando las letras en el chip. El truco está en enchufar el chip, pero no el arduino, abrir el software de arduino y subir un sketch, la señal de 3,3 voltios que antes se apague debería ser DTR y esa la conectamos a reset, la otra sería CTS, y la que no parece variar es RTS. Curiosamente el reset no me funciona con RTS, que es donde está enchufado en el Paper FTDI, sino en DTR.


Prolific CTS.jpg Prolific DTR.jpg


En el Paperduino necesitamos conectar CTS al pin adecuado (SCK), que es D13.


Paperduino CTS.jpg




Por último queda subir un sketch al Paperduino y si no se sale humo y empieza a ejecutar el programa, lo más probable es que el invento haya funcionado y ya tengamos un FTDI casero marca "El Cheapo" de última generación. De vez en cuando me falla y enchufando y desenchufando el USB vuelve a funcionar, supongo que tendría que revisar los puntos de soldadura.


Nota: La primera vez que lo conecté el led del pin 13 se apagó. Un buen rato después, volví a hacer pruebas con otro cable y volvió a funcionar. En estos momento funciona perfectamente, se ve que he soldado mal el cable.


El documento con la pegatina de la parte de atrás modifucada, esta aquí.




Revisión 2


La guía aquí presentada es a modo informativo, manejar y modificar aparatos electrónicos conlleva riesgos que aquel que repita los pasos aquí mostrados debe asumir por sí mismo, no siendo el autor ni el publicante del documento responsables de los accidentes o daños materiales o personales ocasionados por la perpetración de las modificaciones descritas.


Este documento se adscribe a la licencia CC tipo tres, que permite la reproducción del mismo, previa autorización del autor.