La comunicación de RF de PIC a PIC de 433 MHz falla [SOLUCIONADO]

-1

Tengo dos PIC16F628A. uno para transmisor y otro para receptor ... (433 MHz) Puse los pines B como entrada para usar el transmisor y el receptor ...

Los códigos están escritos en mikroC.

Aquí está el código para el transmisor:

void main() {

     trisb = 1;
     portb = 0;
     cmcon = 7;

     UART1_Init(9600);
     delay_ms(1000);

     while(1){
              UART1_Write_Text('a');
              delay_ms(1000);
              UART1_Write_Text('b');
              delay_ms(1000);
     }

}

Aquí está el código para el receptor:

void main() {

     trisb = 1;
     trisa = 0;
     portb = 0;
     porta = 0;
     cmcon = 7;

     UART1_Init(9600);
     delay_ms(100);
     while(1){

              if(UART1_Data_Ready()){
                     if(UART1_Read() == 'a') porta.b1 = 1;
                     if(UART1_Read() == 'b') porta.b1 = 0;
              }

     }

}

Quiero encender el led cuando recibo el mensaje 'a' del transmisor y el led se apaga cuando se recibe el mensaje 'b'. El led está conectado a 18.pin (porta.b1).

EDIT

No tengo proteus. Por eso dibujé el diagrama de los circuitos en un papel.

EDIT2Logréencenderelled,peroenestemomentonoenciendedeacuerdoconmideseo.

Elproblemaquedijeessobreelbajoconsumodeenergíadelabatería,creo.

Ahora,trabajoconotrasbateríasparaobtenersuficienteenergía...

Nuevocódigodereceptor:

charx;voidmain(){trisb=0xFF;trisa=0;trisa.b5=1;//MCLRpiniiçincmcon=7;porta=0;porta.b5=1;UART1_Init(9600);delay_ms(100);while(1){if(UART1_Data_Ready()){x=UART1_Read();if(x=='a')porta.b1=1;if(x=='b')porta.b1=0;}}}

Nuevocódigodetransmisor:

voidmain(){trisb=0xFF;trisa=0;trisa.b5=1;//MCLRporta=0;porta.b5=1;//MCLRcmcon=7;UART1_Init(9600);delay_ms(100);while(1){UART1_Write_Text("a");
              delay_ms(1000);
              UART1_Write_Text("b");
              delay_ms(1000);

     }

}

De acuerdo con estos códigos, el led debe encenderse durante 1 segundo y apagarse durante 1 segundo ...

Pero no fue así. Cuando toco los cables que están conectados al receptor, el LED se enciende o apaga.

A veces lo hace sin tocar ...

Incluso si el circuito del transmisor está desactivado, el led en el circuito del receptor se enciende o apaga ...

No tiene una iluminación específica en el tipo. Lo hace de acuerdo a su decisión.

    
pregunta PIC16F84A

1 respuesta

0

El problema está resuelto; Gracias... Al parecer, es una obligación conectar una antena al transmisor. Hay un agujero en el lado superior derecho del transmisor. Conecté un cable de puente allí y funcionó. Cuando toco el agujero con mi dedo, sucede lo mismo. Pero para largas distancias, el transmisor necesita una antena. Pero cuando el transmisor está cerca del receptor; dedo, el alambre de cobre es suficiente.

Esos códigos funcionan bien: (Es la cita de enlace )

Receptor:

char az,i=0, msg[6];
void main()
{
 UART1_Init(2400);
 trisb.f0=0;
 portb.f0=1;
 delay_ms(100);

 while(1)
         {
          if(UART1_Data_Ready())
          {
           msg[i]=UART1_Read();
           if(msg[0]=='y' || msg[0] == 's')//Eğer msg[0] 'y' veya 's' ise i değişkeninin 1 arttır.
                                           {
                                            i++;
                                           }
          }
          if(i==3)
                  {
                   if(msg[0]=='y' && msg[1]=='a' && msg[2]=='n' )portb.f0=1;  //Senkron için gönderilen sıfır veya 255 aranmaz....
                   if(msg[0]=='s' && msg[1]=='o' && msg[2]=='n' )portb.f0=0;
                   i=0;
                   msg[0]=0;

                  }
         }
}

Transmisor:

char pre[15]={'U','U','U','U','U',255,255,255,255,255,0,0,0,0,0};
char yak[3]={'y','a','n'};  //Senkron için en az bir byte sıfır gönder kesinlikle.....
char son[3]={'s','o','n'};
char i=0,j=0;

void kurulum()
{
 UART1_Init(2400);
 trisb.f0=1;
 Delay_100ms();

}

void main()
{
 kurulum();
 while(1)
       {
         if(portb.f0)
         {
          for(i=0;i<15;i++)
                           {
                            UART1_Write(pre[i]);
                           }
          for(j=0;j<10;j++)                   //garanti olması açısından 10 kez gönderiliyor veriler...
          {
                          for(i=0;i<3;i++)
                          {
                           while(!UART1_Tx_Idle());
                           UART1_Write(yak[i]);
                          }
          }
         }

          //*************************************************************
         if(!portb.f0)
         {
          for(i=0;i<15;i++)
                           {
                            UART1_Write(pre[i]);
                           }
          for(j=0;j<10;j++)
          {
                         for(i=0;i<3;i++)
                         {
                          while(!UART1_Tx_Idle());
                          UART1_Write(son[i]);
                         }
          }
         }
       }
}

El sitio web anterior está escrito en idioma turco. Puedes traducirlo usando el traductor de google ...

    
respondido por el PIC16F84A

Lea otras preguntas en las etiquetas