ir kumanda

Başlatan mitec, 04 Mayıs 2012, 00:49:57

ete

Önce Tebrik ederim. Pek ümidim yoktu ama sen başardın.
Kodlar doğru.  Bu şekilde çalışabiliyorsa sorun yok demektir.

Ete

mitec

teşekkür ederim hocam sizin yardımlarınızla oldu.bu işi yapmışken hızımı alamadım galiba elimde vestel regal kumanda var osilaskoptan görebildiğim kadarıyla sanırım protokol aynı birde onu çalıştırmaya çalışacağım bakalım ne olacak

ete

Vestel kesin RC5 kullanıyor.

Ete

mitec

tamamdır hocam vestel de rc 5 aynı kodlarla vestelide çözdüm
vestel için şimdilik sadece rakam tuşlarını hallettim
kullanmak isteyen arkadaşlar yukarıdaki koddaki  değerleri vestel için aşağıdaki şekilde yapabilirler
        1---------3072
        2---------1536
        3---------2560
        4---------1280
        5---------1792
        6---------1280
        7---------2304
        8---------1152
        9---------1664
        0---------2048

birde video çektim.tekrar teşekkür ederim.

http://www.dailymotion.com/video/xqmu8n_video0065

zeynal

Merhaba ETE bey.Merhaba  arkadaşlar.NEC protokolü ile çalışan bir kumandam var.Bunu PIC ile okumak istiyorum.Bu konuda yardımcı olursanız sevinirim.Teşekkürler

ete

Nec protokolü ile hiç çalışmadım. Temel mantığı SIRC (sony) ile çok benzer. Süreler farklı yalnızca.
Header süresi 9 ms. Bu önemli önce bu sinyalin yakalanması ardından 4,5 ms bekleyip data bitlerinin alınması gerekir. Data bitlerinin ikinci yarıları fark oluşturuyor. Bit uzunluğu 1690us ise bu bit high dır. Bit süresi 560us ise bit low dur.
Toparlarsak ;
1. 9ms süreli high biti yakalanacak.
2. 4500 us beklenecek
3. Ardından 16 adet low sinyali süresi kayıt edilecek.
4. Kayıt edilmiş süreler tekrar değerlendirilerek;
Süre 1690us ise bit "1" , 560us ise bit "0" olarak ayarlanacak.
İlk 8 bit adres ikinci 8 bit ise komut değeri olarak elde edilmiş olacaktır.

Ete

zeynal

Merhaba ETE bey.İlginize ve verdiğiniz bilgiler için çok teşekkür ederim.

kotan04

mitec başarılar bende bir ara bende ilgilenmek istedim fakat öyle kaldı bu konu hakkında edindiğin tecrübeyi bizlere bir ders halinde hazırlarsan çok memnun olurum iyi çalışmalar

blueboard

Sayın Mitec, ben de IR kumanda kodu ile ilgileniyorum. Mümkünse ana döngüsünü verdiğiniz devrede hangi mikrodenetleyiciyi kullandığınızı bildirirmisiniz? Veya sizce sakıncası yoksa bu konu ile ilgili olarak yazmış olduğunuz PBP dosyaysının tamamını ( register ayarları dahil) burada paylaşırmısınız? teşekkürler.
Alıntı yapılan: mitec - 06 Mayıs 2012, 14:22:27
ete hocam rc-5 protokolünü baz alarak sonunda elimdeki kumandadan sonuç elde etmeyi başardım.gerçekten mükemmel çalışıyor.bir kere bile hata oluşmadı kodları biraz sizin sony kumanda kodlarından esinlenerek oluşturdum süreleri biraz esnek tuttum.sonuç olarak istediğimi elde ettim beş tuş ile istediğim işleri yapabiliyorum elimdeki değişik kumandalarlada test ettim herhangi bir karışma yok.yinede yazdığım kodlara birde siz bakarmısınız doğru yapabilmişmiyim yada daha fazla iyileştirme yapılabilirmi?

main:
        pulsin porta.1,0,al
        if al1>75 and al1<200 then goto basla
        goto main
basla:
        for say=0 to 15
        pulsin porta.1,1,sonuc[say]
        next say
cikan:
        for say=0 to 15
        if sonuc(say)>100 then son.bit0[say]=1
        if sonuc(say)<100 then son.bit0[say]=0
        next say

        if son=1600 then goto servis
        if son=1088 then goto up
        if son=1344 then goto dovn
        if son=672 then goto arti
        if son=928 then goto eksi
        goto main


ete

Blueboard,
hangi işlemci olduğu hiç farketmez. Bu kodu alabilen her işlemci ile bu kod çalışır. Buradaki kod muhtemelen 16F628 veya 16F628A ile çalıştırılmıştır.
Asıl önemli olan bu koda başlangıç kısmında ;
- sigorta ayarları
- Giriş çıkış pinlerinin ayarlanması
- varsa özel registerlerin ayarlanması
- değişkenlerin tanımlanması,
işlemleri yapılmıştır. Hangiprograma baksan bunları zaten görebilirsin.

Ete

blueboard

Ete Hocam , arkadaşın verdiği yazılımda asıl anlamadığım yer şu: programada " cıkan" adlı etiketin çağrıldığı bir yer göremedim. "basla" ana döngüde çağrılıyor ama "cıkan" çağrılmıyorsa  neden yazılmış? Bir de "pulsin porta.1,0,al" satırıyla Pic'e ne anlatıyoruz?Teşekkürler.

