Fork me on GitHub

19/10/13

PIC: Módulo RF

PIC: Módulo RF



Neste tutorial mostrarei como utilizar o Módulo Transmissor RF434Mhz e o Módulo Receptor RF434Mhz.





Estes módulos são simples de usarem, pequenos, baratos e nos permitem realizar controle através da Rádio Frequência . Utilizam modulação do tipo ASK, podem ser utilizados em alarmes para automóveis, sistemas de segurança, telefones sem fio, controle de robôs, acionamentos de buzzers, etc.

Uma das formas de se trabalhar com ele, é utilizar a comunicação serial RS232. O Baud Rate( Taxa de transmissão ) utilizado foi de 1200bps.

A transmissão é bem simples. São enviado 4 bytes: Start, Comando, Valor, Checksum.

A recepção também é simples. No caso foi utilizado a interrupção por Recepção de Dados da UART.

DOWNLOAD
Módulo RF : Modulo_RF.rar


BIBLIOTECA
MikroC PRO PIC

void RF_Init()
{
     UART1_Init(1200);
     Delay_ms(100);
}

void RF_Receive_Init()
{
     RCIE_bit = 1;
     GIE_Bit = 1;
     PEIE_Bit = 1;
}

void RF_Send(char comando, char valor)
{
     char checksum = ~(char)(comando + valor);
     UART1_Write(0xFF);      //Start
     delay_ms(10);
     UART1_Write(comando);   //Comando
     delay_ms(10);
     UART1_Write(valor);     //Valor
     delay_ms(10);
     UART1_Write(checksum);  //Checksum
     delay_ms(10);
}

char started, count;
void RF_Read(char *Cmd, char *Val, char *Ok)
{
    char buffer;
    char checksum_byte;
    *Ok = 0;
    if(PIR1.RCIF)
    {
         buffer = Uart1_Read();
         if(started)
         {
            count++;
            if(count == 1)
            {
             *Cmd = buffer;

            }
            if(count == 2)
            {
             *Val = buffer;

            }
            if(count == 3)
            {
               checksum_byte = buffer;
               started = 0;
               if(checksum_byte == ~(char)(*Cmd + *Val))
               {
                  *Ok = 1;
               }
            }
         }
         else
         {
            if(buffer == 0xFF)
            {
               started = 1;
               count = 0;
            }
         }
     }
}



EXEMPLO: Transmissor
//Adicione aqui o código da Biblioteca

void main()
{
  ADCON1 = 0x0F; //Desativa as portas analógicas(PORTA e PORTB)
  TRISB = 3;
  RF_Init();

  while(1)
 {
    if(PORTB.F0 == 1)
    {
        RF_Send( 'A', 1 );
    }
    else if(PORTB.F1 == 1)
    {
        RF_Send( 'A', 0 );
    }
 }
}

EXEMPLO: Receptor
//Adicione aqui o código da Biblioteca

char comando, valor, ok;
void Interrupt()
{
    RF_Read(&comando, &valor, &ok);
    if(ok == 1)
    {
        if(comando == 'A')
        {
           PORTB = valor;
        }
    }
}

void main()
{
ADCON1 = 0x0F; //Desativa as portas analógicas(PORTA e PORTB)
RF_Init();
RF_Receive_Init();
TRISB = 0;
PORTB = 0;

    while(1);
}

VIDEO:

62 comentários:

  1. Cara assim, eu tenho que fazer um projeto, porém o PIC que estou utilizando é o 16F628A, até encontrei na internet um projeto com ele, com esses mesmo componentes, porém o código está em basic e não sei programar, queria saber se tem como adaptar este código que tu utilizastes para o 16F628A?

    ResponderExcluir
  2. Aonde encontro os componentes de rf pro proteus?

    ResponderExcluir
    Respostas
    1. você encontra diversos componentes eletrônicos em www.soldafria.com.br compra via internet com total segurança e recebe em sua casa, os preços estão em conta, vale a pena mesmo. Só estou dando essa dica por que sempre compro componentes, neste site. É de confiança.

      Excluir
  3. boa tarde Tiago você possui exemplos de transmissão com sensores infravermelhos desde já agradecido ....

    ResponderExcluir
    Respostas
    1. Nao. Mas gostei da ideia, talvez eu faço um projeto sobre isto. Abraços.

      Excluir
  4. Boa tarde! Amigo poderia me dizer se eu conseguiria usar este msm codigo fonte para rodar no mikroc 8.2? esta dando erro ao compilar! obrigado

    ResponderExcluir
    Respostas
    1. Talvez compile, mas depende de qual pic vc está utilizando.

      Excluir
  5. Cara nao tem sentido esse while da linha 24 do transmissor

    24. while(1);

    ResponderExcluir
    Respostas
    1. não mesmo...ja que o programa termina aí, tanto faz colocá-lo, de qualquer maneira ficará em loop.

      Excluir
    2. É boa pratica manter programa rodando.

      Excluir
  6. Não consigo implementar tal biblioteca no PIC, poderia me mandar os arquivos com os respectivos códigos compilados em formato c?

    ResponderExcluir
  7. char checksum = ~(char)(comando + valor); oque essa linha faz amigo?
    é padrão C ou do compilador?

    ResponderExcluir
    Respostas
    1. esse código realiza o complemento da soma das duas variáveis variáveis.

      Excluir
    2. no meu deu erro nessa linha ao compilar , oq sera ?

      Excluir
  8. Também estou com dificuldade de achar a biblioteca rf para o proteus 8

    ResponderExcluir
    Respostas
    1. Acho que nao tem como simular radiofrequência no Proteus.

      Excluir
    2. Geralmente uso o (VIRTUAL TERMINAL) para simular pois ele possui os terminais RX e TX, basta ligá-los. TX ao transmissor e o RX ao receptor. Os terminais RTS e CTS do (VIRTUAL TERMINAL), eu deixo ligados entre si.
      Se tudo estiver funcionando corretamente o caractere A aparecerá na tela do (VIRTUAL TERMINAL)

      Excluir
  9. Legal este projeto. Estou pensando no seguinte. Um circuito para ler a temperatura e umidade com o DHT11 , e enviar via rf para outro pic. É possivel enviar dados deste tipo ?

    ResponderExcluir
    Respostas
    1. Sim. O codigo acima envia um pacote de bytes( um byte de comando e um byte contendo um valor). Voce pode enviar dois pacotes, o primeiro informando a temperatura e um outro pacote informando a umidade.

      Excluir
  10. por favor alguem manda so o codigo fonte

    ResponderExcluir
  11. Olá , é possível colocar endereço no PIC para que ele receba informação somente do PIC desejado?

    ResponderExcluir
    Respostas
    1. você pode alterar a função "RF_Send()" adicionando mais um byte ( o byte de endereço ) para enviar. Na função "RF_Read()" você faz a leitura de mais um byte e verifica se corresponde ao endereço...

      Excluir
    2. Olá, Você poderia escrever um trecho do programa para eu entender ?
      E muito obrigado pelas explicações.....

      Excluir
  12. Donde puedo descargar los modulos RX y TX para proteus

    ResponderExcluir
  13. Olá, tentei fazer mais não consegui fazer funcionar, estou usando o PIC16F628A com oscilador interno, sera que é isso que esta atrapalhando?

    ResponderExcluir
    Respostas
    1. Olá, um grande problema que pode afetar o funcionamento é a interferência. Quando fui testar o Módulo RF tive que me afastar de todo equipamento eletrônico, incluindo meu computador.

      Excluir
  14. Oque significa este função:

    void RF_Receive_Init()
    {
    RCIE_bit = 1;
    GIE_Bit = 1;
    PEIE_Bit = 1;
    }

    ResponderExcluir
    Respostas
    1. Inicializa a recepção da UART. RCIE_Bit ativa a interrupção de recepção da UART. GIE_Bit e PEIE_Bit ativa a interrupção global e dos periféricos, respectivamente.

      Excluir
  15. componentes Biblioteca modulo RF para proteus
    http://www.4shared.com/rar/58Dn1F48ce/Biblioteca_Modulo_RF.html?cau2=403tNull&ua=WINDOWS

    ResponderExcluir
  16. Gostaria de saber se posso usar esse código em quaisquer módulos RF 433, pois eu pegaria um modelo mais compacto, como esse por exemplo: http://produto.mercadolivre.com.br/MLB-607833127-emissor-e-receptor-rf-433mhz-pic-arduino-codigo-20m-200m-_JM

    Assim eu não precisaria comprar duas vezes pra testar.

    ResponderExcluir
  17. Meu amigo, consegue fazer esse código no ccs compiler?

    ResponderExcluir
  18. voce consegue fazer este programa por favor para o ccs compiler,,,estou usando o pic16f88,,mas ele ao inves de ter UART ou USART ,,ele tem AUSART,,nao achei no google o significado disso,,,mas o mais importante é o programa para ccs compiler

    ResponderExcluir
  19. Hello,

    I was searching about a library about a rf module.
    I found your project here and it seems very helpful.
    Can you please tell me,with an example,how to send and show a message on a 2x16 lcd screen?

    I have tried many times with no success so any help would be priceless!

    ResponderExcluir
  20. hola como instalo los modulos rx tx en proteus 8 para simularlos en otros proyectos

    ResponderExcluir
  21. amigos como fazer pra envia e receber dados com pic com o modulo hc-11 uart 433mhz
    tipo envia a letra 'A' e acender um led envia a letra 'B' é apaga o led agradeso desdeja ?

    ResponderExcluir
    Respostas
    1. Parece que esse modulo trabalha com comunicacao serial UART, entao é só conectar os pinos RX e TX do PIC nos pinos TX e RX do módulo, respectivamente. No código voce utiliza as funções de enviar e receber da biblioteca UART do compilador MikroC.

      Excluir
  22. Bom dia, voce teria a biblioteca para o compilador PIC C? Ou ajudar com este erro no MikroC_6.4.0 o codigo esta dando erro nesta linha ADCON1 = 0x0F; "79 324 Undeclared identifier 'ADCON1' in expression Receptor_RF_434.c". Poderias me ajudar? Fiz alguns tutorias no PIC C, entao não sei bem como funciona o MikroC. Se tiver algum outro material inicial para o MikroC eu ficaria mt grato. Obrigado!!

    ResponderExcluir
    Respostas
    1. Qual PIC voce esta utlizando?
      "ADCON1 = 0x0F" desativa o canal analogico. Caso seu microcontrolador nao possua canal analogico ou o registrador reponsavel pela configuracao seja diferente, voce pode comentar essa linha.

      Excluir
    2. Aqui no blog tem algumas apostilas sobre PIC, algumas delas utilizam o compilador MikroC...

      Excluir
    3. Bom dia, tem algum outro comando que eu possa estar utilizando no pic 16f628a? pois esse ADCON1 = 0x0F nao funciona. Obrigado!!

      Excluir
  23. Boa noite, na biblioteca criada para simular os módulos RF, no proteus da erro poderia me dizer se sabe o pq? grato desde já.

    ResponderExcluir
  24. boa noite o senhor sabe, ou como posso fazer para ler um controle ppa aqueles de portões que tem seu código de transmissão fixo sem criptografia.

    ResponderExcluir
  25. sabe se tem como usar esse codigo fonte no pic 12f675

    ResponderExcluir
  26. Boa tarde, alguem sabe me dizer como eu configuro um oscilador externo no mikroC? eu tenho um cristal de 4mhz e capacitores de 33pF, eu ja consigui configurar em outro compilador mas em mikroC nao estou conseguindo, alguem pode me ajudar por favor?

    ResponderExcluir
  27. Boa noite, gostaria de saber se esse modulo manda sinal analógico, pretendo usar um potenciômetro para mandar um sinal analógico e converter em PWM, é possível?

    ResponderExcluir
  28. Boa noite, gostaria de saber se e confiável essa programação para trabalhar em área com ruido. Se não qual melhor opção para trabalhar em áreas com ruídos

    ResponderExcluir
  29. nao acredito. A toalha da mesa é igual a da minha casa.. kkkk

    ResponderExcluir
  30. Tiago boa tarde, saberia me dizer se consigo usar este rf433 com programação em ladder? Não sei programar em c, trabalho com máquinas industriais. Meu email é dfmrc@ibest.com.br

    ResponderExcluir
  31. Olá, montei o circuito mas o meu funciona inicialmente após a 5º vez que eu pressiono o botão de enviar, após a 5 vez o receptor recebe o sinal e a partir dai ele passa a receber normalmente, vocÊ saberia o porquê?

    ResponderExcluir
  32. Hello, is there an error in line #3 of the Receiver code ?

    ResponderExcluir
  33. Olá.
    Épossil comunicar varios transmissores para um só receptor?

    ResponderExcluir
  34. Olá Tiago, sabe me dizer se este código funciona no PIC 16f877a sem nenhuma modificação?

    ResponderExcluir

Postagens Relacionadas!!