avatar_POWER

ır kumanda

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

POWER

Herkese iyi geceler,
ır kumanda ile şerid ledin parlaklığını değiştirmek için, eklediğim kodları kullanıyorum.İlgili tuşa tek tek basarak parlaklık ayarlanıyor,fakat tuşa sürekli basarak aynı işlemi seri olarak yaptıramıyorum.Bunun için nasıl bir yol izlemeliyim?
@ 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

PORTB=0
PORTA=0
TRISB=%00000001        
TRISA=%00000000
OPTION_REG=%00000000  
CMCON = 7
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
Z     var BYTE 101
SAY   VAR WORD 102
ALDIM VAR BIT
ILK   var bit
XZ    VAR WORD 
DUTY  VAR BYTE  

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

T2CON =%000000101
PR2=49                   
CCP1CON.2=1  
CCP1CON.3=1

DUTY=1
GOSUB AYAR
DUTY=50
GOSUB AYAR

BASLA:
   SAY=0
    while ALDIM=0
       SAY=SAY+1
 IF SAY=1400 THEN PORTB=0  '700
    WEND
       ALDIM=0 
       TUS=0
   for X=0 to 7
       IF IR_AL(16+X)>70 then TUS.0[X]=1 
   next 

IF Tus=%01000110 THEN 
    DUTY=DUTY+5
    PAUSE 10
    GOSUB AYAR
    GOTO BASLA
ENDIF
           
IF Tus=%01000101 THEN 
   DUTY=DUTY-5
   PAUSE 10
   GOSUB AYAR
   GOTO BASLA            
endif

GOTO BASLA           

AYAR:
     XZ=DUTY
    CCP1CON.4=XZ.0
    CCP1CON.5=XZ.1
    CCPR1L=XZ>>2   
RETURN 

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        
         for X=0 to 31      ' 31
           pulsin IR_Goz,1,IR_AL(X) '1  'YALNZCA low BİTLERİNİ ALIP SÜRESİNİ KAYIT EDİYORUZ
         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		

alisumer

iyi geceler ir girişini kesme işleminde yakalıyorsun ve sayımı da kesme içerisinde yapıyorsun anladığım kadarıyla ir protokolu değil de düşük ve yüksek süreleri ile karar veriyorsun(ir ile hiç çalışmadım yanılıyor olabilirim) şöyle bir problem olma olasılığı yokmu diyelim aynı uzunlukta low sinyalli başka bir kumanda sinyali sistemine kafa karıştırmazmı? kesme içerisinde gelen sinyallerin süresi tuşa basılma uzunluğuna göre uzayacaktır sabit bir sayıyı okuduğun uzunluğa bölüp pwm sinyali olarak değişen bir aralıkta çıkartabilirsin ama en başta dediğim gibi bu iş kumanda seçmez hangi tuşa basarsan bas belli bir uzzunlukta yüksek ve düşük sinyal üreteceğinden bütün tuşlar aynı işi yapar tuşları nasıl ayırt ediyorsun?
Hep meraktan

aRci

Merhaba
Birkere ir kumanda projesi yapmıştım aklımda kaldığı kadari ile ilk tuşa basildiginda tuş değeri gönderiliyor eğer tuşa basmaya devam edilirse basılı kaldığı süre boyunca sabit bir değer tekrarlıyor. Mümkün ise kumandadan gelen Rus değeri i bir serial ekranda görecek şekilde kontrol edin.
Tuşa basıldığında arrtirma veya eksiltme işlemi yapıldığında gelen Rus degerini bir degiskene Atay'ın sonraki gelen Rus değeri tekrar değer ise önceki tuş değeri ne ise aynı işlemi tekrarlayabilirainiz

ete

Program öncelikle basıl tuş kodlarını çözümleyerek hangi tuşa basıldığını tespit ediyor. Bir tusa basıldığını da Aldım=1 yaparak programa bildiriyor.
Bu durumda önce bir tusa basıldığını tespit edip tuşa karşılık gelen işlemi başlatmak daha sonra işlemi sonlandırmadan önce aynı tuşa hala basılıyormu kontrol etmek gerekir.
Programda bir tuşa basıldığını tespit ettikten sonra tuş kodu çözülüyor ve ardından tuşa karşılık gelen bir işlem başlatılıyor. Diyelimki aşağıdaki işlem başlatılıyor.
IF Tus=%01000110 THEN 
    DUTY=DUTY+5
    PAUSE 10
    GOSUB AYAR
    GOTO BASLA
