rf ile data gitmiyor

Başlatan husam685, 23 Şubat 2012, 20:08:41

husam685

kaç gündür uğrasıyorum 3 tane modul degiştirdim allah rızası için biri basit sekilde diyelimki 5 sayısını aktartan bi örnek paylaşabilirmi devre kurulu ya yazılımda var yada baska birseyde lütfen

husam685

KODLARIM :
verici :
#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES WRT_50%                  //Lower half of Program Memory is Write Protected

#use delay(clock=4000000)
#use rs232(baud=1200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <ds18b20.c>
int deger;
int giden=0x20;
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!

deger=ds1820_read();
putc(0b01010101);
putc(0b01010101);
putc(0b01010101);
putc(0b01010101);
putc(0b01010101);
putc(deger);
while(true)
{
putc(giden);
deger=ds1820_read();
putc(deger);
}
}

ALICI KODLARIM :
#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES WRT_50%                  //Lower half of Program Memory is Write Protected

#use delay(clock=4000000)
#use rs232(baud=1200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#define use_portb TRUE
#include <lcd.c>
int gelen;
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
lcd_init();
while(true)
{
if(getc()==0x20)
{
gelen=getc();
printf(lcd_putc,"\f SICAKLIK1\n%d",gelen);
}
}
}

OG

husam685,

Önce RF üniteleri devreye almadan denemelisin, gönderen pic ve alıcı pic i direk bağlayıp çalıştırmalısın.

Sonra RF üniteleri devreye almalısın.

RF ünitelerin antenlerini unutmamalısın.

RF üniteler arasında en az 3-5 metre mesafe olmalı.

Gerisi arkadaşların dediği gibi, pullup gibi invert gibi gereklilikler olabilir, ancak genelde bunlara ihtiyaç görülmüyor.

RX'in Data out hattına direk LED bağladı isen arada direnç yoksa veya direncin değeri çok düşük ise data hattı 5V'a kadar yükselemiyebilir ve PIC bunu çözemez. Bu sebeple TX - RX ikilisinin dataları gönderip aldığını gördükten sonra bağladığın LED leri sök. Çünkü tam olarak ne yaptığını bilmiyorsun.

Yazdığın dili bilmediğimden programı kontrol edemiyorum. Şemanı yüklersen proton dili ile yardımcı olabilirim.

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

husam685

arkadaşlar elinizde örnek olarak basit sekilde diyelim ki 15 sayısını gönderen devre örnegi var mı kac gundur ugrasıyorum olmadı sadece c kodlrını gönderseniz yeterli tesekkürler

husam685

arkadaşlar rf modullerinde normal PIC rx tx baglıom bu tx ve rx de kesme olusuyormu bu rf modullerinden dolayı


remzi

Alıntı yapılan: -Hasan- - 23 Şubat 2012, 20:47:29
Hocam Preample+Senkron olmadan RF işi olmaz. İlk denememde bunları koymadığımdan baya bir boğuşmuştum. Bir de kullandığınız modüllere göre datayı tersleyip göndermeniz de gerekebilir. Kod aşağıdaki gibi olabilir:

#include <16f877.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT                      //Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading

#use delay (clock=20000000)

#use rs232(baud=300,parity=N,xmit=PIN_D0,bits=8,stream=PORT1,invert) // Kullanılacak Pin, Baudrate ve Terseleme Olup Olmayacağı Durumuna Göre Ayarlanır

char preamble[]={0xAA,0xAA,0xAA,0xAA,0xAA,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF}; // Uyandırma Verisi
char senkron[]={0x20,0x30}; // Kontrol Byte ' ları Karşı Taraftan Bunlar Okunacak
char veri[]={"PIC"}; // PIC Karakterleri Karşı Tarafa Gönderilir


void main()
{

   puts(preamble);
   puts(senkron);
   puts(veri);

   while(1);

}


Merhabalar...
RF ile seri veri gönderimi yapıyorum tek yönlü olarak...
puts(preamble);
puts(senkron);
puts(veri);

