Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

RF için yardım

Başlatan spooner, 08 Şubat 2008, 01:58:21

spooner

arkadaşlar öncelikle merhaba udea firmasından aldığım arx ve atx-34 rf setini kurup çalıştırmak istedim ama bir türlü başarmadım nerde yanlış yapıyorum bulamadım :) sitede  okadar araştırma yapıp bilgi topladım ama sonuç sıfır bana yardımcı olabilecek arkadalara şimdiden tşk ederm kod aşağıda acaba nerde yanlış yapıyorum isisde kuruyorum gayet güzel haberleşiyorlar acaba rflermi bozuk anlamadım


ALICI:

   serin2 b1,1646,[WAIT ("alp"), B0]
   LCDOUT $FE,1,"rakam=",#B0
   PAUSE 10000
   STOP


VERİCİ:


pause 300
basla:
SEROUT2 b1,1646,["alp",dec tom]
SEROUT2 b1,1646,["alp",tom]
goto basla
end


ete

Sorunun kaynağı senkron bulunamaması.
Alıcı kısmında yalnızca 1 adet veri alma komutu verip ardından 1000 ms bekleyip programı kesmişsin.

Peki senin veri gönderdiğin zaman alıcı onu alabilecek durumdamı idi acaba düşündünmü?.
Peki ne yapmak lazım.
Verici veriyi sürekli göndermesi gerek. Burası tamam ancak alıcıda sürekli veri bekler konumda olması gerek. Ayrıca veriyi bir dec bir dec siz gönderme ya hep dec ile gönder yada hep dec siz gönder.

1000 ms bekleme yerine 100 ms bekleme koy ve tekrar başa gönder programı.

Alış verişi etkileyen pek çok başka husus daha var. Bunların başında anten şekli ve boyutu geliyor.
RF sistemlerinde 433 Mhz için anten boyutu 17,1 cm boyunda bir teldir. Bu tel bildiğimiz 0,55 lik bir tel olabilir. Her iki modülde aynı telden kullanıp telin yönünü aynı yöne vermeniz gerek. Bu işlerde sprial anten dediğimiz anten de olumlu sonuçlar vermektedir. yaklaşı 50 cm boyunda 0,7 mm kalınlığında emaye bakır teli yine 7mm kalınlığında bir silindirik cisim üzerinde boşluksuz sarın . SOnra cismi çıkartın işte size bir spiral anten.
Bu tip antenlerin yönü daha kolay ayarlanabiliyor.
Genellikle deney boardlarında kuruan devreler çok iyi netice vermiyor.
Sebebide anten empedansının 50 ohm civarında tutturulması zorunluluğu. Bu iş için anten terminali modülden 1-2 cm uzağa ve mümkünse boş bir alana koyulmalı ve PCB de bu terminalin ve uzatma kanalının etrafını GND ile Powerplane yapacakşekilde sarılmalıdır. BU şekilde hazırlanan PCB lerde RF daha iyi netice vermektedir.

Diğer taraftan veri alış verişinde her zaman söylüyorum. Pic lerin hazır USART portları bulunmaktadır. Özellikle alıcı kısmında USART kesmesi kullanarak alış veriş yaparsanız veri kaçırma probleminiz ortadan kalkar.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

raltundal

çok güzel yazmışsınız ete hocam.örnek bir kodla konuyu tamamlamanız mümkünmü. iyi çalışmalar,

ete

Her şeyi açık olarak anlatmama rağmen yinede kod istiyorsunuz.
Biraz gayret. İşin kolayına kaçmayın her zaman. Daima işin mantığını öğrenmeye çalışın.
Tabiiki,  bakarak öğrenmek kadar bilgiyi pekiştiren bir şey yoktur. Birisi anlatır anlatır durur. Kafanızda bir şeyler oturmaya başlar ama bilgi yerleşemez. Ne zamanki örneği görürsünüz haaaaa böyleymiş dersiniz ve o anda her şey kafaya yerleşir. Bunu düşünerek bu örnekleri veriyorum. Amaaa yinede tam programı vermiyorum. Gerisini siz başarın. Zaten ne kaldıki geriye. Biraz ayar biraz ekran vs. Programın ana temasını zaten veriyorum.

