Página 1 de 1

Controle Remoto via Manchester no MikroC

MensagemEnviado: 08 Fev 2009 16:32
por lpagano
Pessoal,

Estou fazendo um simples controle remoto com aqueles famosos módulos 433MHz que a gente compra por aí. Por enquanto estou mandando somente um byte, só para testar o controle.

Para o transmissor estou usando um PIC 12F683, o qual está transmitindo os dados. Liguei um receptor comercial de RF na frequência de 433.92MHz para ver se estava transmitindo e vi que está recebendo as transmissões do módulo transmissor normalmente.

Para o receptor estou usando um 12F629 mas não consegue decodificar os dados recebidos. Liguei um led na saída do módulo receptor e esse led acende quando faço uma transmissão pelo módulo TX, indicando que o módulo RX está recebendo a transmissão.

Vejam abaixo os códigos do TX e RX.


TX

Código: Selecionar todos
void main( )
{
     char x = 9;
         
     CMCON0  = 7;                            // comparadores desligados
     ANSEL = 0;
     TRISIO = 0b000010;                   // seta os trisio
     
     GPIO = 0;

     Man_Send_Init(&GPIO);             

     while (1)                               
     {

                if (button(&GPIO,1,40,1))         
                {

                      Man_Send(x);               // envia o caracter
                      delay_ms(400);            // aguarda 400ms
                                                         // entre transmissões
                }
      }

}






RX
Código: Selecionar todos
void main ( )
{
     char a, error;
     
     CMCON = 7;
     TRISIO = 0b000001;

     GPIO = 0;

     Man_Receive_Init(&GPIO);           // recepção do código no GPIO 0


     while (1)
     {

          a = Man_Receive(error);              // testa a mensagem recebida

          if (a == 9)                                 // se receber "9" (codigo correto)
          {

               GPIO.F2 = 1;
               delay_ms(500);
               GPIO.F2 = 0;

          }

          else                          // senão
          {

               GPIO.F4 = 1;
               delay_ms(500);
               GPIO.F4 = 0;

          }


     }

}




Vejam que, se o PIC no receptor receber "9' (dado correto) deve ativar por 0,5 segundos a saída GPIO.F2 e qualquer outro sinal recebido ativa a saída GPIO.F4. Nem uma nem outra está funcionando, mas o PIC está funcionando ok.

A distancia entre os módulos TX e RX é de uns 15 cm e tudo está alimentado com 5VCC.

Alguém poderia ajudar a resolver isso?

Valeu!

MensagemEnviado: 08 Fev 2009 16:39
por Maia
Não conheço o MikroC mas geralmente as rotinas de delay só aceitam valores até 255 (unsigned char). Tenta dois delays de 250 ms pra ver se funfa.
Abraços,
Maia

MensagemEnviado: 08 Fev 2009 21:20
por lpagano
Maia,

Essa rotina de delay com mais de 255 funciona pois já fiz vários programas com rotinas de até 3000ms e deu certo.

O problema mesmo parece ser as funções do Manchester.

MensagemEnviado: 09 Fev 2009 09:04
por ffcprog
well boi..
look this..

Man_Receive_Config:; <<<<<<<<<<<<<<<
The function prepares PIC for receiving signal. You need to specify the port and rxpin (0–7) of input signal. In case of multiple errors on reception, you should call Man_Receive_Init once again to enable synchronization.

Man_Receive_Init:; <<<<<<<<< you using this...
The function prepares PIC for receiving signal. You need to specify the port; rxpin is pin 6 by default. In case of multiple errors on reception, you should call Man_Receive_Init once again to enable synchronization.

tendeu seu erro ? o 12fXXX, vai de GP0 a GP5... e nao GP6...

Preciso falar mais alguma coisa ?

ffcprog

MensagemEnviado: 09 Fev 2009 09:41
por lpagano
"fêfêcêprog",

Tks, eu nem tinha percebido isso. :oops:

Ah, só respondendo sua pergunta, não precisa falar mais nada não, obrigado! :lol: