Comunicação serial: baud rate, tempo de transmissão e UBRR do AVR com o erro
Informe o baud rate, os bytes, os bits por caractere e o clock do AVR: veja o tempo por bit, o tempo de transmissão, o valor de UBRR com o erro do baud rate, com e sem U2X.
- Roda no seu navegador
Resultado
O resultado aparece aqui.
Tempo por bit, tempo de transmissão e UBRR
t_bit = 1 ÷ baud | tempo = bytes × bits por caractere ÷ baud | 8N1 = 10 bits por byte
UBRR = fclk ÷ (16 × baud) − 1 (arredondado) | com U2X: fclk ÷ (8 × baud) − 1 | erro = baud real ÷ baud − 1
No formato 8N1, cada byte leva 1 bit de início, 8 de dados e 1 de parada: 10 bit-times. Outros formatos, como 7E1, 8N2 e 8E1, têm de 10 a 12 bits por caractere, e o campo de bits é editável. O cálculo de UBRR vale para o AVR clássico, como o ATmega328P, no modo assíncrono normal, com registrador de 12 bits.
Quatro configurações
A 9.600 baud, cada bit dura 104,167 µs e 100 bytes levam 104,167 ms. Com clock de 16 MHz, UBRR é 103, com erro de 0,16%. A 115.200 baud, UBRR é 8 e o erro, −3,55%; com U2X, são 16 e 2,12%.
Com 8 MHz e 57.600 baud, UBRR é 8, erro de −3,55%, e com U2X, 16 e 2,12%. Em 300 baud com 1 MHz, UBRR é 207 e o erro, 0,16%.
| Baud | Clock (MHz) | UBRR | Erro (%) | UBRR com U2X | Erro com U2X (%) |
|---|---|---|---|---|---|
| 9.600 | 16 | 103 | 0,16 | 207 | 0,16 |
| 115.200 | 16 | 8 | −3,55 | 16 | 2,12 |
| 57.600 | 8 | 8 | −3,55 | 16 | 2,12 |
Limites do AVR e da conta
- As fórmulas valem para o AVR clássico. Famílias novas, como megaAVR-0 e AVR-Dx, usam outra fórmula fracionária; consulte o datasheet do seu chip.
- Os baud rates usuais, como 9.600 e 115.200, são taxas comuns de comunicação, não uma série normalizada. O campo é livre.
- Um erro de baud acima de poucos por cento pode causar erros de recepção; o limite depende dos dois lados da comunicação. Confira o datasheet.
Perguntas frequentes
Como funciona uma calculadora de baud rate?
Ela acha o tempo por bit, o tempo de transmissão e o UBRR do AVR. A 9.600 baud com clock de 16 MHz, o bit dura 104,167 µs.
Como calcular o valor de UBRR para um baud rate?
Use UBRR = fclk ÷ (16 × baud) − 1, arredondado. Com 16 MHz e 9.600 baud, UBRR é 103, com erro de 0,16%.
Quanto tempo leva uma transmissão serial 8N1?
Cada byte usa 10 bits: tempo = bytes × 10 ÷ baud. 100 bytes a 9.600 baud levam 104,167 ms.