El compilador no puede "calibrarse automáticamente" porque no tiene idea de la frecuencia con la que puede funcionar un chip individual. El programador / depurador de chips podría hacerlo descargando y ejecutando un programa en el PIC que produce una frecuencia en un pin de salida. Luego se podría medir esta frecuencia y calcular e insertar el valor de OSCCAL
de calibración requerido en su código.
Normalmente no necesita hacer esto porque Microchip ya lo hizo en la fábrica. Un byte de calibración se almacena en la última ubicación de la ROM en una instrucción MOVLW
(MOVe byte literal al registro de trabajo). Al encender o reiniciar, el PIC ejecuta esta instrucción, por lo que el registro W tiene el byte de calibración en el arranque. Su código de inicio solo tiene que guardar este valor ( antes de cualquier otro código que use el registro W) y escribirlo en el registro OSCCAL
.
La calibración de fábrica probablemente no sea tan precisa como podría ser, porque se realiza rápidamente y no en el circuito exacto que tiene. Es posible que pueda obtener una precisión ligeramente mayor con un programa PIC que establece de manera incremental OSCCAL
a diferentes valores hasta que se acerque lo más posible a la frecuencia requerida (tal vez al compararla con una frecuencia de referencia en un pin de entrada) y luego le dice qué Valor de calibración a utilizar. Aquí hay un ejemplo: -
Utilidad de recalibración del oscilador interno
(Nota: el proyecto en ese enlace solo funciona con el 12F629 y 675. El 10F200 no tiene EEPROM, por lo que tendría que usar algún otro método para extraer el valor de calibración, por ejemplo, envíelo como datos en serie en una salida pin.)
Pero 7 días son 10080 minutos. El PIC10F200 tiene una tolerancia de oscilador interno de + -1% a 3.5V, que corresponde a + -100 minutos en 7 días. Por lo tanto, incluso con la mejor calibración no puede garantizar obtener una precisión de 'unos minutos'.