Rf haberleşme uygulamam için yardım lütfen

Başlatan serhat_selo, 22 Ocak 2008, 14:13:45

serhat_selo

Arkadaşlar. Udea nın Rf modüllerini kullanıyorum. Veriyi rahatça gönderip alabiliyorum. Ama alıcı modül ortamdan garip garip şeyler alıp displayde gösteriyo. Galiba ortamdan gelen enteresan yapıda şekiller var. Bunun nasıl engelleyebilirim. Kodu vereyim

 VERİCİ:

       tus='A';
       printf(lcd_putc,"%c",tus); // GÖNDERİLECEK DATA ÖNCE LCD'DE
       putc(200);  // PREAMBLE
       putc(tus);   // DATA
       delay_ms(20);

 ALICI:

 while(true){
    if(getch()==200)
    {
    veri_al=getch();
    printf(lcd_putc,"%c",veri_al);
    }
    }

neotr

senin yaptıgın projeyi bende yapmaktayım ve benim devrem çalışıyor.

preamble 200 yerine 55 gönder 10101 lerden oluşuyor mesela bu  preamble yolla 5 defa 2 tanesi alıcıya ulaşınca asıl kriptonu o zman yolla mesela sen 200 yollayarak alıcını hem uyandırıp hemde alıcıda kendi vericini tanımlıyors



while(1)                       //SONSUZ DÖNGÜ GETC() SÜREKLİ VERİ ALMA DA KULLANILCAK.
       {
            if(getc()==0b10101010)            //y karakteri  gelmeden lcd ye yazma işlemi yok.BAŞKA VERİCİLERDEN ETKİLENMEMEK
                                       //İÇİN VE YALMIZ KENDİ ALICI VE VERİCİMİZLE ÇALIŞMAMIZ İÇİN.
           {
             
             if(getc()==0b10101010)
             {
             if(getc()=='y')
             {lcd_send_byte(0,0x0d);           //kursor yanıp sönsün komutu.lcd de nerde kaldıgımızı görmede kolaylık.
           
             printf(lcd_putc,"%c",getc());     //GETC () NİN ALDIGI DEGER LCD YE BASILIYOR.
             }
         
          }
            }
               
vericinde buna göre preamble ve kripto olmalı mesela ben kriptomu y  seçmişim.

MEHMET ÖZÜAĞ
           
       }un. sana sunabileceğim çözüm şu..

neotr

senin yaptıgın projeyi bende yapmaktayım ve benim devrem çalışıyor.

preamble 200 yerine 55 gönder 10101 lerden oluşuyor mesela bu  preamble yolla 5 defa 2 tanesi alıcıya ulaşınca asıl kriptonu o zman yolla mesela sen 200 yollayarak alıcını hem uyandırıp hemde alıcıda kendi vericini tanımlıyors un. sana sunabileceğim çözüm şu..



