RF Alıcı-Verici Modüllerinizi Test Edin!

      RF Alıcı-Verici Modüllerinizi Test Edin! için 66 yorum

Çok yaygın olarak kullanılan en basit RF alıcı-verici modülleri ilk defa kullanımında bazı zorluklar olabilmektedir. Ben bu zamana kadar UDEA’nın atx-arx ve Keymark’ın modüllerini kullandım.  Bu basit modüllerin en büyük sıkıntısı uyku(!), şöyle ki veri göndermediğimiz zaman alıcı modül gelecek ilk veri için hazırlıksız durumda oluyor ve gelen ilk birkaç byte ı doğru alamıyor. Verimizi kendisine sağlıklı bir şekilde ulaştırmak için önce alıcıyı uyandırmak ve aralık vermeden bilgiyi göndermek gerekiyor. Bunun  için verimizi göndermeden önce önden bir takım işaretler(uyandırma işareti) gönderiyoruz. UDEA nın uygulama notlarında hem bu işlem yapılmış hem de senkronizasyon için bazı düzenlemeler yapılmış. Keymark’tan ise ses yok, katalog bilgisi bile zor bulunuyor.

Solda udea, sağda keymark çifti.
Geçtiğimiz günlerde bu iki modül için de minimum test devresi ve minimum test yazılımı oluşturmaya karar verdim ve iki modül için de denedim, denemeler başarılı. Modülleri test etme aşamasına gelmeden önce donanım ile alakalı problemleri aşmış olmamız gerekiyor, devrenizi kurup son haline getirdiğinize kanaat getirdikten sonra tüm gerilimleri voltmetrenizle kontrol ettiniz mi? Keymark modüller için verici besleme geriliminin 3V olduğuna emin misiniz? Her iki(alıcı-verici) devre için de besleme gerilimlerinin iyi regüle edilmiş olduğuna emin misiniz?

Modüller ASK modülasyonu kullanmaktadır, yani data pini lojik1 olduğunda RF işaret var, lojik 0 olduğunda RF işaret yok.

Eğer uzaktan kontrol etmek istediğiniz elemanlar led, röle gibi bir bitle kontrol edilecek elemanlar ise PIC kullanmaksızın PT2262-PT2272 çiftini kullanarak rf modüller üzerinden güvenli bir şekilde veri gönderebilirsiniz.

Gelelim kendi test devremize, test devremizin verici tarafında ‘A’ veya ‘B’ verilerini göndereceğiz alıcı tarafta da aldığımız veriyi kontrol edeceğiz. Dolayısıyla her iki tarafta da PIC olacak, kutumda 16F628(verici) ve 16F628A(alıcı) vardı ben onları kullandım. Kodları diğer pic lere uyarlayabilirsiniz.

Testimiz şöyle:
alici.hex ve verici.hex dosyaları uygun PIC lere yüklendiyse şemadan da takip edebileceğiniz gibi:
Alıcı tarafta A0 ve A1 pinlerine bağlı iki ledimiz var, bu ledler şuna göre yanıyor: Eğer son gelen veri ‘A’ ise A1 pinine bağlı led yanacak, eğer son gelen veri ‘B’ ise A0 pinine bağlı led yanacak. Verici tarafta ise B4 ve B5 pinlerinden en fazla bir tanesini toprağa çekeceğiz. Eğer B4 pini toprakta B5 pini VDDde ise ‘A’ gönderiyoruz, B4 pini VDDde B5 pini toprakta ise ‘B’ gönderiyoruz. Bu işlem için “buton” kullanmayalım, boşta bıraktığımız kablolarla istediğimiz pini toprağa çekme işlemi yapalım. Yapılacak nihai işlem bir pini toprakta diğer pini VDDde bırakmak ve test için toprak-VDD sırasını değiştirmek. Böylece herhangi bir durumda (‘A’ gönderirken veya ‘B’ gönderirken) verimizi kısa bir sürelik değil sürekli gönderiyor olacağız,  alıcımızı veri yağmuruna tutacağız. Bu durumda alıcı modülün uyanmama, geç kalma gibi bir sorunu olmayacak, amacımız test yapmak. Alıcı için verimizi alabileceği en kesin durumu sağlamış olduk.
Her testin bir geçme-kalma şartı vardır, bizim testimizin şartı ledlerin yanıyor olması değildir, gönderdiğiniz veriyi değiştirdiğinizde alıcıda yanan ledin değişmesidir. Yani devrenizin doğru değişikliğe doğru cevabı vermesidir. Nitekim alıcıdaki ledlerin yanması çok olası bir durum, şöyle ki: verici kısmı çalıştırmadan önce alıcı kısmı çalıştırın, ne görüyorsunuz? Bir süre sonra ‘A’ verisine ait led yandı veya ‘B’ verisine ait led yandı… Bu verileri bizim göndermediğimiz kesin(verici devrenin beslemesi bağlanmadı) peki kim gönderiyor? Nasıl olur da biz veri göndermeden alıcımız sanki doğru verileri almış gibi ledleri yakıyor!
Bu bir şekilde oluyor arkadaşlar, çevreden gelen etkiler(karışım, enterferans) modülleri yanlış yorumlatabiliyor. Bu gözlem modüllerin ne gibi yanlış anlaşılmalara yol açabileceği açısından faydalı bir gözlem(verici devreyi çalıştırmadan alıcı devreyi çalıştırıp olup biteni gözleme).
Bu yüzden modülleri test ederken ledlerin yanması değil de doğru değişikliğe doğru tepkiyi vermelerini görmek gerekiyor.
Devreyi proteusta çizip simüle ettim(kablolu haliyle), kurduğum devre simülasyon ortamındakinden farksız sadece kablo yerine modülleri bağladım:

