rf kumanda

Başlatan bahdiyarusta, 16 Ekim 2014, 09:18:47

fatih88

Peki Hocam ben skop görünfüsünü atmaya calışayım
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

fatih88

Sayın Hocam ben hcs301 enteğresini bir kenara bıraktım ilk önce pt2262 yi çözme mantığını kurarak diyerinide o şekilde çözmeyi düşünü yorum mantık anladığım kadarıyla uzun low sinyalini yakalamak oda pt de 15ms skopta okuduğum şu mantık ta ilerlemek doğru mu Hocam data bacağı high olduğu için while döngüsünde kalsa bacak sıfıra düştüğünde timer1 sıfırlanıp saymaya başlasa tabi timer1 1us ayarlı olacak bölme ayarından 15000us olduktan sonra diğer dataları almak için başka fonksiyonda süreleri hesaplayıp dizi değişkenine attıkmı işlem tamalanır burda hatalı düşündündüğüm bir kısım varmı Hocam? Iyi geceler
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

İşe önce data sheet okumakla başla istersen. En azından data sheet deki şekillere bak. (PT2262,Sayfa-5) Senkron biti wave form diye bir şekil koymuş adamlar. Şekil bir kısa HIGH sinyali peşinden uzunca LOW sinyalinden oluşuyor. Yakalaman gereken sinyal budur. Açıklamada Bu sinyalin (HIGH + LOW kısmı) toplam uzunluğunun 4 bit (128@) olduğunu söylüyor. Bunun 1/8 biti HIGH kalanı ise LOW şeklinde . 1/8 bit uzunluğu 4@ boyunda her bir @ değeri 1 T peryoduna eşit ve  peryodu da entegrenin çalıştığı osilatör belirliyor. Ortalama 10 khz lik bir OSC frekansında T=1/F olduğundan T(us)=1000.000/10.000=100us olarak hesaplanır.
Demekki bu OSC frekansında Senkron sinyali Toplam uzunluğu  128@ olacağından 128*100=12800 us yada 12,8ms olacaktır.
Bunun HIGH kısmı ise 4*100=400us olacak demektir. İşte arayacağın sinyal budur. Ancak gelen sinyalin hangi OSC frekansı ile gönderileceğini önceden bilmediğinden Data sheet de verilen maksimum OSC frekansında T süresini hesaplayıp onu maksimum değer birde min OSC frakansını hesaplayıp onuda Min değer olarak kullanıp gelecek senkron sinyalinin hangi aralıkta olacağını tespit etmen ve ona görede programda tedbir alman gerekir. Kısaca senkron sinyali beklerken en düşük senkron sinyal süresi xxx değerinden aşağı olmayacak ama zzz değerinden de fazla olmayacak şeklinde bir kısıtlama oraya koyman gerekiyor aksi halde uzun beklemeleride senkron zannedersin yada kısa sinyalleride senkron zannedersin.
Sinyalin başında önce bir high sinyali olacağına göre önce HIGH yakalayıp peşinden gelen LOW süresini us cinsinden ölçmen gerekecek. Bunun için TMR1 sayacını kullanabilirsin. Sayacı hazır halde bekletip HIGH yakalar yakalamaz ardından sinyal low'a düşünce timer saymaya başlar ve yeniden HIGH yakalayınca durur. Elde ettiğin değer senin ölçtüğün süre olur.
Unutma yollanan veri paketi komple bir paket dir. Başında senkron sinyali ardında data sinyalleri ve şifre vardır. Bu sinyaller HIGH ve LOW lardan oluşmaktadır. Önemli olan sinyalin başını yakalamaktır. Amacın bu olmalı ardından gelen dataları almalısın. İşin püf noktası önce senkronu yakalayıp ardından gelen data sinyallerini süre bazında kayıt edip sonra çözmekten geçiyor.
Bütün işin mantığını hem burada hemde başka mesajlarda anlattım. Bilen için iş zor değil. Bilmeyen için iş zor ve sorular devam eder ise artık kodu buraya koyuver anlamına gelecek. Bilgiyi esirgemiyorum ama birazda çalışma ve üretkenlik bekliyorum. Bir şey yapmadan kodun parçalarını alıncaya kadar soru soru sorulması hoşuma gitmiyor açıkçası. Bütün bu işleri ben kimseden yardım almadan tamamen mantığımı çalıştırarak çözüyorum. Benim sizden bir farkım yok. Özel bir insan da değilim o halde sizde biraz çalışarak benzer işleri yapabilirsiniz. Tekrar ediyorum farkımız yok. Yok derken belki biraz bilgi farkımız olabilir onuda çalışarak edindim bunu unutmayın.

