Hoy posteo un proyecto en el que anduve este a;o que me mantuvo bastante entretenida.. y que quiero tener bien documentado porque ya perdi varias cosas que tenia anotadas…
Hice un ECG o monitor del ritmo cardiaco, que se conecta a traves del puerto USB y la una de las caracteristicas mas interesantes (al menos bajo mi punto de vista), es que el software trabaja sobre plataforma Linux, use libusb para la comunicacion USB y las librerias graficas QT para el graficado.
La parte de programacion de comunic. USB , programacion en C, y bueno , QT en C++ . Elegi QT porque luego se puede portar facilmente a otras plataformas como Win o Mac, aunque por ahora no tengo intenciones de hacerlo.
Usamos el PIC 18f2550, que recibe la se;al amplificada del corazon (para la etapa de amplificacion usamos 2 tl081 y un opo7cd, de eso voy a ampliar otro dia) y hace de conversor a/d de 10 bit, luego envia los bits a la pc.
En cuanto a la comunicacion usb y como detectar el PIC por el puerto, con solo conectarlo correctamente y lanzar un
lsusb
se deberia ver:
Mariana flor # lsusb
Bus 001 Device 002: ID 0bda:8187 Realtek Semiconductor Corp.
Bus 001 Device 001: ID 04d8:0011 Microchip Technology, Inc.
Bus 002 Device 001: ID 0000:0000
la segunda linea es la del PIC
Bueno a continuacion muestro la parte importante del tema, la recepcion/ envio de datos desde el PIC hacia la pc y viceversa.. luego lo ovy a editar y explicar mejor ahora estoy bastante cansada.
int EntradaAnalogica (char num1, char num2)
{
char *bytes; //que apunte a la matriz
unsigned char *suma;
int otra;
char Estos_Bytes[2];
bytes =&Estos_Bytes[0];
Estos_Bytes[0]=0x02;
Estos_Bytes[1]=0x00;
if (usb_bulk_write(usb_handle,0x01,bytes,3,200)<0)
{
printf("Fallo al ejecutar usb_bulk_write. \n");
return -1;
}else{
otra=lectura1();
printf("%d\n", otra);
return (otra);
}
return -2;
}
int lectura1()
{
if (usb_bulk_read(usb_handle,0x01,lectura,2,100)<0)
{
printf("Fallo al ejecutar usb_bulk_read. \n");
return -2;
}
S=lectura[1]*256+ lectura[0]; //sumo la matriz, el primero lo multilpico por 256 para que el numero se vea bien y no desfasado
return (S);
}
despues sigo escribiendo y voy a ir ordenando esto, capaz le haga una categoria a parte o algo asi porque es mucho para ponerlo en un solo post y quiero explicarlo mejor
dejo algunos links de paginas interesantes sobre comunicacion usb bajo linux y demas:
la guia de desarrolladores de libusb:
http://libusb.sourceforge.net/doc/
herramientas de linux
http://www.linux-usb.org/
un trabajo de prender y apagar leds y sumar dos numeros por medio de usb, originalmente hecho para win y portado:
http://webs.ono.com/ma4826/
saludos!
Flor






