rf alıcı verici ile kablosuz pic devresi çalıştıramıyorum ,yardım lütfen!

Başlatan oktay5506, 22 Nisan 2015, 19:44:29

oktay5506

Selam arkadaşlar;
   Üzerinde çalışmış olduğum bir projede takıldım kaldım, yardımlarınızı  rica ediyorum..
Projem: Verici tarafında 16F84A   kullanarak , beş buton  ile ,alıcı tarafındaki ,  beş adet röleyi  kontrol etmek istiyorum  bunun için   rf 433 mhz hazır alıcı verici kit kullanıyorum,  bir türlü haberleştiremedim  nerede  hata yapıyorum acaba,  verici ve alıcıyı  koblo ile denediğimde çalışıyor. sizlere devrenin
CCS C  ile yazılmış kodlarını da gönderiyorum.
yardımlarınızı bekliyorum..

VERİCİ KISIM
#include <okt_verici.h>

void main()
{
   int a,b,c,d,e;
   while(true)
   {
      set_tris_B(0x00);
      set_tris_A(0xFF);
/*     output_low(LED);
      delay_ms(DELAY);
      output_high(LED);
      delay_ms(DELAY);*/
     
      //1 NOLU BUTON KONTROLU
      if(input(PIN_A0) == 1)
      {
         putc('A');
         a=1;
         delay_ms(DELAY);
      }
      else if (input(PIN_A0) == 0)
      {
         if(a==1)
         {
            putc('a');
            a=0;
            delay_ms(DELAY);
         }
      }
     
      //2 NOLU BUTON KONTROLU
      if(input(PIN_A1) == 1)
      {
         putc('B');
         b=1;
         delay_ms(DELAY);
      }
      else if (input(PIN_A1) == 0)
      {
         if(b==1)
         {
            putc('b');
            b=0;
            delay_ms(DELAY);
         }
      }
     
      //3 NOLU BUTON KONTROLU
      if(input(PIN_A2) == 1)
      {
         putc('C');
         c=1;
         delay_ms(DELAY);
      }
      else if (input(PIN_A2) == 0)
      {
         if(c==1)
         {
            putc('c');
            c=0;
            delay_ms(DELAY);
         }
      }
     
      //4 NOLU BUTON KONTROLU
      if(input(PIN_A3) == 1)
      {
         putc('D');
         d=1;
         delay_ms(DELAY);
      }
      else if (input(PIN_A3) == 0)
      {
         if(d==1)
         {
            putc('d');
            d=0;
            delay_ms(DELAY);
         }
      }
     
      //5 NOLU BUTON KONTROLU
      if(input(PIN_A4) == 1)
      {
         putc('E');
         e=1;
         delay_ms(DELAY);
      }
      else if (input(PIN_A4) == 0)
      {
         if(e==1)
         {
            putc('e');
            e=0;
            delay_ms(DELAY);
         }
      }
   }

}
#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer

#use delay(crystal=4000000)
#use rs232(baud=2400,parity=N,xmit=PIN_B0,rcv=PIN_A0,bits=8,stream=PORT1)

#define LED PIN_B0
#define DELAY 1000

ALICI KISIM
#include <okt_a.h>
char e;
void main()
{
   output_B(0);

   //Example blinking LED program
   while(true)
   {
      set_tris_A(1);
      set_tris_B(0);
/*     output_low(LED);
      delay_ms(DELAY);
      output_high(LED);*/
      e=getch();
   //   e='A';
   
      //1 NOLU LED KONTROLU
      if(e=='A')
         output_high(PIN_B0);
      else if(e=='a')
         output_low(PIN_B0);
         
      //2 NOLU LED KONTROLU
      if(e=='B')
         output_high(PIN_B1);
      else if(e=='b')
         output_low(PIN_B1);
         
      //3 NOLU LED KONTROLU
      if(e=='C')
         output_high(PIN_B2);
      else if(e=='c')
         output_low(PIN_B2);
         
      //4 NOLU LED KONTROLU
      if(e=='D')
         output_high(PIN_B3);
      else if(e=='d')
         output_low(PIN_B3);
         
      //5 NOLU LED KONTROLU
      if(e=='E')
         output_high(PIN_B4);
      else if(e=='e')
         output_low(PIN_B4);
   }

}#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer

#use delay(crystal=4000000)
#use rs232(baud=2400,parity=N,xmit=PIN_B0,rcv=PIN_A0,bits=8,stream=PORT1)

#define LED PIN_B0
#define DELAY 5000





Recep METE

Verici ve alıcıyı kablo ile haberleştirdiğine göre kodlarda bir sorun yok. Eğer devreyi breadboarda kurduysan kesinlikle birşeyleri eksik yapıyorsundur. Fotoğrafını koyarsan inceleyebiliriz.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

oktay5506

devreyi baskı devre ile plaket üzerinde kurdum ,breadboarda kurmadım, bağlantıların doğruluğunda şüphem yok ,alıcı verici kitleri de  başka bir çalışan devre üzerinde deniyorum çalışıyor.   


Recep METE

eger uygulamayi gercek deneme yapacaksaniz INVERT komutu  #use satirina eklenmeli.

su sekilde
alicida #use rs232(baud=600,parity=N,rcv=pin_c7,bits=8,INVERT)

ISIS'de deninrken bu satir cikartilmali!!
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

sifirzero

sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

ferdem

Forumda en çok sorulan ve de en çok cevaplanan konulardan birisini sormuşsunuz.
preamble, uyandırma, udea, 433 anahtar kelimelerini aratırsanız çözüm olacak birçok başlık bulabilirsiniz.
Yapmak istediğiniz işe daha uygun önerileri PT2262 anahtar kelimesiyle bulabilirsiniz.
serkançetin, şemaya göre öyle görünüyor, alıcı verici b0 a0 da.

sifirzero

ustam bu devreyi uygulamada yaptım. çaılışmadı alıcıdaki led kafasına gre yanıp sönüyor.maksadım çalışma mantığını anlamak.çalışan düzgün ir devre bulamadım 4 tane denedim hiç biri çalışmadı
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

ismail kaya

CCSC'de manchester code ile parazitlerden kurtulabilirsin. Birde veri yollarken alıcıyı uyandırmak için önden veri yollanır. (putc(0x55);)

TX
#include <12F683.h>
#device ADC=16
#include <string.h>
#include <stdlib.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR

#use delay(internal=4000000)

#use rs232(baud=1200,parity=N,xmit=PIN_A5,bits=8,stream=PORT1)

#define LED PIN_A4
#define DELAY 1000
char durum="N";


#INT_EXT
void  EXT_isr(void) 
{
if(input(PIN_A2)) durum="A";
else durum="N";
}

void SEND_DATA(BYTE txbyte) 
{ 

    int i,j,b,me; 
    
    b = txbyte; 
    
    for (i=0; i<2; i++) { 
        me = 0;         // manchester encoded txbyte 
        for (j=0 ; j<4; j++) { 
            me >>=2; 
            if (bit_test(b,0) ) 
                me |= 0b01000000; // 1->0 
            else 
                me |= 0b10000000; // 0->1 
            b >>=1; 
        } 
        putc(me); 
        delay_ms(50); 
        
    } 
} 


main() { 

   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);

while(1) 
{ 

// sleep();

 
  if(input(PIN_A2))
  {
    output_high(LED);
    delay_ms(DELAY);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x00);  
    putc(0x00);
    putc(0x00);
    putc(0x00);
    putc(0x00);
    putc(0xFF); 
    putc(0xFF);
    putc(0xFF);
    putc(0xFF);
    putc(0xFF);
    putc(0xF0);
  
 
SEND_DATA('H'); 
SEND_DATA(durum); 

       
putc(0xF0);
putc(0xF0);
    
output_low(LED);
delay_ms(DELAY);

  }
} 



}


RX

#include <16F628A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(internal=4000000)

#define LED PIN_B3
#define DELAY 1000

#use rs232(baud=1200, parity=N, xmit=pin_B2, rcv=pin_B1, bits=8)
#use rs232(baud=9600, parity=N, xmit=pin_B5, rcv=pin_B4, bits=8,stream=PORT1) 

