Pic Basic ile IR alıcı kumandası için yazılım desteği

Başlatan sinasos, 05 Ocak 2014, 02:15:01

sinasos

Merhaba arkadaşlar,
12f675 ile TV kumandasıyla çalışan on-off ve/veya pwm kontrollü bir devre yapıyorum. kumanda sinyallerini TK19 yardımıyla aldım ve 12f675'e tanıttım. herhangi bir TV kumandasıyla pic'ten sinyal alıyorum. bu kısma kadar herşey normal ancak takıldığım nokta pwm kısmı. çünkü bunu çalıştırabilmem için kumandayı devreye tanıtıp tuşları kaydettirmem ve sonrasında diğer tuşlara veya başka bir kumandaya basıldığında tepki vermesini önlemem gerekiyor. 3-4 gündür araştırıyorum ama ne tür bir algoritma kurmam gerekiyor ve hangi komutları kullanmam gerekiyor bilemiyorum. yardımcı olursanız sevinirim.
şeması ve kodları aşağıda

'****************************************************************
'*  Name    : 12f675                                            *
'*  Author  : sinasos                                           *
'*  Notice  : Copyright (c) 2003                                *
'*          : All Rights Reserved                               *
'*  Date    : 27/12/2013                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE INTRC_OSC, MCLR_off, PROTECT_OFF, WDT_OFF
CMCON = 7 
ANSEL = 0 
TRISIO = %010010 
GPIO = 0       
Define OSCCAL_1K 1 
ON INTERRUPT GoTo KESME
dalga var word(13)
degisken var Byte
komut	Var	Byte
symbol tus=gpio.1
symbol giris=gpio.4
symbol cikis=gpio.0
symbol buzer=gpio.5
SYMBOL program=gpio.2
clear
read 0,komut

basla:
if tus=1 then gosub kesme
 
PuLSIN giris,0,dalga(0)
if dalga(0) < 200 then
goto basla
Endif

for degisken=1 to 12
pulsin giris,0,dalga(degisken)
next  degisken

goster:
if dalga(1) < 100 then
komut.bit0 = 0 
Else	
komut.bit0 = 1
endif
if dalga(2) < 100 then
komut.bit1 = 0 
Else	
komut.bit1 = 1
endif
if dalga(3) < 100 then
komut.bit2 = 0 
Else	
komut.bit2 = 1
endif
if dalga(4) < 100 then
komut.bit3 = 0 
Else	
komut.bit3 = 1
endif
if dalga(5) < 100 then
komut.bit4 = 0 
Else	
komut.bit4 = 1
endif
if dalga(6) < 100 then
komut.bit5 = 0 
Else	
komut.bit5 = 1
endif
if dalga(7) < 100 then
komut.bit6 = 0 
Else	
komut.bit6 = 1
endif
if dalga(8) < 100 then
komut.bit7 = 0 
Else	
komut.bit7 = 1
endif
If komut.bit7 = 0 then  
komut = komut + 1
Endif
If komut = 10 then
komut = 0
Endif
write 0,komut
if komut=>1 then high buzer:pause 200:low buzer
if komut=>1 then toggle cikis
pause 100

kesme:  'bu kısmı proğram butonuna bastığımda TV kumandasının istediğim
        'tuşlarını (+, - ve on/off tuşları) tanıtabilmek için hazırlıyorum.
        'işte bu kısım eksik.....
read 0,komut

return
goto basla



Erol YILMAZ

12f675 te Pwm cikisi olmadigi için 12f683 e gecebilirsin

XX_CİHAN_XX

Alıntı yapılan: sinasos - 05 Ocak 2014, 02:15:01
Merhaba arkadaşlar,
12f675 ile TV kumandasıyla çalışan on-off ve/veya pwm kontrollü bir devre yapıyorum. kumanda sinyallerini TK19 yardımıyla aldım ve 12f675'e tanıttım. herhangi bir TV kumandasıyla pic'ten sinyal alıyorum. bu kısma kadar herşey normal ancak takıldığım nokta pwm kısmı. çünkü bunu çalıştırabilmem için kumandayı devreye tanıtıp tuşları kaydettirmem ve sonrasında diğer tuşlara veya başka bir kumandaya basıldığında tepki vermesini önlemem gerekiyor. 3-4 gündür araştırıyorum ama ne tür bir algoritma kurmam gerekiyor ve hangi komutları kullanmam gerekiyor bilemiyorum. yardımcı olursanız sevinirim.

Bu tür uygulamalarda pwm donanımını kullanmaya çalışmak gereksizdir.
İşlem basamakları:
1- Tercihen bir logic Analyzer yada bir dijital osilaskop ile tanımlamak istediğin tuşların TK19 çıktısını incele.
2- Bu çıktıya göre hangi IR Remote Control Protokolü kullanıldığını tespit et. (SIRC,RC5, vb..)
3- Tespit ettiğin protokolde ve skop ekranında gördüğün dalga formunu bütün timing değerlerine bağlı kalarak kodunu oluşturmaya başla.
Bu noktadan sonrası çorap söküğü gibi gelir.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Erol YILMAZ

Cihan kardeş, arkadaş cıkış için pwm den
bahsediyor...

XX_CİHAN_XX

Erol abi bende arkadaşa pwm ile hiç uğraşma diye tavsiye veriyorum :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

elektronart

Benzer bir uygulamayı MSP430 ile yaptım. IR kütüpanesini alıp tuşlara bastığımda çözümlediği değerleri seri portla ekrana verdim. Sonra onları tek tek not ettim. Böylece tuş karşılaştırması yapabiliyorsun. PWM i ne amaçla kullanacaksın tam anlayamadım ama sadece bir çeşit kumandayı algılamak ve tuşa göre tepki verdirmek istiyorsan gelen IR kodunu çözümleyen bir kütüphane bulmanı öneririm. MSP için ben rahatlıkla bulmuştum kaldı ki PIC için 10 kat daha fazla kaynak vardır.
Açık Elektronik

sinasos

merhaba,
herkese ayrı ayrı teşekkür ederim. sorulara sırasıyla cevap vereyim.
*pwm kısmını lambaya dimmer yaptırmak için tasarlıyorum.
*12f675 tercihim ise hpwm'e ihtiyaç duymadan pwm yapabiliyorum zaten. bunu daha önceki devrelerimde yapmıştım, onda sorun yok !
*ben bu devreyi tasarlarken evrensel olarak düşünmeyi tercih ediyorum. tek bir kumanda olsa sorun yok ! ama ben bunu yaptığımda istediğim kumandayı önce okutmayı sonra bu komutu icra etmeyi istiyorum. bunu yapabilmek için mutlaka IR protokolünü uygulamam mı gerekiyor. bunun genel bir yolu yokmu ? örneğin TK19dan gelen sinyalleri alıp bunu eproma kaydetsem sonradan da bu sinyaller geldiğinde komutu icra etsem olmazmı tarzında soruyorum. ve birde bunun yolunu  :-[

elektronart

Belki aradığın gibi bir yöntem vardır onu bilemiyorum ama ben kullancığım kütüphaneyi ve nasıl çalıştığını anlatayım.
her 50usec da bir çalışacak bir interrrupt kuruluyor. Bu interrupt içinde IR alıcıdan gelen sinyal kontrol ediliyor. Header yakalandığında 50usecler sayılmaya başlıyor ve bir buffera yazılıyor. Durum geçişlerinde sayıcı sıfırlanıyor ve buffer indexi arttırılıyor. Sinyal alımı tamamlandığında bufferın uzunluğuna ve header süresine bakarak hangi protokol olduğu anlaşılıyor. Bufferın tümü incelendiğinde de 1e ve 0a denk gelen süreleri protokol standardındaki sürelerle karşılaştırarak sinyalin değeri anlaşılıyor.

İstersen kütüphane kullanmadan 1 ve 0 geçişleri arasındaki süreleri buffera kaydedersin ve sonraki sinyalleri belirli bir tolerans vererek bu bufferla karşılaştırırsın.
Ya da kütüphaneyi kullanıp kumanda protokol türü ve değerini kaydedip, sonraki gelen sinyalleri bu kayıtla karşılaştırırsın. Birden fazla sinyal kaydetmeyi düşünüyorsan kütüphane daha mantıklı bence.
Açık Elektronik

sinasos

Alıntı yapılan: elektronart - 06 Ocak 2014, 01:12:39
Belki aradığın gibi bir yöntem vardır onu bilemiyorum ama ben kullancığım kütüphaneyi ve nasıl çalıştığını anlatayım.
her 50usec da bir çalışacak bir interrrupt kuruluyor. Bu interrupt içinde IR alıcıdan gelen sinyal kontrol ediliyor. Header yakalandığında 50usecler sayılmaya başlıyor ve bir buffera yazılıyor. Durum geçişlerinde sayıcı sıfırlanıyor ve buffer indexi arttırılıyor. Sinyal alımı tamamlandığında bufferın uzunluğuna ve header süresine bakarak hangi protokol olduğu anlaşılıyor. Bufferın tümü incelendiğinde de 1e ve 0a denk gelen süreleri protokol standardındaki sürelerle karşılaştırarak sinyalin değeri anlaşılıyor.

İstersen kütüphane kullanmadan 1 ve 0 geçişleri arasındaki süreleri buffera kaydedersin ve sonraki sinyalleri belirli bir tolerans vererek bu bufferla karşılaştırırsın.
Ya da kütüphaneyi kullanıp kumanda protokol türü ve değerini kaydedip, sonraki gelen sinyalleri bu kayıtla karşılaştırırsın. Birden fazla sinyal kaydetmeyi düşünüyorsan kütüphane daha mantıklı bence.
teşekkür ederim, bu konuda bir örnek verebilirmisin lütfen.

XX_CİHAN_XX

Alıntı yapılan: sinasos - 05 Ocak 2014, 22:49:51
merhaba,
herkese ayrı ayrı teşekkür ederim. sorulara sırasıyla cevap vereyim.
*pwm kısmını lambaya dimmer yaptırmak için tasarlıyorum.
*12f675 tercihim ise hpwm'e ihtiyaç duymadan pwm yapabiliyorum zaten. bunu daha önceki devrelerimde yapmıştım, onda sorun yok !
*ben bu devreyi tasarlarken evrensel olarak düşünmeyi tercih ediyorum. tek bir kumanda olsa sorun yok ! ama ben bunu yaptığımda istediğim kumandayı önce okutmayı sonra bu komutu icra etmeyi istiyorum. bunu yapabilmek için mutlaka IR protokolünü uygulamam mı gerekiyor. bunun genel bir yolu yokmu ? örneğin TK19dan gelen sinyalleri alıp bunu eproma kaydetsem sonradan da bu sinyaller geldiğinde komutu icra etsem olmazmı tarzında soruyorum. ve birde bunun yolunu  :-[

Hızlı okuduğum için pwm sinyalini kumanda devrenle ilişkilendirerek yanlış anlamışım :)
Evet pwm donanımı olan Erol abinin önerdiği çipi kullanmanda yarar var. Onun dışında IR kumanda kopyalama konusuna gelince hiç protokollerle uğraşmak istemiyorsan yapacağın en pratik yöntem TK19 dan çıkan sinyallerin high ve low sürelerini geliş sırasıyla eepromuna aynen kaydetmek. Daha sonra gelen sinyallerle kayıt aldığın sinyalleri karşılaştırarak eşitlik aramak işini pratik bir şekilde çözecektir.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.