Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

2 pic arası rf iletişim

Başlatan mustan79, 16 Ekim 2014, 16:02:29

mustan79

merhaba arkadaşlar

uzun zamandır 2 pic arası rf uygulaması yapmaya çalışıyorum. netteki bir örnek gibi 10 larca örneği derleyerek proteusta çalıştırdım gayet güzel. lakin gerçek uygulamada çalışmıyor. devreyi board üzerine kuruyorum. basit bir devre bile çalışmıyor yani veri gidince led yansın falan. dediğim gibi proteusta yazılımların hepsi çalıştı. boardta hiç başaramadım. ve acil olarak rf iletişimi yapmam lazım. bu konuda yardımcı olurmusunuz. nerde hata yapıyorum?

ayhan_eee

Proteusta RF nasıl simule ettiniz? Sadece uart olarak mı denetiniz sadece? Gerçekte kullandığınız odemler neler Bunları yazmadan yardım etmek imkansız

Gökhan BEKEN

Özel mesaj okumuyorum, lütfen göndermeyin.

Recep METE

Bence rf ile deneme yapmadan önceiki picin  rx-tx,tx-rx 'ini birbirine kablo ile bağlayıp programın çalışıp çalışmadığını görmelisin.Progam çalışıyor ledleri yakıp söndürüyorsan aradaki
haberleşme kablolarını çıkarıf rf modüllerini  takıp deneyebilirsin.

Birde kodunuzu görmedik ama  kodda şöyle bir değişiklik yapınız,
#use rs232(baud=9600,parity=n,xmit=PIN_B2,bits=8,stop=1,invert)
muhtemelen "INVERT" komutu olayı çözecektir.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

mustan79

#4
merhabalar, öncelikle cevaplarızın için teşekkürler.
dün board üzerinde alıcı verici modül ile denerken rx ve tx uçlarına led bağladım butona bastığımda sinyal akışını görebiliyorum. (sonuç yok led yanmadı yazı yazmadı.) fakat kabloyla direk bağladığımda yine sonuç yok. ortak şasede denedim. rf modulleri daha önceden 2 ardiuno ile denemiş çalıştırmıştım. yazdığım kodları aşağıda veriyorum incelerseniz sevinirim.

@semfero hocam dediğinizi deneyeceğim. sonucunu yazarım.

alıcı kod
#include
#fuses xt
#fuses nowrt,nowdt,nobrownout,nolvp,nocpd,nodebug,noprotect,noput
#use delay(clock=4000000)
#use rs232(baud=1200,parity=N,rcv=pin_c7,stop=1, parity=N, errors)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#define use_portb_lcd TRUE // LCD B portuna bağlı
#include "lcd.c"
int16 xdata[3];
int16 sayi;
int i,a=0;
void main()
{
output_high(pin_d2);
lcd_init();
printf(lcd_putc,"\fmustan");
while(true)
{
output_high(pin_d1);
if(getch()=='X')
{
while(getch()=='X');
output_high(pin_d0);
  for(i=0;i<3;i++)
  xdata=getc();
  sayi=100*xdata[0]+10*xdata[1]+xdata[2]; //LCD'ye yazdırmak için
  a=2; // Ana döngüde a>1 şartı için a=2,3,4 vs. olabilir.
// if(a>1)
// {
printf(lcd_putc,"\fGelen Sayi=%3.2w", sayi);
// write_eeprom(0,sayi); // 0 (0x00) adresine sayi değerini yaz
// printf(lcd_putc,"\ntoplam=%3.2w",read_eeprom(0));
// a=0;
// }
delay_ms(10);
output_low(pin_d0);
}
}
}

verici kod:
#include
#fuses xt
#fuses nowrt,nowdt,nobrownout,nolvp,nocpd,nodebug,noprotect,noput
#use delay(clock=4000000)
#use rs232(baud=1200,parity=N,xmit=pin_c6,rcv=pin_c7,stop=1, parity=N)
#define buton pin_a2 //buton ifadesi pin_a2 ifadesine eşitleniyor
unsigned int sayi;
int i;
int16 a;
byte data1[3];
void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
setup_spi(SPI_SS_DISABLED);
set_tris_b(0x00);
output_b(0x00);
output_high(pin_d2);
while(true)
{
if (input(buton))
{
output_high(pin_d3);
while(input(buton))
{delay_ms(5);
}
delay_ms(10);
sayi++;
a=sayi;
data1[0]=(a/100)%10; //Deger rakamlarına ayrılıyor ve teker teker diziye aktarılıyor.
data1[1]=(a/10)%10;
data1[2]=a%10;
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('X');
// putc('s'); // alıcıdaki "while(getch()=='X');" ifadesi için herhangi bir boş karakter.
// Data kontrol ve gönderme ksımı farklı şekillerde yapılabilir.
for(i=0;i<3;i++)
putc(data1);
delay_ms(10);
output_low(pin_d3);
}
}
}

ferdem

#5
İlk olarak RF ile tek bir byte ı karşı tarafa doğru göndermeyi denemelisiniz, tek byte ı doğru biçimde göndermeden yapmaya çalıştığınız deneme sizi daha çok uğraştırır. Doğru veri geldiğinde karşı taraf bir ledi yakarak işaret versin. Böylece en basit test düzeneğini kurmuş olursunuz.

Gönderme alma taslağı şöyle olmalı:
TX: putc(0xAA);putc(0xAA);putc(0xAA);putc(oncu_veri);putc(oncu_veri);putc(asil_veri);
RX: Her veri geldiğinde: Gelen veriler sürekli 3 lu buffera sıraya girer gibi dizilsin(queue yapısı) ve şu sorgu çalışsın: if(buf[0]==oncu_veri && buf[1]==oncu_veri) {veri=buf[2];}

Bir de kodunuzda döngüde aralardaki 10ms süresi çok uzun, alıcı uyur o zamanda. Boşluk bırakmadan gönderin, putc(data1); putc(data2); gibi.

EK: Veriyi kesme ile almalısınız, int_rda anahatar kelimesiyle arama yaparsanız forumumuzda bolca bulunan örneklere ulaşabilirsiniz.

mustan79

@semfero hocam dediğiniz derleyicide hata verdi. olmadı.
@ferdem hocam dediğiniz gibi basit devreyle ve bahsettiğiniz gibi devre kurup denedim yine olmadı. kodlar aşağıdadır. ınt_rda kesmesini biliyorum onuda denedim ama başaramadım.

Alıcı kod

#include <16F877a.h>
#fuses xt
#fuses nowrt,nowdt,nobrownout,nolvp,nocpd,nodebug,noprotect,noput
#use delay(clock=4000000)
#use rs232(baud=600,parity=N,xmit=pin_c6,rcv=pin_c7,stop=1, parity=N)

int i;
int16 xdata[3];

void main()
{
  output_high(pin_d0);
   while(true)
  {
  for(i=0;i<3;i++)
  xdata=getc();
   if(xdata[0]=='X'&& xdata[1]=='X')
  {
    if(xdata[2]=='D')
    output_high(pin_d1);
  }
}
}
   

verici kod

#include <16F877a.h>
#fuses xt
#fuses nowrt,nowdt,nobrownout,nolvp,nocpd,nodebug,noprotect,noput
#use delay(clock=4000000)
#use rs232(baud=600,parity=N,xmit=pin_c6,rcv=pin_c7,stop=1, parity=N)

void main()
{
output_high(pin_d2);

while(true)
   {
   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('X');   
      putc('X');
     putc('D');
   }
}