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

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

Código do transmissor - pt.7

Enviando um dado pelo transceiver

Na prática desta aula, um dado vai ser enviado sempre que pressionarmos o botão no circuito. A rotina que atualiza a variável LED_Display e que acende os LED já está implementada, portanto você não precisa se preocupar com isso. O que você vai precisar fazer é adicionar o código para realizar a transmissão sempre que a variável LED_Display for atualizada.

Para realizar a transmissão, você usaria normalmente o comando W_TX_PAYLOAD, mas como estamos querendo transmitir um pacote que não vai ter confirmação de recebimento, vamos utilizar o comando W_TX_PAYLOAD_NO_ACK. Para nossa sorte, o funcionamento deste comando é o mesmo do outro. Você vai informar o comando para o transceiver e depois vai enviar os bytes que deseja transmitir. No nosso exemplo, queremos transmitir somente 1 Byte, que é a variável LED_Display.

Depois de transmitir o dado para o transceiver, é chegada, finalmente, a hora de dizer para ele mandar esse dado por radio frequência. Para isso, você deve colocar a saída do PIC conectada ao pino CE para 1. Assim o transceiver vai transmitir tudo que estiver no seu buffer de transmissão. Se existirem muitos bytes a serem transmitidos, isso pode demorar certo tempo. Mas o PIC não precisa esperar os dados serem transmitidos. Basta deixar o CE em nível 1 por no mínimo 20us que o transceiver vai fazer o resto. Use uma das funções de delay esperar o tempo necessário antes de colocar o pino CE para o nível zero. Como estamos trabalhando com uma frequência de oscilação relativamente baixa, pode ser difícil fazê-lo esperar por exatamente 20us. Se achar mais fácil, você pode usar o tempo de 40us.

O transceiver vai enviar o pacote e assim que terminar de transmitir ele deve informar o PIC a sua conclusão. Isso é feito através da rotina de interrupção. Nessa rotina, você deve ler o registrador STATUS do transceiver e ver por que o PIC foi interrompido. Cada bit desse registrador informa alguma coisa ao PIC. No modo de transmissão, o transceiver vai interromper para: 1) avisar se a transmissão foi concluída, através do bit TX_DS; ou 2) avisar que o máximo de retransmissões foi alcançado sem obter a confirmação que o dado foi recebido, através do bit MAX_RT. Porém, essa segunda opção nunca deve acontecer, já que desabilitamos a confirmação do recebimento.

Após perceber o motivo da interrupção do transceiver, é extremamente importante que você avise ao transceiver que já tratou a interrupção e que ele pode voltar a funcionar normalmente. Isso é feito escrevendo 1 no bit do registrador STATUS que gerou a interrupção.

Esse tratamento para os bits MAX_RT e TX_DS já está feito no transmissor, portanto você não vai precisar mexer na função de tratamento da interrupção no código do transmissor. Apesar disso, é importante que você veja o código e entenda como ele funciona, pois você vai precisar implementar algo semelhante no código do receptor.

Pronto. Experimente agora compilar seu código e ver se ele está compilando corretamente. Leve o seu código para a aula prática, e lá o grave no PIC e utilize no circuito que você montou, utilizando as instruções que você recebeu na aula anterior. Vamos agora passar para o código que você deve desenvolver para o circuito receptor.

Versão 5.3 - Todos os Direitos reservados