Estoy tratando de calibrar el reloj interno para encender una salida una vez durante 3 segundos cada 7 días con una precisión de unos pocos minutos. Pude lograr esto usando el registro OSCCAL en el chip. El problema de esto funciona si configuro esto por chip. Estoy tratando de encontrar una manera de programarlo haciendo que verifique y calibre su interior durante la programación. ¿Quizás hay una función en el compilador que se calibrará automáticamente?
Estoy usando:
UCM: PIC10F200
Programador: PICkit3
Software: MPLAB X IDE v3.26
Compilador: XC8 v1.37
El compilador no puede 'calibrarse automáticamente' porque no tiene idea de a qué frecuencia se puede ejecutar 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, esta frecuencia podría medirse y el OSCCAL
valor de calibración requerido se calcularía e insertaría en su código.
Normalmente no necesita hacer esto porque Microchip ya lo ha hecho en la fábrica. Un byte de calibración se almacena en la última ubicación de la ROM en una MOVLW
instrucción (MOVe Literal byte to Working register). Al encender o reiniciar, el PIC ejecuta esta instrucción, por lo que el registro W tiene el byte de calibración en el inicio. Su código de inicio solo tiene que guardar este valor (¡ antes que cualquier otro código que use el registro W!) y escribirlo en el OSCCAL
registro.
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 mejor con un programa PIC que se establezca gradualmente OSCCAL
en diferentes valores hasta que se acerque lo más posible a la frecuencia requerida (quizás comparándola con una frecuencia de referencia en un pin de entrada) y luego le diga qué valor de calibración debe usar. Aquí hay un ejemplo:-
Utilidad de recalibración del oscilador interno
(Nota: el proyecto en ese enlace solo funciona con 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, enviarlo como datos en serie en un pin de salida).
Pero 7 días son 10080 minutos. El PIC10F200 tiene una tolerancia de oscilador interno de +-1 % a 3,5 V, lo 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 pocos minutos'.
rdtsc
david tweed
OSCCAL
en la memoria flash en la ubicación 0x00FF? Consulte la página 11 de la hoja de datos .brahans
usuario2943160