Aşağıda verdiğim örneklerde bir alıcı birde verici sisteme ait kod örnekleri göreceksiniz.  Umarım başaramayanlar bu sefer başarırlar.

İlk Örneğimiz Verici sistemine ait olacak. Burada 3 değişik bilgiyi diğer tarafa aktarmaya çalışacağız. Aktaracağımız bilgiler SURE, SAYI ve SAAT olsun.
Her biri 8 bitlik bilgi bunların.
Diğer tarafta (ALICI) kısmında ise aynı değişkenlerle bu bilgileri alacağız.

...
Symbol RF=PortA.0
..

basla:
...
....
gosub  gonder
pause 100
goto basla

gonder:
GONDER:
       serout2 RF,188, [REP$55\8,REP$55\8,REP$55\8,REP$55\8,REP$55\8] 'uyandirma sinyali preambl
       serout2 RF,188, [REP$00\8,REP$00\8,REP$00\8,REP$00\8,REP$00\8]
       serout2 RF,188, [REP$FF\8,REP$FF\8,REP$FF\8,REP$FF\8,REP$FF\8]
       RF=0:RF=1  'stop ve start bitleri
       serout2 dta,188, ["E","T","E", sure, sayi, saat]
       serout2 dta,188, ["E","T","E", sure, sayi, saat]
       serout2 dta,188, ["E","T","E", sure, sayi, saat]
       pause 50       
return

RF,  haberleşme pini ve 188 ise 4800 baud hıza tekabül eden mode sayısıdır. Baştaki ilk 3 satır karşı tarafı uyandırma için kullanılan adınada preambl denilen sinyaldir.

Şimdi gelelim alıcı kısmına;

symbol RF=portA.0
..
Basla:

serin2 RF,188 , [WAIT("ETE"), sure, sayi, saat]

lcdout $fe,2,"sure=",dec sure,"  sayi=",dec sayi
lcdout $fe,$c0,"saat:",dec saat

goto basla


Bildiğiniz gibi pek çok pic de USART denilen donanımsal seri port bulunmaktadır. Bu portun seri bilgi alışverişinde pek çok avantajı bulunmaktadır.  Özellikle senkron (yada gönderilen bilgiyi kaçırmama) gerektiren yerlerde bu portun kullanılması son derece faydalı olmaktadır. Pic16F628 - 16F876 - 16F877 gibi mcu lara bakarsanız bazı pinlerde TX RX gibi ilave adlandırmalar bulunmaktadır. İşte bu pinler USART portuna bağlı olarak çalışırlar. Ykarıda verdiğimiz örneği bu sefer USART pinleri ve alıcı kısmında da USART kesmesi kullanarak yapacağız. Bu sistemde bilgi kaçırma olayı olası en minimum seviyededir.

Örneğimizi 16F628 için vereceğim. Bu mcu da TX pini PortB.2 de RX pini ise PortB.1 pininde dir. Haberleşme hızımız bu sefer 2400 baud olacak ve bu hızı define komutu ile verilecektir.
Verici kısmında kesme kullanmaya gerek yok. Bu nedenle yalnızca TX pinini gönderme amaçlı kullanacağız. Alıcı kısmında ise USART kesmesi kullanacağız.

İşte örneklerimiz. Önce Verici programımız;
...
...
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

SYMBOL RF=PORTB.2
...
...
BASLA:
  ....
....
gosub gonder
pause 50
goto basla

gonder:
       HSEROUT [REP$55\8,REP$55\8,REP$55\8,REP$55\8,REP$55\8] 'uyandirma sinyali preambl
       HSEROUT [REP$00\8,REP$00\8,REP$00\8,REP$00\8,REP$00\8]
       HSEROUT [REP$FF\8,REP$FF\8,REP$FF\8,REP$FF\8,REP$FF\8]
       RF=0:RF=1  'stop ve start bitleri
       HSEROUT ["E","T","E",sure, sayi, saat]
       HSEROUT ["E","T","E",sure, sayi, saat]
       HSEROUT ["E","T","E",sure, sayi, saat]
       pause 50       