8 bitlik bir veriyi şekildeki gibi gönderiyorum. Fakat
puts(preamble);
puts(senkron);
puts(veri);
puts(veri2);

yapınca 2. veriyi alamıyorum.
Benim yaptığım cihazda bir seferde 4byte bilgi göndermem gerekiyor. Araya premaple ve senkron koymammı gerekiyor?
Bir sorum daha olucak. Diyelimki senkron bilgisini aldık. Daha sonra gelen verinin veya verilerin yanlış gelme ihtimali varmıdır?

husam685

kardes 'puts' ifadesini 'putc' olarak yap ayrıca make ifadesi kullan ilk veriyi gönder karsı taraftan al sonra ikinciyi veriyi gönder ikinci veriyi al ve sonra make komutu ile gelen verileri birleştir. şuan dışardayım eve gidince sana detaylı olarak moutları yazarım

eistain_54

İyi çalışmalar.Yardıma ihtiyacım var.Ve örneklerle açıklandırabilirseniz sevinirim.
Yapmak istediğim şey akıllı perde otomasyonu.Kumanda da 4 buton var.
Verici kısmında 16F628a kullandım.Harici 4 mhz kristal ve 22 pf cap kullandım.
şerit led on-off                              oto mod-manuel mod

perde aç                                        perde kapat

Alıcı kısmında 16f88 kullandım.Harici 4 mhz kristal  ve 22 pf cap kullandım.
Gelen veriyi kontrol et.

eğer oto mod isteği geldiyse oto mod etiketine git.
eğer manuel mod isteği geldiyse maneul mod etiketine git
eğer şerit led on isteği geldiyse şerit ledi yak.
eğer şerit led off isteği geldiyse şerit ledi söndür.
oto mod:

ldr yi oku ve value değişkenine yaz.
eğer ldr değeri 127 den büyükse karanlık oldu ve perdeleri kapat
eğer ldr değeri 127den küçük eşitse gündüz ve perdeleri aç
end

manuel mod:

eğer perdeleri aç isteği geldiyse ve perde_durum 1 ise (perde kapalı anlamında) perdeleri aç.
eğer perdeleri kapat isteği geldiyse ve perde_durum 0 ise (perde açık anlamında) perdeleri kapat.
end

rf modül kullanarak yapmaya çalışıyorum.kullandığım rf modüller:
rxn3 rev1
txc1 rev01

program kodlarını çok kez değiştirdim.bazı kısımlar o yüzden anlamsız gelebilir.devre üzerinde henüz denemedim.isis ile yaptığım simülasyonda sıkıntı yaşıyorum.istediği gibi çalışmıyor.bu arada gönderdiğim verinin alındığına dair hiçbir emare yok.adc çevrimi yaptığını da anlayamıyorum.nerde hata yaptığım konusunda yardımcı olun lütfen.
alıcı
#include <16f88.h>

#device ADC=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOIESO                   //Internal External Switch Over mode disabled


#use delay(clock=4000000)
#use rs232(baud=2400,parity=N,xmit=PIN_B3,rcv=PIN_B2,bits=8)

#use fast_io(a)
#use fast_io(b)