ete

Bir etiket adı gördüğün zaman illaki bir yerlerden çağırılacağını bekleme. Bazen iki kod parçasını ayırmak için yada daha anlaşılır olması için de etiket koyulur. Ama illaki o etiketi çağırman gerekmez. Burada da öyle olmuş.
IR bitleri süre bazında kayıt edildikten sonra çıkan sonucu bulma kısmına CIKAN adı vermiş arkadaş hepsi bu.

pulsin porta.1,0,al komutu ne yapıyor?, PORTA.1 pininden giren LOW sinyalinin süresini 10us nin katları şeklinde ölçüp AL isimli değişkene yerleştiriyor. Aynı komutu HIGH süresini ölçmek için kullanmış olsa idik komut şöyle yazılacak idi;
pulsin porta.1,1,al.
10us ninkatları ne demek onuda anlatayım. Şayet LOW süresi 300us ise AL=30 olur. Buradan hemen ters mantık ile AL=30 ise gerçek süre 300us dir diye düşünmek gerekir.
10'un katları ifadesi yalnızca 4 mhz lik çalışma frekansı için geçerlidir. Frekans arttıkça katlar azalır. Mesela 20Mhz de 2 nin katları şeklinde çalışır komut.

Aşağıdaki linkte çalışan kodları bulabilirsin. Saat ayar sistemi yapmıştım. Hem Sony hem RC5 kodları açık olarak mevcuttur orada.

http://etepic.com/index.php/topic,761.0.html

Ete

blueboard

Ete Hocam ,verdiğiniz bilgiler için öncelikle teşekkür ederim.Belirttiğiniz sayfayı da okudum ve kendimce birşeyler yazdım. Ama derlemede hata veriyor. Nerede hata yaptığıma bakarmısınız?

ete

Yaptığın hataların tamamı değişkenlerle alakalı.
- Yukarıda al1 diye tanımladığın bir değişkeni aşağıda hem al1 hem al olarak kullanmışsın. tanımlama al1 ise her yerda al1 kullanılmalıdır. yada tanımlama al ise her yerde al kullanılmalıdır.

- FOR SAY=0 to.. şeklinde SAY isimli değişken kullanılarak döngü kurmuşsun ama SAY isimli değişkeni tanımlamamışsın.

- SONUC[SAY] şeklinde bir değişken kullanımı görüyorum. Bu bir dizi değişkenidir. Yani Sonuc isimli değişkenden SAY adedi kadar kullanılacak anlamına gelir. Değişken tanımlama kısmında dizi değişkenide SONUC VAR WORD [16] şeklinde tanımlanması gerekirdi. Bu SONUC isimli değişkenin 0-14 arasında varyasyonları olacak anlamına gelecektir. Dizi kaç elemanlı ise 16 rakamı yerine o değer yazılmalıdır.
Kullanırkende  SONUC(SAY) şeklinde değil SONUC[SAY] şeklinde kullanılmalıdır.
Ayrıca değeri 255'i aşmayan değişkenleri mutlaka byte olarak tanımlayın. Word tanımlarsanız hemde dizi değişkeni olarak tanımlarsanız hafızayı bitirebilirsiniz. SONUC VAR WORD[16] şeklindeki tanımlama toplam 32 adet byte hafızası tüketir.
SONUC VAR BYTE[16] ise 16 adet hafıza tüketir. Bunlara dikkat etmek gerekir.

- Aşağıda SON isimli bir (word) değişkeni kullanmışsın ama yukarıda tanımlamamışsın.

-if son=1600 then goto servis satırında Servis  isimli etikete git demişsin ama servis isimli etiket yok programda olmayan bir yere program gönderilemez.

-Benzer şekilde Up, Dovn , Artı , Eksi  isimli etiketlere gönderme yapmışsın ama bu etiketler programda yer almıyor.

Ete





blueboard

#29
Ete Hocam , dosyada uyarılarınıza göre değişiklikleri yaptım.Ancak programda tıkandım,kaldım. Biliyorsunuz SIRC protokulnde önce header sinyal gönderilir. Bu sinyal 2.4 ms high +  0.6 ms low 'dur. Ardından 5 bitlik cihaz kodu+ 7 bitlik tuş kodu gönderilir.Örnek olarak kanal artırmayı ele alalım. Bu durumda header sinyalinden sonra "000010010000" gönderilecektir. Bu durumda da sinyalin tamamı şu şekilde olacaktır:
2.4 ms high +  0.6 ms low (Header sinyali)
0.6 ms high 0.6 ms low
0.6 ms high 0.6 ms low
0.6 ms high 0.6 ms low
0.6 ms high 0.6 ms low
1.2 ms high 0.6 ms low
0.6 ms high 0.6 ms low
0.6 ms high 0.6 ms low
1.2 ms high 0.6 ms low
0.6 ms high 0.6 ms low
0.6 ms high 0.6 ms low
0.6 ms high 0.6 ms low
0.6 ms high 0.6 ms low
Benim yazabildiğim kısımdan sonra programımda neler olmalıdır? Yani ben bu süreleri mikrodenetleyiciye nasıl ölçtüreceğim. Ardından ve sanırım şöyle bir satır yazmam gerekecek:
" IF ALINAN SİNYAL = 000010010000 THAN SONUC=kanal artı"
Dosyayı son duruma göre tekrar yükledim.Sizi de çok meşgul ediyorum.Teşekkür ederim.

Powered by EzPortal