7segment tarama yöntemi ile menü olusturma

Başlatan Ömerkaya, 29 Mayıs 2021, 16:59:43

elektro77

Ben deneyemiyorum ama haklısın. Kesme olan bir programda pause komutu kullanılmamalı. Çünkü pause komutu isleninceye kadar program kesmeye gitmez orada kalır . Burada ete hocamın yorumunu alalı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

Kod ekleme kısmı mesaj kutusunu açtığın zaman üstte yer alan buton guruplarından sağdan sola doğru üçüncü gurupta ortada yer alan butondur. Kursörü üzerine götürdüğün zaman hemen kenara Code yazısı çıkar oradan anlarsın. Tıkladığın zaman ekrana Code etiketlerini ekler. Bu iki etiket arasına sen kendi kodlarını yerleştirirsin olur biter.

If ARTIR=1 Then
              DELAYS=150:EKLE=0
              While ARTIR=1
                SAAT=saat+1
                EWrite 10,[SAAT]
                If SAAT=24 Then SAAT=1
                EKLE=EKLE+1:If EKLE=5 Then DELAYS=50             
                DelayMS DELAYS
              Wend             
            EndIf
Kesme kullanılan programlarda Pause kullanamazsın. Ancak proton da donanımsal kesme kullanılarak yapılabildiğini duyuyorum kendim denemedim.
Peki ne yaparız tabiiki aynı gecikmeyi yaratacak döngüsel gecikme kullanırız. Yukarıdaki kodlarda yer alan "DelayMS DELAYS" yerine GOSUB GECIKME dersin ve Gecikme etiketi altına şunları yazabilirsin.
Gecikme:
FOR w=0 to DELAYS
  delayus 5
  delayus 5
  delayus 5
  delayus 5
next
return
Her bir delaus komutu 5us lik bir gecikme ve bir döngü toplamda 20us gecikme yaratıyor. Dongü komut gecikmesi ile bunu yaklaşık 40 us gecikme olarak kabul edersek 1 ms=1000us olduğunuda göz önüne alırsak 1000/40=25 değerini kullandığımızda 1 ms lik bir gecikme döngüsü yaratmış oluruz.
O halde 100ms için 250, ve 50ms için de 125 sayılarını Delays değişkenine vermek gerekir.
Bu yanlızca teorik bir hesapdır. Doğruda olabilir biraz eksik de çıkabilir. Doğrusunu deneyerek bulabilirsiniz.

Ete



Ömerkaya

ete hocam iyi aksamlar söylediğiniz gibi yaptım butona basınca ekranda tarama duruyor saat değeri butona bastığımda 08 ise butondan elimi çektiğimde 18,20 vs oluyor while...wend komutu sanırım taramayı  durduruyor
bu sekilde while wend komutların icinde yaparsam çalışıyor

    If ARTIR=1 Then
         DELAYS=250:EKLE=0
          While ARTIR=1
           SAAT=saat+1
            EWrite 10,[SAAT]
            If SAAT=24 Then SAAT=0 : nop :EKLE=0
             EKLE=EKLE+1:If EKLE=5 Then DELAYS=40 
        
        D=24 :GoSub AL :DISPLAY1=SAYI                                                                      
        D=0 :GoSub AL :DISPLAY2=SAYI                                                                                    
        D=SAAT Dig 1:GoSub AL :DISPLAY3=SAYI                                                                                  
        D=SAAT Dig 0 :GoSub AL :DISPLAY4=SAYI         
        
              GoSub Gecikme 
        Wend             
        EndIf   
        

delayms olarak yaptım delayus yaptıgımda çok hızlı sayıyor sayılar gözükmüyor. deneme kartında bu sekilde taramada iyi oldu hocam.

   Gecikme:
For w=0 To DELAYS
  DelayMS 2
   DelayMS 2

Next
Return 

Ömerkaya

#18
ete hocam bu şekilde yaptım arttır butonu çalışıyor. deneme kartında denedim hocam. ama  Azalt butonununa aynı işlemi yaptığımda  azalt 0 oldugu için hata veriyor çalışmasında.

  
       If ARTIR=0 Then   DELAYS=250:EKLE=0 ;arttır butonu bırakıldığında delays250 , ekle 0
        If ARTIR=1 Then
        ;While ARTIR=1 ;WHİLE ..WEND  komutları iptal olacak
           SAAT=saat+1
            EWrite 10,[SAAT]
            If SAAT=24 Then SAAT=0 
             EKLE=EKLE+1
             If EKLE=5 Then DELAYS=40 
              GoSub Gecikme 
            ; Wend             
            EndIf   

aRci

Merhaba tam olarak konuya hakim değilim ancak azalt işleminde eğer saati eksi işlemi uygulayıp sonra kontrol ediyorsanız saat değişkeni 255 değeri alacaktır burada sıfıra eşittirse kısmı yanlış olabilir.

Ömerkaya

#20
Alıntı yapılan: aRci - 05 Haziran 2021, 21:48:02Merhaba tam olarak konuya hakim değilim ancak azalt işleminde eğer saati eksi işlemi uygulayıp sonra kontrol ediyorsanız saat değişkeni 255 değeri alacaktır burada sıfıra eşittirse kısmı yanlış olabilir.
arci merhaba elektro77 menü programı için degerleri artırmada ve azaltmada ete hocanın kodlarını önermisti
kodları ekledim sorunlar şu sekilde
1.arttır butonuna basıldığında ekranda degerlerde degişim olmuyor butonu bırakınca degerler degişmiş bir sekilde geliyor.
2.while ...wend komutlarının arasına tarama bölümününü bıraktığımda menüye geldigimde o menü arttır butonuna basılmadığı sürece gözükmüyor.



