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

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.