ECG bajo plataformas Linux – parte 1

By FLOR

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

Etiquetas: , , , , , , ,

3 comentarios para “ECG bajo plataformas Linux – parte 1”

  1. Felipe Leonardo Dice:

    Si, estaria bueno eso de ordenarlo mas. así yo aprendería, me parece interesante ver lo que llevas, luego podrias mostrar mas etapas no crees?

    Esto si que es lectura agradable para un blog !

    Saludos

  2. Jose Dice:

    Muy interesante, yo estoy investigando sobre algo parecido, me gustaría aprender como explotar la señal del Electrocardiograma. Recogerla, transformarla para poder procesarla y el tratamiento grafico.

    Muchas gracias y enhorabuena por tu blog

  3. juan pablo Dice:

    hola flor veo muy interesante tu trabajo y lo mejor es que estas trabajando en linux.. bueno yo estoy en un trabajo de grado de mi universidad soy de venezuela.. y estoy tratando de hacer algo similar pero no identico… usando un pic 18f4550 me gustaria saber si me podrias dar una mano y ponernos en contacto claro si no te molesta.. de todas formas gracias por tu atencion y disculpa la molestia.,, por si acaso anque creo que lo veras mi correo es pablo_venezuela@hotmail.com

Escribe un comentario