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

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

Código do transmissor - pt.6

Nós paramos na configuração do transceiver. Vamos continuar vendo o que você tem que configurar nele. Lembre-se que essas configurações são feitas enviando os comandos e dados para o transmissor pela SPI. Consulte a seção 9.1 do datasheet do transceiver para verificar qual valor tem que ser colocado em cada bit para atingir o efeito desejado do transceiver.

4.1. Colocar o transmissor no modo "Power Down"

Para configurar o transceiver, ele tem que estar no modo “desligado”. Porém o seu programa não tem como saber se o transmissor foi ligado agora junto com o PIC ou se ele já estava ligado e somente o PIC que foi resetado. Para garantir que o transmissor vai estar no modo “desligado” antes de ser configurado, independente da forma que o PIC foi iniciado, vamos primeiro mandar o transmissor desligar.

Para fazer isso, basta resetar o bit PWR_UP do registrador CONFIG.

4.2. Configurar a potência e taxa de transmissão

Você pode configurar a potência do transmissor alterando os bits RF_PWR do registrador RF_SETUP e a taxa de transmissão através dos bits RF_DR_LOW e RF_DR_HIGH do mesmo registrador. Note que RF_PWR representa na verdade dois bits, logo você vai ter que usar a notação “(0b11 << RF_PWR)” se quiser setar ambos os bits do RF_PWR, ou “(0b01 << RF_PWR)” se quiser setar somente o bit menos significativo, e assim por diante. Lembre-se tanto o transmissor quanto o receptor tem que estar configurados com a mesma taxa de transmissão. Consulte o datasheet para ver os valores de potência e taxa disponíveis para o transceiver.

4.3. Configurar o canal de comunicação

O canal de comunicação é a frequência que o transceiver vai utilizar para transmitir ou receber dados. Você define o canal de comunicação escrevendo no registrador RF_CH. O transceiver aceita valores para o RF_CH de 0 a 127.

A frequência de trabalho do transceiver é definida através da seguinte fórmula:

$$ F_0 = 2400 + RF\_CH[MHz] $$

Lembre-se de definir o mesmo canal de comunicação no receptor ou eles não vão ser capazes de se comunicar.

4.4. Desabilitar o envio do ACK automático

O nRF24L01+ tem um sistema automático que faz o receptor avisar ao transmissor se o pacote transmitido foi recebido corretamente. Porém para utilizar corretamente esse recurso é preciso ajustar também outras características do transmissor, que foge do escopo desta aula. Logo, o que vamos fazer aqui é permitir que o transmissor envie um pacote que ele não quer saber se chegou ou não no receptor. Isso torna o sistema mais sujeito a falhas, mas ao mesmo tempo torna as coisas mais simples.

Para fazer isso, você precisa setar o bit EN_DYN_ACK no registrador FEATURE.

4.5. Configurar o transceiver como transmissor e colocá-lo no modo "Power Up"

Agora já configuramos quase tudo que queríamos configurar. Só está faltando agora dizer ao transceiver que ele ira funcionar como um transmissor e colocá-lo em funcionamento. Faça isso ao mesmo tempo, resetando o bit PRIM_RX e setando o bit PWR_UP do registrador CONFIG.

4.6. Esperar por 200us para o tramsissor ser habilitado.

O transceiver demora, aproximadamente, 200us para entrar em funcionamento depois de um "Power Up". Use uma das funções de espera para fazer o PIC esperar por esse tempo.

4.7. Esvaziar o buffer de transmissão

Por fim, esvazie o buffer de transmissão para garantir que o transmissor não vai ter lixo nos seus registradores. Para isso, utilize o comando FLUSH_TX.

Isso deve finalizar a configuração do transceiver. Agora só precisamos fazer mais uma coisa.

5. Habilite as interrupções na porta RB2 (INT2)

Quando o transceiver precisar informar qualquer coisa ao PIC, ele vai fazer colocando o sinal no pino IRQ para zero. O PIC deve ser configurado para capturar essas interrupções. Como conectamos o pino IRQ na interrupção INT2, ela deve ser configurada corretamente. Experimente utilizar a função OpenRB2INT da biblioteca portb.h. Lembre de também configurar a interrupção para a transição de alto para baixo (FALLING_EDGE_INT) e habilitar os pull ups na porta B (PORTB_PULLUPS_ON). Verifique no manual das funções das bibliotecas do C18 como fazer isso utilizando o OpenRB2INT. Não se esqueça de habilitar o bit GIEH do registrador INTCON do microcontrolador depois de chamar a função OpenRB2INT.

Pronto. Isso finaliza a configuração do transmissor.

Versão 5.3 - Todos os Direitos reservados