miércoles, 19 de diciembre de 2007

Interfaz serie RS232 a KNX FT1.2 con BIM113 (SCH/PCB)

A la hora de conectar nuestro ordenador o "cacharrillo" con el bus KNX tenemos varias posibilidades:
  • Comprar una interfaz serie, USB o IP. Lo cual suele salir bastante caro.
  • Hacernos la interfaz serie. Podemos usar una BCU1, BCU2, TPUART o usar lo que suelen llevar las BCUs 2, osea, una BIM (Bus Interface Module)

Las TPUART son muy sencillas y solo implementan parcialmente el protocolo KNX, por lo que tendremos que usar un driver que implemente la parte faltante. Actualmente hay drivers libres para Linux y propietarios para microcontroladores y otros SS.OO. Tiene ciertas limitaciones en cuanto a temporización y no funciona directamente con ETS y en Linux. El driver libre solo se puede compilar para PCs con puerto serie RS232.

La BCU1 tiene menos problemas que la TPUART. Se puede usar directamente con ETS por el puerto serie. El controlador para Linux requiere un PC con puerto serie. No podemos usar adaptadores USB a serie.

La BCU2 se puede usar en modo BCU1 o bien en modo FT1.2. Este modo no tiene las restricciones de tiempos de la BCU1 por lo que se puede usar via serie, USB o incluso con adaptadores USB a serie.

La BIM, como su propio nombre indica, es un módulo de interfaz al BUS, se suele utilizar para desarrollar dispositivos. Una BCU2 contiene en su interior una BIM.

Y después de tanto rollo, ¿como son las BIM?
Aqui teneis el aspecto de una BIM113
Imagen obtenida de http://www.opternus.de

¿Y como le ponemos a "eso" un puerto serie?
Gracias a la contribución de Manuel Jimenez de la Universidad Politécnica de Cartagena, tenemos un sencillo diseño de placa para poder construir nuestra propia interfaz.

Podemos encontrar el esquema y algunos diseños en http://www.dehof.de/eib/ o bien este otro.
También está disponible el PCB en PDF para hacer la placa facilmente.

Y este es el resultado final

Con esta sencilla interfaz dispondremos de una interfaz FT1.2 para usarla con ETS e incluso con ordenadores que no dispongan de puerto serie, con un adaptador USB a serie. Este diseño no funciona con las BIM M13x, aunque en las especificaciones dice que son compatibles pin a pin.

Pero la opción más interesante es usarla con sistemas embebidos Linux con puerto serie o USB y Linknx. Yo lo he probado con los Linksys WRT54GL y Asus WL500g (con OpenWRT), y con el NSLU2 (con unslug 6.8). También podriamos usar ETS via red WiFI para conectar al BUS y programar (usando KNXNet).

Y bien, supongamos que somos capaces de hacer la placa y soldar los componentes, ¿donde comprar la BIM?
Por ejemplo en http://www.opternus.de, supongo que habrá más sitios donde comprarlas pero solo conozco ese.

La BIM sale por unos 40€ mas IVA y portes.

Enlaces:
http://www.opternus.de
http://www.dehof.de/eib/DE/eibmax.htm
http://webs.ono.com/uidas/BIM113/KNX-BIMM113-RS232_Schematic.pdf
http://webs.ono.com/uidas/BIM113/KNX-BIMM113-RS232.pdf
http://www.auto.tuwien.ac.at/~mkoegler/index.php/tpuart
http://linknx.sourceforge.net/

sábado, 15 de diciembre de 2007

Configuración de la actualización automática de hora

Al iniciar el NSLU2 la hora del sistema no está correctamente configurada. Vamos a configurarlo para que sincronice la hora por Internet al iniciar el sistema operativo y una vez al dia.

Requisitos:
  • NSLU2 con unslug 6.8 (seguramente con otras versiones funciona igual)
  • Sistema configurado con acceso a Internet
Pasos a seguir:

Instalamos el cliente NTP
ipkg install ntpclient
Creamos el fichero S78ntpclient con el siguiente contenido

#!/bin/sh
/opt/bin/ntpclient -h pool.ntp.org -s &>/dev/null

Modificamos los permisos del fichero para hacerlo ejecutable
chmod 755 /opt/etc/init.d/S78ntpclient

Modificamos el fichero /etc/crontab y añadimos

# sincroniza hora por Internet cada dia a las 4:00
00 4 * * * root /opt/bin/ntpclient -h pool.ntp.org -s &>/dev/null

Con esta configuración, nuestro NSLU2 estará siempre en hora.

Puerto serie por USB en NSLU2(unslug 6.8)

Al NSLU2 se le puede poner un puerto serie soldando directemente un adaptador de señal (Maxim 3232) y un conector, o bien usando un adaptador USB a serie. La solución del adaptador es más cómoda, menos peligrosa y la que yo uso.

Requisistos:
- NSLU2 con unslug 6.8 (con otras versiones probablemente sea igual)
- adaptador USB a serie soportado por Linux (casi todos)


Pasos a seguir:

Entramos por telnet o SSH al NSLU2

Conectamos el adaptador USB

Ejecutamos el comando dmesg para ver que tipo de adaptador ha detectado el sistema operativo
En mi caso aparece la siguiente línea:
usb.c: USB device 2 (vend/prod 0x67b/0x2303) is not claimed by any active driver.
Podemos instalar y cargar todos los módulos para adaptadores usb a serie o bien averiguar que dispositivo tenemos a partir de los codigos de fabricante y producto. En mi caso el adaptador lleva un chip Prolific PL2303

Instalamos los modulos usbserial y el correspondiente al adaptador USB.
ipkg install kernel-module-usbserial
ipkg install kernel-module-pl2303

Hay varios modulos para adaptadores USB-serie (kernel-module-pl2303, kernel-module-belkin-sa, kernel-module-ftdi-sio o kernel-module-keyspan)

Ejecutamos depmod para que actualice la lista de modulos

Comprobamos el nombre de los modulos
ls /lib/modules/`uname -r`/kernel/drivers/usb/serial

Cargamos los modulos para ver si está todo correcto
insmod usbserial
insmod pl2303

Y volvemos a ejecutar dmesg para comprobar que los modulos corresponden con el hardware
En mi caso encuentro la línea
usbserial.c: PL-2303 converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
por lo que el nuevo puerto serie será /dev/ttyUSB0

Ahora vamos a hacer que se carguen los modulos del adaptador en el inicio del sistema

Creamos el fichero /opt/etc/init.d/S79usbserial con el siguiente contenido
#!/bin/sh
insmod usbserial
insmod pl2303

Modificamos los permisos del fichero para hacerlo ejecutable
chmod 755 /opt/etc/init.d/S79usbserial


A partir de este momento ya tendremos puerto serie cada vez que arranque el sistema.