while(1)                       //SONSUZ DÖNGÜ GETC() SÜREKLİ VERİ ALMA DA KULLANILCAK.
       {
            if(getc()==0b10101010)       // GÖNDERİLEM 5 BYTE PREAMBLEIN     2 TANESİ GELİNCE ALICI PROGA GİR
                                   
           {
             
             if(getc()==0b10101010)
             {
             if(getc()=='y')       //y karakteri gelmeden lcd ye yazma işlemi yok.BAŞKA VERİCİLERDEN ETKİLENMEMEK İÇİN
             {lcd_send_byte(0,0x0d);           //kursor yanıp sönsün komutu.lcd de nerde kaldıgımızı görmede kolaylık.
           
             printf(lcd_putc,"%c",getc());     //GETC () NİN ALDIGI DEGER LCD YE BASILIYOR.
             }
         
          }
            }
               
vericinde buna göre preamble ve kripto olmalı mesela ben kriptomu y  seçmişim.

MEHMET ÖZÜAĞ

serhat_selo

Alıntı yapılan: "neotr"senin yaptıgın projeyi bende yapmaktayım ve benim devrem çalışıyor.

preamble 200 yerine 55 gönder 10101 lerden oluşuyor mesela bu  preamble yolla 5 defa 2 tanesi alıcıya ulaşınca asıl kriptonu o zman yolla mesela sen 200 yollayarak alıcını hem uyandırıp hemde alıcıda kendi vericini tanımlıyors un. sana sunabileceğim çözüm şu..



while(1)                       //SONSUZ DÖNGÜ GETC() SÜREKLİ VERİ ALMA DA KULLANILCAK.
       {
            if(getc()==0b10101010)       // GÖNDERİLEM 5 BYTE PREAMBLEIN     2 TANESİ GELİNCE ALICI PROGA GİR
                                   
           {
             
             if(getc()==0b10101010)
             {
             if(getc()=='y')       //y karakteri gelmeden lcd ye yazma işlemi yok.BAŞKA VERİCİLERDEN ETKİLENMEMEK İÇİN
             {lcd_send_byte(0,0x0d);           //kursor yanıp sönsün komutu.lcd de nerde kaldıgımızı görmede kolaylık.
           
             printf(lcd_putc,"%c",getc());     //GETC () NİN ALDIGI DEGER LCD YE BASILIYOR.
             }
         
          }
            }
               
vericinde buna göre preamble ve kripto olmalı mesela ben kriptomu y  seçmişim.

MEHMET ÖZÜAĞ

    anladım. Ama senin program her seferinde Y yi gönderiyo. Benim program her defasında farklı değerler gönderecek. Tuş takımı ile. Hangi tuşa basarsam o değer gidecek.
    if(getc()=='y')  bu kısım yani her seferin değişecek. Şimdi ne önerirsin acaba

neotr

tamam bende tuş takımıyla gönderme yapıyorum ama benim alıcım y karakteri gelmeden tuş takımından gelen veriyi basmıyor. neden dersen

ortamda aynı frekansta yayın yapan başka vericiler varken benim alıcım kandi partneri olan vericiyi alsın diye. onun için y sabit olmalı. y benim alıcıda lcd ye basacagım değer değil alıcının kendi vericisini tanımlaması bir nevi kimlik sorgulaması gibi.

dikkat edersen y alındıktan sonra getch ile y geldikten sonra vericiden gelen değeri basıyorum lcd ye..

i
f(input(sat1)==0)
{delay_ms(20);                //OLUŞAN BUTON ARKLARINDAN DOLAYI İF' 1 DEN FAZLA PEŞPEŞE GİRMEYİ ENGELLEME
                             //GECİK
        tus=0b01000001;       // a harfi
         putc(0b10101010);    //5 byte alıcımızı uyandırma verisi
         putc(0b10101010);
         putc(0b10101010);
         putc(0b10101010);
         putc(0b10101010);
     
       putc('y');      //kripto
   
       putc(tus);            //1. satırı pic tararken. sut1 e basılmışsa tus değerini RX TEN yolla.
       putc(tus);
       putc(tus);
}
GÖRDÜĞÜN GİBİ ALICIYA Y DEĞİL  A HARFİ YOLLUYORUM.

MEHMET ÖZÜAĞ

riza

arkadaslar.bakin udea nin modul secim tablosunda modullerin baudrate leri belirtilmis.bunlara dikkat ederseniz hic sorun yasamazsiniz.mesela atx34 we arx 34 kullaniyosaniz katalog bilgisinde 2400 baud yaziyor.datalari bu hizda yollarsaniz rahatcada geri alirsiniz.tabiki konfigurasyonu artirmalisiniz.yani sadece "A " yollayip karsidan "A " okumaya calismayin.mumkun oldugunca datayi kalabalik tutun.kolay gelsin

neotr

ben 300 baud/rate te yolluyorum sıkıntı yok..

badcatbad

kriptoyu biraz geliştirirseniz daha iyi ollur, mesala verinin düzgün geldiğini sadece başta verilen on bilgi yetmez, sonunada eklemelisiniz. Bu sayede verinin düzgün gönderildiğini teyit edebilirsiniz. Mesala ben klavyeden gelen verinin başına ve sonuna '#' karakteri koydum, alıcıda ağer başında ve sonuda # karakteri varsa veriyi alıyor.