Estoy usando un dsPIC 33FJ128GP804 y estoy tratando de registrar datos a 200 Hz con la mayor precisión posible. Mi dispositivo también tiene un GPS y me doy cuenta de que mi temporizador está a la deriva en comparación con el GPS en aproximadamente 333 ms / hora. Creo que debería ser posible hacerlo mejor que eso. Mi fuente de reloj es un cristal de 40 Mhz con una tolerancia de 30 ppm y una estabilidad de 50 ppm y un envejecimiento de 5 ppm / año.
Tengo el oscilador del PIC en funcionamiento a 72Mhz. No puedo cambiar esto, es necesario ejecutar UARTS a 3Mbit.
Durante mi prueba para averiguar por qué hay tanta tendencia, hice un experimento. Estoy ejecutando dos temporizadores, uno a 200Hz y otro a 5Hz. En los controladores de interrupción, el temporizador de 200Hz incrementa la int larga en 1 y el temporizador de 5Hz incrementa la int larga en 40. Los dos ints largos deben permanecer iguales. Sin embargo, después de 45 minutos, los valores difieren en 6. (30 ms)
¿Por qué veo una diferencia entre los dos valores? ¿Y hay algo que pueda hacer para aumentar la precisión de mi temporizador además de cambiar el cristal? ¿Tener un período más largo aumenta la precisión? Si es así, ¿podría usar un temporizador más lento para restablecer periódicamente mi temporizador más rápido? ¿Cambiaría la fuente de mi temporizador al oscilador externo desde el reloj de instrucciones?
Utilizo el tiempo del GPS para corregir el tiempo en el procesamiento posterior, pero el GPS no siempre está disponible, por lo que no quiero tener que confiar en él.