Bir de yazarken aklıma geldi keymark modülleri birbirinden 1m kadar uzaklaştırıp denemekte fayda olabilir. Son olarak modüllerimizi yakın mesafede(1-2 m) test ettiğimiz için anten bağlamaksızın çalıştırabiliyoruz.

verici.c

//UDEA ve Keymark RF atx arx alıcı-verici modüller için test programı, 6 Mayıs 2008
//verici.c

#include <16f628.H>
#fuses INTRC_IO, NOMCLR, NOPROTECT, NOWDT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=600, xmit=PIN_B2, rcv=PIN_B1)

void main(){
output_high(pin_b3); //calisma gostergesi
while(1){
if(!input(pin_b4) && input(pin_b5)){
putc('A');
}
if(!input(pin_b5) && input(pin_b4)){
putc('B');
}

}
}

alici.c

//UDEA ve Keymark RF atx arx alıcı-verici modüller için test programı, 6 Mayıs 2008
//alici.c
#include <16f628A.H>
#fuses INTRC_IO, NOMCLR, NOPROTECT, NOWDT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=600, xmit=PIN_B2, rcv=PIN_B1)

void main(){
char a=0;
output_low(pin_a0); //cikislari temizle
output_low(pin_a1);
output_high(pin_b3); //calisma gostergesi

while(1){
a=getc();
if(a=='A'){
output_high(pin_a1);
output_low(pin_a0);
}
if(a=='B'){
output_high(pin_a0);
output_low(pin_a1);
}

}
}

Çalışmadan resim ve videolar(pek anlaşılır çekilmemiş):

UDEA modül video

Keymark modül video

İlgili tüm dosyalar:
Simülasyon(proteus) + kod(verici.c, alici.c, pre_verici.c, pre_alici.c, *.hex)

Modüllerin Katalogları (UDEA ve Keymark için)

