PIC24 Oscilador primario XT_PLL frecuencia está desactivada en un 3 por ciento

0

Estoy usando un PIC24. Después de resolver el problema con el PLL ( el módulo PIC24 PLL siempre está fuera de bloqueo ) Estoy luchando con una gran variación en la frecuencia del sistema. Escribí un pequeño código que se usa para medir la frecuencia del sistema usando el temporizador LPRC interno. El oscilador primario FOSC es de 8 MHZ y con PLL se empuja a 32 MHz. El FCY es FOSC / 2 (16MHZ). Mi código está leyendo un FCY de 15.522 MHz, que es un 3 por ciento de la frecuencia real esperada. Como resultado, no puedo conectar mi PC a la UART que funciona a 38400 bps para la depuración.

Creo que el puerto serie de mi computadora no puede tolerar una desviación tan alta en la velocidad en baudios y, por lo tanto, causa un error de trama del puerto serie. Por favor sugiera una manera de mejorar mi frecuencia.

Aquí está mi función uartInit

#define  peripheralPinSelectUnLock() do { OSCCON = 0x46; OSCCON = 0x57; OSCCONbits.IOLOCK = 0; } while(0)
#define  peripheralPinSelectLock()   do { OSCCON = 0x46; OSCCON = 0x57; OSCCONbits.IOLOCK = 1; } while(0)
#define UART1_BAUD_RATE              (38400ul)

uint32_t ui32Fcy=16000000;
unsigned long int baudRateDivider = ((ui32Fcy/(4*UART1_BAUD_RATE))-1);     

peripheralPinSelectUnLock();   // PPS Unlock
PPSInput(PPS_U1RX, PPS_RP30);  // RF2/RP30 as U1RX
PPSOutput(PPS_RP16, PPS_U1TX); // RF3/RP16 as U1TX
TRISFbits.TRISF2 = 1;          // RF2/RP30 is set for input (RX)
TRISFbits.TRISF3 = 0;          // RF3/RP16 is set for output (TX)
peripheralPinSelectLock();     // PPS Lock

U1BRG = baudRateDivider; // Divides to UART_BAUD_RATE
U1MODEbits.UARTEN = 1;   // UART2 is Enabled
U1MODEbits.ABAUD = 0;    // auto baud is disabled
U1MODEbits.BRGH = 1;     // Low baud rate ?
U1STAbits.UTXEN = 1;
IFS0bits.U1RXIF = 0;      // clear interrupt flag of rx
IEC0bits.U1RXIE = 1;
IPC2bits.U1RXIP = 7;      // enable rx recieved  data interrupt

El valor de U1BRG (variable de observación) es 103 para una tasa de baudios de 38400. Gracias por cualquier ayuda.

    
pregunta Siddharth

2 respuestas

1

¿Estás utilizando el LPRC para "medir" tu cristal? Por lo general, eso se hace al revés.

Eche un vistazo a la hoja de datos de su PIC, sección 32.2, tabla 32-21.
Encontrará que la precisión de LPRC es de + -20%, lo que significa que podría estar en cualquier lugar entre 25 kHz y 37 kHz dependiendo de varios factores (temperatura, voltaje de alimentación, ...).

Creo que tus problemas de velocidad en baudios vienen de otra parte y no de tu cristal.

Muéstrenos su código de inicialización UART ya que es muy probable que este sea el problema.

    
respondido por el brhans
0

Sugiero usar un cristal. El enfoque alternativo es jugar con el uart brgh hasta que coincida con 38,400.

Todavía tengo que ver una razón razonable para no usar un cristal. Quizás los contadores de frijol lo requieran a veces ...

    
respondido por el Erik Friesen

Lea otras preguntas en las etiquetas