====== UART ====== //Conhecimento prévio: [HW] [[et:hardware:homelab:controller]], [HW] [[et:hardware:homelab:combo]], [AVR] [[et:avr:usart]], [LIB] [[et:software:homelab:library:usart]], \\ [LIB] [[et:software:homelab:library:module:lcd_graphic]] // ===== Teoria ===== 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. [{{ :examples:communication:comm_uart_frame.png?319|Quadro UART, onde S é o bit de inicio, 0-7 bits de dados, bit de paridade P (se houver) e o bit de paragem T (ou 2)}}] 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. [{{ :et:examples:communication:rs232:usb-serial_tn.jpg?200|conversor USB - RS-232}}] 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. ===== Prática ===== 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 #include // 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); } } } } /* [[et:examples:communication:rs232:alpha|O exemplo de código do texto no LCD]] */