Simulador de ecg con pic

hola... disculpen estaba viendo que hicieron un proyecto de simulador de ecg que tengo que hacer yo, pero no tengo mucha idea de como empezar, estoy pensando hacerlo un pic 16f877 ... y programar en pic basic, si me puedes dar algun consejo para seguir con mi proyecto se los agradeceria mucho.

Atentamente,

Oswaldo
 
esta muy bien que lo hagas con ese pic, dependiendo de lo que quieras hacer puede que este muy sobrado, yo te recomiendo que bajes la tabla que subi aqui mismo. Esta muestreada como a 500 Hz si no me equivoco, asi que te aconsejo que en tu pic uses un timer para generar interupciones cada 2 ms para que con esa tasa actualices tu convetidor digital-analogico. Tambien si no mal recuerdo el registro q subi es la derivacion II, checalo.

Si vas teniendo dudas en algo y te puedo ayudar, con mucho gusto, no domino el basic para pics, pero si en algo puedo colaborar, cuenta con ello. Suerte!!!
 
que tal! mira te explico: es la digitalizacion de un complejo cardiaco, desde el inicio de la onda P hasta el final de la onda T. Esta muestreada con frecuencia de muestreo de 500 Hz (son como 256 muestras) y tiene resolucion de 8 bits (el valor menor de la onda es cero y el mayor es de 255). Si tu tomas esos valores numericos y los graficas uno tras otro obtienes un complejo cardiaco completo.

Debes usar un convertidor digital analogico para convertirlo de un registro digital a una onda analogica. Para comenzar puedes utilizar un DAC08, que es un DAC de ocho bits entrada paralelo, es lo mas sencillo.

Lo que tendrias que hacer es grabar esos valores de la tabla en la memoria del pic y leer una muestra cada 2ms y sacarla por un puerto del pic, y este lo conectas al DAC08 y asi obtienes una onda analogica. Pruebalo y me dices como vas. Saludos!
 
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

Hola yo tambien estoy diseñando algo asi, solo que ami me gustaria que me enviaras tu tabla de la onda sana, me serviria muchisimo.. GRACIAS y espero tu respuesta pronto besos...
 
Gracias por su ayuda compañeros, tuve un percance de salud y ahi quedo el proyecto, pero ahora estoy retomando el tema, como pude leer un poco y darme cuenta utilizar el pic 16f877 esta demas y voy a utilizar el pic 16f628, que parece mas razonable, puesto que una de mis ideas era sacar tres señales para cada electrodo (RA, LA y LL ) pero voy a tomar la idea de utilizar el arreglo de resistencias que ustedes mensionan lo veo mas conveniente con una sola señal, como veran no soy muy bueno en esto pero debo hacerlo, mis preguntas son las siguientes, seria mejor utilizar un cristal externo o con el interno es suficiente, como puedo cambiarle la amplitud de la onda ya que las condiciones de mi trabajo requieren que exista una amplitud de 0.5 mv 1 mv y 2mv , espero puedan ayudarme y gracias de antemano.
 
Hola a todos. Estoy por hacer un simulador de ecg con un pic 16f887 de 12 derivaciones, pero no se como generar las señales correspondientes a cada electrodos RA,LA,LL,AVF,AVL,AVR,V1,V2,V3,V4,V5 y V6 (como armar el arreglo resistivo para generarlas simultaneamente) necesito si me pasan lo que tengan acerca del circuito. Por otra parte les comento que estuve investigando la pagina de base de datos de señales cardiograficas www.physionet.org de donde se podria obtener la señal, pero habria que pasar las muestras a hexadecimal para almacenarlas en una memoria (otro cosa en la que tengo problemas para convertirla) y por ultimo veo que en todos los simuladores que han hecho solo utilizan la señal de la Derivacion II. Este es mi mail:
Cualquier dato sera bienvenido GRACIAS!!!


Como no respeto las políticas del Foro, me editaron el mensaje
 
Última edición por un moderador:
Hola buenas tardes, tengo un problema si me pueden colaborar con el favor, tengo un elecardiografo con 3 ad620 + un filtro noch+ sistema de proteccion, tengo la señal en un rango de 0 a 5v como hago para meterla por el conversor del pic18f4550, y ubicar una sola variable para enviarla por usb gracias

me gustaria usar el conversor analogo del 18f4550 que me explicaran un poco sobre eso
 
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)

equivocado amigo... lo que hace el amplificador operacional es todo lo contrario amplifica las debiles señales electricas del corazon y elimina el ruido en modo comun... el amplificador de instrumentacion AD620 es muy comun de encontrar en las tiendas de electronica... y si aun asi no encontrares ese amplificador de instrumentacion podes contruirte uno con el TL084
 
