RF ile seri iletişimde gürültüyü izole etmek

kudretuzuner

Paylaşımcı üye
Katılım
28 Tem 2009
Mesajlar
912
Puanları
131
Merhaba
RF konusuna yeni başladım.Tasarımı tamamen bana ait olan bir kart yaptım.Uart olarak PC'den PIC'e PIC'ten de PC'ye data paketlerini yollayabiliyorum.PC'den PIC'e Hex'31' ve Hex'30' yollayıp PIC'te çıkış olarak ayarladığım ledlerde 0001 olarak görüp sonra 0000 oluyor.(yanıp sönüyor)Bu işlemi,aradaki kabloyu kaldırıp RF ile yapayım dedim.Brotoboarda kurdum,sistem sanki kablo bağlı gibi çalıştı.Buradan anladığım,yolladığım B'00110001' ve B'00110000' paketi yollamış oldum.Defalarca denedim hiç sorun yok.Ne zaman ki vericinin beslemesini kesiyorum ledler kırpışmaya başlıyor.Beslemeyi verince kırpışma duruyor ve sanki data bekliyor.Alıcıyı aliminyum folyo ile şaseledim ama sonuç aynı çünkü anten var gürültüyü kapıyor.Değişik forumlardan edindiğim bilgi yollanacak dataların bir protokol üzerinden yollanması olmalıymış.
Aşağıda yazılımın PC'den PIC'e giden kısmını veriyorum.PORTA ya data geldikten sonra W geçici registere B'10101010' yani AA eşitleyip XORWF'i PORTA ile karşılaştırıyor zero flakın sıfır olup olmadığını kontrol ediyorum.Burada sormak istediğim soru bu tarz protokoller hazırlanırken kaç adet kontrol byte yollanmalı bir de daha basit olarak bana mantığını anlatabilirseniz çok memnun olacağım.Teşekkürler.
 
seri paket gönderirken byte sınırı yoktur

verici enerjisini kesince alıcıdaki ledlerin kırpışması sebebi havada yeteri kadar rf kirliliği olmasıdır. byte olarak gönderip beklesen bile yine aynı sorun olacaktır. bunun çözümü

vericiden mesela "RFTP,BYTE1,BYTE2,BYTE3,chksmhbyte,chksmlbyte,ENDCHAR" bytelarını gönderelim

burada RFTP rf test protokol yazsının baş harfleri bu bizim senkron karakterlerimiz olsun

byte1 içinde 8adet led konumu verelim,byte2 de 8 adet role vs... endcharda "&" karakteri olsun. chksmbyte= byte1+byte2+byte3 olacak şekilde topladık (burada chksmbyte 16bit olacak) sonra paketi gönderiyoruz.paketi göndermeden önce

birbirine ardışık olarak 101010101010101010101010 bilgisi (preamble) bu rf modullerin donanım senkronizasyonu için neredeyse şarttır. bunun için "U" harfinden paketin en başına 5 adet "UUUUU" koyabiirsin.

yani paket :

"UUUUURFPT,BYTE1,BYTE2,BYTE3,CSUMHBYTE,CSUMLBYTE,ENDCHAR " olacak

fakat iletişim hızının 2400 bps yi geçmese iyi olur. (rf modullerin 433 mhz olduğunu varsayıyorum)

Alıcıda ise preamble kısmına hiç bakmadan sadece RFPT karakterleri beklenir bunlar
aındıktan sonra tekrar burada csum=byte+byte2+byte3 yapılır. gelen csum ile burda toplanan csum doğru ise paket başarılı bir şekilde alınmıştır.güvenle işleme aabilirsin demektir.

buradaki RFPT karakterlerinin havadan art arda 2400bps hızında gelme olasıığı çok düşüktür gelse bile paket yapısı alıcı rutinine uymaz. csum tutmaz ve işlem yapılmaz.
oldukça güvenlidir.
umarım yardımcı olmuşumdur
 
Merhaba
Yanıtınız için çok teşekkür ederim.Verdiğiniz bilgiler gerçekten işime yaradı.Ben sorunu PIC'teki yazılım ile aştım.Kartımda ledlerin tamamen off halinde olması lazım.Data gelince yanıp bir süre bekleyip sonra sönmesi gerekiyor.Basit bir komut ile(CLRF PORTA) ile sürekli silip gelen datayı seçiyorum.Seçili data ile de işlemi gerçekleştiriyorum.Tekrar teşekkürler.
 
rica ederim kudret bey.
 

Forum istatistikleri

Konular
129,880
Mesajlar
931,002
Kullanıcılar
452,758
Son üye
aprnck

Yeni konular

Geri
Üst