return


Şimdi de Alıcı programımızı verelim;

....
...
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

Symbol RF=PortB.1
SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit

temp var byte
...
ON INTERRUPT GOTO KESME
RCIE=1
PEIE=1
GIE=1
...
BASLA:
lcdout $fe,2,"sure=",dec sure, "  sayi=",dec sayi
lcdout $fe,$c0,"saat:",dec saat
for I=1 to 1000
  pauseus 2
next
goto basla

DISABLE
KESME:
    GIE=0
    HSERIN , [WAIT("ETE"),Sure, Sayi, Saat]  
    TEMP=RCREG 
    GIE=1
    Resume
    enable   
    
    end


Herkese kolay gelsin

.............E T E...................
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

hatmeto

hocam, klavyene sağlık,

veri gönderip almada bazı problemlerimiz vardı. Nerede yanlış yaptığımızı buldum. teşekkürler..

Ayrıca bir sorum var 433 Mhz lik alıcı vericilerin etkili mesafesi nedir.? Daha yüksek mesafeli alıcı verici var mıdır?
Bir admin ataasözü derki: "biliyorsan paylaş mod yapsınlar. bilmiyorsan sus banlamasınlar"

ete

Bu frekansta yasal sınır 10mw. Bu vericilerin bir kısmı açık havada 300m ye kadar çalışabiliyorlar. Kapalı ortamda (bol odalı binalarda) 30-40 m dolayında olduğu belirtiliyor. Ben yaklaşık 40 m yi test edebildim. Sorunsuz çalışıyor.
Verilen sınırlar doğrudur.
Bildiğim kadarı ile Udea nın 1-2 km çalışan transreceiver leri var. Sitesine girerek modullerin teknik özelliklerine bakabilirsiniz.

Daha yüksek mesafeler için booster denilen ilaveler gerekiyor. Ancak dediğim gibi kesinlikle yasal değil.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mustafa48

Birde şemasını verebilseydiniz muazzam olurdu valla
Emeğinize teşekkürler

Lütfi AYYILDIZ

@ETE hocam;
Daha önce rf modüllerle baya bi uğraştım.Yazınızı okuduktan sonra birde usart ile denedim. Fakat bir türlü usart ile çalıştıramadım. PIC sürekli kesme de kalıyor.Kullandığım modül utr c-12u. Rx pini ile modülü ayırdığım zaman program normal işleyişine devam ediyor. Parazitler PIC i kesmeden çıkarmıyor.

i-rot

Alıntı yapılan: "cobra07"@ETE hocam;
Daha önce rf modüllerle baya bi uğraştım.Yazınızı okuduktan sonra birde usart ile denedim. Fakat bir türlü usart ile çalıştıramadım. PIC sürekli kesme de kalıyor.Kullandığım modül utr c-12u. Rx pini ile modülü ayırdığım zaman program normal işleyişine devam ediyor. Parazitler PIC i kesmeden çıkarmıyor.

aynı sorun bende de oluyor.
şöyle bir yöntem düşndüm
aslında kesmede kalmasının sebebi timeout süresi belirlemek diye düşünüyorum.

ben kendi devremi şöyle bir mantıkla yaptım(lcd devresi)

start labeli ile başlıyor epromdaki değişkenler okunuyor.ekrana yazdırılıyor.vs vs

sonra bir 2o sn kadar bekleme koydum.ondan sonra rf kitini high yaptım(rfnin beslemesi pin çıkışından) data girişini int pinine bağladım.
yani program başlıyor 20 sn sonra rfmodul çalışıyor.datayı alıyor haliyle.kesme oluşuyor.veri bekliyor.belirli sürede veri gelmese bağlantı zaman aşımına uğruyor.rfnin beslemesini kesiyor.sonra dön babam başa :)

büyük ihtimal çoğunlukla kullanılan yöntem budur ama ben deneme yanılma sonucu buldum bunu.