Ete
 

fatih88

Hocam ilginiz alakanız için çok teşekkür ederim balık tutmayı öğretmek gerekiyor allah razı olsun bu formdan çok şey öğrendim c dilinde yazsamda proğramlama mantığı aynı Hocam anladığım kadarıyla doğru yolldayım dediğinizde göre low sürelerini ölçerek 0 mı 1 mi bulabiliriz
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

fatih88

Hocam gerçekten bu işin pirisiniz dediklerimizi skopta ölçtüm 8 khz geliyor waveform yaklaşık 500 us high 15ms low geliyor data 1 içinde 1.5ms high ve 500us low geliyor dediğiniz gibi kumandaların üreticiye göre frekans dirençleri değişik olabiliyor alt ve üst Limit girmek çok mantıklı kafamda bir şeyler canlandı Hocam teşekkür ederim
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

fatih88

hocam özür diliyorum sizi çok rahatsız ettim biliyorum ama uzun low u bir turlü yakalayamadım timer1 1/1 oranında ayarlıyorum owerflow taşması 0dan başlayıp 65536 gitmesi 6537us yapıyor yani timer1 65536/6537=~10us oluyor yanlışım yoksa tabi
fonksiyonuda şöyle yazdım

void low_yakala()
{
   enable_interrupts(INT_TIMER1);//timer1 aç
   set_timer1(0);//timmer1 sıfırla
   while(1)//sonsuz döngüye gir
     {
   while(input(rfin))  if(get_timer1()>50)return; //sorun burda galiba 500us uzun hıgh çık dedik ama hamonikler çok fazla daha düşük high sinyallerinde low yakaladım deyip alt satıra geçiyor
      //
      set_timer1(0); timmer1 sıfırladık
      while(!input(rfin))  low süresini ölçüyoz
      { 
         if(get_timer1()>1560){disable_interrupts(INT_TIMER1);return;}15ms büyükse çıkıyoz ama harmonik frekanslar 100us sinyalde bile burdan çıkacak burayı ofset yapmam gerek 1560 büyükse cık veya1460 danküçükse cık 
                 
      }
      i=get_timer1();
      output_high(pin_b5);
      a=1;
     
   }
   
    disable_interrupts(INT_TIMER1);
}
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

#21
C dilinden anlamam maalesef. Ne demiştim diğer data bitlerine dikkat!!!.
Tamda dediğimle karşı karşıyasın. İşte buralarafa min süre ve maks. süreler önem kazanıyor. Aradığın sürenin belirli bir aralık içinde olması gerek.
Bir başka ikazım yada önerim önce high bul ardından gelen low süresini ölç demiştim.

Ete

fatih88

hoca kusura bakmayın ama yine size baş vurmam gerekti bu konu hakkında kimsenin bilgisi yok bir haftadır uğraşıyorum ilerleme var en azından led yakıp söndüre biliyorum uzun low yakalarken. ama tam olmuş değil hocam sizden kod bloğu  felan istemiyorum bu iş benim için gurur meselesi oldu sizden sadece gidişatım doğrumu onu ögrenmek istiyorum sinyalleri osilaskopta baya inceledim ama ben bir yeri atlıyorum galiba c dilini bilmediğiniz için program akışını anlatacağım en azından mantığını anlamışmıyım kafayı yiyecem :)
hocam programda ilk önce timer1 kullanacaımız için timer1 hesabını yapmamız gerekiyor onuda 1us olması için

komut frekansı x bölme oranı x(65536-başlama değeri)=us cinsinden deger buna göre timer1 degerinin bir artımı 1us olması için
1/4 osc =1             1x1x(65536-?)=1us      ?=65536-1=65535us yani 65536/65535=1us yapıyor  hocam timer1 kurulumunda yanlışlık varsa bilgi verin

programda ise
ana programda if komutu ile modülden high komutu bekliyorum
high geldigi anda program alt rograma atlıyor tabi harmoniktede bu  bölüme gidiyor
alt programa girdiğinde timer1 sıfırlanıp while komutu ile aptal döngüye sokuyorum
şayet giriş low olduysa if komutu ile timer1 değeri  480us den küçükse veya 510us büyükse alt proğramdan cık
şayet gelen değer iki sayının ara değeriyse timer1 sıfırla ve bu kez low için aptal döngüye gir diyorum
low değerden high geçtiğinde timer1 değeri benim uzun low un değerini vermesi gerek yine if komutundan yararlanarak
değer 14800us küçükse veya 15050 büyükse alt programdan cık ara degerdeyse
timer1 sıfırla ve low sürelerini 24 dizi içine yerleştirmem gerekiyor ben hala uzun low  almakta zorluk çekiyorum aldığım zamanda diziye kaydettiğim 24 adet değer hep aynı değerle bana dönüyor sanırsam hala ben uzun low yakalayamıyorum

