Tengo un problema con un microcontrolador PIC. No puedo hacer que funcione a 32 MHz. A través de la página 78 de su hoja de datos (número de documento DS40001775B). Los pasos para seleccionar la operación FOSC de 32 MHz están claramente listados. Parece bastante sencillo pero no obtengo la salida correcta. He usado este mismo microcontrolador a 16 MHz para escribir con éxito en un chip flash antes de golpear los bits, así que asumo que está funcionando, al menos lo suficiente. El código a continuación es lo que estoy esperando para obtener 32 MHz, pero en lugar de eso, me da 8 MHz
Aquí está mi código OSSCON en main:
void main (void)
{
OSCCONbits.SPLLEN = 0b1;
OSCCONbits.IRCF = 0b1110;
OSCCONbits.SCS = 0b00;
Aquí están las palabras de configuración relacionadas con la selección de velocidad del oscilador
#pragma config PLLEN = 0b1
#pragma config FOSC = 0b100
Configuré un PWM para ejecutarse y, en función de la configuración de PWM, debería estar obteniendo 20 KHz, pero en cambio estoy obteniendo 5 KHz, lo que me lleva a creer que la configuración del oscilador me da un FOSC de 8 MHz y el 4xPLL no tiene efecto .
Aquí está mi configuración de PWM.
PWM5CLKCONbits.PS = 0b000;
PWM5CLKCONbits.CS = 0b00;
/*
* PS - The PWM clock is used without a prescaler
* CS - The PWM clock source is the system FOSC
*/
PWM5CONbits.POL = 0b0;
PWM5CONbits.MODE = 0b00;
/*
* POL set to make active HIGH
* MODE set to select Standard PWM mode
*/
//FOR 10% 10 kHz on 16 MHz FOSC, 20 KHz on 32 MHz FOSC
PWM5PH = 1440;
PWM5DC = 1600;
PWM5PR = 1610;
PIE3bits.PWM5IE = 0b0;
PWM5CONbits.EN = 0b1;
Cuando configuro mi PIC a 16 MHz, las cosas parecen funcionar bien. Cuando configuro los valores PWM para una frecuencia que espero, lo entiendo. Así que la configuración de PWM se ve bien. Desafortunadamente, no tengo un osciloscopio que pueda usar para medir altas frecuencias como la salida del reloj directamente, pero en base a la configuración y salida de PWM, estoy bastante seguro de que estoy obteniendo un FOSC de 8MHZ. Tengo un multímetro que puede medir bajas frecuencias y eso es lo que estoy usando para verificar la salida de PWM en este momento.
Una nota final puede no tener nada que ver con el problema anterior, pero siento que no debería dejarlo de lado. El microcontrolador se comporta un poco raro en otra zona. Yo mismo configuro mis bits de configuración sin usar el generador de bits de configuración en MPLABX y me gusta programar los valores en binario. Sin embargo, me di cuenta de que no estaba obteniendo ningún resultado, así que resolví problemas y descubrí que si configuraba IESO de otra forma que no fuera esta
#pragma config IESO = ON
el código simplemente no funcionó. Es decir, si utilizo alguno de los valores siguientes, no funcionaría.
#pragma config IESO = 0b1
#pragma config IESO = 0b0
#pragma config IESO = OFF
No utilizo IESO, así que lo habría configurado en OFF o 0b0, pero ahora me veo obligado a dejarlo como ON solo para hacer que el microcontrolador ejecute el código que escribo, lo que me parece extraño.
Si hay alguna información que deba agregar, solo pregunte. Podría zip mi proyecto MPLAB X si alguien lo necesita. Habría preguntado en los foros de Microchip, pero por alguna razón no puedo registrarme (estoy intentando averiguar por qué con Microchip en Twitter). ¡Gracias por tu tiempo!