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

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

Código do transmissor

Você se lembra da função “UserInit()”? Ela era a responsável por configurar todos os módulos do PIC, antes dele entrar no laço principal de execução. Pois bem, o transceiver precisa ser configurado antes de o PIC entrar no seu laço principal, pois queremos utilizar o transmissor ou receptor durante a execução desse laço. Portanto, toda a configuração do transceiver vai ser feita dentro do UserInit(). Lembre-se que essa função já vai ter outras linhas de código para configuração de outras coisas do microcontrolador. Os locais onde você deve adicionar o seu código estarão devidamente sinalizadas em comentários no código.

Para fazer o transceiver funcionar como transmissor, você deve:

  1. Definir a direção dos dados e o valor inicial dos pinos conectados ao CSN, CE, IRQ do transceiver

Esses pinos do transceiver são conectados em portas digitais normais do PIC, e, portanto, elas devem ser configuradas de acordo com tais normas. Altere o bit do registrador TRIS da porta B para que os pinos conectados ao CSN e ao CE funcionem como saídas digitais, e o pino conectado ao IRQ funcione como entrada digital. Além disso, sete o valor inicial da saída CE para 0 e da saída CSN para 1. Experimente utilizar as definições encontradas no código (na seção onde as linhas começam com “#define”).

  1. Configurar e habilitar a comunicação pelo protocolo SPI

O transceiver vai conversar com o PIC através da SPI, mas para isso acontecer a SPI deve estar configurada e funcionando. Para configurar o SPI utilize o conhecimento que você adquiriu na aula passada. Lembre-se que o transceiver vai ser o seu escravo, portanto configure o PIC para ser o mestre do barramento. Experimente utilizar a função OpenSPI da biblioteca do C18 para facilitar o seu trabalho.

  1. Espere um tempo necessário para que o transmissor esteja pronto para se comunicar com o PIC

Assim como o microcontrolador, o transceiver tem uma rotina de inicialização para executar e demora certo tempo até que ele esteja pronto para conversar com o PIC. O datasheet do nRF24L01+ diz que esse tempo é de 150ms, logo você deve esperar esse tempo antes de enviar qualquer dado para ele através do SPI. De fato, quando o PIC chegar nessa linha de código durante a sua execução já vai ter se passado algum tempo, mas você não tem como ter certeza de quanto tempo se passou. Por segurança, espere pelos 150ms mesmo.

Para fazer o PIC esperar por algum tempo, você pode utilizar as funções da biblioteca <delay.h> do C18. Ela fornece várias funções para fazer o PIC esperar por um número de ciclos até continuar para a linha seguinte. O que é importante aqui é saber quanto tempo dura um ciclo de processamento do PIC. Nas configurações do código, o PIC está usando o oscilador interno e logo deve executar os ciclos em uma frequência de 250KHz. Para saber o tempo de um ciclo, use a equação

$$ T = \frac{1}{f} $$

onde $ f $ é a frequência em que os ciclos estão sendo executados. O tempo total $ T_E $ gasto para executar $ N $ ciclos pode ser obtido multiplicando $ N $ pelo tempo $ T $ de execução de um ciclo, ou seja:

Porém, o que queremos mesmo é saber qual o valor de N que vai gerar o tempo Te desejado, portanto podemos usar as duas equações acima para derivar a seguinte equação:

$$ T_E = N \times T $$

Por exemplo, o número de ciclos para fazer o PIC esperar por 150ms é:

$$ N = T_E \times f = (150 \times 10^{-3}) \times (250 \times 10^{3}) = 30000 $$

Para implementar essa espera, você pode, por exemplo, utilizar a função Delay10KTCYx(N) que faz o PIC esperar por ciclos antes de continuar com a execução do código. Verifique na leitura complementar a documentação das funções da biblioteca do C18 para ver as outras funções de espera disponíveis.

  1. Envie os comandos de configuração do transceiver pela SPI

É aqui que toda a mágica acontece. Você vai ter que enviar dados para configurar o transceiver como transmissor, antes de dizer para ele entrar em funcionamento. Existem muitas coisas a serem ditas aqui, portanto, vamos explicá-la em detalhes na próxima seção.

Versão 5.3 - Todos os Direitos reservados