Cursos / Eletrônica / Projeto de Sistemas RF / Aula

arrow_back Aula 10 - Transmissão de dados utilizando transceptor SPI

Código do transmissor - pt.5

Os nomes dos bits do transceiver são vistos pelo compilador como simples números. Por exemplo, o bit PRIM_RX é o bit número 0 do registrador CONFIG (lembre-se que os bits em um Byte são ordenados de 0 a 7). Para setar esse bit teríamos que dizer ao transceiver “coloque o bit número 0 do registrador CONFIG para o valor 1”. Isso de ser feito pelas seguintes linhas de código:

Note o comando “<<” no código acima. O que ele faz é deslocar o valor 1 um número PRIM_RX de bits para a esquerda. Por exemplo, o código “1 << 3” iria gerar o valor binário “0000 1000”, ou seja, somente o bit de número 3 está setado.

Agora imagine que você quer setar também o bit PWR_UP do registrador CONFIG. Se você pode pensar que é só utilizar as linhas de código acima e adicionar as linhas abaixo depois:

Infelizmente, isso não vai funcionar. O motivo é que a escrita de um registrador do transceiver reescreve todo o registrador. Ou seja, apesar de você ter setado o bit PRIM_RX primeiro, a segunda escrita vai setar somente o bit PWR_UP, limpando o bit PRIM_RX que você tinha setado anteriormente.

Para resolver isso, você tem que montar todo o registrador da forma que você quer no código e enviar tudo isso de uma vez para o transceiver. Isso pode ser feito da seguinte forma:

Agora sim estamos setando tanto o bit PRIM_RX quanto o bit PWR_UP ao mesmo tempo. Somente esses bits do registrador CONFIG estarão com valor 1, os demais ficarão com valor zero. O uso dessa notação pode gerar alguns avisos na compilação (warnings) de que a expressão não tem nenhum efeito, mas nesse caso isso não é um problema.

  • Escrever um dado para ser transmitido e receber um dado lido.

Para esse tipo de diálogo usamos os comandos W_TX_PAYLOAD e R_RX_PAYLOAD. Esses comandos são utilizados para colocar dados no buffer de transmissão ou para ler os dados do buffer de recepção. Esses buffers têm 32 Bytes de tamanho. Ou seja, 32 Bytes é o tamanho máximo do pacote que você vai poder transmitir de uma só vez. A leitura ou escrita dos dados vai em sequência ao comando, como mostramos no exemplo que usa o W_TX_PAYLOAD. Porém, para dados maiores você pode querer armazenar os dados em um vetor e utilizar um laço para percorrer o vetor de dados ao invés de colocar uma linha para cada byte. Assim, seu código deve ficar mais ou menos assim:

Onde tamanho_do_dado é uma variável que armazena o tamanho do dado que você quer enviar, dado é o vetor onde você colocou o dado que você quer transmitir, e contador é a variável usada para percorrer esse vetor de dados. Uma leitura usando a mesma ideia poderia ser feita da seguinte forma:

  • Limpar o buffer de transmissão e o de recepção.

Às vezes, vamos precisar limpar os buffers de transmissão ou de recepção. Geralmente fazemos isso para garantir que não existe nenhum lixo nesses buffers, evitando confundir esse lixo com dados que realmente importam. Para limpar o buffer de transmissão, use o comando FLUSH_TX. Para limpar o buffer de recepção, use o comando FLUSH_RX.

Pronto. Agora já sabemos como comunicar o PIC com o transceiver. Agora vamos voltar e ver o que precisamos informá-lo durante a configuração.

Versão 5.3 - Todos os Direitos reservados