RF Kumanda Sinyali Algılama

Başlatan quarko, 28 Temmuz 2018, 12:38:47

quarko

433Mhz hazır RF kumandaların gönderdiği sinyalleri algılamaya çalışıyorum. Lojik analizörle sinyalleri inceledim. 24bit data, 1 bit parity mevcut anladığım kadarıyla. Lojik 1 veya 0 olması durumu pulse ların süreleri ile alakalı galiba. Uzun pulse lar lojik 1, kısalar lojik 0 gibi. Bu sinyali mcu ile algılayıp hex dataya dönüştürmeye çalışıyorum. Bunu nasıl yapabilirim acaba. Bir fikri veya tecrübesi olan var mı ?


"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

ete

Hazır kumanda sinyallerini algılamak istersen öncelikle o kumandanın verici kısmında hangi şifreleme entegresi kullanılmış ona bakmak gerek. Entegre ye göre sistem değişiyor çünki.
Genelde PT2260 veya PT2262 (vericide) ile PT2270 veya PT2272 (alıcıda) entegre çiftleri kullanılmaktadır. Farklı chiplerde mevcut. Öncelikle hangi sistemi çözeceksin ona karar ver.
İşin temelinde vericinin bir header (başlık ) sinyali yollaması ve peşinede data sinyalini eklemesi yer alır. Bu işi yapacak isen öncelikle Header sinyalini yakalamayı hedeflemelisin. Zira bu işi doğru yapacak isen öncelikle header'i yakalayıp ardından gelen data sinyallerini yakalamayı hedeflemelisin.

Olaya mantıksal açıdan bakmak gerekir ise RF den gönderilen sinyali bir Tren vagonları dizisine benzetebiliriz. En başta Header (Lokomotif) ardından data bitleri (vagonlar) yer alır. Biri size 3 nolu vagonu yakala derse önce terinin en başını yakalamanız ardından sayarak 3 nolu vagonu bulmanız gerekir.

Genelde bu sistemlerde her bir yollanan sayı biti 4 bit ile ifade edilir.
Örnek vermek gerekirse, PT2262 de data bitleri aşağıdaki şekilde uygulanıyor;
"0" (LOW) biti : 4 clk büyüklüğünde HIGH + 12 Clk büyüklüğünde LOW + 4 clk HIGH + 12 clk LOW
"1" (HIGH) biti: 12 clk HIGH + 4 clk LOW + 12 clk HIGH + 4 clk LOW
"Float) biti   :4 clk HIGH + 12 clk LOW + 12 clk HIGH + 4 CLK LOW
şeklinde verilir.
Header   = 4 clk HIGH + 124 clk LOW

Data bitleri ise adres ve data bitlerinin karışımından oluşuyor.
Normalde 12 Adres biti peşine bir senkron biti yollanır. Bazı entegrelerde data bit girişleri olur. Bu durumda 4 adet data + 8 adres biti peşine 1 senkron biti yollanır.(Senkron biti denilen şey aslında header sinyalidir)
Bütün bunların detayları PT2262 - PT2272 data sheetlerinde açıklanmıştır.
Bu entegrelerde Adres bitleri dışarıdan ayarlanan LOW - HIGH yada FLOAT (boşta bırakma) şeklinde 3 konumlu olarak ayarlanır.
Clk pals süresi tamamen entegreye bağlanacak osilatör direncine bağlı olarak değişmektedir.
Sinyalin yakalanmasında takip edilecek yol şöyle,
1. Header sinyalinin yapısı gereği uzunca bir LOW sinyali aranır. Arada yakalanan kısa low bitleri daima data bitlerinde yer alacak olan data bitlerine ait olacaktır. Yakalanınca ardından gelen 4 clk uzunluğundaki HIGH biti yakalanır ve ardından 12 adet data biti uzunluklarına göre kayıt edilir.
Komut gecikmeleri dikkate alınarak ben olsam ilk pulsleri atlar ardından gelen kısa veya uzun data bitlerini (yalnızca LOW) süre olarak kayda alırdım.
LOW için KISA-HIGH + UZUN_LOW olduğuna göre kayda alınacak olan UZUN LOW süresi olacaktır. Bu durumda bu bit için 2 adet uzun LOW kayda alacaksın
HIGH için UZUN HIGH + KISA LOW olduğuna göre kayda alınacak olan KISA LOW süresi olacaktır. Bu bit için iki adet kısa LOW kayda alacaksın.
Float için kayda alınan LOW bitleri ise 1 adet uzun ve 1 adet kısa LOW olacaktır.
12 adet data biti olduğu için ve her biri için 2 bit kayda alacağın için toplamda 24 adet kayıt alacaksın. Kayıt işlemi bittiğinde ise sırası ile bit sürelerine bakarak,
- iki uzun low var ise bu bit LOW dur
- iki kısa LOW var ise bu bit HIGH dir.
- Bir uzun bir kısa LOW var ise bu float biti dir deyip karar vereceksin.
Böylece gelen kodu çözmüş olacaksın.

