buenas amigos aqui me encuentro para solicitar su ayuda resulta que deseo realizar un fecuencimetro con este pic el 18f258 programacion en PICC y utilizando el modulo de captura.
realizo simulacion en proteus

he aquí el código
#include <18f242_CCP.h>
#include <FLEX_LCD.C>
#define option PIN_B5
#define selec PIN_B6
#define ef PIN_B7
#define LED PIN_B4
volatile int1 cont_pulso=0,recv_pulso=0;
volatile int16 TFS=0,TFB=0,TP=0;
float AP,F;
float cm[3]={0.2,0.0002,0.0000002};
char ut[3]={'u','m',' '};
char uf[3]={'M','K',' '};
int i=2;
#int_CCP1
void CCP1_isr(void) {
if(cont_pulso==0){
TFB=CCP_1;
setup_ccp1(CCP_CAPTURE_RE);
cont_pulso=1;
recv_pulso=0;
}else{
TFS=CCP_1;
setup_ccp1(CCP_CAPTURE_RE);
cont_pulso=0;
recv_pulso=1;
setup_ccp1(CCP_OFF);
}
}
void main() {
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); //13.1 ms overflow
setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
setup_ccp1(CCP_CAPTURE_RE);
lcd_init();
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
lcd_putc(" FRECUENCIMETRO\n");
lcd_putc("BY LEOELECTRONIC");
delay_ms(1000);
output_bit(LED,1);
output_bit(ef,1);
while(TRUE){
if(input(option)==0){
delay_ms(300);
i--;
if(i==-1){i=2; }
}
if(recv_pulso==1){
TP=TFS-TFB;
AP=TP*cm
;
F=(1/AP);
printf(lcd_putc,"\fF=%0.4f%cHz\nAP=%0.4f%cS",F,uf,AP,ut);
recv_pulso=0;
setup_ccp1(CCP_CAPTURE_RE);
delay_ms(500);
}//fin recv_pulso
}//fin loop
}
entonces el problema es que las lecturas a bajas frecuencias al rededor de los 100Hz, son totalmente alejadas de la realidad
al rededor de 1KHza 40kHz son un poco mas cercanas
a 50KHz son mucho mas cercanas
pero mas de 50 Khz no mide se queda alli
entonces no se si el problema esta es en el hardware sera que no estoy adecuando correctamente la señal o el software que estoy utilizando le modulo de captura incorrectamente
ayuda.........!