[LinuxFocus-icon]
Hogar  |  Mapa  |  Indice  |  Busqueda

Noticias | Arca | Enlaces | Sobre LF
Este documento está disponible en los siguientes idiomas: English  Castellano  ChineseGB  Deutsch  Francais  Russian  Turkce  Polish  

convert to palmConvert to GutenPalm
or to PalmDoc


[Photo of the Author]
por Guido Socher (homepage)

Sobre el autor:

A Guido le encanta Linux por ser el paraíso de los desarrolladores de su propio software y hardware.



Taducido al español por:
Luis F. Diaz <luisfdd(at)yahoo.es>

Contenidos:

 

Display LCD USB sobre Linux, con watchdog y pulsadores

[Illustration]

Resumen:

Este artículo es el resultado de la respuesta (muy positiva) a otros sobre hardware que había escrito hace tiempo. ¡Sois un gran público, lectores de LinuxFocus! Algunos queríais saber cómo realizar un interfaz para el bus USB: he aquí una bonita solución. Utilizaremos el display LCD del artículo de Mayo de 2002 y lo haremos trabajar con el bus USB. Además, se alimentará a través del propio bus, por lo que no necesitaremos ninguna fuente auxiliar.

Para este artículo tendrás que haber instalado, al menos parcialmente, el entorno de desarrollo de AVR sobre Linux. En este otro puedes ver cómo funciona: Programming the AVR Microcontroller with GCC.

_________________ _________________ _________________

 

Introducción

