·

Engenharia de Software ·

Microeletrônica

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

1 RELATÓRIO 11 Data Disciplina E209 Prof João Pedro Magalhães de Paula Paiva Monitores Thalita Domingos João Henrique Delfino Pedro Fraga Conteúdo Microcontrolador ATMega328p Tema ATMega 328 UART Nome Matrícula Curso OBJETIVOS Utilizar as ferramentas de simulação para desenvolver programas para o ATMega328p Desenvolver um programa que faz uso do canal serial UART do ATMega328p Utilizar as entradas e saídas do ATMega328p com circuitos de aplicação Parte Teórica Canal de comunicação serial assíncrona UART A comunicação serial é o tipo de comunicação onde os bits da palavra de dados não são transmitidos de uma única vez e sim um bit a cada momento As comunicações seriais podem variar em função do modo de uso do canal de comunicação e pelo sincronismo da informação A comunicação pode ser considerada síncrona ou assíncrona No caso do modo síncrono existe um sinal de clock que é transmitido junto com o sinal de dados No caso assíncrono não existe sinal de clock e o dado transmitido e recebido corretamente porque ambos lados operam com o mesmo tempo de duração de bit Esse tempo de duração de bit é conhecido como baudrate ou taxa de dados A taxa de dados medida em bps bits por segundo é escolhida em função da quantidadefluxo de dados que vão ser transmitidos e recebidos pelo canal de comunicação Quanto maior o fluxo de dados maior deve ser a taxa de dados Porém quanto maior a taxa de dados maior a taxa de erros que pode acontecer na comunicação caso a distância seja muito grande É aconselhável não utilizar distância de comunicação entre TX e RX superiores a 5m Um detalhe importante como descrito anteriormente é que por ser uma comunicação assíncrona a taxa de dados utilizada deve ser a mesma no TX e no RX Caso isso não aconteça o que for transmitido por um ladotransmissor não será entendido pelo outroreceptor O modo utilizado aqui é o modo assíncrono muito conhecido como UART Universal Asynchronous Receiver Transmitter onde o dado tem início com um pulso de start seguido pelos bits de dados e finalizado pelo pulso de stop O padrão utilizado no PC é o padrão RS232C que padroniza os níveis de tensão a taxa de dados e a pinagem dos conectores que irão interligar os lados da comunicação A Figura 1 ilustra um exemplo de aplicação de comunicação entre um PC e um periférico que pode ser um microcontrolador um leitor de código de barras impressora térmica entre outros Na ilustração verificase o cruzamento que ocorre entre os pinos TXRX para que a comunicação possa acontecer sendo omitida a linha de referência de tensão GND que deve ser a mesma para ambos os lados T D B 9 R Figura 1 Exemplo de uso da comunicação RS232 entre PC e um periférico Uma observação pode ser feita sobre o padrão RS232 a interface USB está cada vez mais sendo utilizada PC X RX Driver RS232 TTL PERIFÉRICO uC X TX 2 no lugar da interface RS232 Porém para a interconexão entre periféricos microcontrolados o padrão RS232 ainda é bastante utilizado Devido a essa tendência os computadores novos e principalmente os notebooks não possuem porta RS232 Porém isso não limita o seu uso pois existem cabos conversores USBSerial a custos relativamente baixos que não prejudicam no geral a performance de comunicação Esses cabos conversores são conectados na porta USB do computador e criam uma porta serial virtual que para as aplicações funciona com uma porta real O Atmega328p possue uma porta serial conhecida com USART enquanto outros microcontroladores podem possuir várias portas sendo UART ou USART No Atmega328p os pinos PD0 e PD1 são usados para comunicação com o computador ou outro microcontrolador qualquer com suporte a comunicação serial Conectar qualquer coisa a esses pinos pode interferir nessa comunicação incluindo causar falhas na gravação da placa Enfim os parâmetros mais importantes de uma comunicação serial UART são taxa de dados baudrate número de bits número de stop bits e paridade Desses parâmetros o mais comum de ser alterado é o baudrate que influência geralmente a distância máxima de comunicação e taxa real de comunicação do sistema quanto maior o baudrate mais rápido ocorre a comunicação de um determinado pacote de dados porém menor a distância máxima permitida entre o TX e o RX Assim costumase dizer que uma serial opera no padrão 96008N1 O que isso significa 9600 é a taxa de dados9600 bps 8 é o número de bits de dados um byte N é que não está sendo utilizada a paridadequantidade de bits 1 na palavra de dados e 1 é a quantidade de bits de stop fim de comunicação São exemplos de sistemas que usam UART módulos de comunicação GSMGPRS módulos GPS sensores displays alfanuméricos impressoras leitores de códigos de barras Considerações importantes Para enviarmos dados de sensores ou variáveis numéricas precisamos antes convertêlos Imagine que você queira mandar o valor de um sensor de temperatura que varia de 0 a 700 graus para o PC Para isso você deve pegar o valor do sensor convertêlo em uma STRING através do padrão ASCII Lembrese que nos arquivos fornecidos o tamanho esperado da mensagem a ser recebida é variável logo ele deve ser modificado de acordo com seu projeto e de acordo com o que você espera receber Funções para serem utilizadas não é recomendado que o tamanho dos vetores seja maior que 32 por motivos de limitações físicas e tempo char mensagemtx20 char mensagemrx32 int tam 0 int TAMANHO tamanho que você queira inicie com 1 para mensagens simples Configuração da UART void UARTInitunsigned int ubrr Configura a baud rate UBRR0H unsigned charubrr8 UBRR0L unsigned charubrr Habilita a recepcao tranmissao e interrupcao na recepcao UCSR0B 1RXEN01TXEN01RXCIE0 Configura o formato da mensagem 8 bits de dados e 1 bits de stop UCSR0C 1UCSZ011UCSZ00 3 Envio de mensagens void UARTTransmitchar dados Envia todos os caracteres do buffer dados ate chegar um final de linha while dados 0 whileUCSR0A 1UDRE0 Aguarda a transmissão acabar Escreve o caractere no registro de tranmissão UDR0 dados Passa para o próximo caractere do buffer dados dados Recepção de mesagens ISRUSARTRXvect Escreve o valor recebido pela UART na posição posmsgrx do buffer msgrx msgrxposmsgrx UDR0 if posmsgrx tamanhomsgrx posmsgrx 0 4 Exemplo de utilização include stdioh include stdlibh define FOSC 16000000U Clock Speed define BAUD 9600 define MYUBRR FOSC 16 BAUD 1 define botao 1 PD4 char msgtx20 char msgrx32 int posmsgrx 0 int tamanhomsgrx 3 unsigned int x 0 valor 0 Prototipos das funcoes void UARTInitunsigned int ubrr void UARTTransmitchar dados int mainvoid UARTInitMYUBRR sei PORTD botao UARTTransmitDigite ola x 0 while x 0 if msgrx0 o msgrx1 l msgrx2 a x 1 UARTTransmitDigite 250 x 0 valor 0 while x 0 valor msgrx0 48 100 msgrx1 48 10 msgrx2 48 1 if valor 250 x 1 x 0 5 UARTTransmitAperte o botao Superloop while 1 if PIND botao 0 O botao foi pressionado Se sim envia mensagem UARTTransmitHello World x UARTTransmitnum vezes botao press itoax msgtx 10 UARTTransmitmsgtx UARTTransmit delayms500 Aguarda um tempo para evitar o bounce ISRUSARTRXvect Escreve o valor recebido pela UART na posição posmsgrx do buffer msgrx msgrxposmsgrx UDR0 if posmsgrx tamanhomsgrx posmsgrx 0 void UARTTransmitchar dados Envia todos os caracteres do buffer dados ate chegar um final de linha while dados 0 while UCSR0A 1 UDRE0 Aguarda a transmissão acabar Escreve o caractere no registro de tranmissão UDR0 dados Passa para o próximo caractere do buffer dados dados void UARTInitunsigned int ubrr Configura a baud rate UBRR0H unsigned charubrr 8 UBRR0L unsigned charubrr Habilita a recepcao tranmissao e interrupcao na recepcao UCSR0B 1 RXEN0 1 TXEN0 1 RXCIE0 Configura o formato da mensagem 8 bits de dados e 1 bits de stop UCSR0C 1 UCSZ01 1 UCSZ00 6 Parte Prática Programa 1 Crie um programa que quando o botão for pressionado interrupção externa envie o número de vezes que ele foi pressionado incluindo a atual para o PC através da UART E toda vez que o computador enviar o comando zerar devemos zerar a contagem Programa 2 Crie um programa para controlar dois leds um vermelho e um verde toda vez que o computador enviar o comando 9 o vermelho liga e o verde desliga e 8 o verde liga e vermelho desliga Programa 3 Crie um programa que receba do computador o valor do DUTY CYCLE do PWM 0 a 100 e acione um LED verde de acordo com a potência