avatar_elektro77

HC595 leri süremiyorum.

Başlatan elektro77, 20 Nisan 2024, 01:50:54

elektro77

Alıntı yapılan: ete - 21 Nisan 2024, 11:08:42Yanacak ledi tespit etmede başka bir algoritma kullandım ve program epeyce kısaldı.
Yenisi ilişiktedir.

Ete

Hocam ellerinize aklınıza sağlık;
Ancak programda bir hantallık oluşmuş gibi. Tuş tepkileri hızlı değil. Tuşa bazen uzun basmak veya bir kaç kere basmak gerekebiliyor. Özellikle oto modda iken stop tuşu ve sil tuşu hızlı algılamıyor. Basılı tutmak gerekebiliyor. Galiba pause sürelerinden kaynaklı bir durum. Ben kurcalamadan size bir sorayım istedim.
Birde pot_mod da pot sıfırda iken 1.led hala yanık kalıyor. Sönmesi gerek.
Son olarak lcd de ise 48 den sonra tekrar 1 den yazmaya başlaması gerek. Ama 49 dan devam ediyor.
48.led yanınca hemen ekrana bakarsanız ekranın 48 olmadığını görebiliriniz. Bu da ekrana yazma gecikmesi sorunu olmalı.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Bende program epeyce hızlı çalışıyor yavaşlama gibi bir şey yok.
Üstelik program kısalınca otomatikman hızlanması da gerekirdi.
Yavaş çalışan neresi daha spesifik bilgi verebilirsen farklı bakarım.

POt_MOD da ;
IF YAK=0 THEN YAK=1
komutunu silersen yada kapatırsan o dediğin kusur ortadan kalkacaktır
Ben farklı düşünmüştüm sen daha farklı düşünüyorsun bu konularda.

Ete

elektro77

Alıntı yapılan: ete - 21 Nisan 2024, 15:53:23Bende program epeyce hızlı çalışıyor yavaşlama gibi bir şey yok.
Üstelik program kısalınca otomatikman hızlanması da gerekirdi.
Yavaş çalışan neresi daha spesifik bilgi verebilirsen farklı bakarım.

POt_MOD da ;
IF YAK=0 THEN YAK=1
komutunu silersen yada kapatırsan o dediğin kusur ortadan kalkacaktır
Ben farklı düşünmüştüm sen daha farklı düşünüyorsun bu konularda.

Ete
Örnegin start tusuna basılıp ledler otomatik olarak yanmaya başladığında stop veya sil tusu hemen algılamıyor. Basılı bekletmek gerekiyor gibi.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

#18
Bu tuşlar bende çok hızlı tepki veriyor.
Programda sıkıntı yok.
PC'in yavaş ise bu dediklerin olabilir.
Programa gecikmeye sebep olabilecek kod eklemesi olarak yalnızca ;
        for I=0 to 5
         sayac[I]=0
        next 
        RETURN 
eklendi. topu topu 6 adımlık bir döngü gecikmesiz çalışıyor ve normalde işlemcide bir gecikme yaratmaz. Senin hissettiğin bunun etkisi olsa gerek.

Ete

elektro77

Alıntı yapılan: ete - 21 Nisan 2024, 23:18:53Bu tuşlar bende çok hızlı tepki veriyor.
Programda sıkıntı yok.
PC'in yavaş ise bu dediklerin olabilir.
Programa gecikmeye sebep olabilecek kod eklemesi olarak yalnızca ;
        for I=0 to 5
         sayac[I]=0
        next 
        RETURN 
eklendi. topu topu 6 adımlık bir döngü gecikmesiz çalışıyor ve normalde işlemcide bir gecikme yaratmaz. Senin hissettiğin bunun etkisi olsa gerek.

Ete
PAUSE SÜRE kodu bu bahsettiğime neden olmaz mı?
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Bu gecikmeyi pot'dan okunacak şekilde 1000ms (999ms) maksimum olacak şekilde ayarlamışsın.
Elbette bu gecikme süresi tamamlanmadan buton kontrolüne geçilmiyor.
Bu sorunu ortadan kaldırmak için Timer kontrollü bir gecikme alt programı hazırlanabilir orada hem gecikme sağlanır hemde buton kontrolleri yapılabilir.
Örnek vereyim;
Pause SURE komutu yerine;
GOSUB GECIKME komutunu yazarsın. Alt tarafta GECIKME isimli bir etiket altına şunları yazarsın.
GECIKME:
  ARA=0
 FOR W=0 to SURE
    PAUSE 1
    IF SIL=0 THEN
      ARA=1:RETURN
    ENDIF
    IF STOPP=0 THEN
      ARA=2:RETUN   
 NEXT
 RETURN
