Cursos / Eletrônica / Projeto de Sistemas RF / Aula
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:
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”).
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.
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.
É 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