-
Descreva com suas palavras como acontece a transmissão e a recepção de dados em um PIC pela USART.
Inicialmente necessita-se configurar tanto o transmissor e o receptor com as configurações de comunicação. Determinar a taxa de transmissão (através do registrador SPBRG), se vai utilizar o 9º bit, se a comunicação será síncrona ou assíncrona (bits do registrador TXSTA no transmissor ou RCSTA no receptor). Na hora do envio, o dado deve ser colocado no registrador TXREG no transmissor (se for utilizar o 9º bit, esse deverá ser colocado no bit TX9D do registrador TXSTA antes do resto do dado ser inserido no registrador TXREG). Nessa hora o módulo serial transfere o conteúdo do registrador TXREG e do bit TX9D para um registrador de deslocamento que ira colocar bit a bit, na velocidade configurada, no pino de transmissão do microcontrolador. Antes de começar a transmissão, o módulo se encarrega de transmitir o start bit e ao final, transmitir o stop bit. Na recepção, após o start bit ser detectado, os dados vão sendo lidos, na velocidade configurada, uma a um e armazenados no registrador de deslocamento até serem armazenados os 8 ou 9 bits (dependendo da configuração escolhida. No caso de utilizar 9 bits, o bit RX9 do registrador RCSTA deve estar setado). Após isso o módulo de recepção aguarda o stop bit. Ao recebê-lo, o dado recebido é transferido para o buffer para depois ser transferido para o registrador RCREG e, se houver, o 9º bit é transferido para o RX9D do registrador RCSTA. Somando o registrador de deslocamento, o buffer e o RXREG, pode-se ter dois dados armazenados enquanto se recebe um terceiro. Se houver outra recepção antes dos dados serem lidos, ocorre um overrun e o microcontrolador fica inabilitado a receber novos dados.
-
Qual o melhor valor do registrador SPBRG e do bit BRGH para fazer uma transmissão assíncrona com uma taxa de transferência de 9600 bits por segundo, utilizando uma frequência de oscilação de 16MHz? E se fosse síncrona? Qual são os erros nessas taxas de transmissão?
O melhor SPBRG e BRGH são aqueles que oferecem o menor erro. Sendo assim, temos:
$$
SPBRG = \frac{F_{osc}}{(16 \times Taxa \ de \ Transmissão)} - 1, \ se \ SYNC = 0,\ BRGH = 1
$$
$$
SPBRG = \frac{16000000}{16 \times 9600} - 1 ≅ 103,16666667 \ ou \ 103
$$
$$
Taxa \ de \ Transmissão = \frac{16000000}{(16 \times (103 + 1))} ≅ 9615
$$
$$
Erro\% = \frac{|9615 - 9600|}{9600} \times 100 ≅ 0,16\%
$$
$$
SPBRG = \frac{F_{osc}}{(64 \times \ Taxa \ de \ Transmissão)} - 1, \ se \ SYNC = 0, BRGH = 0
$$
$$
SPBRG = \frac{16000000}{(64 \times 9600)} - 1 ≅ 25,0416667 \ ou \ 25
$$
$$
Taxa \ de \ transmissão = \frac{16000000}{(64 \times (25 + 1))} ≅ 9615
$$
$$
Erro\% = \frac{|9615 - 9600|}{9600} \times 100 ≅ 0,16\%
$$
Logo, para ambos os casos de comunicação assíncrona, o resultado será o mesmo, uma porcentagem igual de 0,16% de erro, não fazendo diferença para o BRGH. Se fosse na configuração síncrona teríamos:
$$
SPBRG = \frac{F_{osc}}{(4 \times \ Taxa \ de \ Transmissão)} - 1,\ se \ SYNC = 1, \ BRGH = X
$$
$$
SPBRG = \frac{16000000}{(4 \times 9600)} - 1 ≅ 415,666666667 \ ou \ 416
$$
$$
Taxa \ de \ Transmissão = \frac{16000000}{(4 \times (416 + 1))} ≅ 9592
$$
$$
Erro\% = \frac{|9592 - 9600|}{9600} \times 100 ≅ 0,08\%
$$
Como mostrado, na comunicação síncrona o erro está menor que na comunicação assíncrona.
-
Quais os passos que devem ser seguidos para configurar uma transmissão assíncrona em que sejam transmitidos 9 bits por pacote, em um microcontrolador trabalhando a 16MHz e com taxa de transmissão de 9600 bits por segundo? Descreva tanto os passos do PIC transmissor quanto os do receptor. (Dica: procure no datasheet mostrado nas Leituras Complementares).
Primeiro, o bit SPEN do registrador RCSTA deve ser setado (posto em 1), configurando os pinos do USART para a função de transmissão e recepção serial. Depois deve-se calcular o valor do SPBRG. Dá fórmula temos:
$$
SPBRG = \frac{16000000}{(64 \times 9600)} - 1 ≅ 25
$$
Isso foi para o BRGH = 0 (baixa taxa). O valor do SPBRG deve ser armazenado no seu respectivo registrador. Como a comunicação é assíncrona, o bit SYNC do TXSTA deve ser resetado (posto em 0). O bit TXEN deve ser setado. O bit TX9 do TXSTA deve ser setado para haver a transmissão de 9 bits. Para transmitir, o nono bit deve ser inserido no bit TX9D do registrador TXSTA e logo em seguida o dado deve ser inserido no TXREG.
Do lado do receptor, o SPBRG deve ser configurado com o mesmo valor do SPBRG do transmissor. O bit RX9 do registrador RCSTA deve ser setado para habilitar a recepção do nono bit. Logo em seguida o CREN desse mesmo registrador deve ser setado habilitando a recepção continua. Nesse momento, o receptor fica aguardando o start bit. Ao detectá-lo, receberá 9 bits. Quando receber o stop bit, passará o dado recebido do registrador de deslocamento para o buffer, que por sua vez passará o nono bit para o bit RX9D do registrador RCSTA e os outros 8 para o registrador RCREG, tornando-o disponível para uso.
-
Quais os passos que devem ser seguidos para configurar uma transmissão síncrona de 8 bits no modo master, em um microcontrolador trabalhando a 16MHz e com taxa de transmissão de 9600 bits por segundo? Descreva tanto os passos do PIC transmissor quanto os do receptor. (Dica: procure no datasheet mostrado nas Leituras Complementares).
Utilizando os cálculos da questão anterior temos que o SPBRG é 25 para essa frequência e taxa de transmissão. O bit SPEN deve ser setado para habilitar os pinos da USART. Como serão utilizados apenas 8 bits, o bit TX9 do TXSTA deve ser resetado. O bit SYNC do TXSTA deve ser setado e o bit CSRC deve ser setado para que o microcontrolador Transmissor se torne o mestre.
Já no escravo, são realizadas as mesmas configurações do SPBRG, o bit RX9 deve ser resetado (pois o dados tem 8 bits), e o bit RCREN deve ser setado, habilitando a recepção contínua.
-
Como configurar um microcontrolador para receber um dado utilizando interrupções?
Deve-se primeiro setar os bits GIE e PEIE. Eles habilitam as interrupções USART e fazem parte do registrador INTCON.
O registrador PIE1 possui os bit TXIE e RCIE que são responsáveis diretamente por habilitar independentemente as interrupções para transmissão e recepção. Se desejar trabalhar somente com interrupções de transmissão, deve-se setar o TXIE, mantendo resetado o RCIE. Caso o objeto seja usar somente interrupções de recepção, deve-se setar o bit RCIE e deixar resetado o TXIE.
No registrador PIR1 estão os bits que efetivamente executam as interrupções, o TXIF e o RCIF. O RCIF fica setado sempre que há novos dados no registrador RCREG e é resetado caso não existam mais dados na fila de recepção. Já o TXIF ele é resetado sempre que for escrito um dado no TXREG e setado sempre que esse dado for movido para o registrador de deslocamento, gerando uma interrupção nesse processo, indicando que já há disponibilidade para o envio de um novo dado. Caso não seja necessário o envio de um novo dado, o TXIF deve ser resetado, impedindo uma nova interrupção. Caso existam novos dados a serem transmitidos, basta setar novamente o TXIF, que gerará uma nova interrupção.