Son bir şey ekleyeyim. Uzun yada kısa bitlerin sürelerine karar verebilmek için başlangıçta bit sürelerini kayda alıp kısa olanın süresi, uzun olanın s,relerini tespit edip okunanları bunlara göre ayıklaman gerekir.

Karmaşık gibi gözükmekle birlikte çok zor olmayan bir işlem bu.

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

quarko

Hocam çok teşekkür ederim, elinize kolunuza sağlık. Detaylı şekilde açıklamışsınız.

Benim kullandığım RF alıcı boardda CY802 kodlu bir entegre bulunmakta. Datasheet i burada.. http://www.rficy.com/wp-content/uploads/2013/12/CY803-802.pdf

Datasheette maalesef çıkış datasını çözebilmek adına herhangi bir bilgi bulunmuyor. Üreticiye mail attım. Bakalım dönüş yapılacak mı. Şuan için yapadildiklerim şunlar, lojik analizörle data sinyalleri inceledim. İlk mesajdaki resimde görünüyor zaten. Kumanda dan tuşlara basıldığı zaman Sabit bir veriyi sürekli gönderiyor. Gönderdiği paketler arasında da yaklaşık 12.4ms lik boşluklar bulunmakta. Ben mcu da bir adet timer ve bir adet external interrupt ile bunu çözmeye çalışıyorum. Öncelikle veri paketleri arasında en az 10msn lik boşluklar arayarak paket başlangıcını bulmaya çalıştım. Orayı hallettim. Ondan sonra ise exti yi bir yükselen kenara kurup, ardından da düşen kenara kurup aradaki sürelerden lojik 1-0 durumlarını anlamak istedim.

Ama sizin mesajınızdan da anladığım kadarıyla bit yapıları benim ilk mesajda yazdığım gibi kısa pulse lar lojik-0, uzun pulse lar lojik-1 değil. O zaman çalışmaya devam. Bakalım çözülebilecek mi. Bu arada kullandığım mcu, stm8s003f3 16MHz de çalışıyor. Bu iş için yeterli olacağını düşünüyorum.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

ete

#3
Datasheet ini verdiğin entegre bir Rf alıcı entegresi. Bunun şifreleme ile alakası olmadığı gibi çözülecek bir tarafıda yok     . Bu bir ham alıcı ve vericiden ne yollarsan bundanda aynısını alırsın. Tabiiki herkes seninle birlikte alır. Bu arada verdiğin kod manchester kodlama yapılarak yollanıyor. Gördüğün şekil bu. Manchester kodlamada her bir bit iki bit ile ifade ediliyor. HIGH=kısa HIGH+Kısa LOW   , LOW=Kısa LOW+Kısa HIGH şeklinde.

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

quarko

#4
Kumandayı söktüm hocam. İçinde 12F6xx serisinden bir mcu var hocam. PT2262 gibi bir transmitter da yok. Alıcı tarafta da CY802 kodlu ham RF alıcı mevcut, dediğiniz gibi. Benim RF alıcının data out pininden aldığım sinyalde ilk mesajda eklediğim resimdeki gibi.



Şu linkte gördüğüm üzere datayı şuan okuyabiliyorum. Lojik 1 lerin sürelerinden datayı algılayıp hex koda çevirebiliyorum.

https://www.codrey.com/electronic-circuits/433mhz-rf-sniffer/

Gelen data sinyalinin bitlerine ilişkin de lojik 1-0 olma durumu hakkında fikir veren resim,



Ayrıca PT2272 nin datasheet ini de inceledim hocam. Aynen sizin anlattığınız gibi bit0-bit1-bit float durumları mevcut. Benim lojik analizör de gördüğüm sinyali uydurmaya çalıştım ama maalesef tam olarak uyuşmuyor.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."