Estoy intentando que mi PIC24FJ64GA002 funcione a 32 Mhz. Mido la frecuencia en el pin OSCO, y son solo 4 Mhz. Aquí está mi código:
config __FOSCSEL, FNOSC_FRCPLL & IESO_OFF
config __FOSC, FCKSM_CSECMD & OSCIOFNC_ON
mov #0x1182, W0 ; OSCCON
mov #0x0000, W1 ; CLKDIV
mov #0x0000, W3 ;OSCTUN
mov W0, OSCCON
mov W3, OSCTUN
mov W1, CLKDIV
Parece que no está cambiando el reloj: si se parece al dsPIC que usé recientemente, solo puede cambiar al PLL después de que se esté ejecutando el oscilador principal (INTRC o EXT XTAL).
Para ello utiliza una secuencia de desbloqueo que se detalla en el manual. Acabo de echar un vistazo rápido y está ahí para su chip con una explicación en la página 93.
Hay macros en la biblioteca C30 (solo para información si planea usar C en algún momento) para desbloquear y escribir en los registros OSC necesarios y hacer lo mismo, pero no puedo verlos mencionados allí (estará en el manual del C30).
De todos modos, intente seguir las instrucciones en esa página y avísenos, si aún no funciona, volveré a buscar (creo que podría tener uno de esos PIC24 por aquí para probar si es necesario)
EDITAR: como referencia, a continuación se muestra el código en cuestión. Debe poner 0x03 (el código para cristal externo con PLL) en W0 justo antes de que se ejecute. Probablemente desee tener un pequeño retraso después del cambio para permitir que el nuevo reloj se estabilice, y verifique OSWEN y el bit LOCK para asegurarse de que el cambio fue exitoso.
;Place the new oscillator selection in W0
OSCCONH (high byte) Unlock Sequence
MOV #OSCCONH, w1
MOV #0x78, w2
MOV #0x9A, w3
MOV.b w2, [w1]
MOV.b w3, [w1]
;Set new oscillator selection
MOV.b WREG, OSCCONH
;OSCCONL (low byte) unlock sequence
MOV #OSCCONL, w1
MOV #0x46, w2
MOV #0x57, w3
MOV.b w2, [w1]
MOV.b w3, [w1]
;Start oscillator switch operation
BSET OSCCON,#0
EDITAR
Eché otro vistazo y creo que debería poder comenzar a usar el FRC con PLL en este chip (en el dsPIC solo era con xtal de todos modos IIRC) Dejaré lo anterior allí como referencia sobre el cambio de todos modos.
Mi segunda conjetura es que creo que tiene la configuración incorrecta: se ve y el archivo .inc muestra que las configuraciones para el OSC, etc. están en config2, no en config.
Compruébelo usted mismo en su carpeta ASM30; debería estar en algo como:
C:\Program Files\Microchip\MPLAB ASM30 Suite\Support\PIC24F\inc)
También tenga en cuenta las notas sobre la configuración de los bits de configuración con macro o de forma más larga. Asegúrese de tener estos correctos.
Además, podría valer la pena verificar el bit PLL LOCK (en el registro OSCCON; consulte este documento del oscilador FRM para obtener una discusión más completa. Con los PIC más grandes, necesitará el manual de referencia familiar de todos modos, así que tome todas las partes de microchip si no los tienes)
Según la ficha técnica:
La fuente de reloj del procesador se divide por dos para producir el reloj de ciclo de instrucción interno, FCY. En este documento, el reloj del ciclo de instrucción también se indica mediante FOSC/2. El reloj de ciclo de instrucción interno, FOSC/2, se puede proporcionar en el pin de E/S de OSCO para algunos modos de funcionamiento del oscilador primario.
Entonces, si está obteniendo 4 MHz del pin OSCO, entonces el oscilador interno debe estar funcionando a 8 MHz.
8MHz es la frecuencia base del oscilador Fast RC interno.
Para llegar a 32MHz los 8MHz deben pasar por el PLL para multiplicarlo por 4.
En teoría, con un reloj de 32 MHz, debería ver 16 MHz en el pin OSCO.
Esto supuestamente ya lo estás haciendo, tanto a través de los ajustes de configuración como del registro OSCCON.
Todos sus escaladores posteriores están configurados en 1: 1, lo cual es bueno.
Cosas para probar y/o aclarar:
Adrián Sarli
Oli Glaser
Adrián Sarli
Adrián Sarli