hocam umarım program akışını anlatabilmişimdir sizden ricam kurduğum mantığın gidişatı doğrumudur iyi çalışmalar




bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

Timer kurulumu denilen şey nedir onu anlamıyorum doğrusu. Timer1 sayacını 1/1 bölme oranı ile kurup TMR1H ve TMRL registerlerinide sıfırlayıp bekleyeceksin. Önce HIGH yakalayıp ardından gelen LOW sinyalinin başında TMR1 sayacını aktif edeceksin (T1CON.0=1) böylece low süresince tmr1 sayacı sayacak. Sinyal yeniden high olunca sayacı durdurup TMR1L ve TMRH registerlerinden sayac değerini alacaksın işte bu kadar.
Daha öncede söyledim. Sen aramaya başladığında bir data paketine ortadan dalabilirsin. Bu ise sana bir sürü kısa LOW ve kısa HIGH sinyalleri verecektir. Burada programın şaşırmaması gerekir Yada şaşırsa bile belirli bir değerden küçük timer değeri yakalamış ise yeniden yakalama işlemine dönmen gerekir.
Burada sinyal yakalarken biraz daha akıllıca davranman lazım. Bunun için data bitlerinin sürelerine bak. Sonuçta bunlarıda timer sayacak. Data bitlerinin en uzunu için timer kaç sayması gerekiyor ise o süreden daha uzunu senin uzun low sinyalin olacaktır. Kendini şartlandırıp 14000 küsürlü süreler arama bence mesela 8000 den büyük olanları uzun kabul et. Bu sana farklı OSC leri için farklı uzun sinyal boyutunuda yakalama imkanı tanır.
Ete


fatih88

hocam basıc de timer kurulurken anladığım kadarı ile register üzerinden ayarlanıyor c dilinde bunu hazır fonsiyon hallediyor hesap yaparak taşma değerini belirliyoruz bölme oranıyla bölme oranı 1/1 ise taşma değerimiz 65535 us oluyor buna görede her bir sayma 1us degerine denk geliyor hocam 14000 değerine takılma nedenim low süresimin 14000 us olması peki hocam 8000 üzeri değer arayacam timer1 dediğim gibi 1/1 yapıldığında bir artımı 1us oluyor değilmi?
hakkınızı helal edin hocam bazen sizin için saçma sapan gelen sorular soruyorsak
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

timer sayacının her saymadaki süre değeri işlemci OSC frekansına bağlıdır. 4Mhzde bu süre 1us dir. Bu aynı zamanda bir komut (ASM de) süresidir.

Hesabı MHZ cinsinden OSC frekansı/4 şeklinde asıl çalışma frekansını buluyorsun. 4/4=1Mhz dir.
Buda us cinsinden peryot olarak 1.000.000/1.000.000 Hz=1 us olarak bulunur.
1sn=1000ms=1000.000us dir) 1Mhz=1000Khz=1000.000Hz dir.

Ete

fatih88

hocam bir video ekledim gidişat doğru galiba
www.youtube.com/watch?v=yWJJcouXgns
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

fatih88

hocam data paketinide aldım ama sorun buton bıraktıgımda paket verileri bozuluyor muhtemelen data alınırken yarıda kesildiğinden bir öneriniz varmı hocam bu hususta
sonunda zorla yaptırdınız hocam tam 1 hafta uğraştım teşekkürler hocam:)
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

Data bitleri süre bazında önce dizi değişkenine kayıt edilmeli. Paketin alınması bittikten sonra onları işleyerek data değerlerini belirlemelisin.
Ete

fatih88

Hocam diziye felan yerleştirdim bütün 24 datayı us cinsinden görüyorum süreleride  doğru Hocam sadece data yarıda kesilince 24 dizi değişiyor bu sorunu aşmam gerek kumandayı tanıtırken 20 bit şifreyi kaydetmem gerekiyor şifreyi binary mi kaydedeyim yoksa desimal mi kaydedeyim
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Powered by EzPortal