Favorito 88
UARTs
A peça final deste puzzle de série é encontrar algo para criar os pacotes de série e controlar essas linhas físicas de hardware. Introduza a UART.
Um receptor/transmissor assíncrono universal (UART) é um bloco de circuitos responsável pela implementação da comunicação em série. Essencialmente, a UART actua como um intermediário entre interfaces paralelas e em série. Numa extremidade da UART está um bus de oito ou mais linhas de dados (mais alguns pinos de controlo), na outra estão os dois fios série – RX e TX.
UARTs existem como ICs autónomos, mas são mais comumente encontrados dentro de microcontroladores. Terá de verificar a folha de dados do seu microcontrolador para ver se este tem alguma UART. Alguns não têm nenhuma, outros têm uma, outros têm muitas. Por exemplo, o Arduino Uno – baseado no “velho fiel” ATmega328 – tem apenas uma única UART, enquanto o Arduino Mega – construído sobre um ATmega2560 – tem uma impressionante quatro UARTs.
Como o R e o T na sigla ditam, as UARTs são responsáveis tanto pelo envio como pela recepção de dados em série. Do lado da transmissão, uma UART deve criar o pacote de dados – anexando bits de sincronização e paridade – e enviar esse pacote para fora da linha TX com um timing preciso (de acordo com a taxa de bauds definida). Na extremidade receptora, a UART tem de amostrar a linha RX a taxas de acordo com a taxa de bauds esperada, escolher os bits de sincronização e cuspir os dados.
UARTs mais avançadas podem atirar os dados recebidos para um buffer, onde podem ficar até o microcontrolador chegar para os obter. As UARTs libertarão normalmente os seus dados protegidos numa base FIFO (first-in-first-first-out). Os buffers podem ser tão pequenos quanto alguns bits, ou tão grandes quanto milhares de bytes.
UARTs de software
Se um microcontrolador não tiver uma UART (ou não tiver o suficiente), a interface de série pode ser bit-banged – directamente controlada pelo processador. Esta é a abordagem que as bibliotecas Arduino, como SoftwareSerial take. Bit-banging é processador-intensivo, e normalmente não tão preciso como uma UART, mas funciona numa pitada!