ENDIF
Aynı kodu işlem devam ettiği sürece yapmak için
IF Tus=%01000110 THEN 
TUSA:   
    DUTY=DUTY+5
    GOSUB AYAR
    GOSUB DELAY  'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
    ESKI=TUS
    IF ALDIM=1 THEN GOSUB AYIKLA
    IF ESKI=TUS THEN TUSA           
    GOTO BASLA
ENDIF
Şeklinde değiştirmek gerekir. Tabiiki programada ESKI VAR byte isimli bir değişken eklemek ve tuş ayıklama (çözme) kısmını bir alt programa vermek gerekir. Burada AYIKLA isimli bir alt program oluşturduk ve oraya;
AYIKLA:
       ALDIM=0 
       TUS=0
   for X=0 to 7
       IF IR_AL(16+X)>70 then TUS.0[X]=1 
   next 
   return 

kodlarını ekledik. Ayrıca Pause 10 yerine GOSUB DELAY isimli satırı yazdık. Çünki gecikme yaratılırken de programın kesme ile tuşa basıldığını tespit etsin istiyoruz. Bu nedenle Delay alt programı aşağıdaki gibi olamlı.
DELAY:
FOR W=0 TO 5000 
PAUSEUS 5
NEXT
RETURN
W VAR WORD şeklinde bir başka değişken tanımlamak gerektiğini alamışsındır.
Gecikme yeterli gelmiyor ise yada fazla ise döngü limiti 5000 yerine daha az yada daha fazla yapılarak denenmeli uygun değerde bırakılmalıdır.
Şimdi tekrar ne yaptığımıza bakacak olursak;
Kumanda da bir Tuşa basıyoruz . O tuşa karşılık olan işe satırına geliyoruz. ve ilk işlemi ;
    DUTY=DUTY+5
    GOSUB AYAR
    GOSUB DELAY
kodları ile başlatıyoruz. Ardından basılan tuş kodunu ESKI=TUS şeklinde kayda alıp daha sonra Tuşa basılmaya devam ediliyormu diye bakıyoruz. ALDIM=0 ise basılmıyor , ALDIM=1 olmuş ise hala tuşa basılıyor demek oluyor deyip yeniden basılan tuşu AYIKLA isimli alt programda çözümleyip eskisi ile aynımı değilmi bakıp kontrol ettikten sonra aynı ise aynı işlemi devam ettiriyoruz. Hepsi bu kadar. Çalışacağını umuyorum. Deneyip sonuç bildir lütfen.

Ete

POWER

#4
Ete hocam iyi çalışmalar,
belirttiğiniz ve verdiğiniz kodları toparladım ve gerçek devresinde denedim.Çalışıyor fakat,tuşdan elimi bıraksam dahi işleme devam ediyor.Yani arttırma tuşuna bir sefer basıp bıraksam dahi led parlaklığı artıyor,artıyor bir yerden sonra en başa dönüyor.Yani ledler en kısık duruma geliyor,tekrar yükseliyor,yükseliyor bu döngü sürekli bu şekilde devam ediyor taki başka herhangi bir tuşa basılıncaya kadar.Başka tuşa basıldığında ledlerin parlaklığı hangi aşamada ise orda kalıyor.Anladığım kadarıyla duty değişkeni sürekli artı yönde sayıyor.Düzeltebilmek için uğraştım ama düzeltemedim hocam.
@ 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

PORTB=0
PORTA=0
TRISB=%00000001        
TRISA=%00000000
OPTION_REG=%00000000  
CMCON = 7
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
Z     var BYTE 101
SAY   VAR WORD 102
ALDIM VAR BIT
ILK   var bit
XZ    VAR WORD 
DUTY  VAR BYTE  
ESKI  VAR BYTE
W     VAR WORD
INTCON=%10010000          'Kesmeler aktif ve RB0/INT kesmesi aktif
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.

T2CON =%000000101
PR2=49                   
CCP1CON.2=1  
CCP1CON.3=1


DUTY=1
GOSUB AYAR
DUTY=50
GOSUB AYAR

BASLA:
   SAY=0
    while ALDIM=0
       SAY=SAY+1
       IF SAY=700 THEN PORTB=0  '700
    WEND
    GOSUB AYIKLA

