Simulador de ecg con pic

#1
Algún forero tiene información de como realizar un simulador de paciente ECG?
o algun CI generador de impulsos que puedas definir la forma de onda
he realizado pruebas con generadores de funciones pero los resultados no son satisfactorios
¿alguna idea?
Gracias
 
#2
Fabrique varios, microprocesados, con varias señales, desde ya que todo es comercial, pero para reparar equipos lo indispensable es un pulso rectangular bien definido
Al momento de investigar que le pasa a un equipo el pulso nos define ancho de bando, filtros etc. en ECG o monitores
Para generar el pulso usa un NE555
Espero que te sirva!!
 

Adjuntos

#3
Puedes emplear un generador de señal con un PIC 16f877. Yo tengo un proyecto donde grabo un sonido con el ADC del PIC y lo almaceno en una EPROM. también podrías muestrear la señal cardíaca, cuantizarla, e introducirla en la EPROM. te funcionaría igual.
 
#4
Buenas, ante todo saludos a los expertos de este foro, necesito ayuda en un proyecto de estoy realizando, es la simulación de un ECG con el pic 16f84, realice mi tabla de datos en base a la forma de onda de dicho ECG pero tengo problemas con la cantidad de datos para almacenar en el pic, ya que cuando me paso de 40 valores me dice que la capacidad de la pila se excedio. Necesito ayuda con lo que me sucede y si hay otra manera de almacenar los datos para mostrar dicha onda. O si tienen una manera mejor para realizar el ECG con el pic antes mencionado
 
#5
Trata de simular las señales con un generador de funciones,para empezar luego utliza 877 que tiene para configurar una de las puertas para tener entradas analogicas y listo el resto es tuyo
 
#6
bueno una observacion no te limites en cuanto al pic con el 16 vas a batallar creo que para que te libres de la pila brinca al 18 y efectivamente tienes el puerto adc y de hay puedes desplegarlo en cualquier medio. y si yo pienso que si es por hay como los planteas genera tu arreglo un vector en donde puedas almacenar el valor obtenido y con eso tener la señarl
 
#7
Usando el pic 16f84A que muchos critican por sus "limitaciones", lo que pudes hacer aunque parezca complicado es lo siguiente.

Con ese pic haces un contador, y mediante una serie de resistencias en parelelo, fabricas un convertidor digital analogo, que te poporcionara una rampa que sera tu señal de referencia, despues con un comparador, el cual redundando, comparara la señal de referencia con la señal analoga de entrada obtendras un ADC, la salida de este comparador la aplicas al puerto A para que gerere una subrutina de conversion; en relacion a la memoria, puedes hacer una interfaz serial para enviarlo a la pc con lo que la unica limitante en memoria sera tu disco duro y con un programa como VB o labVIEW graficar la señal del ECG.

Suena muy tediozo sin embarjo es muy util diseñarlo de esta forma por que asi aprendes a integrar un proyecto teniendo material que a muchos les parece basicos.


Aqui solo te dejo una idea muy general, si tienes alguna duda sobre como hacer el proyecto, ¡PREGUNTA!

Exito.
 
#8
hola a todos.

Estoy trabajando en un proyecto de un simulador de ecg con pic y no encuentro material para construirlo y programarlo.

alguna persona que lo halla hecho que me pueda ayudar...
 
#9
lo que tienes que hacer es un procesamiento de señales
e ir formando la señal a base de puntos.eso es facil,lo dificil es encontrar la parte del amplificador operacional que lo ocupas como un reductor de voltaje(debes disminuir la señal a 5 mv)
 
#10
yo tambien estoy trabajando en uno y ya he avanzado un poco, pero necesito q platiques mas detalles del mismo, yo t recomiendo q trabajes con una tabla q contenga la onda de ECG digitalizada y hagas una conversion DA y un acondicionamiento para que la puedas probar en un electrocardiografo... o quizas solo necesites proyectarla en LabView, Matlab o algo asi

pon mas detalles para poder ayudarte mejor :)

ah olvide decirte, si ocupas la tabla de una onda sana, t la puedo proporcionar si es que la ocupas y t sirve... es de 256 valores con una resolucion de 8 bits
 
Última edición:
#11
hola y gracias por responder.

Seria genial si me envias la tabla,ya que lo estoy haciendo con un conversor de 8 bit.
El problema mas grande que tengo son los tiempos,no puedo hacer que me calsen.
lo estoy simulando en proteus y programando con ccs.


Este es el codigo del programa,falta depurar los tiempos y es solo una prueba ya que no son los valores originales de donde comienzan y terminan las ondas,

Código:
#include <16f628a.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,BROWNOUT,RC                                            
#use delay (clock=20000000)



void main(void)

