Resumen:
Necesitas establecer OSCF
(bit 3) en 0
en el registro PCON
en tu código (es decir, durante la ejecución) cuando quieras que el PIC INTOSC (Oscilador Interno) funcione a una frecuencia nominal de 48 kHz (en realidad en cualquier lugar entre 31.4 kHz y 78.62 kHz) en lugar de la frecuencia predeterminada de 4 MHz al encenderse.
Detalles:
Elegí establecer el oscilador interno a la frecuencia mínima posible (48kHz) para disminuir el consumo de energía y lo especificé en el asistente, por lo que el archivo .h tiene la línea #use delay(internal=48kHz).
El problema es que ninguna de las cosas que mencionas realmente configuran el INTOSC hardware a 48 kHz. Según lo que dijiste, parece que tu software asume que la CPU funcionará a 48 kHz, pero tu hardware seguirá funcionando a la frecuencia predeterminada INTOSC de 4 MHz.
el programa funcionó según lo previsto en Proteus, pero funcionó alrededor de 85 veces más rápido cuando lo probé en la tarjeta.
Sí, eso es lo que espero.
85 veces más rápido x 48 kHz = 4 MHz (aprox.)
Este resultado sugiere que tu MCU en realidad seguía funcionando a la frecuencia predeterminada INTOSC de 4 MHz.
El punto importante es que no puedes configurar ese PIC para funcionar a 48 kHz desde el encendido. Si configuras los BITS DE CONFIGURACIÓN (también conocidos como Fusibles) a una de las dos variantes de configuración INTOSC, entonces el MCU utilizará la frecuencia interna de 4 MHz al encenderse.
Luego, cuando quieras cambiarlo a 48 kHz (quizás al inicio de tu main()
pero tal vez en otra parte de tu código, depende de ti elegir), entonces configuras OSCF
(bit 3) en 0
en el registro PCON
- ese bit es lo que cambia la frecuencia INTOSC de 4 MHz a 48 kHz (después de una corta transición de cambio).
Consulta la sección 14.2.8 "CARACTERÍSTICA ESPECIAL: MODOS DE OSCILADOR DE DOBLE VELOCIDAD" en la página 101 de la hoja de datos del PIC16F628A para más detalles.
También ten en cuenta que la hoja de datos no especifica la precisión del reloj de 48 kHz (solo se especifica la precisión del reloj de 4 MHz allí). Sin embargo, la errata del PIC16F628A muestra que el reloj de 48 kHz puede variar entre 31.4 kHz y 78.62 kHz.