Si te entiendo pero son 2 cosas distintas lo tuyo..
Primero que aca tenes una buena cantidad de instrucciones antes de entrar al while, que no estas contando:
void wait_in_us
(long time){ long segundos = 0;
TMR1H = 0xff;
TMR1L = 0xf4;
TMR1IF = 0;
TMR1ON = 1;
if(TMR1IF){
TMR1H = 0xff;
TMR1L = 0xf4;
TMR1IF = 0;
segundos ++;
}
}
}
Luego en cada overflow tenes otra cantidad. Encima despues de todo lo cargas con 0xFFF4 por lo que los overflow ocurren BASTANTE seguido. Y ese error se multiplica por 1.000.000 de veces que ocurre.
Para lo que estas haciendo te conviene mas usar un delay, que va a ser lo mismo, ya que es bloqueante la funcion.
Aclaro que quiero micro segundos porque necesito usar el CCP1 para medir la frecuencia de una señal externa y considero que entre mas presicion tenga el TMR1 , mayores frecuencias podre medir
Y para este caso lo estarias usando mal... En realidad lo estas encarando mal al problema.
Si quisiera medir la frecuencia, me quedan 2 opciones, la primera es medir cuantos pulsos tengo en cierto tiempo. Y la otra es medir el periodo de la señal. Hace poco se hable sobre un frecuencimetro en el foro, y se concluyo que mejor era la ultima. ¿Entonces como procedes?
Configuras el CCP para CAPTURAR flancos ascendentes, y dejas tu Timer1 corriendo libre. La primera ves que entre a la interrupcion del CCP guardas el valor, y aca te quedan varias posibilidades.
- La segunda ves que entra, tomas el valor del TMR1 ( recorda que necesitas tomar el valor de TMR1L primero asi el TMR1H se actualiza) lo restas con el anterior y de alli calculas
o
- Esperas mas ciclos, ejemplo 2 ciclos, 4, 8, recien ahi tomas el valor del TMR1 y calcuclas tu frecuencia.
¿Como calcular la frecuencia?
Sabes que cada uno que suma el TMR1 es : 4/Fosc
El tiempo que paso entre ciclos va a depender de cuantos ciclos tomaste, por ejemplo si tomas te un ciclo es directo. Pero si tomaste 2,4 u 8, vas a tener que dividir el resultado por esa cantidad (Resultado de la resta de TMR1)/4 (por ejemplo con 4 )
De alli es multiplicar para obtener el periodo:
4/Fosc * Resta TMR1 / 4 = (Resta TMR1) / Fosc = Tseñal
Si quisiera la frecuencia
1 / Tseñal = Fosc / (Resta TMR1)
Y lo tenes.