unsigned int8 led_durum,mod_durum,perde_durum;
byte led;
unsigned long int value;
void veri_al()
{
 led=gethex();
 puts(led);
      if (led==0x11)
   {
     led_durum=0x00;
      output_high(pin_b6);
   }
     if (led==0x22)
     {
     led_durum=0xff;
     output_high(pin_b6);
     }
     if (led==0x33)
     {
     mod_durum=0x00;
     output_high(pin_b6);
     }
     if (led==0x44)
     {
     mod_durum=0xff;
    output_high(pin_b6);
     }
     if (led==0x55)
      {
     perde_durum=0x00;
     output_high(pin_b6); 
      }
     if (led==0x66)
         {
         perde_durum=0xff;
   output_high(pin_b6);
   delay_ms(500);
   output_low(pin_b6);
   
         
     }
}
   

   
   
 void main()
  {
   setup_adc_ports(sAN0);
   setup_adc(ADC_CLOCK_DIV_32);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   
   set_tris_a(0x00);
   set_tris_b(0b00000100);
   
   output_low(pin_a3);
   output_low(pin_a4);
   
   while (1)
   {
   veri_al();

   if (led_durum==0xff)
      output_high(pin_b1);
   if (led_durum==0x00)
      output_low(pin_b1);
   
      if  (mod_durum==0x00 && perde_durum==0x00)
      {
     
         output_high(pin_a3);
         output_low(pin_a4);
         delay_ms(1000);
         output_low(pin_a3);
      }
      if ((mod_durum==0x00) && (perde_durum==0xff))
            {
            output_high(pin_a4);
            output_low(pin_a3);
            delay_ms(1000);
            output_low(pin_a4);
            }
      
      
     if (mod_durum==0xff)
      {
   set_adc_channel(0);
   delay_us(20);
   value=read_adc();
      output_high(pin_b4);  
         if (value << 127)
               {
      output_high(pin_a3);
      output_low(pin_a4);
               }
         if (value >> 127)
          {
      output_low(pin_a3);
      output_high(pin_a4);
      output_high(pin_b7);
          }
      }
      
      if ((mod_durum==0) && (perde_durum==0))
         
      
              {
          output_high(pin_b6);
         output_high(pin_a4);
         output_low(pin_a3);
         }
     if ((mod_durum==0)&& (perde_durum==0xff))
         {
         output_low(pin_a4);
         output_high(pin_a3);
         }
      

   
   veri_al();
   }
   
   
  }


verici
#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)
#use rs232(baud=2400,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
 int led_durum=0,mod_durum=0;
 void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

   // TODO: USER CODE!!
  while(1)
   {
      if ((input(pin_b4)==0)&& (led_durum==0))
      {
     
      

      putc(0x11); 
      putc(0x11); putc(0x11); putc(0x11);
      led_durum=1;
      
      }
     if((input(pin_b4==0)) && (led_durum==0))
        {
       
       
        
        putc(0x22); 
        putc(0x22); putc(0x22); putc(0x22); 
        led_durum=0;
        }
      
   

   if (input(PIN_B5)==0)
    {  
        delay_ms(500);  
         if (mod_durum==0)
            {
            
 
        putc(0x33); 
            putc(0x33); putc(0x33); putc(0x33); 
          mod_durum=0;
            }
          else
            {
         

        putc(0x44); 
          putc(0x44); putc(0x44); putc(0x44); 
             mod_durum=1;
           
            }
   }
    if (input(PIN_B6)==0)  
         
          
           {
          
          delay_ms(140); 

       putc(0x55); 
       putc(0x55); putc(0x55); putc(0x55);
          
             }
     if (!input(PIN_B7))
            {
            delay_ms(140);
           

       putc(0x66); 
            putc(0x66); putc(0x66); putc(0x66); 
           
            }
       
   }
}


şema:
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

eemuratozan

aynı sorunu bende yaşıyorum üstelik seninkine göre çok daha basit bişi deniyorum butona basınca led yansın istiorum ama bende de alıcı gelen veriyi almıyor bi türlü bi yardım eden çıkmadı
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eistain_54

#25
Takıldığım nokta sadece verinin alınıp alınamadığı. Gerisi zaten döngü.Gibi...
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

eemuratozan

bende bi kaç örnek buldum aynısını yazıyorum donanım da hemen hemen aynı yani kendime uyarladım adam 4 led yakmış ben bi tane yakıorum ama onunki çalışıo benim yazdığım çalışmıo :)
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eistain_54

#27
Galiba konuyla ilgilenen kimse olmadı.
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

eemuratozan

veriyi göndermeden önce ufak bi gecikme koy bu butonun yaratacağı arkı önler ayrıca butondan elin çekilmiş olmasını beklersin putc den önce gecikme koy bakalım
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.