Autor Tema: Error al medir frecuencias bajas  (Leído 1485 veces)

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

Desconectado javierexe22

  • PIC10
  • *
  • Mensajes: 20
Error al medir frecuencias bajas
« en: 01 de Mayo de 2010, 12:38:16 »
Hola gente, hace días que estoy tratando de medir frecuencias bajas, me base en un código que colgó nano1985 y en las ideas que aporto suky... Recién me inicio con la programación en  CCS. El problema es que cuando lo simulo en Proteus no se realiza la operación:
                                                       
Periodo=(Overflow.65536 + Captura).Tcy ...... Utilizo el prescaler en 8

Esta es la parte importante del código, obviando la configuración del pic y las interrupciones:

int32 captura=0, TC=0, TT=0;
float Periodo=0.0, frec=0.0 ;
int cuenta=0, overflow=0;

#int_ccp1               // rutina de interrupcion que adquiere los tiempos para calcular el periodo de un cilo de la señal de entrada
void ccp1_int()         //Función interrupción
{     
       
    captura=CCP_1;      //Carga del valor del registro CCPR1
    cuenta++   ;
    enable_interrupts(int_timer1); //Habilitación interrupción timer
    set_timer1(0); //empieza a contar 524 ms
 
}

#int_timer1
void timer1_isr()
 {
 overflow++; // numero de desbordes del timer
 }


Función main:

do{
   if(cuenta==2)                    //¿Pulso nuevo?
     {
     TC=overflow*65536;
     TT=(TC+captura)*8;        //
     Periodo =(TT/1000000);   //ciclo de maquina y prescaler 8 y dividido 4/fxtal
     frec =(1/Periodo);  //frecuencia en Hz
     lcd_gotoxy (1,1);
     printf(lcd_putc,"Periodo= %2.4f Seg        ", Periodo);
     lcd_gotoxy (1,2);
     printf(lcd_putc,"frec= %2.4f Hz         ", frec);
     cuenta=0;
     overflow=0;
     }
     

}

while(TRUE);
}

Será problema de la programación, o el simulador? Empleo un cristal de 4Mhz. Agradezco cualquier sugerencia o ayuda!  SALUDOS

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Error al medir frecuencias bajas
« Respuesta #1 en: 01 de Mayo de 2010, 12:58:52 »
Que frecuencia estas tratando de medir?? Y cual es el error?

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado javierexe22

  • PIC10
  • *
  • Mensajes: 20
Re: Error al medir frecuencias bajas
« Respuesta #2 en: 01 de Mayo de 2010, 14:23:01 »
Frecuencias desde los 0,1Hz hasta 10 Hz .... El Error esta en el simulador porque a la variable TC le pone el valor 0 sin respetar TC=overflow*65536. La captura de ciclos es correcta y da un resultado adecuado cuando lo hago con calculadora en mano, pero se pudre todo porque TC=0 y los resultados son erróneos

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Error al medir frecuencias bajas
« Respuesta #3 en: 01 de Mayo de 2010, 14:40:28 »
El tema creo que es que overflow está declarada como entero y al hacer el producto te lo toma como producto de enteros y 65536 es 0.
Debes hacer un cast a overflow TC=((int32)overflow)*65536
« Última modificación: 01 de Mayo de 2010, 14:43:44 por pablomanieri »

Desconectado javierexe22

  • PIC10
  • *
  • Mensajes: 20
Re: Error al medir frecuencias bajas
« Respuesta #4 en: 01 de Mayo de 2010, 15:22:30 »
Gracias pablomanieri ya lo solucione cambiando el tipo de variable, aparentemente el problema era ese. Saludos :-/


 

anything