IF Tus=%01000110 THEN 
TUSA:   
    DUTY=DUTY+10  'DİM ARTIRILDI
    GOSUB AYAR    'DIM VERİLDİ
    GOSUB DELAY   'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
    ESKI=TUS      'ESKI=TUS YAPILDI
    IF ALDIM=1 THEN GOSUB AYIKLA
    IF ESKI=TUS THEN TUSA
    ALDIM=0:TUS=0
    GOTO BASLA
ENDIF
           
IF Tus=%01000101 THEN 
TUSB:   
    DUTY=DUTY-10
    GOSUB AYAR
    GOSUB DELAY  'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
    ESKI=TUS
    IF ALDIM=1 THEN GOSUB AYIKLA
    IF ESKI=TUS THEN TUSB  
    ALDIM=0:TUS=0        
    GOTO BASLA
ENDIF

GOTO BASLA           

AYIKLA:
       ALDIM=0 
       TUS=0
   for X=0 to 7
       IF IR_AL(16+X)>70 then TUS.0[X]=1 
   next 
   return 

DELAY:
FOR W=0 TO 5000 
PAUSEUS 5
NEXT
RETURN   

AYAR:
     XZ=DUTY
    CCP1CON.4=XZ.0
    CCP1CON.5=XZ.1
    CCPR1L=XZ>>2   
RETURN 

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        
         for X=0 to 31      ' 31
           pulsin IR_Goz,1,IR_AL(X) '1  'YALNZCA low BİTLERİNİ ALIP SÜRESİNİ KAYIT EDİYORUZ
         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

#5
Senin kod'a bir iki ilave yaptım. Kopyalayıp yeniden derle ve dene bakalım düzelecekmi.
Normalde çalışması gerekirdi gözden kaçan bir nokta var gibi ama somut bir şey bulamadım.
Aldım=0 yaptıktan sonra tuşa basmadığın müddetçe ALdım=0 da kalır. Buda tuşa basılmadığının işaretidir.
Ayrıca TUS=0 yapıldıktan sonra yeni tuş değeri gelmedikçe oda sıfırda kalması gerekir.
Bu durumda tuşu bırakır bırakmaz tus değeri sıfırlanacak ve Aldım değeri ise sıfırda kalacaktır. Yada öyle olmasını umuyoruz. Bunu sağlamlaştırmak için if-then sorgusuna bunu sağlayacak komutları ekledim. Umarım işe yarar. Sanki tuşu bırakınca TUS değeri ile Aldım sıfırlanmadan kalıyor gibi .
Neyse denemeyi yapıp bak ve sonucu bildir lütfen.
Sonuç Yine olumsuz olursa, aşağıdaki değişikliği yapıver,
IF Tus=%01000110 THEN 
TUSA:
     ESKI=TUS:ALDIM=0:TUS=0 
     DUTY=DUTY+10  'DİM ARTIRILDI
     GOSUB AYAR    'DIM VERİLDİ
     GOSUB DELAY   'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
     IF ALDIM=1 THEN GOSUB AYIKLA
     IF ESKI=TUS THEN TUSA
     ALDIM=0:TUS=0
     GOTO BASLA
ENDIF
bu birisi diğeride

IF Tus=%01000101 THEN 
TUSB: 
     ESKI=TUS:ALDIM=0:TUS=0    
     DUTY=DUTY-10
     GOSUB AYAR
     GOSUB DELAY  'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
     IF ALDIM=1 THEN GOSUB AYIKLA
     IF ESKI=TUS THEN TUSB  
     ALDIM=0:TUS=0        
    GOTO BASLA
ENDIF

Ete

POWER

Hocam kodu yükledim,sorun ilk haline döndü.Yani tuş seri olarak çalışmıyor.bas-bırak şeklinde sorunsuz şekilde çalışıyor.Tuşa basılı tutarsam bir kademe ledin parlaklığını değiştiriyor o kadar.

ete

daha başka bir mantık yürütmek lazım demekki.
Düşüneceğim.

Ete

ete

Birde aşağıdakini dene bakalım.
Ete


@ 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

