Vous êtes sur la page 1sur 4

CDC PINGUINO

Uno de los modos de


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

Vous aimerez peut-être aussi