Protocolo UART, Temporizadores e Interrupções no AVR 328

Classificado em Eletrônica

Escrito em em português com um tamanho de 2,89 KB.

1. Registrador TSR e Protocolo UART

Por que existe um "0" no "LSB" (Least Significant Bit) do registrador TSR? Qual o significado mais plausível para a representação "(8)" associada ao "MSB" (Most Significant Bit)?

O "0" no LSB do TSR implementa o "start bit" do protocolo UART, sendo o primeiro bit a sair do registrador de deslocamento. O "(8)" no MSB simboliza a opção de envio de até nove bits (0 a 8). O nono bit, "TX9D", é genérico, tipicamente usado para paridade.

2. Interrupções do Transmissor

Qual evento da operação do transmissor é sinalizado pela interrupção no diagrama? No AVR 328, existe uma segunda interrupção para o registrador de deslocamento de TX vazio. Qual bit se aproxima de um sinalizador desse tipo de ocorrência?

A interrupção sinalizada pelo flag "TXIF", ligado a "TXREG", indica que "TXREG" foi esvaziado. No AVR 328, há a interrupção de fim de transmissão (TSR vazio). O bit "TRMT" se assemelha a essa funcionalidade, sendo o único associado ao TSR que recebe valor.

3. Cálculo da Taxa de Comunicação

A taxa de comunicação é dada por: BaudRate = Fosc/[64(X + 1)], onde Fosc é a frequência do clock e X é o valor do registrador SPBRG. Calcule X para 9.600 bits/s com clock de 16 MHz.

X = 25

4. Registrador OCRnA e Interrupções

Qual a utilidade do registrador OCRnA?

O OCRnA realiza comparação com o valor de contagem, sinalizando a igualdade no bit "OCnA" e gerando interrupção, se habilitada.

Como funcionam as duas interrupções sinalizadas (Int.Req.)? Como configurar o mesmo temporizador para gerar ambas em um programa?

TOVn: overflow da contagem em "TCNTn"; OCnA: igualdade entre contagem e OCRnA. A configuração para ambas deve ser no modo normal. A contagem não é zerada na igualdade, permitindo dois tempos: toc = clktn * OCnA e tov = clktn * TCNTn.

Para que serve a linha "Direction" (saída do bloco Control Logic)?

Para selecionar entre contagem normal e regressiva em "TCNTn".

5. Interrupções Externas no Arduino e AVR 328

A função attachInterrupt(interrupt, function, mode) ativa e define tratadores para interrupções externas. Como configurar ambas as interrupções, sendo INT0 em modo CHANGE e INT1 em modo RISING, usando a biblioteca AVRLib?

EICRA = (1 << ISC00) | (1 << ISC10) | (1 << ISC11); EIMSK = (1 << INT0) | (1 << INT1);

Como definir o tratador das interrupções externas usando ISR(), INT0_vect e INT1_vect?

ISR(INT0_vect) { /* tratador da int. ext. 0 */ }

ISR(INT1_vect) { /* tratador da int. ext. 1 */ }

Entradas relacionadas: