avatar_POWER

ır kumanda

Başlatan POWER, 13 Aralık 2021, 21:55:36

POWER

#30
İyi geceler,
Elimde çözmeye çalıştığım bir kumanda var.12 bitlik bir sinyal geliyor.Hangi protokolü kullandığını bulmak için sinyal sürelerini inceledim.Sony protokolüne benziyor ama süreler tutmuyor.İlk gelen sinyallerin şekillerini ve sürelerini resim olarak ekliyorum.Sürelerini yazdığım bitler başlangıç kısmı.Burdan hangi protokolde çalıştığı hakkında yardımcı olabilirmisiniz?


ete

Asıl header sinyali görülmüyor. O sinyal ile birlikte değerlendirmek gerekir bu şekilde bir anlam ifade etmez.  Header sinyali genelde Uzunca bir LOW + kısa bir HIGH şeklinde veriliyor.
Ancak alıcı göz tarafından bu sinyal ters çevrildiği için uzun bir HIGH+Kısa LOW şeklinde de görülebilir.
Mesela SONY (SIRC) protokolünde  2,4ms HIGH (Header) SOnra 0,6 ms LOW(Header end) sinyali yollanıyor. protokol 12 bit çalışıyor. Header arkasından data bitleri geliyor.
Hemen hemen bütün protokollerde aynı durum vardır. Mutlaka bir header olmalı ki onun sayesinde data dizi başı yakalanabilsin.

Ete


POWER

Ete hocam,
Elimdeki kumandanın ve kumandadaki power(kırmızı renkli)tuşdan çıkan sinyalin tamamını ekliyorum.Sinyalin tamamı bu başka sinyal görünmüyor.Tuşa sürekli basılı tutarsam aynı 12 bitlik sinyali tekrar ediyor.Gerek olursa bu sinyallerin zamanlarını yazabilirim.Tek tek yazmam gerektiği için şimdi yazmadım.Ulaşabildiğim diğer protokollerin dökümanlarınıda inceledim onlarada uyduramadım.Nereyi atlıyorum bilemedim.





ete

#33
Protokolü anlamak için sinyalin en başını (boş noktadan başlayarak ) görmek ve peşine de bir kaç bit görmek yeterli. Sen kodaun kendisine odaklanmışsın. Oradan kod çözmeyeceğiz bu aşamada yanlızca sinyalin şeklini görmek istiyoruz. Tuşa basarbasmaz sistem kayda başlayacak o noktadan itibaren sinyal genişliğinide biraz düşürerek (daraltarak) en azından sinyalin yarısını ama en baştan görebilsek fikir yürütebilirdik.
EN azında hiç tuşa basmadan bir okutma yap bakalım sürekli LOW mu okuyor yoksa sürekli HIGH mi okuyor. Önce bunu tespit etmek lazım. Ardından sürekli ne okuyor ise hemen ardından yeni kod başlayacak işte o nokta gerekiyor.
Sinyalin başı senin resminde görülmediği için (yada biz öyle sandığımız) için protokol yorumu yapamıyoruz.

Ete

POWER

#34
Söylediğiniz gibi,tuşa basar basmaz kayıt yapmaya başladım.Kaydedilen sinyal resmini ekliyorum.Sürelerinide yazdım.
Hiç bir tuşa basmadan okutma yaptığımda sürekli low da hocam.Hıgh hiç sinyal görünmüyor.Sinyalin en başındaki süreyi,proğramın manuel ölçme özelliğini kullanarak yazdım.Bu süre, tuşa basma anı ile proğramın kayda başlama zamanına göre değişiyor gibi hocam.


ete

Yine aynı resim. En azından iki tekrarlayan sinyal aralığına bakmak lazım bana kalırsa.
Yok hiç bir şey değişmiyor sinyal bu ise ilk defa gördüğüm bir sinyal dyeceğim.

Ete

POWER

Hocam tekrarlayan iki sinyalin aralığıda bu şekilde.


ete

Şimdi oldu işte. Sinyal şekli tamamen NEC protokolüne benziyor ancak Ara bekleme süresi tutuyor ancak bit süreleri tutmuyor. Kendi içinde de sürelerde bir anormallik var aslında. Orada ben 11 bit sayıyorum 12 değil. Bu enteresan bir kodlama.

Ete

mehmet

#38
IR çözümlemesi olması lazım o programda.
Yoksa Sigrok ile deneyin.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

POWER

Alıntı yapılan: mehmet - 22 Mart 2022, 19:04:38IR çözümlemesi olması lazım o programda.
Yoksa Sigrok ile deneyin.
Hocam anlayamadım nasıl bir çözümleme?

mehmet

#40
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

POWER

Hocam kullandığınız hangisi?iki tane indirdim çalıştıramadım?

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

POWER

#43
Ete hocam,
protokolün nec olduğunu söylemeniz üzere,daha önce sizin nec'e göre yazdığınız benimde kullandığım proğramda düzeltmeleri yaptım.Kısmen çalıştı.Başlangıç biti olarak, resimde işaretlediğim süreyi mi dikkate alıp kodlarda ona göre değişiklik yapacağız.Birde 11 bitin kaç tanesi cihaz biti,kaçı tuş biti bilmediğim için son sekiz biti okuyarak işlem yaptırdım.Doğrumudur bilmiyorm.
define OSC 4
Include "MODEDEFS.BAS"
@ DEVICE pic16F628A
@ DEVICE PIC16F628A, WDT_Off
@ DEVICE PIC16F628A, LVP_Off
@ DEVICE PIC16F628A, PWRT_ON             'Power on timer açık
@ DEVICE PIC16F628A, MCLR_Off
@ DEVICE PIC16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

DEFINE PULSIN_MAX 12000
TRISA=%00000000
TRISB=%00000001        
PORTA=0
PORTB=0

OPTION_REG=%10000000  
CMCON = 7
SYMBOL LED=PORTA.6
SYMBOL IR_GOZ=PORTB.0

Paket var word 56
TAMAM VAR WORD 58
Tus   Var byte 60
IR_AL var byte(32)62
X     var byte 100
SAY   VAR WORD 102
ALDIM VAR BIT
SAYI  VAR BYTE  

INTCON=%10010000          'Kesmeler aktif ve RB0/INT kesmesi aktif
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.

SAYI=0
BASLA:
       SAY=0
    while ALDIM=0
       SAY=SAY+1
''' IF SAY=7000 THEN PORTB=0
    WEND
       ALDIM=0
       TUS=0
   for X=0 to 7
       IF IR_AL(3+X)>70 then TUS.0[X]=1    '3 bit den itibaren gelen 8 bit ise komut bitleri oluyor
   next 

IF Tus=234 THEN ' 11101010   =234 
   TOGGLE LED
ENDIF

   GOTO BASLA           

DISABLE 'yeniden kesme oluşması önleniyor  
KESME:  'program buraya geldiğinde kesme oluşmuş demektir.
         PULSIN IR_Goz,1,TAMAM   
'''  IF TAMAM >400 AND TAMAM<500 THEN  '''''''''hocam burdaki süreyi ayarlayamadım''''''''''''
         for X=0 to 10             
           pulsin IR_Goz,1,IR_AL(X)
         next 
         ALDIM=1 
'''         ENDIF 
GECGIT:
       SAY=0      
       INTCON.1=0  'RB0/INT Bayrağı (flag) silindi.
       Resume      'geldiğin yere dön.
   Enable          'kesmeler yeniden aktif.
End




ete

Kısmen çalışmış olması güzel ama sanki mucize gibi.

Verdiğin program Uzun LOW bitinden sonra gelen (Sende Uzun HIGH geliyor ters çevrilmiş olarak) kısa HIGH bitini esas alıyor. Program HIGH bakıyor ama sende LOW olarak gözüküyor bu bit.
Şayet burada şeklini gördüğümüz sinyal doğrudan pic'e giriyor ise programda değişiklik yapmak gerekecek.

1.Programın INT kesmesini düşen kenarda yapmalı. Option Register 6 cı biti bunu ayarlıyor ne tesadüfki bu düşen kenara ayarlı. Değişikliğe gerek yok.
2. Kesme içinde yer alan PULSIN IR_Goz,1,TAMAM  komutu satırı PULSIN IR_Goz,0,TAMAM şeklinde olmalı.
3.TAMAM değişkeni ölçülen sürenin ona bölünmüş değerini verir. Us cisniden bakılır ise ölçmen gereken süre 1ms=1000us ise sen onu 100 olarak ölçersin. Mantığını ona göre kurarsın.
Gerçek NEC protokolünde yaklaşık 9ms lik uzun LOW dan sonra 4,5ms lik HIGH sinyali verilir. Bunu arıyoruz aslında. Ama sendeki süreler bir garip. Üstelik bitlerin yeride ters gibi. NEC protokolünde, her bir bit çift sinyal ile ifade dilir. 1=560us HIGH + 1700us LOW sinyalinden oluşur. 0=560us HIGH + 560 us LOW dan oluşur. Dikkat edilir ise ilk bit'ler ikisinde de aynı değişen yanlızca son bit olup HIGH sinyalinde bu kısa sürenin iki katı şeklinde gelir. Bu durumda sinyali çözerken yanlızca son bitlere bakılır. Sende uzun bitler ilk bite denk geliyor sanki. Var bir terslik ama anlamak gerçekten zor. Hele uzaktan anlamak dahada zor.
Sinyal ters dönüyor ise sende ilk bitler LOW son bitler HIGH olmak durumundadır. O halde sen HIGH lara bakacaksın programda HIGH bakıyor enteresan bir şekilde.

Ete

Powered by EzPortal