PORTB=0
PORTA=0
TRISB=%00000001        
TRISA=%00000000
OPTION_REG=%00000000  
CMCON = 7
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
Z     var BYTE 101
SAY   VAR WORD 102
ALDIM VAR BIT
ILK   var bit
XZ    VAR WORD 
DUTY  VAR BYTE  
ESKI  VAR BYTE
W     VAR WORD
INTCON=%10010000          'Kesmeler aktif ve RB0/INT kesmesi aktif
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.

T2CON =%000000101
PR2=49                   
CCP1CON.2=1  
CCP1CON.3=1


DUTY=1
GOSUB AYAR
DUTY=50
GOSUB AYAR

BASLA:
      SAY=0
      while ALDIM=0
        SAY=SAY+1
        IF SAY=700 THEN PORTB=0  '700
      WEND
      GOSUB AYIKLA
      
      IF Tus=%01000110 THEN 
TUSA:   
        DUTY=DUTY+10  'DİM ARTIRILDI
        GOSUB AYAR    'DIM VERİLDİ
        GOSUB DELAY   'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
        ESKI=TUS      'ESKI=TUS YAPILDI
        ALDIM=0
        SAY=0
        WHILE ALDIM=0
          say=say+1
          IF say=500 THEN EXIT
        WEND
        IF SAY=500 THEN TUS_CIK
        IF ALDIM=1 THEN GOSUB AYIKLA
        IF ESKI=TUS THEN TUSA
        GOTO TUS_CIK
      ENDIF
           
      IF Tus=%01000101 THEN 
TUSB:   
        DUTY=DUTY-10
        GOSUB AYAR
        GOSUB DELAY  'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
        ESKI=TUS
        ALDIM=0:SAY=0
        WHILE ALDIM=0
          SAY=SAY+1
          IF SAY=500 THEN EXIT
        WEND  
        IF SAY=500 THEN TUS_CIK
        IF ALDIM=1 THEN GOSUB AYIKLA
        IF ESKI=TUS THEN TUSB  
      ENDIF
TUS_CIK:
      ALDIM=0:TUS=0
      GOTO BASLA           

AYIKLA:
       ALDIM=0 
       TUS=0
       for X=0 to 7
          IF IR_AL(16+X)>70 then TUS.0[X]=1 
       next 
       return 

DELAY:
      FOR W=0 TO 1000 
        PAUSEUS 5
      NEXT
      RETURN   

AYAR:
     XZ=DUTY
     CCP1CON.4=XZ.0
     CCP1CON.5=XZ.1
     CCPR1L=XZ>>2   
RETURN 

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        
         for X=0 to 31      ' 31
           pulsin IR_Goz,1,IR_AL(X) '1  'YALNZCA low BİTLERİNİ ALIP SÜRESİNİ KAYIT EDİYORUZ
         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

POWER

Hocam,
proğramda "exıt" isimli alt proğram yok.ekleyeceğim ama burda ne yapılacak onu bilemedim.dolayısıyla sizin kodu derleme yapamadım.Bir kaç altarnatif denedim ama olmadı.

ete

EXIT bir alt program değil While - wend döngüsü dışına (wend sonrasına) çıkarma komutudur.
Galiba 2,60 versiyonda bu komut yok. Bu durumda Wend dan sonraki satıra bir etiket ismi ver EXIT yerine GOTO ETIKET şeklinde değiştir sistemi.
Ete
 

POWER

Hocam aşağıdaki şekilde değiştirdim.Tuş bas bırak şeklinde çalışıyor ama seri alarak çalışmıyor.
      IF Tus=%01000110 THEN 
TUSA:   
        DUTY=DUTY+10  'DİM ARTIRILDI
        GOSUB AYAR    'DIM VERİLDİ
        GOSUB DELAY   'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
        ESKI=TUS      'ESKI=TUS YAPILDI
        ALDIM=0
        SAY=0
        WHILE ALDIM=0
          say=say+1
          IF say=500 THEN GOTO ETIKET
        WEND
 ETIKET:     
        IF SAY=500 THEN TUS_CIK
        IF ALDIM=1 THEN GOSUB AYIKLA
        IF ESKI=TUS THEN TUSA
        GOTO TUS_CIK
      ENDIF

ete