Tekrar yukarı kısma dönerek bu seferde dönüş kontrolü yapmak gerekir.
GOSUB GECIKME:IF ARA=1 THEN SILDIR
IF ARA=2 THEN DURDUR
şeklinde
ARA değişkenini gidilen yerlerde sıfırlamak iyi olur.

Bu şekilde yaparsan bu gecikmeden hissinden kurtulursun.
Ben sorun yok derken normal bir pot değeri ile çalışmayı kast etmiştim.
Bana göre orada 999 ms lik bir gecikmeye gerek yok an fazla 300-400 ms olsa yeterli buda sorun yaratmaz. Ama sen epeyce yavaşlasın istemişsin bu durumda ya basılma süresine katlanacak yada dediğimi yapacaksın.
Bir şeyi unutma, 0 dan 999 a kadar çalışşacak bir döngüsel gecikmede arada 1 ms lik gecikmede olursa bu döngü sana 999 dan daha fazla gecikme yaratır. Bu nedenle pause 1 yerine pauseus 800 gibi bir değer kullanman gerekebilir. Bu fazladan gecikmeyi komut gecikmesi yaratır.
Daha hassas bir gecikme alt programı Timer-1 sayacı kullanılarak yapılabilir. Her bir kesmesi 1ms olan bir döngü yaratılır ve Süre adedi kadar kesme sayılır. Arada buton kontrolü yapılır.
Gördüğün gibi bu işin bir çok yolu var.

Ete
 
 

elektro77

Acemice ama aşağıdaki örnekteki gibi, 250mS lik ara dilimler içinde tuşlara bakmak ta bir yöntem sayılabilir mi hocam.
oto=1 
   WHILE oto=1 
      SAY=SAYAC[INDEX]
        ONCEKI=SAY        
        'IF ADET=48 THEN BASLA
        SAY=SAY*2:ADET=ADET+1
        IF SAY=0 THEN SAY=1
        IF SAY=1 AND ONCEKI=128 THEN
          SAYAC[INDEX]=0:ONCEKI=0
          INDEX=INDEX+1
          IF INDEX=7 THEN INDEX=0
        ENDIF
        SAYAC[INDEX]=SAY
        GOSUB AKTAR
        WHILE UP=0:WEND
             PAUSE sure  '(0...250mS)
             IF STOPP=0 THEN
             OTO=0
             ENDIF
             PAUSE sure  '(0...250mS)
             IF STOPP=0 THEN
             OTO=0
             ENDIF
             PAUSE sure  '(0...250mS)
             IF STOPP=0 THEN
             OTO=0
             ENDIF
             PAUSE sure  '(0...250mS)
             IF STOPP=0 THEN
             OTO=0
             ENDIF
   WEND
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Oraya 3 adet pause süre yazarsan 3000 ms gecikme olur. Her birine pause sure/3 yazarsan olur sürede seni kurtarıyor ise yoksa değişken değerli bir yere sabit 250 ms gecikme olmaz
Ete

ete

Bir deneme yaptım. Aşağıdaki gibi bir gecikme alt programı ekledim.
Otomatik kısmında ise "Pause Sure" komut satırı yerine GOSUB GECIKME yazdım sadece.
Bu sistemle, sil butonu veya Stop butonu anında tepki verebilmektedir. Başka çözüm aramaya hiç gerek yok.
GECIKME:
        FOR W=0 TO SURE
            PAUSEUS 850
            IF STOPP=0 OR SIL_BUTON=0 THEN RETURN
        NEXT
        RETURN 

ete

elektro77

Alıntı yapılan: ete - 24 Nisan 2024, 20:41:11Bir deneme yaptım. Aşağıdaki gibi bir gecikme alt programı ekledim.
Otomatik kısmında ise "Pause Sure" komut satırı yerine GOSUB GECIKME yazdım sadece.
Bu sistemle, sil butonu veya Stop butonu anında tepki verebilmektedir. Başka çözüm aramaya hiç gerek yok.
GECIKME:
        FOR W=0 TO SURE
            PAUSEUS 850
            IF STOPP=0 OR SIL_BUTON=0 THEN RETURN
        NEXT
        RETURN 

ete
Çok teşekkür ederim Hocam. Çok iyi olmuş. Hemen deneyeceğim. Zaten çalışacağına da eminim.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal