Comunicação serial (USART) com diferentes tamanhos de quadro usando microcontrolador AVR- (Parte 14/46)

Comunicação serial (USART) com diferentes tamanhos de quadro usando microcontrolador AVR- (Parte 14/46)

O artigo anterior explica a comunicação serial usando transferência de dados de 8 bits. O microcontrolador AVR também suporta transferência de dados serial com tamanho de quadro de 5, 6, 7 e 9 bits de dados. O tamanho do quadro de dados pode ser ajustado de acordo com a aplicação. Por exemplo, considere um sistema que precisa transmitir apenas códigos ASCII como dados. Neste caso, o tamanho do quadro de dados de 7 bits é suficiente porque o comprimento dos dados do código ASCII é igual a 7 bits. Isto tornará o sistema mais eficiente, economizando tempo de um período de clock em cada transmissão de quadro de dados. Este artigo explica a transferência serial de dados com diferentes tamanhos de quadro.
O tamanho do quadro dos dados pode ser selecionado configurando os bits UCSZ (USART Character Size). O registrador UCSRC contém bits UCSZ (1:0) e UCSRB contém bits UCSZ2. A tabela a seguir mostra as configurações de bits UCSZ correspondentes a diferentes tamanhos de quadro de dados.
Configuração de bits do UCSZ para comunicação serial de diferentes tamanhos de quadros de dados
Fig. 2: Configuração de bits do UCSZ para comunicação serial de diferentes tamanhos de quadro de dados
Programação:
Caso 1: Tamanho de quadro 5, 6 e 7 bits:
Esses três tamanhos de quadro podem ser selecionados programando apenas os bits UCSZ1 e UCSZ0. Não há necessidade de programar o bit UCSZ2 porque o valor padrão deste bit é zero.
Por exemplo: UCSRC= (1<
// Sem paridade, 1 bit de parada.
As etapas de programação de envio e recebimento de dados permanecerão as mesmas usadas na transmissão e recepção de dados de 8 bits. Para mais informações, os leitores podem consultar o artigo anterior em comunicação em série.
Programa de teste para recepção e transmissão de 6 bits:
Um programa de teste é escrito para comunicação de dados de 6 bits entre Microcontrolador e PC. Neste experimento, a entrada é obtida do usuário por meio de um teclado. Os dados correspondentes são enviados ao microcontrolador através da porta COM do PC. O microcontrolador recebe os dados e os retorna novamente para a porta COM do PC. O HyperTerminal é usado para configurar a porta COM para torná-la compatível com este experimento.
As etapas a seguir são usadas para configurar portas COM:
1. Defina a taxa de transmissão = 9600 bps, bit de dados=6, Paridade=Nenhum, Bit de parada=1.

Configurar portas COM para comunicação serial

Fig. 3: Configurar portas COM para comunicação serial
2. Marque a caixa de seleção correspondente a Echo conforme mostrado na imagem a seguir para observar a transmissão e o recebimento de dados.

Saída:
A seguinte saída é recebida quando 1 2 3 4 5 6 teclas ABCDEFG são pressionadas no teclado.
 Saída de comunicação serial entre AVR e PC
Fig. 5: Saída de comunicação serial entre AVR e PC
Conforme mostrado na imagem acima, a saída adequada é recebida quando as teclas numéricas são pressionadas, mas quando as teclas alfabéticas são pressionadas, algum símbolo aparece. Esta saída inesperada é recebida porque estamos trabalhando com tamanho de quadro de dados de 6 bits. Se o quadro de dados de 6 bits for selecionado, dois bits mais significativos serão mascarados para zero durante a leitura do UDR. O código ASCII de '1' é 0x31 (0011 0001). Se os dois bits mais significativos forem mascarados, restam 11 0001, que também é igual a 0x31. O tamanho dos códigos ASCII para todos os valores numéricos é de 6 bits, portanto não haverá problemas em receber e transmitir valores numéricos no modo de 6 bits. Mas o valor ASCII de 'A' é 0x41 (0100 0001). Se dois bits mais significativos forem mascarados, restará 00 0001, que é igual a 0x01, portanto será impresso algum símbolo incomum.
Caso2: Tamanho do quadro 9 bits:
A comunicação de dados de 9 bits pode ser usada na comunicação multiprocessador. Para selecionar o quadro de dados de 9 bits, todos os bits UCSZ são definidos como 1(UCSZ (2:0) =7).
Por exemplo:
UCSRB=(1<
UCSRC=(1<
1. Transmissão de dados de 9 bits:
Os dados de 9 bits devem ser armazenados em buffer antes da transmissão. Como o tamanho dos dados do registro UDR é apenas de 8 bits, o nono bit deve ser armazenado no bit TXB8 do registro UCSRB antes que o byte inferior seja armazenado no UDR.
void usart_tx(unsigned int serial_data)		//function transmission
{
enquanto(!(UCSRA & (1< UCSRB &= ~(1< if (dados_serial e 0x100) UCSRB =(1< UDR=dados_serial; //dados colocados em UDR }
2. Recepção de dados de 9 bits:
O nono bit deve ser lido do bit RXB8 antes da leitura do byte inferior. O status de FE (Erro de quadro), DOR (Data Over Run) e PE (Erro de paridade) também deve ser verificado para verificar os dados.

unsigned int usart_rx(void) // função para recepção 
{
enquanto(!(UCSRA & (1<
if(UCSRA & ((1<
retornar -1;
UCSRB =(UCSRB>>1)&0x01; //filtra 9 bits
retornar ((UCSRB<<8) UDR); // valor de retorno
}

Código-fonte do projeto

###


// Programa para comunicação serial (USART) com diferentes tamanhos de quadro usando microcontrolador AVR
#define FREQ 12000000 #incluir #incluir #incluir #define baud 9600 #define ubrr_value (((FREQ/16)/baud)-1) void usart_init ; void usart_tx(caractere não assinado); caractere não assinado usart_rx(void); int principal(vazio) { int dados_serial; usart_init ; enquanto(1) { serial_data=usart_rx ; usart_tx(serial_data); } } void usart_init // inicialização USART { UBRRH=(uint16_t)(ubrr_value>>8); //define o valor UBRR UBRRL=(uint16_t) ubrr_value; UCSR=0x00; UCSRB=(1< //habilita transmissão e recepção UCSRC=(1< // Modo assíncrono,tamanho do quadro=6 bits,Sem paridade, 1 bit de parada. } void usart_tx(caractere não assinado serial_data) //função para bit de transmissão { enquanto(!(UCSRA & (1< // espera pelo UDR vazio UDR=dados_serial; //armazenamento de dados em UDR } caractere não assinado usart_rx(void) { enquanto(!(UCSRA & (1< //aguarde até a recepção ser concluída retornar UDR; //recebe valor do UDR }

###

Diagramas de circuito

Diagrama de circuito de comunicação serial-USART com tamanho de quadro diferente usando microcontrolador AVR

Componentes do Projeto

  • ATmega16
  • LCD
  • MÁX232

Vídeo do projeto

Conteúdo Relacionado

Uma rede de sensores é incorporada em todos os...
O controlador do motor é um dos componentes mais...
ESP32-CAM é um módulo de câmera compacto que combina...
A evolução dos padrões USB foi fundamental para moldar...
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Você provavelmente já se deparou com o termo 'arrastar'...
Você provavelmente tem um Isolador de suporte Se você...
Você provavelmente já viu permanecer um isolante sente-se em...
Você provavelmente já viu Isoladores de manilha entronizados em...
Você provavelmente já passou por situações em que o...
Tillbaka till blogg

Lämna en kommentar

Notera att kommentarer behöver godkännas innan de publiceras.