#12
Aşağıdaki kodu dene. Bu programda WDT kesin OFF olmalı. denemelerimde hep wdt nin programı resetlediğini görmüştüm. Şimdi simulasyonda deniyorum orada istenildiği gibi çalışıyor.
Bazı satırları çıkardım. Delay kısmınıda çıkardım çünki kodun alınması yeniden değerlendirilmesi zaten bir vakit alıyor. Çok hızlı dim yaparsa gerekirse yeniden açıp ufak sürelerden başlayarak denersin.
Ete

@ 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

PORTB=0
PORTA=0
TRISB=%00000001        
TRISA=%00000000
OPTION_REG=%00000000  
CMCON = 7
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
Z    var BYTE 101
SAY  VAR WORD 102
ALDIM VAR BIT
ILK  var bit
XZ    VAR WORD 
DUTY  VAR BYTE  
ESKI  VAR BYTE
W    VAR WORD
INTCON=%10010000          'Kesmeler aktif ve RB0/INT kesmesi aktif
ON INTERRUPT GoTo KESME  'kesme oluşursa KESME adlı etikete git.

T2CON =%000000101
PR2=49                  
CCP1CON.2=1  
CCP1CON.3=1


DUTY=1
GOSUB AYAR
DUTY=50
GOSUB AYAR

BASLA:
      SAY=0:ALDIM=0
      while ALDIM=0:wend
      GOSUB AYIKLA

TUSA:      
      IF Tus=%01000110 THEN    
        DUTY=DUTY+10  'DİM ARTIRILDI
        GOSUB AYAR    'DIM VERİLDİ
'        GOSUB DELAY  'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
        ALDIM=0:SAY=0
        WHILE ALDIM=0
          SAY=SAY+1
          IF SAY=800 THEN CIKA
        WEND      
CIKA:
        ALDIM=0
        IF SAY=800 THEN BASLA
        GOSUB AYIKLA
        GOTO TUSA
      ENDIF          
      
      
TUSB:          
      IF Tus=%01000101 THEN    
        DUTY=DUTY-10
        GOSUB AYAR
'        GOSUB DELAY  'yaklaşık 10 ms lik bir gecikme verdirecek alt program olmalı döngüsel olarak
        ALDIM=0:SAY=0
        WHILE ALDIM=0
          SAY=SAY+1
          IF SAY=800 THEN CIKB
        WEND  
CIKB:        
        ALDIM=0
        IF SAY=500 THEN BASLA
        GOSUB AYIKLA
        GOTO TUSB
      ENDIF
TUS_CIK:
      ALDIM=0:TUS=0
      GOTO BASLA          

AYIKLA:
      ALDIM=0 
      TUS=0
      for X=0 to 7
          IF IR_AL(16+X)>70 then TUS.0[X]=1 
      next 
      return 

DELAY:
      FOR W=0 TO 1000 
        PAUSEUS 5
      NEXT
      RETURN  

AYAR:
    XZ=DUTY
    CCP1CON.4=XZ.0
    CCP1CON.5=XZ.1
    CCPR1L=XZ>>2  
RETURN 

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        
        for X=0 to 31      ' 31
          pulsin IR_Goz,1,IR_AL(X) '1  'YALNZCA low BİTLERİNİ ALIP SÜRESİNİ KAYIT EDİYORUZ
        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

Sanırım asıl sorun NEC sisteminde tuşa basılı tutmakla aynı kodun sürekli olarak çıkışa verilmesi gerçekleşmiyor. Sorun kesinlikle kumanda da olmalı. Tuşa basılı tutarak kod tekrarı yapmıyor bu sistem.
Bunu skop ile sinyal çıkışına bakarak anlamak lazım.

Ete

POWER

#14
iyi çalışmalar hocam,
son kodlarıda denedim.Yükseltme yönünde çalışan tuş tek tek işlem yapıyor.Eksiltme yönünde çalışan tuşa bir kez basıldığı zaman daha önceden bahsettiğim gibi sonsuz döngüye giriyor ve parlaklık sürekli değişiyor.
Son mesajınızdan sonra analyzer ile baktım.Tuşa sürekli basılı tutsam dahi esas 32 bit kod gönderiyor ver arkasından sürekli sabit bir şeyler gönderiyor.birinci resim kumandanın kodları,ikinci ve üçüncü resimde sabit gönderilen kodlar.proğramdan kayıt yapamadığımdan ekran görüntülerini aldım.
Hocam,32 bitten sonraki sabit gönderilen kodlara bakılarak bir şeyler yapılamazmı?






Powered by EzPortal