Table of Contents

 

UART

Conhecimento prévio: [HW] Kontrollermoodul, [HW] Kombomoodul, [AVR] USART, [LIB] Jadaliides,
[LIB] Graafiline LCD

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.

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.

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 <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);
			}
		}
	}
}