...
El timer1 se puede vincular con el módulo CCP en modo comparador, de manera que cuando coincida el valor de los registros del timer con los del comparador dispare una interrupción y resetee el timer.
Pregunta, ¿se pierde algún ciclo de clock en la operatoria de generar la INT, y resetear el timer?
Pregunta general: de donde estás sacando la señal de reloj para el timer1?, si es del fosc (oscilador principal) vamos mal, si es de un cristal de +/-5ppm conectado a T1OSO/T1OSI vamos mejor.
Digo esto porque fosc no es muy preciso, los cristales externos de 4/8/12/20.. MHz normalmente tienen unas cuantas decenas de ppm de error, comparado con un cristal que viene específicamente para tener un tiempo preciso, que justamente son los de 32768Hz.
Creería que el módulo CCP resetea automáticamente el timer1 sin ninguna intervención de software, es decir, el retardo en el reseteo sería de nanosegundos.
A ver la hoja de datos:
http://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdfSección 7.5: ccp1 configurado en modo comparación para generar un special event trigger...
Notar esto que es importante:
If Timer1 is running in Asynchronous Counter mode, this Reset operation may not work.
Entonces habrá que habilitar el flag sync para el timer1...
Sección 9.2.4:
The special event trigger output of the CCP occurs immediately upon a match between the TMR1H, TMR1L register pair and CCPR1H, CCPR1L register pair. The TMR1H, TMR1L register pair is not reset until the next rising edge of the TMR1 clock. This allows the CCPR1 register pair to effectively be a 16-bit programmable period register for Timer1.
En base a eso diría que debe poderse hacer el reset de ltimer1 usando el special event trigger para resetear la cuenta por
hardware, sin intervención de software (que tiene más retardo a su vez más difícil de predecir).
A ver si me puedo explicar mejor, el timer llega, pogamos por poner a al valor 01FF, que coincide con el del comparador, ¿mientras se resetea el timer se pierde algún ciclo de clok o vuelve a 0000 de inmediato sin perder ningún ciclo y sigue contando?
Para saber si tengo que tener en cuenta esa demora o no.
Si lo hacés funcionar por hardware esa demora debería ser despreciable, a no ser que te moleste hasta 1 microsegundo de error sistemático (por el hecho de usar el flag sync para asegurar que el reset por hardware funcione).
Entiendo que temperatura y diseño y etc varios pueden variar la precisión, pero quiero hacer lo que esté a mi alcance para lograr lo mejor.
Esto es por un hobby nomas. No lo arranqué antes porque pensaba en usar solo el timer o rutinas de demora y en los dos casos el código del reloj metía demoras, pero en este caso, tal vez sea mejor usar el comparador.
Uds dirán. Gracias.
Seguro, lo mejor es configurar para que funcione todo por hardware, en el software solo hacer la configuración inicial de los módulos, y alguna función para leer la cuenta del timer.
Y que la fuente del reloj para el timer1 sea la apropiada (cristal de 32768 Hz con menos de 10 ppm en T1OSI/OSO).
Saludos.