PIC18F25K50 - 48MHz con oscilador interno no funciona

2

Me gustaría ejecutar un Microchip PIC18F25K50 a su velocidad máxima de 48MHz desde su oscilador interno.

Aquí está la descripción general del sistema del oscilador de la hoja de datos:

Los16MHzdesdeelHFINTOSCsepuedenenviardirectamentealaCPUconfigurandoSCS=0b10(INTOSC).Alhacerlo,obtengoexactamenteloqueespero:

Mi código alterna una salida, y los pulsos tienen un ancho de ~ 250ns / 4MHz, que es la velocidad de ejecución de la MCU de 16MHz / 4.

Ahora, el INTOSC de 16MHz también se alimenta al módulo del reloj principal, por lo que habilitar el PLL 3x, establecer el poscaler PLL en / 1, y elegir SCS=00 (reloj primario) debe dar una velocidad de ejecución del reloj de 48MHz / 12MHz.

Sin embargo, eso no funciona. La MCU muestra una sensibilidad capacitiva extrema, normalmente no produce ningún impulso. Cuando pongo mis manos cerca o incluso las toco, comienza a producir pulsos de varias, pero extremas longitudes. Para mí, parece que el MCU de alguna manera atrapa el ruido y deriva su reloj. Por cierto, también pasé por alto el PLL en CFGPLLEN=0 , eso no cambia nada.

¿Alguien sabe cómo ejecutar el MCU a 48MHz desde el oscilador interno?

Aquí están mis bits de configuración:

// CONFIG1L
#pragma config PLLSEL = 1    // PLL multiplier: 0->4x 1->3x  
#pragma config CFGPLLEN = 0  // PLL enabled?
#pragma config CPUDIV = 0    // CPU Clock divider: 0-> No divider
#pragma config LS48MHZ = 1   // USB clock: System@48MHz->0 System@24MHz->1

// CONFIG1H
#pragma config FOSC = 0b1001 // OscillatorConfig: InternalOscClockOut->1001
#pragma config PCLKEN = 0    // Primary clock: disable by software ->0 alwaysEnabled->1
#pragma config FCMEN = 0     // Fail-Safe Clock Monitor?
#pragma config IESO = 0      // Internal/External Oscillator Switchover?

y aquí mi código:

void main(void)
{
    OSCCONbits.IRCF=0b111; // No divide -> 16MHz
    OSCCONbits.SCS=0b00;  // Primary clock
    //OSCCONbits.SCS=0b10;  // INTOSC
    ANSELA=0;            //Make PortA digital
    TRISAbits.TRISA0=0;  //Make PortA output

    while (1){    
        LATAbits.LA0=1;
        LATAbits.LA0=0;
        LATAbits.LA0=1;
        LATAbits.LA0=0;
    }
}
    
pregunta sweber

1 respuesta

0

La hoja de datos página 31 tiene esta tabla para la configuración de PLL:


Parece que el registro OSCCON2 debería tener el PLLEN establecido alto. El valor predeterminado es bajo al encender o reiniciar.

    
respondido por el glen_geek

Lea otras preguntas en las etiquetas