Estoy armando un equipo para colocar dentro de un muñeco que va a estar dentro de un simulador de siniestros... comparto algo de lo que llevo hasta el momento que en proteus, parece ser funcional... la tabla solo tiene para simular un par de cardiopatias (bradicardia, taquicardia,normal y paro cardiaco), pero la voy a mejorar... Hay una funciona mas que esta en proceso muy beta, que es el acoplamiento de un sensor analogico que detecta movimientos bruscos del muñeco y acelera las pulsaciones simulando dolor... El circuito consta de un simple DAC 0808 y a su salida, un amp operacional...
saludos y espero comentarios; En esta beta esta todo en un micro, pero la reforma es mas compleja (comunicacion RF para controlarlo y monitorearlo a distancia)

Código:
'****************************************************************
'*  Name    : simuECG_CARE.BAS                                  *
'*  Author  : prof.martintorres@educ.ar                         *
'*  Notice  : Copyright (c) 2017 BioEEAsrl - ETI                *
'*          : All Rights Reserved                               *
'*  Date    : 26/07/2017                                        *
'*  Version : 1.1                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
DEFINE OSC 20
@ DEVICE pic16F877A
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16F877A, PWRT_On
@ DEVICE pic16F877A, PROTECT_OFF

Define  LCD_DREG  PORTD ;bit de datos del LCD empezando
Define  LCD_DBIT  0 ;por D.0 ,D.1, D.2 y D.3
Define  LCD_RSREG  PORTD ;bit de registro del LCD conectar
Define  LCD_RSBIT  5 ;en el puerto E.1
Define  LCD_EREG  PORTD ;bit de Enable conectar en el
Define  LCD_EBIT  4 ;puerto E.2    
DEFINE LCD_BITS      4    
DEFINE LCD_LINES  2

ADCON1 = 00000000      'Definir todos los PORTA y PORTE como analógicos

;define ADC_BITS 8       ;CONFIGURO conversión A/D en 10 bits
;Define ADC_CLOCK 3       ;
;DEFINE ADC_SAMPLEUS 50   ;Tiempo de muestreo en uS


TRISA=%11111111
TRISB=%11111111
TRISC=%00000000
TRISD=%00000000     

BOTON_MAS     VAR PORTB.1
BOTON_MENOS   VAR PORTB.2
BOTON_ENTER    VAR PORTB.3
BOTON_MENU     VAR PORTB.4
BOTON_PARAR    VAR PORTB.0

aux     var byte
aux1    var byte
aux2    var byte
i       var byte
puertos var byte
resto   var byte
canal   var byte

PAUSE 200
LCDOut $fe, $48, $00, $00, $00, $00, $00, $00, $1F, $1F 'Figura 1.
LCDOut $fe, $50, $00, $00, $00, $00, $1F, $1F, $1F, $1F 'Figura 2.
LCDOut $fe, $58, $00, $00, $1F, $1F, $1F, $1F, $1F, $1F 'Figura 3.
LCDOut $fe, $60, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F 'Figura 4.

;********************************************************************
;********************************************************************

ARRANQUE:
LCDOUT $FE,$80,"  BioEEA - ETI  "
LCDOUT $fe,$C0,"Ing. Torres A.M."
PAUSE 900
LCDOUT $FE,1
LCDOUT $FE,$80,"  -   CARE   -  "
LCDOUT $fe,$C0,"simu ECG beta1.1"
PAUSE 900
LCDOUT $FE,1


;**********************************************************
;**********************************************************
;**********************************************************
menu:
LCDOUT $FE,1
LCDOUT $FE,$80, "Selec Funcion "


barrido1:
IF BOTON_MAS = 0 THEN 
        WHILE boton_mas=0:WEND
        if aux > 5 then aux=5
        aux = Aux+1
        endif

IF BOTON_Menos = 0 THEN 
        WHILE boton_menos=0:WEND
        if aux < 1 then aux=1
        aux=aux-1
        endif        
        
IF boton_enter = 0 THEN 
        WHILE boton_ENTER=0:WEND
        if aux=2 then normal
        if aux=3 then bradicardia
        if aux=4 then taquicardia       
        if aux=5 then paro
        if aux=1 then Rescate
        endif
        
if aux=1 then        
lcdout $fe,$c0,"EjercicioRESCATE"
endif 

if aux=2 then
lcdout $fe,$c0,"-eN1-ECG-Normal-"
endif

if aux=3 then
lcdout $fe,$c0,"-eN2-Bradicardia"
endif

if aux=4 then        
lcdout $fe,$c0,"-eN3-Taquicardia"
endif  

if aux=5 then        
lcdout $fe,$c0,"-eN4-ParoCardiac"
endif  


        
goto barrido1

;******************************************************************************
;******************************************************************************
NORMAL:                              ;ECGNormal 
  LCDOUT $FE,1
  gosub dolor
  LCDOUT $FE,$80, "Func. ECG Normal"
  LCDOUT $fe, $C0,"Dolor:"

        FOR i=0 TO 299      
        gosub tabla_pulso
        PORTC= puertos
        pauseus 2700
        NEXT        
       
       if i = 255 then gosub tabla_pulso 
       PORTC = puertos
       pause 350
       IF boton_enter = 0 THEN 
        WHILE boton_ENTER=0:WEND
        goto menu
        endif     
   goto normal
   