elektro77 nin önerdigi kodlar.

 IF YUKARI=1 THEN
              Z=300:EKLE=0
              WHILE YUKARI=1
                saat=saat+1
                IF saat=24 THEN saat=1
                EKLE=EKLE+1:IF EKLE=5 THEN Z=50              
                PAUSE Z
              WEND              
            ENDIF
                
            IF ASAGI=1 THEN
                Z=300:EKLE=0
                WHILE ASAGI=1
                  saat=saat-1
                  IF saat=0 THEN saat=24
                  EKLE=EKLE+1:IF EKLE=5 THEN Z=50            
                  PAUSE Z
                WEND
            ENDIF



aRci

Merhaba;
tarama olan projede sürekli olarak hareket edilmesi bekleme gereken kısımlarda döngü ile çözüm üretiliyor. burada butun için bir bekleme döngüsü yapmak yerine tek seferde tüm butonlar için yaparak basite indirmeye çalıştım.

ilk olarak butona basılınca işlemler yürütüp ardından if sorgusundan çıkıp d değişkeni displaya aktarılacak değerler yüklendikten sonra en alttaki while döngüsü ilede basılabilecek tüm butonların herhangi biri basılı kaldığı süre boyunca döngüde beklenmeye başlanır.
bu şekilde deneyin butonların if sorgusundaki while ve 2. bir if sorgusu vardı onları sildim.
Ayar_Bır:
 IF YUKARI=1 THEN
              Z=300:EKLE=0
                saat=saat+1
                IF saat=24 THEN saat=1
                EKLE=EKLE+1:IF EKLE=5 THEN Z=50              
                PAUSE Z             
            ENDIF
                
            IF ASAGI=1 THEN
                Z=300:EKLE=0
                  saat=saat-1
                  IF saat=0 THEN saat=24
                  EKLE=EKLE+1:IF EKLE=5 THEN Z=50            
                  PAUSE Z
            ENDIF
    D=24         :GoSub AL :DISPLAY1=SAYI                                                                      
    D=30         :GoSub AL :DISPLAY2=SAYI ;r+.                                                                                   
    D=0          :GoSub AL :DISPLAY3=SAYI                                                                                  
    D=0          :GoSub AL :DISPLAY4=SAYI
    D=29         :GoSub AL :DISPLAY5=SAYI                                                                      
    D=SAAT Dig 1 :GoSub AL :DISPLAY6=SAYI                                                                                    
    D=SAAT Dig 0 :GoSub AL :DISPLAY7=SAYI                                                                                     
    D=29         :GoSub AL :DISPLAY8=SAYI
 
      GoSub DELAY1 
    
    while YUKARI=1 or ASAGI=1 or Sec = 1 : Wend
Goto Ayar_Bir

Ömerkaya

aRci teşekkürler kodları denedim deneme katında butona bastıgım anda displeylerin 3 sönüyor 1inde görüntü oluyor
while..wend komutlarını silip denedim yine aynı 3 displey sönük 1 displey yanıyor ama bu sefer sayma yapıyor. yukarı tuşu sureklı 1 oldugu için z=300 kalıyor sürekli.

aRci

Merhaba;
Ekle ve Z değişkenleri ile amacınız displayda yanıp sönmeyimi amaçladınız

Ömerkaya

Alıntı yapılan: aRci - 06 Haziran 2021, 10:57:31Merhaba;
Ekle ve Z değişkenleri ile amacınız displayda yanıp sönmeyimi amaçladınız
Butona basılı iken eklesayisi 5 olana kadar yavaş sayıyor 5 olduktan sonra hızlanıyor.

elektro77

Ete Hocam hafta sonları cepten mesajlara bir bakar ama pek cevap yazmaz. Pazartesi günü takıldığınız her konuda bir cevab verecektir.
"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"

elektro77

Yazılımını pbp ye göre uyarladım.
Displaylerin 1-2-3-4 nolu uçlarını portb den kaldırıp portc ye aldım. Böylelikle portb deki pullupları dahil edip tuşları gnd ye çektim ve hem yerden hemde elemandan tasarruf ettim.
Devreye enter adında bir tuş daha ekledim ve hafızaya kayıt işlemini bu tuşa yaptırdım. Buda eproma kayıt sayısından tasarruf sağlar.
Tuşları whıle wend şartına bağladım böylelikle tuş bırakılmadan sayma olmayacak.
Tuşa hızlı saydırma işlemini bu değişiklerden sonra yapmaya başladım. Henüz bitirmedim. İstersen tekrar protona çevirip buradan sonra devam edebilirsin.
Tuşa uzun basınca hızlı saydırma konusunda bu topolojide bir yazılımda nasıl bir yol izleneceği konusunda ete hocam yardımcı olursa sevinirim. Devre ve yazılım ektedir.
"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"

elektro77

Röle durumunu kaydetmiyor ve başlangıçta okumuyordu onu da aşağıdaki kodla düzelttim.
ANAPROGRAM: 
     Read 10,saat
     Read 12,dak
     read 14,RELAY1_sayi
     IF RELAY1_sayi=1 THEN RELAY1=1 
GoSub DELAY
"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"

Ömerkaya

#28
elektro77 teşekkürler güzel olmuş. bu kodlar birçok devrede kullanılabilir. benim deneme kartım pulluplara göre olmadı için malesef kullanamıyorum. ama devrenin pcbsini yaparken kullanacağım.

elektro77

#29
Butonlarda hızlı artırma ve azaltma özelliğini bitirdim. Ektedir.
Fakat gerçek devrede nasıl görünür bilemiyorum. Protona uyarlayıp deneme boardında bir dener misin?
Tuşa uzun basılı iken birkaç saniye sonra hızlı artırma veya azaltma başlar
"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