Autor Tema: Medidor de pulsos (Señales Cardiacas)  (Leído 10191 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Abeltronica

  • PIC10
  • *
  • Mensajes: 4
Medidor de pulsos (Señales Cardiacas)
« en: 12 de Junio de 2009, 14:04:40 »
Saludos a todos, estoy en este interesante proyecto pero tengo un problema, primero les explico un poco el desarrollo.

La parte de adquisicion de la señal, ya la tengo resuelta, (el sensor que va en el dedo), mi problema es en el algoritmo, estoy usando el pic 16f877A, lenguaje C, con CCS compiler, y simulandolo en Proteus.

Pues bien estoy usando el modulo CCP en modo captura. Practicamente es un frecuencimetro, que trabaja para bajas frecuencias digamos desde los 0.3Hz hasta los 3Hz exagerando.

Equivale decir a 18PPM - 180PPM (Pulsaciones Por Minuto). Mi problema comienza en la simulacion en proteus para bajas frecuencias, ya que para altas creo que el error es aceptable.

He hecho pruebas con diferentes cristales y varia bastante. Bueno aqui esta mi algoritmo :

*************************************************************************

#include <16f877A.h>               
#fuses XT,NOWDT,NOPROTECT,NOLVP   
#use delay(clock=4000000)           
#include "LCD.c"                   
#byte PIR1= 0x0c                   
                                   
                       
   int change=0;
   int16 capture = 0;
   float ap = 0.0;             
         
void MCU_init(){

      lcd_init();
      set_tris_c(0xff);
     
      setup_timer_1(T1_INTERNAL);
      setup_ccp1(CCP_CAPTURE_RE);
     
}
     
void ENA_init(){
   
    enable_interrupts(INT_CCP1);
    enable_interrupts(GLOBAL);

}

#int_CCP1

   void CAPTURE_init(){
     
      capture=CCP_1;
      set_timer1(0);
      change=1;
}     


void main()
{
   MCU_init();         
   ENA_init();       
   printf(lcd_putc," PLETHYSMOGRAPH");       
     
   do{                           
   
      if(change==1){               
             
         ap = capture;           
         printf(lcd_putc,"\n%6.1f us      ",ap);     
   }
     
     
      change = 0;   
   
}

while(TRUE);

}

*******************************************************************************

y aqui mi tabla de pruebas con diferentes Cristales:

Freq/Xtales   20Mhz      10Mhz      4Mhz      


1hz              260.10hz      260.66hz      59.10hz      
100hz              100.08hz      100.16hz      100.41hz      
1khz              1.008khz      1.0166khz                   1.0427khz   

Bueno sospecho que mi problema esta en el TMR1 con un cristal indicado para esta solucion.

Adjunto mi codigo, .hex y proteus.

Gracias de antemano.

Bytes.


Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Medidor de pulsos (Señales Cardiacas)
« Respuesta #1 en: 12 de Junio de 2009, 14:49:20 »
interesante proyecto.... y bienvenido al foro!!!!
lo voy a ver  y luego te comento.... como es el sensor que colocas en el dedo??.
Saludos
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Medidor de pulsos (Señales Cardiacas)
« Respuesta #2 en: 12 de Junio de 2009, 15:14:17 »
No estas teniendo en cuenta la resolución del módulo CCP. Con esto me refiero a que tu necesitas medir periodos entre 0.33 y 3.3 seg. Y si configuras el Timer 1:1 como máximo podrás medir periodos entre 65.5ms. Para solucionar ese problema deberías usar una variable adicional que cuente los overflow del Timer1 para realizar el correcto cálculo del periodo.
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Medidor de pulsos (Señales Cardiacas)
« Respuesta #3 en: 12 de Junio de 2009, 15:18:55 »
Muy interesante.

Seria mejor trabajarlo con interrupciones en el Timer1 para que tu mismo lleves la cuenta, de esa manera ajustas tu base de tiempo a tu gusto.

Saludos.
El papel lo aguanta todo

Desconectado Abeltronica

  • PIC10
  • *
  • Mensajes: 4
Re: Medidor de pulsos (Señales Cardiacas)
« Respuesta #4 en: 12 de Junio de 2009, 15:33:07 »
Hola, gracias por responder tan rapido :D

Ya veo, voy a probar sus respuestas  :)

En si el proyecto en realidad abarca:

Muestra la señal cardiaca por rs232, hacia el pc por conversion ad del pic.
Muestra en LCD de las pulsaciones por minuto.
Alarma para pulsaciones muy elevadas.
Pequeño "bip" tipo oximetros de pulso.

El sensor que pongo en el dedo, son un phototransitor y un led IR, luego viene una etapa de filtraje y amplificacion con un LM358.
Basicamente cuando la sangre fluye en el dedo, lo hace proporcionalmente al corazon. Bien ese fluido hara que el phototransistor reciva en forma periodica mas emison o no del led IR.

Bueno ese es mi sensor, algo simple pero efectivo, se logra ver bien en el osciloscopio una señal tipica del corazon.

