La adición básica de un resonador externo de 20MHz se está volviendo mucho más dolorosa de lo que pensaba. Tengo una configuración de tablero con un paquete DIP de un PIC24HJ128GP502. Nada especial, y ha podido parpadear un LED con el FRC interno para el reloj. Mis bits de configuración se establecen en el código de la siguiente manera:
// General Segment code-protection configuration:
// leave code protection off, GSS_OFF
// disable code protection, GCP_OFF
// disable write protection, GWRP_OFF
_FGS(GSS_OFF & GCP_OFF & GWRP_OFF)
// OSCillator SELection:
// Primary oscillator (XT, HS, EC) w/ PLL FNOSC_PRIPLL
// enable two-speed oscillator startup IESO_ON
_FOSCSEL(FNOSC_PRIPLL & IESO_ON)
// OSCillator configuration:
// enable clock switching but not monitoring, FCKSM_CSECMD
// allow the RPn pins to be continually remapped, IOL1WAY_OFF
// leave OSC2 pin as clock pin (not digital I/O) OSCIOFNC_OFF
// High-Speed (10-32MHz crystal) Oscillator, POSCMD_HS
_FOSC(FCKSM_CSECMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_HS)
// WatchDog Timer configuration:
// disable the watchdog timer, FWDTEN_OFF
_FWDT(FWDTEN_OFF)
// Power-On-Reset configuration:
// map I2C pins to SDA1/SCL1, ALTI2C_OFF
// use the smallest power-on-reset value of 2ms, FPWRT_PWR2
_FPOR(ALTI2C_OFF & FPWRT_PWR2)
// Debugger configuration:
// JTAG is enabled, JTAGEN_ON
// communicate on PGC1/EMUC1 and PGD1/EMUD1, ICS_PGD1
_FICD(JTAGEN_ON & ICS_PGD1)
int main(void) {
// STAYS HERE FOREVER, NEVER LOCKS!
while (!OSCCONbits.LOCK); // wait for the PLL to lock
...
Las únicas perillas (o lugares en los que puedo ir mal que conozco) están en _FOSCSEL()
y _FOSC()
. He intentado casi todas las iteraciones de esos bits de configuración que tenían algún sentido (incluso un poquito ... incluso los que no tenían sentido). También he intentado programarlo en modo de depuración así como en modo de lanzamiento.
Entorno: MPLab v8.88.00.00, compilador C30
Investigación relevante: - Sección 39.13 sobre inicio de dos velocidades: enlace - Sección 2.7 de la ficha técnica. - el archivo de encabezado en general, p24HJ128GP502.h, para encontrar las macros correctas y las máscaras de configuración.
Circuito: Fuente de alimentación 3.3V el pin central del resonador va a GND, los dos pines externos van a OSC1 y OSC2, hay una resistencia de 1 Mhm que conecta cada uno de los dos pines externos para el resonador de 3 pines (para estabilidad) resonador: ZTT 20.00MX enlace anuario