El puerto USB resulta práctico ya que se trata de un interfaz moderno y ofrece la posibilidad de conectar la alimentación de los dispositivos directamente a través de él. Los conectores son pequeños, y permite transferir un gran volumen de información a través de un cable de reducido tamaño. Estos son los aspectos positivos del USB. Su lado oscuro es que las altas frecuencias son difíciles de manejar y que su protocolo es un poco complejo. Échale un vistazo a las características (http://www.usb.org/developers/, necesitas la especificación 1.1) y te dará un espasmo: son 327 largas y sesudas páginas. Esta es la razón de que haya taaaaantas implementaciones defectuosas de dispositivos USB. Se puede encontrar una introducción más abordable en http://www.beyondlogic.org/ pero la especificación continúa siendo compleja.

¿Qué hacer? ¿Cómo podemos realizar una interfaz de nuestro Microcontrolador al bus USB? FTDI, una compañía escocesa, tiene la solución (http://www.ftdichip.com). Ofrece un chip que implementa un interfaz USB serie. Una parte del chip FT232BM es rs232 y otra USB. En otras palabras, puedes sustituir el MAX232 que antes necesitabas para la conversión de voltajes de las líneas del rs232 con este FT232BM y ya está.  

El driver

El FT232BM es una verdadera solución multiplataforma. Los drivers están disponibles para múltiples sistemas operativos. El módulo del núcleo Linux se llama ftdi_sio y es open source. Forma parte del núcleo estándar de Linux. El FT232BM ofrece algo más que la conversión USB a rs232, y dicho módulo está aún en desarrollo para implementar todas sus funciones. De todas formas, de USB a rs232 está listo para usarse en un núcleo estándar Redhat 7.3, Kernel (2.4.18) sin recompilar y sin modificación alguna. Sólo conectarlo basta.

ftdi_sio se está desarrollando en http://ftdi-usb-sio.sourceforge.net/.

Con mi Redhat 7.3 todos los módulos se cargan automáticamente cuando enchufo el conector USB. Si no funciona en tu distribución Linux, mira si tienes los siguientes módulos (para USB-UHCI):

/sbin/lsmod usb-uhci
/sbin/lsmod usbcore
/sbin/lsmod usbserial
/sbin/lsmod ftdi_sio

El archivo de dispositivo que se comunica con el harware es /dev/ttyUSB0

Los desarrolladores del ftdi_sio recomiendan al menos el núcleo 2.4.20, pero como puedes ver el 2.4.18 también funciona (al menos para las funciones que necesitamos aquí).  

El esquema

El circuito es sencillo. Sólo hay que insertar el FT232BM entre las líneas Rx/Tx del microcontrolador y el conector USB. Se necesita un cristal de 6 MHz y algunas otras cosas que están descritas en las especificaciones de diseño del FTDI. EL toroidal de ferrita (a la derecha del esquema) es un pequeño anillo que sirve de filtro para altas frecuencias (el bus USB trabaja a 48Mhz). También puedes dar 10 vueltas de cable fino sobre una resistencia de 1K y utilizarlo de anillo.


schematic
Hay que prestar atención al consumo de potencia. Se debe utilizar menos de 100mA si se quiere diseñar un dispositivo alimentado a través del USB. Además el dispositivo debe soportar el modo "USB suspend". Cuando el pin denominado "sleep" del FT232BM pasa a nivel bajo el sistema debe consumir menos de 0.5mA. Lograr esto último es no menos que engorroso. EL AVR soporta un modo "idle", de bajo consumo, menos de 2 mA, y un modo "power down", de sólo 20uA. De todas formas parece más sencillo despertar al Microcontrolador desde el modo "idle". He decidido usar el modo "idle" aun incumpliendo un poquitín la especificiación USB. La luz de fondo (opcional) del display estará apagada y el circuito total consumirá menos de 3mA. 3mA es más de 0.5mA, pero los chips controladores del host USB no son capaces de detectar medidas tan finas. Así debería funcionar.

Una vez que he dicho todo esto, debo admitir que no dispongo de un ordenador con modo "suspend". Por tanto no puedo probar dicha parte. Si tienes uno, como un Laptop moderno, con soporte para modo "suspend", por favor, haz tú mismo la prueba e informame de los resultados.

El resto del circuito es casi idéntico al expuesto en el artículo de Mayo de 2002 . Por tanto no explicaré más detalles.
Puedes pulsar sobre el esquema para verlo más grande. Los archivos eagle están incluidos en un paquete junto a su software. Puedes descargarlos al final del artículo.
board
El circuito es de una sola cara y sólo debe grabarse la máscara de color azul. Las líneas rojas son conexiones.

El conector USB tipo-B que necesitas para dicho circuito tiene las siguientes salidas:
type B Receptacle

 

Trabajando con integrados SMD

Los chips SMD tienen buenas propiedades mecánicas y eléctricas pero son una pesadilla para los electrónicos caseros. Necesitarás tener buena habilidad con el soldador y al menos la parte del circuito donde está el SMD deberá estar grabada de forma muy clara y precisa. En otras palabras, no es para principiantes. Echa un vistazo a las alternativas que tienes más abajo si no está seguro de ser capaz de grabar la placa y soldar el chip correctamente.

Suelda el chip SMD chip a la placa antes de hacer ninguna otra cosa.
Para soldar el chip pon un poquito el soldador sobre los pads donde va a ser colocado el SMD. A continuación, pon una fina capa de pasta de soldadura para SMD (algunos la llaman "miel de soldar" por parecerse a la miel. Existe también una empresa alemana llamada "Kontakt Chemie" que produce un barniz denominado spray "Lötlack". Puedes usarlo en vez de la miel de soldar si quieres.

Limpia la punta de tu soldador. No debe haber marca alguna de soldadura en ella. Coloca el FT232BM exactamente. Presiona sobre cada pin del chip con la punta del soldador cuidadosamente. No añadas soldadura extra. ft232SMD

Este procedimiento funciona muy bien. No es necesario tener la punta del soldador muy fina. Utiliza una normal y asegúrate de limpiarla antes de tocar los pins del chip. No recomiendo utilizar tostadoras de cocina u otros métodos salvajes. Si intentas hacerlo de otra manera, dañarás el chip.  

La prueba

Sugiero probar el circuito en dos fases. Primero conectar el circuito sin el Microcontrolador AVR en el zócalo. Linux debería reconocer el chip FTDI y se debería leerse la siguiente entrada en /proc/bus/usb/devices:

T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=6001 Rev= 2.00
S: Manufacturer=FTDI
S: Product=USB <-> Serial
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 90mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=serial
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms

Después pinchar el Microcontrolador y cargar un programa de prueba que haga encenderse un LED. Descomprime el paquete linuxusblcd (mira al final del artículo) y teclea:

make testload0

El cable del programador y el conector USB deben estar conectados.
Si la prueba funciona, entonces puedes estar seguro del que el micro también lo hará.

Después puedes cargar el software completo en el microcontrolador:

make load

Ahora puedes utilizar "ttydevinit /dev/ttyUSB0" para iniciar la conexión serie usb y mediante un "cat > /dev/ttyUSB0" puedes "hablar" al circuito.

ttydevinit /dev/ttyUSB0
cat > /dev/ttyUSB0
D=hello world

Así escribiremos "hello world" en el display. Echa un vistazo al artículo de Mayo de 2002 para más detalles. Dicho artículo también contiene un programa llamado llp.pl que puede usarse para tener un diálogo interactivo con tu ordenador a través de los dos pulsadores del display LCD. Puedes reutilizarlo aquí.

... y he aquí el display funcionando (los pulsadores no estaban conectados cuando cuando se hizo la foto, el FT232BM está bajo la placa):
usb lcd
 

Alternativas

Aunque el circuito que se ha presentado es muy sencillo, no es para principiantes debido a las habilidades necesarias para soldar el integrado de montaje superficial. Si no te sientes seguro con el chip SMD, prueba con una solución comercial ya montada. El inconveniente es que normalmente los extras, como el perro guardián, los LEDs y los pulsadores, no vengan implementados. Lo más normal es que consigas sólo el display LCD. El coste de los displays USB comerciales ya montados es razonable. Por separado, los componentes que se indican en este artículo vienen a costar unos 30 EUR y los displays preparados también andan por ese precio.

Por desgracia, la mayoría de los productos comerciales utilizan sus propios IDs del fabricante, aun estando basados en el chip ftdi. Lo que significa que el módulo del kernel no los reconocerá porque el driver del USB depende de dichos números. Hay que editar las fuentes del núcleo y recompilar. Las futuras versiones del núcleo deberían estar preparadas y funcionar si alguien lo actualiza.
 

Referencias

 

Formulario de "talkback" para este artículo

Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
 Ir a la página de "talkback" 

Contactar con el equipo de LinuFocus
© Guido Socher, FDL
LinuxFocus.org
Información sobre la traducción:
en --> -- : Guido Socher (homepage)
en --> es: Luis F. Diaz <luisfdd(at)yahoo.es>

2003-05-20, generated by lfparser version 2.34