definición de F_OSC para Uart usando PIC18f

0

PIC18f67j11. Para F_OSC, ¿cuál debo usar: la frecuencia de mi oscilador de cristal o el oscilador de frecuencia real, incluidas mis modificaciones de PLL?

Estoy intentando hacer coincidir la tasa de baudios de la UART y no funciona. He probado todas las configuraciones de reg y las fórmulas baudRate, pero ninguna de ellas parece funcionar.

Estoy usando un cristal externo de 20MHz (conectado en OSC1 y OSC2) con el máximo PLL (OSCTUNE.TUN = 01111) xtal para 4800bit / s para medir la energía con el medidor de MCP35F501.

Aquí está la selección del código de reloj:

'
#define F_OSC                           20000000 
#define FOSC_PLL                        20000000 * 4  
#define FCY                             F_OSC / 4 
'

'// seleciona clock
    OSCCON  = 0xF0;               // INTOSC = 8MHz; SCS = 00: default primary oscillator
    OSCTUNE = 0b01011111;         // PLL = ON; TUN = 011111: Maximum frequency'

Y mi configuración UART:

'
void configureUart(unsigned char uart, unsigned long baudRate) {
' 

    RCSTA2bits.SPEN = 1;
    RCSTA2bits.CREN   = 1;           // Habilita recepção
    TRISGbits.TRISG1 = 0;
    TRISGbits.TRISG2 = 1;
    TXSTA2bits.BRGH = 0;        //Low Speed Mode (baud = 8bits)
    TXSTA2bits.SYNC = 0;        // 0 = Asynchronous Mode
    TXSTA2bits.TX9 = 0;         //Transmissão feita em 8 bits
    RCSTA2bits.RX9 = 0;         //Recepção feita em 8 bit
    BAUDCON2bits.BRG16 = 1;     //16bit Baud Rate Generator 

    TXSTA2bits.TXEN = 1;        // Habilita transmissão
    UART2_RX_INT_EN = 1;        //
    UART2_RX_PRIORITY  = 0;     // Baixa prioridade de interrupção

    baudRate = 1050;//(unsigned long)(FOSC_PLL / (baud_rate * 16)) - 1; TRYING TO MATCH MANUALY TO VALIDATE THE PROTOCOL :#
    // Calcula o novo valor para o registro de configuração do baud-rate
    SPBRGH2 = baudRate >> 8;   // Atualiza BRG da UART1
    SPBRG2 = baudRate;         // ...  
}

'
    
pregunta Rique

1 respuesta

1

He usado el verdadero valor del reloj de entrada y ahora está funcionando. Así que el valor del cálculo FOSC a UART BaudRate es el valor del cristal, incluidas las modificaciones de PLL. En resumen es el valor de entrada de la CPU.

    
respondido por el Rique

Lea otras preguntas en las etiquetas