{int a,n;
set_tris_b(0);
while(1)
{
a=60;
output_b(60);         //comienza la onda en 60
do                    //subida p
{
output_b(a);          //salida de 60 y sumando    
delay_ms(4);           //retardo de 4 milisegundo
a++;                   //incrementa a hasta 84
}
while (a <= 84);       //pregunta si es a es menor o igual a 84
output_b(a);            //salida de 60
delay_ms(4);             //retardo de 4 milisegundo
output_b(a);           //salida de 60
delay_ms(4);         //retardo de 4 milisegundo
output_b(a);           //salida de 60
delay_ms(4);         //retardo de 4 milisegundo
do                 //bajada onda p
{
output_b(a);      //salida de 60 y restando        
delay_ms(4);       //retardo de 4 milisegundo
a--;               //decrementa hasta 60
}
while (a >= 60);   //pregunta si a es mayor a 60
n=100;              //asigno 100 a "n"
do                 //segmento "PR"
{
output_b(60);   //salida de 60 Y RESTANDO
delay_ms(4);     //retardo de 4 milisegundo
n--;               //DECREMENTA N
}
while (n >= 60);      //pregunta si N es mayor a 60
a=60;
do                  //bajada onda Q
{
output_b(a);      //salida de 60 y restando 
delay_ms(4);       //retardo de 4 milisegundo
a--;             //decrementa hasta 40
}
while (a >= 40);    //pregunta si a es mayor a 40  
//output_b(a);         //salida de 40
//delay_ms(4);           //retardo de 4 milisegundo



do
{
output_b(a);
delay_ms(4);
a++;
}
while (a <= 254);
//output_b(a);
//delay_ms(1);

do
{
output_b(a);
delay_ms(1);
a--;
}
while (a >= 1);


a=1;
do
{
output_b(a);
delay_ms(4);
a++;
}
while (a <= 60);

n=120;              //asigno 120 a "n"
do                 //segmento "PR"
{
output_b(60);   //salida de 60 Y RESTANDO
delay_ms(4);     //retardo de 4 milisegundo
n--;               //DECREMENTA N
}
while (n >= 60);

do                    //subida p
{
output_b(a);          //salida de 60 y sumando    
delay_ms(4);           //retardo de 4 milisegundo
a++;                   //incrementa a hasta 84
}
while (a <= 84);       //pregunta si es a es menor o igual a 84
output_b(a);            //salida de 60
delay_ms(4);             //retardo de 4 milisegundo
output_b(a);           //salida de 60
delay_ms(4);         //retardo de 4 milisegundo
output_b(a);           //salida de 60
delay_ms(4);         //retardo de 4 milisegundo
do                 //bajada onda p
{
output_b(a);      //salida de 60 y restando        
delay_ms(4);       //retardo de 4 milisegundo
a--;               //decrementa hasta 60
}
while (a >= 60);   //pregunta si a es mayor a 60

n=160;              //asigno 120 a "n"
do                 //segmento "PR"
{
output_b(60);   //salida de 60 Y RESTANDO
delay_ms(4);     //retardo de 4 milisegundo
n--;               //DECREMENTA N
}
while (n >= 60);
}
}
 
Última edición por un moderador:
#12
Ah pues mira:

Un complejo cardiaco, si no me equivoco, dura un poco mas de 200 ms (a reserva de checarlo) entonces si se hace un retardo entre muestra y muestra de aprox 1 ms se acerca bastante para q se pueda hacer un primer acercamiento (considerando la tabla de la que puedo disponer).

Yo te recomendaria que la tabla la grabaras en una eeprom (interna del pic ,una serial i2c o algo mas que se te ocurra) y utilizaras una ciclo infinito en el cual vayas recorriendo cada localidad de memoria y realices la conversion DA con el metodo que mejor t acomode, asi podrias optimizar bastante tu codigo ya que los valores se quedan grabados en la memoria y no los tienes que escribir cada vez en tu codigo.

ahi las dudas que te vayan saliendo me avisas... suerte :D
 
#16
probe lo que me enviastes y funciona gracias.
Ahora tengo otro problema porque la salida del conversor es de 5 volt y necesito reducirlo a 1mv.Como lo usastes tú.
 
#17
Ah pues lo que yo intente es lo mas simple...un divisor de voltaje. Puedes proponerlo como gustes, yo usaba una resistencia de 2.2M y una de 1K para reducirla a 2-2.5 mV mas o menos, pero podrias proponer un arreglo de divisores de voltaje acoplados mediante un seguidor para hacer atenuaciones mayores y una etapa de filtrado pasa bajas para evitar que se introduzca ruido... funciona bastante bien. Suerte!!!

Nota: si vas a probarlo con un electrocardiografo, necesitas hacer un divisor con tres resistencias para poder obtener los cables correspondientes a RA, RL y LL. Si tienes mas dudas al respecto, lo platicamos despues.
 
#19
Ah pues asi mira:

Recordarndo la definicion de la derivacion I (de la que te di la tabla)

derI=LA-RA ; usando como referencia la LL

entonces si haces un divisor de voltaje poniendo tres resistencias en
serie a la salida de tu DAC, despues de la primera resistencia, saldria
un cable que seria LA, despues de la segunda resistencia saldria un
cable que seria RA, y la tierra seria la LL.


El truco consiste en que a la salida del DAC esta la RESULTANTE de la
resta, osea la grafica de la der I, si haces las tres resistencias
iguales y conectas al ECG como t dije (recordar que el ECG es un amplificador
de instrumentacion osea un restador) , restaras 2/3 de la der I menos
1/3 de la der I, tendiendo como resultado final 1/3 de la der I.
 
#20
resulta todo gracias

Pero tengo dos problemitas

- los pulsos cardiacos no son estables
- a que tiempo tenias programado cada punto para generar la onda?

con respecto a los filtros pasa bajos no son necesarios,ya que el mismo monitor tiene sus propios filtros y te entrega una señal limpia yo ya tengo listo el proyecto,ahora solo falta arreglar algunos detalles,como por ejemplo dejar más estable los pulsos y ajustar un poco el menú a y terminar el informe.
 
Última edición:
Arriba