66 thoughts on “RF Alıcı-Verici Modüllerinizi Test Edin!

  1. gevv

    test önemli elektronik şanş işi çok kalitesiz parçalar var piyasada yada beklemiş atx ve arx modüller ile uğraşan kişilerin bir köşede bulundurmaları gereken bir devre Teşekkürler

    Reply
  2. ibrahim

    Fatih bey, Açık olmadığını düşüdüğünüz bilgileri, ürünlerin kılavuzuna ekliyeceğiz. Verilen bilgiler için teşekkür ederiz. Not: ARX ve ATX kodları udea tarafından üretilmekte olan ASK modüllerinden bir alıcı ve bir vericinin model ismidir.

    Reply
  3. Fatih

    Öncelikle yorumunuz için ben teşekkür ederim. arx-atx modülleriniz oldukça yaygın olduğundan selpak-peçete misali modülleri arx-atx olarak adlandırmışım, gerekli düzeltmeleri yaptım. Bence kılavuz ve örnek kodlar modüllerin kullanılması için gayet yeterli, bir yerde ASK ama OOK mi diye sormuştum ancak bu bilgi modüllerin kullanılmasıyla pek de alakalı değil. Size iyi çalışmalar, başarılar dilerim. Saygılar.

    Reply
  4. ibrahim köroğlu

    bu keymark modüllerin analog ve dijital olanları varmış. bunların analogmu dijital mi olduğunu nerden anlıycaz yani ask mi fsk mı. elimde modül var ama ask olduğundan emin diğilim nerden örenebilirim üstünde yazmıyor.

    Reply
  5. Fatih

    Modüllerinizin katalogundan(datasheeti) bu bilgileri öğrenebilirsiniz. Katalogları bulmak için modülünüzün üzerinde yazan ismi googleda arayabilirsiniz.

    Reply
  6. enes

    Simülasyon(proteus) + kod(verici.c, alici.c, pre_verici.c, pre_alici.c, *.hex)
    dosyalara ulaşa mıyorum yardım edermisiniz

    Reply
  7. admin

    Bağlantıyı yeniledim, kusura bakmayınız, uyardığınız için teşekkür ederim. İyi çalışmalar dilerim.

    Reply
  8. ENGİN KANAT

    FATİH BEY KOLAY GELSİN, ESKİ BİR KONU ANCAK BANA YARDIMCI OLABİLECEĞİNİZİ DÜŞÜNDÜM RF İLETİŞİMDE BİR DEN FAZLA VERİCİDE VE BİR ALICIDA DOĞRU VE TEMİZ BİR İLETİŞİM SAĞLAYABİLMEK İÇİN BANA NE ÖNERİRSİNİZ? BEN BU BAŞLANGIÇ BİTİNİ BİTİŞ BİTİNİ İLETEN VE ALAN ARASINDA NASIL KULLANACAĞIM
    NOT : C DİLİNİ BİLMİYORUM BASIC İLE YARDIMCI OLURSANIZ SEVİNİRİM
    TEŞEKKÜRLER

    Reply
  9. Hasan

    Arkadaşlar,
    Şu “&amp” işlevini kısaca açıklayacak bir arkadaş var mı acaba.
    İnternette bi aratma yaptım. Bilgi kirliliğinden hiç birşey bulamadım.
    Programı biraz değiştirerek kullanmak istiyorum ama bu mantığı anlayamadım.

    void main(){
    output_high(pin_b3); //calisma gostergesi
    while(1){
    if(!input(pin_b4) && input(pin_b5)){
    putc(‘A’);
    }
    if(!input(pin_b5) && input(pin_b4)){
    putc(‘B’);
    }

    }
    }

    Reply
  10. admin

    “&amp” ler kullandığım kod editörünün hatası, kodda “&amp” yerine & olması gerekiyor. Şimdi düzelttim. Mantığı şöyle: B4 ve B5 pinlerini biz kontrol ediyoruz. B4 pini lojik0, B5 pini lojik1 yaptığımızda A verisini gönderiyoruz, tam tersi durumda B verisini gönderiyoruz. İyi çalışmalar.

    Reply
  11. Selim GÖREN

    Merhabalar. Ben rf alıcı vericiler hakkında bi deneyimim olsun istiyorum. bu yüzden bir çift almayı düşünüyorum. Sizce bu yukarıdaki markalardan birinimii tercih edeyim?+maliyet olarak tahmini ne kadardır?

    Reply
  12. admin

    Ben keymark modüllerin alıcı-verici çiftini 10 TL ye almıştım. UDEA lar daha pahallı, ikisi de kullanılabilir.

    Reply
  13. gökay

    Fatih bey elim de rf alıcı -verici modül var. sizin test devresini kurdum.Bu modülleri ilk denememde sizin dediğiniz gibi ben bilgi yollamasam bile alıcı taraf kendi başına led yakıp söndürüyordu.Bende alıcıdaki trimpotun ayarını oynadım şimdi ne rastgele yanıyor, ne de benim yolladığıma göre yoksa alıcı modülüm bozuldu mu?Bir sorumda alıcıdaki o bobin sarılı trimpotun görevi nedir?

    cevap yazarsanız sevinirim.kolay gelsin

    Reply
  14. admin

    Alıcı üzerindeki bobin frekans ayarı için, alıcı modülü 433 MHz veya 315 MHz bandında kullanmak isteyenler olabildiği için alıcı modüllere öyle bir seçenek koyuyorlar diye biliyorum. O bobinin ayarıyla hiç oynamamak gerekiyor, aldığınızda 433 MHz e ayarlıdır. Modül bozulmamıştır, bobin ayarı düzeltilebilir tabii ki.

    Evet, veri göndermesek de ledler yanabiliyor, bu durumun önüne öncü veri göndererek geçiyoruz ancak test devresinde amaç sadece çalıştığını anlamak. O test devresinde modüllerin çalıştığını anlamak için doğru değişikliğe doğru cevabı test etmeniz gerekiyor.

    Yerinizde olsaydım test devresini kurar ve bobinin değerini küçük küçük çevirerek eski değerini bulmaya çalışırdım veya şöyle bir şey tavsiye ediliyor: Alıcının çıkışını not kapısından geçirip mini hoparlöre bağlayınız. 433 MHz lik vericinizden de rastgele bilgi gönderiniz. Bobini çevirerek hoparlörden duyduğunuz sesin en şiddetli olduğu yeri bulunuz, ben bu yöntemi hiç denemedim.

    En olmadı yeni bir çift modül alıp bobiniyle hiç oynamadan test devresini çalıştırırsınız sonra eski ayarı bozulmuş modülü ayarlayabilirsiniz.
    İyi çalışmalar.

    Reply
  15. murat örs

    arkadaşlar verici modulden gönderdiğiniz dataları alcınıza dogru aktarmanız için checksum kullanmanız gerekiyor aksi takdirde havadan gelen datalar ile ledleriniz halen yanıp sönmeye devam edecektir.ve ayrıca önce donanım senkronu için preamble (“UUUUU” ve sonra soft sencron için herhangi bir karakter gönderin ve alıcıda sürekli bu karakteri bekleyin.karakter gelir gelmez diğer dataları alın ve csum kontrolunyapın

    Reply
  16. ONUR ÇITIR

    merhabalar.ben geçenlerde bitirme tezim için udea firmasının ufm-a12wpa modem modülünü aldım,sanırım bu modül çoğu işi yapıyor diğer modüllerde ayarlamamız gereken,bu modülü karşılıklı data alış verişi için kullanmam esnasında nasıl bir yol izlemeliyim.hi-tech c dili düşünüyorum ama pic basic daha mı kolay olur ve de preamable synchronization falan göndermem gerekmiyor sanırım.yardımcı olursanız sevinirim.iyi günler diliyorum

    Reply
  17. Çetin

    Merhabalar;
    2 ayrı rf vericiden tek bir alıcıyla bilgi almaya çalışıyorum.
    her 2 cihazıda ayrı ayrı test ettiğimde problem yok,
    ama aynı anda çalıştıklarında alıcı tarafındaki pic kilitleniyor.
    rf setim keymark tipi sanırım.
    pic te 2 ayrı alıcı ilede almaya çalıştım yine olmuyor.
    farklı frekanslarda da denedim yine başarılı olamadı

    ALICI Tarafında
    serin2 porta.0,1646,[wait(“b1”),y1]
    serin2 porta.0,84,[wait(“a1”),x1]

    VERICI Tarafında
    serout2 portc.6,1646,[REP$AA5,REP$005,REP$FF5] ‘uyandırma işareti yolla
    serout2 portc.6,1646,[(“b”),(“1”),toplam]
    diğer vericide
    serout2 portc.6,84,[REP$AA5,REP$005,REP$FF5] ‘uyandırma işareti yolla
    serout2 portc.6,84,[(“a”),(“1”),toplam]

    şeklinde pic programları çalışıyor, yardımcı olabilirseniz çok sevinirim.

    Reply
  18. Ahmet

    ben bu konu merak ediyorum araştırıyorum ama ya bazılarını anlayamadım
    1 radyo frakans vericisi ve alıcını nereden alacagım
    2 bunu bilgisayara hangi porttan baglayacagım
    3 dil olarak c# da visual stdio 2005 de yazsak hangi kod ları yazacagız
    4 bu devreyi kendileri çizenler nasıl çiziyorlar
    5 rf verici alıcı ile bildigimiz radyodan dinleyebilir miyiz
    6 rf verici alıcının her türlü veri transveri yapabilirmiyiz
    7 rf verici alıcı açık alan dan kaç metre ye kadar çekiyor
    şimdiden teşekkür aderim

    Reply
  19. admin

    1 radyo frakans vericisi ve alıcını nereden alacagım
    – Çeşitli kalitede ve türde RF modüller İstanbul Karaköy den, Ankara Konya Sokak tan veya internetten satış yapan sitelerden alınabilir
    2 bunu bilgisayara hangi porttan baglayacagım
    – UART ile haberleşen modüller için bilgisayarınızın seri portunu(RS232 portunu) UART a dönüştürüp kullanabilirsiniz
    3 dil olarak c# da visual stdio 2005 de yazsak hangi kod ları yazacagız
    – C# da serial port nesnesi var
    4 bu devreyi kendileri çizenler nasıl çiziyorlar

    5 rf verici alıcı ile bildigimiz radyodan dinleyebilir miyiz
    – Bildiğimiz radyolarda fm radyo bandında yayın yapan frekans modülasyonlu ve AM radyo bandında yayın yapan genlik modülasyonu işaretler alınabilir, yaygın olarak kullandığımız modüller 433 MHz de çalıştığından dinleyemezsiniz.
    6 rf verici alıcının her türlü veri transveri yapabilirmiyiz
    – Modüllerin azami hızları bellidir, hız izin verdiği sürece her şeyi gönderebiliriz.
    7 rf verici alıcı açık alan dan kaç metre ye kadar çekiyor
    – Modülün çıkış gücüne göre değişir, güç-menzil veremeyeceğim.

    Reply
  20. fikret cüre

    kardeş 16f877 içinde aşağıdaki kodlar geçerli olur mu yada nasıl bir değişiklik yaparım yardımcı olursan çok tşk ederim

    #fuses INTRC_IO, NOMCLR, NOPROTECT, NOWDT, NOLVP
    #use delay(clock=4000000)
    #use rs232(baud=600, xmit=PIN_B2, rcv=PIN_B1)

    Reply
  21. admin

    INTRC_IO dahili osilatörü aktif etmek için ancak 16F877 de dahili osilatör olmadığından geçersiz bir fuse. 4MHz veya 20MHz kristal bağlamalısınız. Bu uygulamada 4 MHz bağlayabilirsiniz. Ayrıca 16F877 de NOMCLR de geçersiz bir fuse.
    Özetle; 16F877 için aşağıdaki fuse satırını yazdıktan sonra 4MHz kristal bağlayın ve MCLR pinini 10K direnç ile 5V a bağlayın.
    #fuses XT, NOPROTECT, NOWDT, NOLVP

    İyi çalışamalar.

    Reply
  22. fikret cüre

    her iki ledi yakmak istesek iki girişi de 1 yapmamız mı gerekiyor yoksa c dosyasını mı değiştirmemiz lazım hocam

    Reply
  23. admin

    Evet, kodda düzenleme yapmak gerekir,
    if(!input(pin_b4) && input(pin_b5)){
    şeklinde yazıldığından iki girişi de 1 yaparsanız ne A ne de B datası gönderilir.

    Reply
  24. admin

    putc ile TX pininden bir byte veri gönderilir, mesela putc(degisken); degiskeni TX pinininden dışarı gönderir. getc ise RX pininden gelen bir veriyi herhangi bir değişkene atamak amacıyla kullanılır yani gelen veriyi almak için kullanılır. Veri geldiğinde -eğer ayarlanırsa- kesme altprogramı çalışır, kesme altprogramı içerisinde
    gelen_data=getc(); şeklinde veriyi gelen_data değişkenine yazabilirsin. Bu tarz bilgiler için CCS C nin helpinden de faydalanabilirsin. picproje.org forumlarında örnek kodlar da verilmişti. İyi çalışmalar.

    Reply
  25. fikret cüre

    hocam verici için

    /*Fikret Cüre – Verici Devre*/
    #include
    #fuses XT,WDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NODEBUG,NOCPD
    #use delay (clock=4000000)
    #use fast_io(b)
    #use fast_io(a)
    #use fast_io(c)
    #use rs232(baud=600, xmit=PIN_c6, rcv=PIN_c7)

    void main(){
    output_high(pin_b3); //calisma gostergesi
    while(1){
    if(!input(pin_b4) && input(pin_b5)){
    putc(‘A’);
    }
    if(!input(pin_b5) && input(pin_b4)){
    putc(‘B’);
    }

    }
    }

    alıcı için ise

    /*Fikret Cüre – Alıcı Devre*/
    #include
    #fuses XT,WDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NODEBUG,NOCPD
    #use delay (clock=4000000)
    #use fast_io(b)
    #use fast_io(a)
    #use fast_io(c)
    #use rs232(baud=600, xmit=PIN_c6, rcv=PIN_c7)

    void main(){
    char a=0;
    output_low(pin_a0); //cikislari temizle
    output_low(pin_a1);
    output_high(pin_b3); //calisma gostergesi

    while(1){
    a=getc();
    if(a==’A’){
    output_high(pin_a1);
    output_low(pin_a0);
    }
    if(a==’B’){
    output_high(pin_a0);
    output_low(pin_a1);
    }

    }
    }

    kodu yazdım ama çalışmadı nerede sorun vardır sizce ?

    isis çizimi de şu şekilde : http://fikretcure.clan.su/isis877.jpg

    Reply
  26. kartal

    iyi günler öncelikle elinize sağlık çok güzel bir paylaşım teşekkürler
    Bende bu devreyi aynen yapmak istiyorum sıfırdan tüm malzemelerin listesini yazabilir misiniz?

    Reply
  27. admin

    Merhaba, çok az malzeme ile bu test devresini kurabilirsiniz, malzemeler teste özel değil, mikrodenetleyicilerin çalışması yeterli, yine de kullanılan malzemeleri yazayım:
    RF alıcı ve verici modül
    2 adet PIC16F628(veya PIC16F628A),
    4 adet led,
    2 adet 220 ohm,
    2 adet 10kohm,
    2 adet 7805 regülatör(5V besleme için ),
    İyi çalışmalar.

    Reply
  28. fikret cüre

    Aynı anda birden faz data aktarımı olabilir mi ? Yani Verici devreden A ve B butonlarına aynı anda basıldığı zaman alıcı devredeki 1. ve 2. ledleri aynı anda yakabilir miyim ?

    Reply
  29. emin

    Merhaba. Karşılıklı iletişim kurabilen bir sistem tasarlamam gerekiyor. Aynı işlemciye hem alıcı hem de verici bağlayabilir miyim?

    Reply
  30. ferdem

    Merhaba. Evet bağlanabilir ancak taraflar hem alıcı hem verici olacaksa bu sistem yerine uygun fiyatlı rf tranceiver lar kullanılabilir. Uygun fiyatlı rf tranceiver lar eskiye göre ülkemizde çok daha kolay bulunabilmektedir. İyi çalışmalar.

    Reply
  31. murat

    Fatih hocam merhaba,

    şöyle bir sorunum var benim, rf ile sıcaklık bilgisini iletiyorum. verici tarafında uyandırma ve sencron işareti olarak pre[16]=”UUUUU00000FFFFF” gönderiyorum. ardından 10 kez kontrol işareti + sicaklik bigisini gönderiyorum. alıcı tarafında kontrol işaretine bakmadan gelen tüm dataları ekrana yazdırdığımda sıcaklığında iletildiğini görüyorum aslında ama preamble datasını da ekranda yazdırdığı için çok fazla gürültü oluyor. Bu konuda yardımcı olabilir misiniz? Usart kesmesi içinde kontrol işaretden sonra datayı nasıl okuyup ana programa ileteceğim? teşekkür ederim..

    for(i=0;i<16;i++) //16 karakterli preamble + sencron datası gonderiliyor
    {
    while(!TXIF)
    continue;
    TXREG = pre[i];
    }

    for(i=0;i<10;i++) //C kontrol isareti ve data 10 kez gnderiliyor kesin olsun diye.
    {
    while(!TXIF)
    continue;
    TXREG = 'C'; //kontrol isareti

    while(!TXIF)
    continue;
    TXREG = santigrat;
    //while(!TRMT);
    }

    alıcı tarafında ise usart kesmesi ile datayı okuyorum. usart kesmesi içinde "kontrol işareti geldikten bir sonraki datayı ekrana yazdır" işini beceremedim.

    void interrupt kesme(void)
    {
    if(OERR==1||FERR==1) //overrun veya framing error olusursa
    {
    CREN=0; // Re-enable receiving
    CREN=1;
    hata_flag=1;
    }
    else
    {
    if(RCIF==1&&RCIE==1)
    { data=RCREG;
    if(data=='C') //baslangic isareti=A ise, lcd'de goster
    {
    sicaklik=getch();
    }
    }
    RCIF=0;

    }

    Reply
    1. ferdem

      Merhaba
      data=RCREG;
      if(data==’C’) //baslangic isareti=A ise, lcd’de goster
      satırıyla ‘C’ nin geldiğini kontrol ediyoruz, gelen C ise bize bir sonraki gelecek data lazım.
      sicaklik=getch(); satırıyla bir sonraki data alınmaz çünkü zaten ‘C’ verisinin alındığı durumdayız.
      Birçok yöntem kullanabilirsiniz:
      1) En basitinden C den bir sonraki gelen datayı almak için:
      data=RCREG;
      if(data==’C’) //baslangic isareti=C ise, lcd’de goster
      {
      c_alindi=1;
      return;
      }
      if(c_alindi==1){
      gelen_veri=data;
      c_alindi=0;
      }

      Bu gibi algoritma olarak ben uyandirma+N*oncu+M*data şeklinde gönderiyordum. Alıcı tarafta da diziden_sec şeklinde bir fonksiyon kullanıyordum, sitede örneği vardı. Kablosuz seri haberleşmede hatanın azaltılması adında bir yazı. Oradaki kod size fikir verir. Gelen veriyi illa da byte byte düşünmek zorunda değiliz, bir diziye dizer dizi üzerinde rahat rahat işlem yapar kararı öyle verebiliriz, sonuçta RCIF kesmesiyle veri byte byte geliyor ister uzunca bir diziye dizin karar verin ister sadece prev_data degiskeni kullanarak arka arkaya gelen 2 byte a göre kararı verin. Bunları modüllerin çalışacağı ortamda deneme yaparak görmek lazım. İyi çalışmalar.

      Reply
  32. kadir

    Bende okul için btirme projesi hazırlamaya çalışıyorum UDEA çifti var bende Röle kontrol etmek istiyorum bi kaç siteden yardım almaya çalıştım ama başarılı olamadım test etmem için c# dilinde yardıma ihtiyacım var ayrıca simalasyonda atx ile arx yokk kednileri hazrlayıp kutuphaneye koymş olmaları lazım bende hazırladım koyduım ama çalışmıyor galiba atx ile arx in iç semasını cizip simalasyona eklemem gereklıymış sanırsam bende iç semasını bulamadım o yusden test için bi yazılıma ihtiyacım var sizin test için bi yazılım buldum ama ondada #include <16f628.hgt; bu sekılde yzıyor bende aynı sekılde yazdım ama derlemede problem cıkartıyor & & yazıyor bunlarda derlemede hata gosterıyor nasıl yazmam gerekıyor yardımcı olursanız sevınırım arkadaslar

    Reply
    1. ferdem

      Kadir, 16F628.h yazısında normalde köşeli parantezler olması gerekiyor ancak sitede kullandığım kod içerisinde hatalı görünebiliyor. Normal köşeli parantezler arasına yazılmalı.

      Reply
  33. ahmet

    hocam sizin programınıza buton ekledim sadece ve butona basıldığında bağlı olduğu pini 0 yaptım ve 0 olduğu zaman a göndermesini istedim a ledi yandı .benim istediğim a yandıktan bir süre sonra dursun ve butona bastıgımda tekrar yansın fakat butona bir daha bastığımda veri gidiyor ama led tekrar yanmıyor neden acaba . kodu o şekliyle yazabilirmisiniz acaba ?

    Reply
  34. dilek

    benim elimde txc1 ve alırken uyumlu olduğunu söyledikleri RC-R03A modülleri var msp430 ile alıcıya veri göndermek ve gelen veriye göre led yakmak istiyorum basitçe ama txc1 in data ucuna 3.3 volt la veri yazılır mı ve beslemesi 3.3 volt yapılsa çalışır mı yoksa 3volt şart mı?

    birde kristal veya osilatör ne için gerekli onları kullanmadn yapabilir miyim?

    Reply
  35. ferdem

    TXC1 in datasheet inde besleme için de lojik girişler için de max 3V yazılmış, üzerine geçmeyin. Kristal, bir osilatör türüdür, kullandığınız mikrodenetleyicide dahili osilatör varsa dışarıdan kristal osilatör bağlamak yerine dahili osilatörü kullanabilirsiniz.

    Reply
  36. seda

    ya bişey sorucam verının gonderıp alındıgı kısımdayanı RB1 ile RB2 nin RXd ye baglandıgı kısım var ya o nedır ? sımulasyonda anten mı ne ?

    Reply
  37. ferdem

    Virtual Terminal i diyorsunuz heralde, RXD, TXD, RTS, CTS yazan küçük pencere virtual terminal dir, ISIS içerisinde verileri takip etmek için bir araç. Yukarıda sadece RXD kullanılmış, gelen verileri ekrana yazıyor, TXD sini bağlarsanız klavyeden bastığınız verileri gönderir.

    Reply
  38. ferdem

    Virtual Terminal simülasyon ortamının bir kolaylığı, devrenin çalışmasıyla ilgisi yok, sadece simülasyon ortamında yardımcı bir araç.

    Reply
  39. mehmet

    Merhaba hocam,ben uzaktan kumandalı bir araba yapmak istiyorum,bunun için bir çok çalışma yaptım ama CCS-C de yazdığım kodlarda 1-1023 arasında dört veriyi iletip alamadım, bu benim dönem projem ,bu konuda lütfen yardımcı olun…iyi akşamlar…çok teşekürler

    Reply
  40. görkem

    S.a bende alıcı verici projesi yapıyorum fakat bir sorun çıktı şöyle ki vericideki buton alıcıdaki ledi yakıyor alıcıdaki buton ile de ledi söndürüyorum fakat tekrar vericideki buton ile ledi yakmaya kalktığımda ikinci kez yanmıyor sebebi nedir acaba yardım eden olursa çok sevinirim teşekkürler

    Reply
    1. ferdem

      Görkem başlığı picproje.org da gördüm, ilgilenmeye çalışacağım, fark ettiğim kadarıyla seri veri alma konusuna çalışmalısın. getc() çalıştırıyorsun iki satır koddan sonra tekrar getc() çağırıyorsun, o iki satır işletilirken yeni veri geleceğini düşünüyorsun ki güvenilecek bir yöntem değil! Veriyi kesme ile almalısın, forumda int_rda diye aramalısın, güzel örnekler var, ben de örnek koymuştum, iyi çalışmalar.

      Reply
  41. görkem

    he anladım veriyi kesme ile almak onuda düşündüm öyle yapınca bu sefer buton sönmüyor alıcıdan bastığım buton

    Reply
  42. görkem

    Fatih Bey şimdi ben vericide değişiklik yapmıyorum hatanın alıcıda olduğunu düşünüyorum. Alıcı 2 .kez veriyi almıyor güç kaynağını kesip tekrar verdiğimizde veriyi alıyor işlemler gerçekleşiyor. Benim projem Vericide bir buton var bu butona bastığımızda alıcıdaki led yanıyor. Alıcıdaki buton ile de söndürüyorum. Bu söndürme işlemini kesme ile yaptım. Onun dışında tekrar veri alınması için her şeyi yaptım denedim ama olmuyor. Ya benim bilmediğim bir şey var yada kafam basmadı artık. Siz de bir fikir verirseniz ne yapmam gerektiği hakkında onu uygulayayım teşekkürler. En son olan kodlar böyle ;

    VERİCİ:

    #include “C:UsersGorkemDesktopYeni klasörmain.h”

    void uyan(){ // RF cihzını uyandırmak için
    putc(0x55);
    putc(0x00);
    putc(0xff);

    return;
    }

    void main()
    {

    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);4;
    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
    setup_oscillator(osc_4mhz);
    // TODO: USER CODE!!

    set_tris_a(0b00000001);
    output_a(0x00);
    set_tris_b(0b00000000);
    output_b(0x00);

    while(true)
    {

    if(input(pin_a0)==0)
    {

    uyan();
    putc(‘X’);
    putc(‘A’);
    delay_ms(100);

    }

    }}

    ALICI:

    #include “C:UsersGorkemDesktopYeni klasörmain.h”
    #INT_RDA

    void RDA_kesmesi ()
    {
    set_tris_a(0b00000010);
    set_tris_b(0b00000010);
    if(input(pin_a1)==0)
    output_low(pin_b4);

    }
    char a;
    void main()

    {
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);4;
    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
    setup_oscillator(osc_4mhz);
    set_tris_a(0b00000010);
    set_tris_b(0b00000010);

    while(true)

    {
    if(getc()==’X’)
    {
    a=getc();
    if(a==’A’)
    output_high(pin_b4);
    }
    enable_interrupts(INT_RDA);
    enable_interrupts(GLOBAL);
    }
    }

    Reply
  43. ferdem

    Görkem alıcı tarafta kesmeyi veri almak için kullanmamışsın, RDA kesmesi örneklerine bakmalısın. getc() fonksiyonu sadece RDA rutini içinde olmalı ve sadece bir defa çağırılmalı. RDA olayına güzelce çalışmalı, simülasyon mümkünse kablolu deneme de yapmalısın. Konu INT_RDA, picproje.org da örnekler mevcut.
    Aşağıdaki linke bakabilirsin:
    http://www.picproje.org/index.php/topic,32476.msg232425.html#msg232425
    İyi çalışmalar.

    Reply
  44. görkem

    Teşekkür ederim fatih bey programı değiştirdim yakıyorum ledi sonra elektronik olarak analog söndürüyorum yardımlarınız için sağolun.
    Bir de aklıma takılan şu var hani ISIS simülasyonda kullandığımız udea arx atx 34 yok ya ben şimdi areste devrenin baskı devresini alacağım fakat bunlar olmadığı için onları nasıl ekleyeceğim baskı devreye acaba ?

    Reply
  45. sertan

    Bu modüllerden kullanmayı denedim. 16f84a ile serin2 ve serout2 komutlarını kullanıyorum. 4 ascii karakterli bir bilgiyi kablolu alıp gönderebiliyorum. ancak RX-TX modülleri ile olmadı. modüllerim çalışıyor osiloskop ve sinyal jeneratörü ile denedim. ancak 16f84a ile karakter göndersem de göndermesem de çıkış pini hep +5V seviyesinde. karakter gönderirken seviye biraz düşüyor 800mV kadar. TX modülü ve pic kullanarak sabit frekansılı bir sinyal de gönderebiliyorum ama karakterleri bir türlü gönderemedim. bununla karşılaşan var mı?

    Reply
  46. ferdem

    Sinyal jeneratör osiloskop ikilisi kullanarak 3Khz den düşük kare dalgayı TX e uygulayıp RX tarafında gördünüz ise modüllerle ilgili hiç sorun olmaması gerekir. Geriye PIC yazılımı-donanımı hatası kalıyor, kablolu haberleşiyor demişsiniz geriye baud konusu kalıyor… Baud rate iniz modüller için uygun mu? 600baud deneyin.
    Karakterleri gönderemediğiniz durum şöyle bir durum olabilir mi:
    Gelen karakter ABCD ise led yak, led yanmıyor… Bu karakterleri gönderemediğinizi göstermez, giden karakterler xBCD veya xuCD gibi ilk iki karakter bozuk olarak iletilmiş olabilir, sitedeki yazılarda uyandırma verisi konusundan bahsedildi…
    Kolay gelsin.

    Reply
  47. sertan

    tx girişinde 3V DCden daha düşük bir seviye olursa verici bilgiyi göndermiyor. onu biliyorum. sorun 2kHz test sinyalini güzelce alıcıya gönderirken harf gönderirken tx girişindeki DC seviyenin düşmesi kafamı karıştırıyor. bütün baudrateleri denedim neredeyse. hatta serout2 nin modlarına da ulaştım belki lazım olur insanlara >>http://melabs.com/resources/ser2modes.htm

    gerilimin 3VDC yi geçmemesi kafamı karıştırıyor. TX fazla akım çekiyor da MCU bunu karşılayamadığı için gerilim düşüyor desem? ama ayırınca da gerilim 1V seviyesini geçmiyor.. transistörlü bir yükselteç yaptım yine olmadı ama bir kaç defa alıcı sinyali aldı. ama o kadar… teşekkürler ilginize..

    Reply
  48. ferdem

    PIC veri göndermezken(idle state denir) TX çıkışı (varsayılan ayarla) 5V tadır(VDD neyse,3V3 de olabilir), modülün TX pinini 5V seviyesinde tutar… TX fazla akım çekme durumu… Bunu anlamak için TX pinine 5V luk bir kaynak bağlayın, TX pinine giden akıma bakın, çok düşük olmalı(1mA den düşük olsa gerek). Değilse ve 20mA i geçiyorsa zaten PIC süremez, modülde problem var demektir. Düşük bir akım ise bahsettiğimiz sorun yok demektir.

    Reply
  49. Pingback: PIC16F628A Atx Arx Alıcı Verici Modülleri Test Etmek | Entegre Merkezi

  50. bulut

    ccs c de hazırladığımız bir uygulamayı virtual terminalde gösteriyoruz. fakat bir problemimiz var virtual terminalde bir veriyi aldıktan sonra yeni bir bilgi göstereceğimiz zaman bir öncekinin silinerek gözükmemesini istiyoruz. bunu sağlayan bir kod var mı? yardımcı olursanız sevinirim .şimdiden teşekkürler.

    Reply
  51. Ceyhun

    Merhaba hocam ben bu devrenin aynısını borda kurdum ancak bir türlü iletişimi sağlayamadım. RF modülleri daha yeni aldım ancak çalıştıramıyorum. alıcı modül model :RWS-434N-6 , verici modül model :TWS-BS-3.
    bana yardımcı olur musunuz ?

    Reply

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir