C

kumanda tanıma yardım

Başlatan caglarm, 10 Mart 2012, 15:25:56

caglarm

Selam,
elimde oldukça eski,kasetli kameramda kullandığım vtr rmt 70b kodlu sony kumandam var.bu kumandayı yeni nesil sony protokolünü tanıyan sistemler tanımıyor.ben de değerlendirmek için yaptığım ses devrelerinin uk sı olarak kullanıyorum.fakat tuşlarının çoğu öğrenen alıcılarda tanınmıyor.ben de 1 adet pic16f628 ve 1 adet 16x2 lcd ile yaptığım düzenek yardımıyla tuşların sayısal değerlerini okumaya çalışıyorum.
kısaca:

basla:
symbol IR_Goz = PORTA.1
PuLSIN IR_Goz,0,PAKET

LCDOUT $FE,1,"paket " ,#PAKET
goto basla

rutini ile okuyabiliyorum.fakat aynı tuşa her basışımda farklı değerler alıyorum.nasıl bir döngü ile tuşların sayısal değerlerini öğrenip kullanabilirim?
teşekkürler.

ete

Okunan sinyali bir skopla izeleyebilsen bütün işi çözmek son derece kolaydır aslında.
Zira her bir data paketi başındabir senkron sinyali vardır. Önce o sinyalin yakalanması sonra ardından gelen data paketinina lınması gerekir. Yoksa iş çorbaya döner ve her seferinde farklı bir şey okur aletin.

Senkron yakalamak için şu komutları kullan; Paket word cinsinden bir değişken olmalı.

TUSGIR:
       PuLSIN IR_Goz,0,PAKET
       if PAKET<200 OR PAKET>270 then  BASLA

       for I=0 to 11
         pulsin IR_Goz,0,IR_AL(I)
       next

Daha sonra bu kodu ayıklaman gerekecek. Bu kodun içinde hem alet kodu (TV-VTR-vs) hemde basılan tuş kodu bulunmaktadır. Bunları ayıklamak için ise yukardaki kodun devamında  kullanılmak üzere;
      Tus=127
AYIKLA:
       For I=0 to 6
         if IR_AL(I)<80 then Tus.bit0[I]=0
       next

       Tus = Tus + 1
       If Tus=10 then Tus=0

       Cihaz=%00011111
       for I=0 to 4
         IF IR_AL(7+I)<80 then Cihaz.Bit0[I]=0
       next

Bu kodları bir alt programa verir ve GOSUB TUSBAK şeklinde bir komut verirsen program gider gelen senkron bitini bulur peşindengelen kodları okur ve en alta yerleştireceğin RETURN komutu ile geldiği yere geri döner.
Sonra sana alet ve tuş kodunu ekrana yazdırmak kalır yada gelen tus koduna göre ne yaptıracaksan onu yaparsın.

Ete

caglarm

#2
Yani:

 @ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_on
@ DEVICE pic16F628A, PWRT_On
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16F628A, MCLR_On
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

DEFINE LCD_DREG PORTB  ' Lcd nin data pinleri porta'ya bağlı
DEFINE LCD_DBIT 0      ' Lcd data bağlantısı 0. pinden sonra sıralanacak
DEFINE LCD_RSREG PORTA ' RS pini portb'ye bağlı
DEFINE LCD_RSBIT 2     ' RS pin 0. bite bağlı
DEFINE LCD_EREG PORTA  ' E pini portb'ye bağlı
DEFINE LCD_EBIT 3      ' E biti 1. pine bağlı
DEFINE LCD_BITS 4      ' 4 bitlik veri yolu kullanılıyor
DEFINE LCD_LINES 4     ' LCD 4 bitlik
DEFINE LCD_COMMANDUS 2000 
DEFINE LCD_DATAUS 50
DEFINE OSC 4

IR_AL var word
Paket var word
I     var Byte
Tus   Var Byte
Cihaz Var Byte
TRISA=%00000011
TRISB=%00000000
symbol IR_Goz = PORTA.1
OPTION_REG.7=0
CMCON=7


BASLA:
     
     LCDOUT $FE,1,  "Tus kodu  : ",#Tus," "
     LCDOUT $FE,$C0,"Cihaz Kodu: ",#Cihaz," "
 
  PuLSIN IR_Goz,0,PAKET
       if PAKET<200 OR PAKET>270 then  BASLA

       for I=0 to 11
         pulsin IR_Goz,0,IR_AL(I)
       next
       
       Tus=127
AYIKLA:
       For I=0 to 6
         if IR_AL(I)<80 then Tus.bit0[I]=0
       next

       Tus = Tus + 1
       If Tus=10 then Tus=0

       Cihaz=%00011111
       for I=0 to 4
         IF IR_AL(7+I)<80 then Cihaz.Bit0[I]=0
       next
goto basla 

  END


şeklinde uygular isem lcd de o an basılan kodu görebilir miyim?
bir de ayıkla rutinine nerden dallandığını anlayamadım..

ete

Yalnızca tuş kodu göreceksen alt program şeklinde yazmaya gerek yok. Yazdığın programı yerinde düzelttim.
Bak ve aynısını kullan.

Ete

caglarm

evet,amacım sadece basılan tuş karşılığında kullanabileceğim sayısal değeri görmek..daha sonra başka devrede kullanır iken örneğin;

if değer= 234 then  led1=1
if değer= 235 then  led2=1
if değer= 236 then  led3=1
gibi kullanmak.

Powered by EzPortal