comunicacin mas utilizados es el serial asncrono, sin embargo ya la gran mayora de equipos de computo porttiles no incluyen el puerto serie. Pinguino permite configurarse como un dispositivo USB a serial asncrono ofreciendo este modo de comunicacin. EL PUERTO USB - SERIE Un uso com n de la tarjeta Pinguino es la de utilizarla de interfaz entre nuestras aplicaciones y el computador, una forma de hacer es configurarla como una adaptador USB a serial as ncrono. Esto se hace por que una gran mayor a de entornos de programaci n disponen de ejemplos y librer as para el tipo de comunicaci n serial as ncrona RS232, para este caso Pinguino act a como una caja negra que nos permite comunicaci n serial emulando un puerto de este tipo en el computador. Esto se logra con la configuraci n CDC para un dispositivo USB. ESPECIFICACIONES DE CLASES USB USB no es un protocolo de comunicaci n, es una especificaci n para dispositivos que se conecten al computador y que provee diferentes clases seg n la configuraci n utilizada. Entre los microcontroladores las mas comunes son:
HD !a HID "Human nterface Device# se utiliza cuando queremos configurar el microcontrolador como dispositivo de interfaz hombre computador como por ejemplo teclados, ratones, gamepads, etc. Una de sus caracter sticas es que no necesita driver pues utiliza los est ndar del sistema operativo. $%D MSD "$ass %torage Device &lass# se utiliza cuando queremos configurar el dispositivo como unidad de almacenamiento de datos como son los discos duros e'ternos, memorias flash , etc. Una de sus caracter sticas es que no necesita driver pues utiliza los est ndar del sistema operativo. &D& CDC "&ommunications Device &lass# Es el que utilizaremos en Pinguino para configurarlo como dispositivo de comunicaci n serial. &on esta configuraci n el computador nos crea un puerto serie virtual de manera que la comunicaci n entre el dispositivo y el computador se har tal como si se tuviese un puerto serie f sico. Este tambi n esta soportado por los drivers est ndar del sistema operativo, pero en el caso de (indo(s se recomienda utilizar el suministrado por $icrochip. CONFIGURACIONES %eg n el sistema operativo a utilizar se configura el dispositivo de las siguientes maneras: > EN GNU LINUX )ormalmente no hay que instalar alg n driver o similar para comunicarnos con la tarjeta Pinguino utilizando la configuraci n CDC. %in embargo en Proc!!ing tenemos que crear un enlace simb lico por que el modulo RXTX"in de #A$A no lo reconoce como puerto %&'%(()ACM*. *ara hacer nuestro enlace simb lico abrimos una consola y digitamos la siguiente instrucci n : sudo ln -s /dev/ttyACM0 /dev/ttyS20 donde ttyS20 es una declaracin mas comn para un puerto serie en GNU LINUX. 1 http:++m icropinguino. blogspot.com &,$U)&-& ) $,D, &D& *or: .ulio /abio De !a &ruz 0 1 http:++micropinguino.blogspot.com CDC PINGUINO > EN +INDO+S *ara este sistema operativo necesitamos un driver en este caso ,c-.c&c/in0 que nos suministra la empresa $icrochip, este driver nos va a servir de enlace entre el puerto USB y Pinguino pero emulado como un puerto serial COM. 2ambi n necesitamos el archivo ,c-.u!"/ini este archivo contiene informaci n del driver y se utiliza para que el sistema operativo (indo(s sepa que driver asignar al dispositivo cuando se conecta por primera vez. PROGRAMACI N - continuaci n se dar un ejemplo sencillo para controlar el tiempo de encendido y apagado de un led desde Proc!!ing. *3,03-$- 4 *)0U), !as variables para el manejo de datos son declaradas como c-1r sin signo as que sus valores van de * a 222. !os datos que se env an son caracteres alfanum ricos entre letras, n meros y s mbolos especiales. - cada caracteres le corresponde un numero decimal comprendido entre * y 222 seg n como especifica el est ndar ASCII. *or este m todo de comunicaci n podemos enviar mensajes de te'to que serian un arreglo de caracteres y tambi n valores num ricos de un byte ya que a cada car cter le corresponde un valor num rico nico. !a variable r3!(r4567 es la que recibe los caracteres enviados, es un arreglo de tama o 56 indicando la cantidad de caracteres que puede almacenar en una recepci n de datos. Esto quiere decir que estamos en capacidad de enviar 56 datos a la vez a nuestra tarjeta Pinguino. !a instrucci n ucDatos3ecibidos7&D&.read"r'str#8 sirve para saber cuantos caracteres son envidados, es decir si se env an 9 caracteres la variable ucD1(o!Rci"i&o! sera igual a 9. 2ambi n esta instrucci n hace ya la lectura de los datos y los guarda en el arreglo r3!(r, recordemos que podemos enviar solo hasta 56 caracteres a la vez desde nuestra aplicaci n en este caso desde Proc!!ing. !a instrucci n if "ucDatos3ecibidos:;# %irve para preguntar si hay un nuevo dato y as leerlo, para este ejemplo solo enviaremos un dato a la vez desde Proc!!ing, as que solo leemos el dato guardado en la posici n cero del arreglo r3!(r. ucDato7r'str<;=8 Si no hay un nuevo env o de datos la variable ucD1(o!Rci"i&o! no es mayor a cero. 2 http:++m icropinguino. blogspot.com Figura 1 Montaje Codigo1 Recepcin de un dato >define *&4?/6@@; unsigned char r'str<56=8 unsigned char ucDatos3ecibidos8 unsigned char ucDato8 int n3etardo8 void setup"#A ucDatos3ecibidos7;8 pin$ode";,,U2*U2#8 pin$ode"4;,)*U2#8 B void loop"#A ucDatos3ecibidos7&D&.read"r'str#8 if "ucDatos3ecibidos:;#A ucDato7r'str<;=8 n3etardo 7 ucDatoC4;;8 digitalDrite";,H0H#8 delay"n3etardo#8 digitalDrite";,!,D#8 B B CDC PINGUINO *3,03-$- 4 *3,&E%%)0 En Proc!!ing utilizamos la librer a %erial que trae ya por defecto incluida, esta librer a no permite la realizaci n de comunicaci n serial as ncrona. &on la instrucci n %erial mi*uerto8 instaciamos el objeto ,iPur(o para el manejo de la comunicaci n serial. !a variable %tring puerto<=8 sirve para almacenar el nombre de los puerto seriales encontrados en el sistema. *or defecto vamos a asignar el primer puerto encontrado que esta almacenado en .ur(o4*7, la instrucciones que realizan este proceso son port7%erial.list"#8 println"port<;=#8 donde utilizamos un .rin(8n para que nos muestre en pantalla el nombre del puerto a utilizar. %i nuestro computador tiene otros puertos seriales procedemos a verificar cual es el que se asigno para nuestra tarjeta Pinguino y procedemos a ver en que posici n quedo guardada utilizando la instrucci n println"port<numero=#8 donde numero es el valor que queremos enviar, por ejemplo si queremos saber cual es el nombre que se asigno en la posici n 4 colocariamos println"port<4=#8 y as sucesivamente. Una vez encontrado nuestro puerto, trabajamos con este en nuestro programa. !a instrucci n mi*uerto7ne( %erial"this,puerto<;=,44@9;;#8 &rea y configura nuestro puerto serial, es este caso a una velocidad de transmisi n de 9922** "1u&io! por que as tambi n esta especificado en el el programa de la tarjeta Pinguino para la comunicaci n en modo CDC/ &on la instrucci n my*ort.(rite"E9E#8 enviamos un car cter, es por esto que esta el 2 entre comillas, en el conjunto de caracteres ASCII al 2 le corresponde el valor de 6:, por lo tanto el led encender y apagara cada @;; milisegundos o medio segundo seg n esta instrucciones se Pinguino n3etardo 7 ucDatoC4;;8 digitalDrite";,H0H#8 delay"n3etardo#8 digitalDrite";,!,D#8 *ara el car cter & encender y apagara cada segundo. *3,03-$- 9 *)0U), En este otro ejemplo enviaremos dos caracteres a la vez, esta vez uno para seleccionar una opci n y otro como dato. En ejemplo tendremos dos opciones, la de visualizar dato enviado y la de apagar dato. !os comandos estar n indicados con las letras $ y L, donde $ es para visualizar y L para limpiar. En este ejemplo enviaremos el 9 pero recordemos que en realidad se visualizara su equivalente en el c digo ASCII el cual es el 6: en decimal o el **99***9 en binario que el que ver amos en los leds. !os valores ASCII para los caracteres num ricos son CARACTER DECIMAL BINARIO * 6; 99**** 9 6: 99***9 2 2* 99**9* 3 29 99**99 6 22 99*9** 2 23 99*9*9 5 26 99*99* 3 http:++m icropinguino. blogspot.com Codigo1 Envo De Un Dato import processing.serial.C8 %erial mi*uerto8 %tring puerto<=8 int i8 void !(u."#A puerto7%erial.list"#8 println"puerto<;=#8 mi*uerto7ne( %erial"this,puerto<;=,44@9;;#8 B void &r1<"#A mi*uerto.(rite"E9E#8 delay"@;;;#8 mi*uerto.(rite"EdE#8 delay"@;;;#8 B void !(o."#A mi*uerto.stop"#8 B CDC PINGUINO = 22 99*999 ; 25 999*** : 2= 999**9 De la tabla podemos observar que los 6 bits menos significativos corresponden al equivalente num rico en formato binario. Una manera de convertir el car cter num rico enviado a su equivalente num rico es restarle 6? al dato enviado, pues 6? corresponde al valor ASCII del ;, por ejemplo, si enviamos los siguientes dato y les restamos 6? tendr amos: Dato = 0 - 48 = 48-48=0 Dato = 1 - 48 = 49-48=1 Dato = 2 - 48 = 50-48=2 Dato = 3 - 48 = 51-48=3 En este ejemplo si desde Proc!!ing se env a la opci n F y el dato 4 tenemos que: ucDatos3ecibidos 7 9 r'str<;= 7 GFH r'str<4= 7 G4H luego el dato es ucDato 7 r'str<4= 7 6I7 ;;44;;;4 y esto es lo que ver amos en los leds por @ segundos. *3,03-$- 9 *3,&E%%)0 En .roc!!ing enviamos los caracteres 9 y 2 cada @ segundos y despu s enviamos la opci n de limpiar o apagar los leds conectados en el .ur(o B de la tarjeta Pinguino. 4 http:++m icropinguino. blogspot.com Codigo2 Recepcin opcin y dato >define *&4?/6@@; unsigned char r'str<56=8 unsigned char ucDatos3ecibidos8 unsigned char ucDato8 int n3etardo8 void setup"#A ucDatos3ecibidos7;8 pin$ode";,,U2*U2#8 pin$ode"4;,)*U2#8 B void loop"#A ucDatos3ecibidos7&D&.read"r'str#8 if "ucDatos3ecibidos:;#A if"r'str<;=77JFJ#A ucDato7r'str<4=8 *,32K 7 ucDato8 B if"r'str<;=77J!J#A *,32K 7 ;8 B B B Codigo2 Envo De Un Opcin Y Dato import processing.serial.C8 %erial mi*uerto8 %tring puerto<=8 int i8 void !(u."#A puerto7%erial.list"#8 println"puerto<;=#8 mi*uerto7ne( %erial"this,puerto<;=,44@9;;#8 B void &r1<"#A mi*uerto.(rite"EFELE4E#8 delay"@;;#8 mi*uerto.(rite"EFELE9E#8 delay"@;;#8 mi*uerto.(rite"E!E#8 delay"@;;#8 B void !(o."#A mi*uerto.stop"#8 B