Lo del rs232 ya me simula ok, solo me falta hacer el modulo y probar mi hardware.

Bien termine de hacer todas las etapas las juntare y posteare para que vean los resultados, en verdad es muy entretenido
este proyectito.

Bytes.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Medidor de pulsos (Señales Cardiacas)
« Respuesta #5 en: 12 de Junio de 2009, 15:45:54 »
Algun esquema?
El papel lo aguanta todo

Desconectado Abeltronica

  • PIC10
  • *
  • Mensajes: 4
Re: Medidor de pulsos (Señales Cardiacas)
« Respuesta #6 en: 12 de Junio de 2009, 15:51:03 »
Bueno lo vi en esta pagina, que venden todo el hardware como modulo y pense hacerlo yo mismo con el pic 877a
e incluir lo que les explique anteriormente.

Sensor

Desconectado Abeltronica

  • PIC10
  • *
  • Mensajes: 4
Re: Medidor de pulsos (Señales Cardiacas)
« Respuesta #7 en: 12 de Junio de 2009, 19:06:20 »
Saludos, quiero agradecer a todos los que me ayudaron hoy, en especial a Suky, por que funciono perfectamente   :-/

bueno sin más aqui va el codigo modificado:

*******************************************************************
#include <16f877A.h>               
#fuses HS,NOWDT,NOPROTECT,NOLVP   
#use delay(clock=4000000)           
#include "LCD.c"                   
#byte PIR1= 0x0c                   
                                   
                       
   int change=0;
   int16 capture = 0;
   int8  overflow = 0;
   float ap = 0.0;             
         
void MCU_init(){

      lcd_init();
      set_tris_c(0xff);
     
      setup_timer_1(T1_INTERNAL);
      setup_ccp1(CCP_CAPTURE_RE);
     
}
     
void ENA_init(){
   
    enable_interrupts(INT_CCP1);
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
 
     
}

#int_TIMER1

void CONTA_init(){
overflow++;

}

#int_CCP1

   void CAPTURE_init(){
     
     
      capture=CCP_1;
      set_timer1(0);
      change=1;
}     


void main()
{
   MCU_init();         
   ENA_init();       
   printf(lcd_putc," PLETHYSMOGRAPH");       
     
   do{                           
   
      if(change==1){   
         
       
         ap = capture + overflow*65536;           
         printf(lcd_putc,"\n%6.1f us      ",ap);     
   
     
     
      change = 0;
      overflow = 0;
      }
}

while(TRUE);

}

*************************************************************

estoy emocionado xq hoy mismo pruebo todo el hardware, ya les comentare como voy... estamos en contacto.

Salu2 Bytes!

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Medidor de pulsos (Señales Cardiacas)
« Respuesta #8 en: 13 de Junio de 2009, 14:25:53 »
que creativo el sensor!!.... pudes colocar al meno suna foto de él??
saludos
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado egvh

  • PIC10
  • *
  • Mensajes: 1
Re: Medidor de pulsos (Señales Cardiacas)
« Respuesta #9 en: 09 de Diciembre de 2013, 21:34:46 »
Saludos, quiero agradecer a todos los que me ayudaron hoy, en especial a Suky, por que funciono perfectamente   :-/

bueno sin más aqui va el codigo modificado:

*******************************************************************
#include <16f877A.h>               
#fuses HS,NOWDT,NOPROTECT,NOLVP   
#use delay(clock=4000000)           
#include "LCD.c"                   
#byte PIR1= 0x0c                   
                                   
                       
   int change=0;
   int16 capture = 0;
   int8  overflow = 0;
   float ap = 0.0;             
         
void MCU_init(){

      lcd_init();
      set_tris_c(0xff);
     
      setup_timer_1(T1_INTERNAL);
      setup_ccp1(CCP_CAPTURE_RE);
     
}
     
void ENA_init(){
   
    enable_interrupts(INT_CCP1);
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
 
     
}

#int_TIMER1

void CONTA_init(){
overflow++;

}

#int_CCP1

   void CAPTURE_init(){
     
     
      capture=CCP_1;
      set_timer1(0);
      change=1;
}     


void main()
{
   MCU_init();         
   ENA_init();       
   printf(lcd_putc," PLETHYSMOGRAPH");       
     
   do{                           
   
      if(change==1){   
         
       
         ap = capture + overflow*65536;           
         printf(lcd_putc,"\n%6.1f us      ",ap);     
   
     
     
      change = 0;
      overflow = 0;
      }
}

while(TRUE);

}

*************************************************************

estoy emocionado xq hoy mismo pruebo todo el hardware, ya les comentare como voy... estamos en contacto.

Salu2 Bytes!

Abeltronica amigo muchísimas gracias  ((:-)) me ha sido de gran ayuda tu código para un proyecto parecido, ya lleva tiempo y no podía hacerlo pero gracias a tu código ya he logrado un gran avance también gracias a Suky.    :-/


 

anything