PIC24FJ64GA002 no funciona a la velocidad

1

Estoy intentando que mi PIC24FJ64GA002 funcione a 32 Mhz. Yo mido la frecuencia en el pin OSCO, y es 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
    
pregunta Adrian Sarli

2 respuestas

1

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 hacer esto, 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 la explicación en la página 93.

Hay macros en la biblioteca C30 (solo para información si planeas 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í (aparecerá estar en el manual C30).
De todos modos, intente seguir las instrucciones en esa página y avísenos, si aún no funciona, lo buscaré nuevamente (creo que podría tener uno de esos PIC24s por aquí para probar si es necesario)

EDITAR - Para referencia, a continuación se muestra el código en cuestión. Debe colocar 0x03 (el código para el cristal externo con PLL) en W0 justo antes de que se ejecute. Probablemente desee tener una pequeña demora después del interruptor para permitir que el nuevo reloj se estabilice, y verifique OSWEN y el bit LOCK para asegurarse de que el interruptor haya sido 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

EDIT

Le eché otro vistazo y creo que debería poder comenzar a utilizar el FRC con PLL en este chip (en el dsPIC fue solo con Xtal de todos modos) Dejaría lo anterior como referencia sobre el cambio. .

Mi segunda suposición es que creo que la configuración no es correcta: 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 debajo de algo como:
C: \ Archivos de programa \ Microchip \ MPLAB ASM30 Suite \ Support \ PIC24F \ inc)
También tenga en cuenta las notas sobre la configuración de los bits de configuración, ya sea con macro o la forma más larga. Asegúrese de tener estos correctos.
Además, podría valer la pena poner un cheque para el bit PLL LOCK (en el registro OSCCON - vea este FRM El documento del oscilador para una discusión más exhaustiva. De todos modos, con los PIC más grandes necesitará el manual de referencia familiar, así que tome todas las piezas del microchip si no las tiene.

    
respondido por el Oli Glaser
1

Según la hoja de datos:

  

La fuente del reloj del procesador está dividida por dos para   Indique el reloj del ciclo de instrucciones interno, FCY. En esto   documento, el ciclo de instrucción del reloj también se denota   por FOSC / 2. El reloj del ciclo de instrucciones interno, FOSC / 2,   se puede proporcionar en el pin de E / S OSCO para algunos   Modos de funcionamiento del oscilador primario.

Entonces, si está obteniendo 4MHz del pin OSCO, entonces el oscilador interno debe estar funcionando a 8MHz.

8MHz es la frecuencia base del oscilador interno Fast RC.

Para llegar a 32MHz, los 8MHz deben pasar por el PLL para multiplicarlo por 4.

En teoría, con un reloj de 32Mhz debería ver 16MHz en el pin OSCO.

Se supone que ya lo está haciendo, tanto a través de los ajustes de configuración como del registro OSCCON.

Todos tus postscalers están configurados a 1: 1, lo cual es bueno.

Cosas para probar y / o aclarar:

  1. ¿Funciona realmente el núcleo a solo 8MHz, o el pin OSCO está dando la frecuencia pre-PLL (improbable)? Intente ejecutar un programa simple que alterna un pin IO HIGH y luego LOW en el espacio de \ $ 2 T_ {CY} \ $ y mida el ancho del pulso.
  2. Intente ejecutar el chip con un cristal externo a 8MHz y use el PLL para intentar obtener 32MHz. Esto solo puede ser un acuerdo temporal para confirmar que se está habilitando el PLL.
  3. Investigue observando el estado del PLL para asegurarse de que se haya resuelto como lo primero que hace tu programa. No pude ver exactamente qué indicador comprobar esto durante mi breve revisión a través de la hoja de datos, pero si usa el PLL, siempre debería ser lo primero que haga su programa.
respondido por el Majenko

Lea otras preguntas en las etiquetas