Cálculo do baud rate para MCU PIC | Do bit Ao Byte
Geral PIC Cálculo do baud rate para MCU PIC 27 de outubro de 20156 de fevereiro de 2016
baud rate.brg.eusart.mcu.mikroc.osccon.p16f883.pic.uart.usart
Previamente, quero deixar claro que sou um amante de Arduino, o qual tive o prazer de dar os primeiros passos no mundo da eletrônica digital. E também quero deixar claro que não sou especialista nem em PIC nem em Arduino, mas certamente o entendimento que tive para a dissolução do problema que tive com o baud rate será útil para outras pessoas.
Trata-se que ao utilizar uma MCU PIC, ainda que utilizando a MikroC IDE, o baud rate está diretamente relacionado à ferquência do clock. Logo, há uma fórmula para chegar aos valores possíveis conforme a MCU utilizada. Para o post POSTerior, a MCU utilizada é a mesma que deu origem a esse que vos escrevo agora, sendo o P16F883. Apesar de não utilizar nem 1/4 dos pinos disponíveis, fui obrigado a escolhê-lo pela falta de opção em tamanho de memória. Aí é fogo; tem modelo de PIC12F 8 pinos que serviria, mas não ajuda muito existir mais de 250 modelos de MCU se aqui na Banânia só chegam os mais populares. Enfim, o requisito mínimo para minha escolha de PIC é que tenha oscilador interno, assim ligo ele sem nenhum componente externo e fica bem mais agradável sua utilização, apesar de ainda assim não ser tão prático quanto um Arduino UNO.
O ideal é que a taxa de erro fique abaixo de 1%. Então você calcula e vê se o clock selecionado suporta o baud rate desejado. Por exemplo, estou utilizando o oscilador interno a 8MHz e queria fazer uma comunicação assincrona a 115200, mas não seria possível:
Conforme o datasheet descreve, "o BRG (Baud Rate Generator) é um timer de 8 ou 16 bits didicado ao suporte sincrono e assincrono de operações EUSART". O modo padrão é 8 bits, podendo ser modificado para 16 bits através do registrador BAUDCTL, no bit BRG16.
Os pares SPBRGH e SPBRG determinam o periodo do timer. Mais detalhes, leia o respectivo datasheet.
Não estou passando código nenhum esse post porque no final das contas, será utilizado UARTx_Init(BAUDRATE), onde o importante é só calcular o baud rate ideal para passar à função, que fará a configuração dos registradores necessários, incluindo as portas TX e RX.