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; // ...
}
'