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