;******************************************************************************
;******************************************************************************
Bradicardia:                        ;Bradicardia
  LCDOUT $FE,1
  gosub dolor
  LCDOUT $FE,$80, "Func.Bradicardia"
  LCDOUT $fe, $C0,"Dolor:"
        FOR i=0 TO 299      
        gosub tabla_pulso
        PORTC= puertos
        pauseus 2700
       NEXT        
       
       if i = 255 then gosub tabla_pulso 
        PORTC = puertos
       pause 1200
       IF boton_enter = 0 THEN 
        WHILE boton_ENTER=0:WEND
        goto menu
        endif 
   goto bradicardia

;******************************************************************************
;******************************************************************************     
Taquicardia:                        ;Taquicardia
      LCDOUT $FE,1
      gosub dolor
      LCDOUT $FE,$80, "Func.Taquicardia"
      LCDOUT $fe, $C0,"Dolor:"
         FOR i=30 TO 280      
        gosub tabla_pulso
        PORTC= puertos
        pauseus 2700
       NEXT        
       
       if i = 255 then gosub tabla_pulso 
        PORTC = puertos
       pause 1
       IF boton_enter = 0 THEN 
        WHILE boton_ENTER=0:WEND
        goto menu
        endif 
goto Taquicardia       


;******************************************************************************
;******************************************************************************
Paro:                            ;Paro cardiaco
    LCDOUT $FE,1
    gosub dolor
    LCDOUT $FE,$80, "FuncParoCardiaco"
    LCDOUT $fe, $C0,"Dolor:"
;Se envía sólo una línea por el puerto B y la alarma será un LED conectado al puerto D en el bit 0
              PORTC=8
              IF boton_enter = 0 THEN 
        WHILE boton_ENTER=0:WEND
        goto menu
        endif 
goto paro

;******************************************************************************
;******************************************************************************
Rescate:
      LCDOUT $FE,1
      pause 50
      gosub dolor
      LCDOUT $FE,$80, "Func.Rescate"
      LCDOUT $fe, $C0,"Dolor:"

       FOR i=0 TO 299      
        gosub tabla_pulso
        PORTC= puertos
        gosub movimiento 
        pauseus 2700
        NEXT        
       
       if i = 255 then gosub tabla_pulso 
       PORTC = puertos
       pause 350
       IF boton_enter = 0 THEN 
        WHILE boton_ENTER=0:WEND
        goto menu
        endif  

        IF boton_enter = 0 THEN 
        WHILE boton_ENTER=0:WEND
        goto menu
        endif 
goto Rescate



movimiento:
         ADCIN 1, canal
         RESTO = (CANAL // 15)
                  if canal > 200 then
                  FOR i=30 TO 255      
                  gosub tabla_pulso
                  PORTC= puertos
                  pauseus 2700
                   NEXT        
       
       if i = 255 then gosub tabla_pulso 
        PORTC = puertos
       pause 1
                  endif
   return       

TABLA_PULSO:
lookup i,[8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,13,13,13,13,13,13,13,13,12,12,12,11,11,10,10,9,9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,6,6,5,5,5,4,4,4,4,6,9,13,16,20,24,29,33,38,42,46,49,52,54,55,54,53,51,48,45,41,37,32,28,23,19,15,10,5,1,0,0,0,1,1,2,3,3,4,5,6,6,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,10,11,12,12,12,12,13,13,13,13,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,14,14,14,14,14,14,13,13,13,12,11,11,10,9,9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],puertos
 return
 
DOLOR:
ADCIN 1, canal
RESTO = (CANAL // 15)

                  if canal > 200 then nivel5E
                  if canal > 150 then nivel4E
                  if canal > 100 then nivel3E
                  if canal > 50 then nivel2E
                  if canal < 45 then nivel1E
                 
return                 

nivel1E:
pause 5
LCDOut $fe,$CB, 1
return

nivel2E:
pause 100
LCDOut $fe,$CB, 1
LCDOut $fe,$CC, 2
return

nivel3E:
pause 5
LCDOut $fe,$CB, 1
LCDOut $fe,$CC, 2
LCDOut $fe,$CD, 3
return

nivel4E:
pause 5
LCDOut $fe,$CB, 1
LCDOut $fe,$CC, 2
LCDOut $fe,$CD, 3
LCDOut $fe,$CE, 4
return

nivel5E:
pause 5
LCDOut $fe,$CB, 1
LCDOut $fe,$CC, 2
LCDOut $fe,$CD, 3
LCDOut $fe,$CE, 4
LCDOut $fe,$CF, 4
return
 
 end
 
Atrás
Arriba