Conhecimento prévio:
[HW] Kontrollermoodul, [HW] Kombomoodul,
[AVR] USART,
[LIB] Jadaliides,
[LIB] Graafiline LCD
UART é um receptor/transmissor assíncrono universal. USART é quase a mesma coisa, com a diferença de que os dados são transmitidos com o sinal de relógio. Também podem ser chamados interfaces de série. A interface série é um mecanismo de transferência de dados em que cada bit é transmitido, um a um. Por exemplo, para transmitir um byte tem de ser transmitido 8 bits durante um intervalo de tempo fixo. Pode ser alteração numa linha física com um pino de microcontrolador, em que a tensão do pino em intervalos muda de valor alto ou baixo. A interface de série é geralmente ligada a dois dispositivos, um das quais transmite informação (mudando o valor na ligação), e outro que recebe informação (lendo o valor na ligação). Abreviatura do terminal de transmissão TX, de recepção RX. Informações na ligação movem sempre numa direção. Quando os dados são movidos em duas linhas ao mesmo tempo, é um bus full-duplex.
A transmissão de dados UART pode ocorrer em quadro (em Inglês frame) através da qual os bits de dados, dependendo da configuração de 5 a 9. A peça mais comum de dados é de 8 bits, ou um byte. Além disso, bits adicionais de bits de dados transmitidos para o quadro, que é o de dados de chegada e de expirar o reconhecimento atual do lado do receptor. O primeiro deles é chamado bit de inicio (startbit), que é sempre 0, e outra bit (ou bits) de paragem, que é sempre o primeiro bit de paragem antes do bit de paridade, que é usado para verificar a precisão dos dados. O bit de paridade indica se o número de bits de dados entre o número de uns é par ou ímpar.
Além da estrutura do quadro, outro parâmetro importante é a taxa de transmissão (em inglês baudrate), que fixa o número de símbolos transmitidos por segundo. A transferência de dados pode ser usado para qualquer taxa de transmissão. Por exemplo, 9600 bps, 19.200 bps, 38.400 bps, 57.600 bps, 115.200 bps.
Existe em quase todos os microcontroladores uma interface UART. Padrão UART não especifica a tensão dos sinais, que depende da tensão do microcontrolador, o qual é, tipicamente, quer a 3.3 V ou 5.0 V. A tensão de 5.0 V para os sinais de micro-controlador de trabalho correspondentes ao padrão TTL / CMOS fonte de alimentação. O protocolo UART necessita ligar os dispositivos físicos através da norma RS-232, que usa tensões de até 15 V e -15 V, determinada pelo tipo de ficha, usado principalmente em portas série, chamados coloquialmente as portas “COM”. Para se conectar a um computador usando o microcontrolador que converte os sinais de TTL / CMOS para tensão RS-232 e vice-versa, RS-232 é substituída em grande parte pela porta USB. Há vários conversores USB - RS-232. Uma vantagem da RS-23 sobre o USB é poder usar cabos mais longos.
Módulo de comunicação HomeLab inclui uma interface UART externa. Para esta porta se conectar ao PC é necessário usar um cabo de transferência TTL UART ↔ RS232 ou TTL UART ↔ USB.
Exemplo do programa para testar o terminal de alguns tipos de software, tais como o HyperTerminal (Windows XP). Em computadores Linux pode ser usado no funcionamento do programa minicom. Se o terminal é um microcontrolador com um diálogo aberto, haverá uma mensagem de boas vindas na tela. Na janela, introduza as letras que aparecem no ecrã LCD.
// Kodulabori UART liidese näidisprogramm // Arvutist või mõnest teisest seadmest saadetud tekst kuvatakse LCD ekraanil #include <homelab/usart.h> #include <homelab/module/lcd_gfx.h> // USART liidese määramine usart port = USART(0); // Põhiprogramm int main(void) { char c; unsigned char row = 1; // USART liidese seadistamine usart_init_async(port, USART_DATABITS_8, USART_STOPBITS_ONE, USART_PARITY_NONE, USART_BAUDRATE_ASYNC(9600)); // LCD ekraani seadistamine ja tervitusteksti kuvamine lcd_gfx_init(); lcd_gfx_write_string("Ootan teadet"); lcd_gfx_goto_char_xy(0, row); // Arvutile tere ütlemine usart_send_string(port, "Tere, kirjuta midagi!\r\n"); // Lõputu tsükkel while (1) { if (usart_try_read_char(port, &c)) // Jadaliidesest märgi lugemine { if (c == '\r') // Kas tegu on reavahetuse märgiga? { // Rea vahetamine row = 1 - row; // Rea tühjendamine eelmisest teatest lcd_gfx_clear_line(row); } else { // Märgi otse ekraanile väljastamine lcd_gfx_write_char(c); } } } }