char c,a,i,dec,dec1,dec2,enc,pattern,son,j; 
char nib[2]; // 
char x; 

BYTE DECODE_DATA()  //decode function for machester encoded data. This code is working fine. I checked it. 
{ 
enc = nib[0]; 
        
    if (enc == 0xf0)    //  start/end condition encountered 
        return 0xf0; 
        
    dec = 0;    
    for (i=0; i<4; i++) { 
    
        dec >>=1; 
        pattern = enc & 0b11;        
        if (pattern == 0b01)        // 1 
           bit_set(dec,3); 
        else if (pattern == 0b10) 
           bit_clear(dec,3);       // 0 
        else 
            return 0xff;            // illegal code 
            
        enc >>=2; 
        dec1=dec; 
    } 
enc = nib[1]; 
        
    if (enc == 0xf0)    //  start/end condition encountered 
        return 0xf0; 
        
          
    dec = 0;    
    for (i=0; i<4; i++) { 
    
        dec >>=1; 
        pattern = enc & 0b11;        
        if (pattern == 0b01)        // 1 
           bit_set(dec,3); 
        else if (pattern == 0b10) 
            bit_clear(dec,3);       // 0 
        else 
            return 0xff;            // illegal code 
            
        enc >>=2; 
        dec2=dec; 
    } 
dec2<<=4; 
son=dec1|dec2; 
x=0; 
dec=0; 
dec1=0; 
dec2=0; 
return (son); 
} 


#int_rda 
void komut_al() //interrupt for receiving manchester coded data 
{ 
disable_interrupts(int_rda); 


      c=getc();
      if  (x<2) 
      nib[x]=c; // assign low and high nibble of data 
      x=x+1; 

         
     
enable_interrupts(int_rda);  
} 

main() 
{ 
x=0; 
nib[0]=0; 
nib[1]=0; 
enable_interrupts(int_rda); 
enable_interrupts(GLOBAL); 

while(1) 
{ 

if  (x>1) 

{ 
x=0; 
a=DECODE_DATA(); 


 
      if  (a=='H') 
         { 
         fprintf(PORT1,"GELEN=%c\r\n",a);
         } 
      if  (a=='N') 
         { 
         fprintf(PORT1,"NORMAL-%c\r\n",a);
         } 
      
       if  (a=='A') 
         { 
         fprintf(PORT1,"ALARM-%c\r\n",a);
         }
          
        
enable_interrupts(int_rda); 
} 
 
          
} 
}

Teğmen

@oktay5506 usta ben konuyla biraz ilgisiz olacak ama şunu söylemek isterim kodları direk mesajın içine değilde mesaj yazarken yukarıda KOD yazan yere tıklayarak kod parçacığı şeklinde yazarsan daha anlaşılır olur.


Örneğin;
if (i==0 & j==1)
{
printf("Örnek Yazı");

}
yerine
if (i==0 & j==1)
{
printf("Örnek Yazı");

}

bu şekilde daha anlaşılır olmakta


İyi Çalışmalar
"Girdim ilim meclisine kıldım eyledim talep,   Dediler ilim geride kaldı illa Edep illa Edep" Hz.Yunus Emre K.S.

oktay5506

Merhaba arkadaşlar hepinize çok teşekkür ederim.  Devreyi calistirdim   arada nadiren de olsa kendi kendine komut alıyor ama iyi sayılır su anda işler yoğun olduğu için zaman ayiramiyorum. Ve şehir disindayim dönünce ilk fırsatta kodları yayinlarim.

sifirzero

aliexpresden aldığım alıcı verici çalışmıyor galiba 5 tane yazılım denedim hiçbiri olmadı. rx ve tx lere data gönderiyorum hem simülasyonda hem uygulamada çalışıyor.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

fide

Hope rf in Hm-trp isimli, dorji isr dr ile başlayan kodlarda 433 mhz modülleri var. Hmtrp nin kullanımı kolay. 2000mt de sıkıntısız haberleştirdim.


Bir de yanlış hatırlamıyorsam f84te donanım uart yoktu. Software uart mı kullanıyorsun.



Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com