Translate

domingo, 26 de abril de 2009

El USB desde LINUX con la Consola

Escogí usar el modo CDC, por una sencilla razón: Es más fácil de usar y el programa para la PC se basa en la comunicación via puerto serie, lo cual hace aún más sencillo el proceso. También porque bajo LINUX es un modo "nativo".

El programa para la PC puede ir desde Visual Basic, DELPHI, C++ o C, incluso existen un sin fin de ejemplos en la WEB para realizar una comunicación a traves del puerto serie. Pero en mi caso voy hablar de la interfaz con LINUX y no con Windows.

En el caso del modo CDC LINUX facilita las cosas ampliamente, basta con tener instalado LIBUSB y CDC_ACM dentro del KERNEL, esto viene por default en la mayoria de las distros de LINUX. Entonces con esto sabemos que el modo CDC en LINUX es nativo, es decir, no necesitamos instalar ningún driver ni compilar nada para que la PC reconozca el dispositivo.

Entonces vamos a ver como interactuar desde la linea de comandos con el PIC. Priemro abriremos el terminal de LINUX -yo uso FEDORA KDE- y veremos en el log de mensajes del sistema como se registra nuestro PIC.

# tail -f /var/log/messages

Y nuestra salida será:

Apr 26 12:49:38 AiroTux kernel: usb 1-2: new full speed USB device using uhci_hcd and address 6
Apr 26 12:49:39 AiroTux kernel: usb 1-2: configuration #1 chosen from 1 choice
Apr 26 12:49:39 AiroTux kernel: drivers/usb/class/cdc-acm.c: This device cannot do calls on its own. It is no modem.
Apr 26 12:49:39 AiroTux kernel: cdc_acm 1-2:1.0: ttyACM0: USB ACM device

La última línea nos muestra el dispositivo que tomo el USB al conectarse en mi caso fue ttyACM0.

He modificado el programa para que reciba 2 bytes a traves del USB y el 1er byte elige el bit del puerto B a encender y el segundo bit la duracion de este encendido antes de apagarse. Entonces si quisiera enceder el PORTB2 durante 3 segundos enviare "03" y este se encendera, recordemos que tenemos 2 LEDs de estatus por lo que RB0 y RB1 no seranutilizados como GPIO.

Daremos CTRL+C para cerrar el log de mensajes del sistema y a continuación vamos a hacer que encienda nuestro RB3 durenate 3 y 5 segundos sin necesidad de configurar un puerto serie.


# echo 03 > /dev/ttyACM0

Nos encenderá RB· durante 3 segundos y


# echo 05 > /dev/ttyACM0

Ecenderá durante 5 Segundos el RB3.

Si quisieramos usar un teminal podría usarse el minicom, o bien generar un programa grafico bastaria con QT o GLADE.


Veamos el video de esto:


3 comentarios:

  1. Navaismo web - on Te encamino para que no cierres tu blog no le prestes atencion a ningun pirata de mierda! tu trabajo me ayudara mucho asi como a muchos que queremos aprender sobre este mundo! yo estoy aprendiendo CCS sabes que vengo del pic basic no me a costado mucho pero luego quiero aprender C18. y aunque no he empezado a leer detenidamente tu blog amigo senti una gran emocion al ver que puedo manejar el usb bajo linux tambien quiero manejar el eternet bajo linux men y justo hay te has detenido! :( sigue adelante men yo sigo tus pasos!

    ResponderEliminar
  2. no lo cierres tio :S

    ResponderEliminar
  3. hola brother pues una felicitacion primero que nada , tu blog es bueno eres un buen elemento en el mundo geek me da gusto visitar blogs de colegas hispanos

    mmmm no creo que ningun pirata le ocasione problemas tu blog es informativo y cultural asi que si tienes avisos o amenazas no hagas caso ,,,,, seguro es un lammer y si no para eso estamos los colegas


    SAludos


    7 3

    ResponderEliminar