LCD DATA PİNLERİ ve BUTON KULANIMI HAKKINDA

Başlatan ali, 03 Aralık 2015, 22:40:55

ali

merhaba,

16f628a işlemcisi kulanıyorum. lcd ye giden data pinlerini semadaki gibi ,aynı zamanda buton olarakta kullanabilirmiyim?ben küçük bir program yazmaya çalıştım kendi çapımda.fakat bir türlü işlem butonlara işlem yaptıramadım.menu+ ve menu - buton olarak kulllanmak  istiyorum.
öğrenmek istediğim diğer konu dahili hafızaya alma işlemi.programda yapmaya çalıştığım  işlem doğrumu?




F®T

#1
lcd data hattına ne yazıkki buton bağlayıp kullanamazsın.Gördüğüm kadarı ile boşta ayakların var onları buton girişi olarak kullanabilirsin.Dahili osilatörkullanırsan 2 adet ayak ve mclr ayağını giriş olarak ayarlarsan 4 butonuna yetecek ayak var.
Hafızaya alma olayında komutlar gördüğüm kadarı ile  normal görünüyor
read 0,vol:IF vol=255 then vol=0


burda vol değişkeni 255 ise 0 demişsin.fakat epromda ilk yüklemede 255 gelen bu değer her seferinde 255 olarak gelir.Taki sen program içinde bir değer verip kayıt edene kadar.Verdiğin değeri ayrıca kaydedersen ilk açılışta 255 ise değişken 0 olur ve sıfır olarak kayıt edilmiş olur.
Daha sonra programda istediğin değere kayıt edersin.
read 0,vol
IF vol=255 then vol=0:write 0,vol:pause 10

eproma yazmadan sonra gecikme konulması gerekiyor.10 ms yeterli.
Birde programda bir değer değiştirip hep hafıza kaydına yollamışsın.O şekil epromun tüm değişkenleri aynı ise bile kayıt olur ve epromun ömrünü azaltmış olursun.Onun yerine değeri değiştirip değiştirdiğin değeri kayıt edersen daha iyi olur.
Gördüğüm bunlar tabi programın tamamını inceleyemedim.Ama programda çok eksikler var.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

İlyas KAYA

Lcd read yapılarak okunamaz mi ? Hiç denemediğim bir durum. Deneyip görmek lazım. Sonuçta lcd read yapınca Data bacaklarini okuyabiliriz diye düşünüyorum.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

EMKE

Yapılabilir tabiki ama donanımı uydurman gerekiyor bununla ilgili bir şema atarım bakarsın .

EMKE

#4
Dediğim şemayı gönderiyorum oturup herşeyini tamamen çizmedim sen biraz uğraş bakalım sana ip ucunu verdim takıldığın yerleri sorarsan müsait olduğumda yardımcı olmaya çalışırım .

ali

ilgilendiğiniz ve vakit ayırdığınız için çok teşekkür ederim.ben yazılım konusunda yeniyim .kendi çabamla öğrenmeye çalışıyorum.sn Ete hocayada teşekkür etmek isterim.

F.t arkadaşım,hafızaya devamlı almasını önlemek için ne şekilde bir uygulama yapabilirim.bunu programda gösterirseniz çok sevinirim.birde bas ta ve tizde iki değişken var .bunların kayıt şekli doğrumu?
16f628 diğer bacakları dolu sadece mcr bacağı bos.

Maxim

lcd data pinleri ile beraber buton kullanabilirsiniz!
bu mümkün. iyi araştırın

F®T

Alıntı yapılan: Maxim - 04 Aralık 2015, 10:18:31
lcd data pinleri ile beraber buton kullanabilirsiniz!
bu mümkün. iyi araştırın

Maxim hocam şahsen hiç duymamıştım.Uygulanabiliyorsa gayet güzel olur.Netten araştırayım.Teşekkürler.

Ali hocam menü işleminde bir değişkeni artı eksi ayarladıktan sonra değişken eğer eski değerden farklı ise hafızaya aldırmanız uygun olur.Ayrıca hafıza işlemini yaparken program döngüsü içinde kullanırsanız eepromun bozulma ihtimali yüksek olur.Çünkü eepromun belli bir kayıt etme sayısı var.Bu hemen dolabilir.Yapacağınız iş Ana program döngüsü içinde değilde Menüye girdiğinizde ve değişken eski değerden farklı ise kaydetmeniz.Buda size eepromun uzun süre kullanılmasına olanak tanır.Siz programı belli bir noktaya getirin yardımcı oluruz.İyi çalışmalar.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Biliyorsunuz LCD data pinleri işlemci tarafında çıkış pinidir. Bu pinleri Pullup lı olarak da kullanabilirsiniz.
Bu durumda aynı pinleri anlık olarak giriş yapıp sonra aynı pinin LOW olup olmadığına bakarak o pine bağlı butonu kontrol edebilirsiniz. Tabiiki buton kontrol program parçasından çıkarken aynı pini çıkış yaparak çıkmanız gerekiyor.
Örnek vermek gerekir ise ;
Diyelimki PORTB.4-7 arasında data pinleri var. Ve biz PORTB.4 pinine ayrıca buton bağladık. Buton sayısı 4 e kadar çıkabilir ben bir tanesine örnek veriyorum.
TUS_BAK:
INPUT PORTB.4
IF PORTB.4=0 THEN
  SAYI=SAYI+1 'burada siz ne yaptıracaksanız onu yaptırın ama direk şuraya git demeyin bir bit değişkeni set edn gerekirse rutinden çıkınca bit değişkenine bakarak gideceğiniz yere gidin.
ENDIF
OUTPUT PORTB.4
RETURN


Ete


ali

#9
tesekkür ederim hocam yapmaya calısacağım.
hafızaya alma ile ilgili bi sorunum var.sürekli hafızaya almasın diye programa birkaç satır ilave ettim.doğru yaptım emin değilim.bi bakabilirmisiniz.?










*

F®T

vol_art:

    vol=vol+1
        if vol>16 then VOL=15
     gosub KAYIT
     
return

vol_az:

    vol=vol-1
        if vol=255 then vol=0
      gosub KAYIT 
return


Bu satırlara bakarsan her ayarda kayıta gönderme var.sen her ayarlama butonuna bastığında kayıta gider ve eeproma değeri kaydeder.Burdaki gosub kayıtları silip ayar bittikten sonra en son pwr tuşu portb.5 e bağlı olan if tus=0 then gossub kayıt  dersen daha iyi olur bence.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Bu tür işlerde ne zaman kayıt alman gerektiğini bilmek en önemli konudur.
Onu bilirsen gerisi zor değil. Alternatifleri birlikte düşünelim.
1. Her volum tuşuna basıldığı zaman sistem volum değerini değiştiriyor. Peki bu durumda kayıt almalımıyım?
   Alman gerekebilir. Zira elektrik kesilene kadar o volum değeri işlemci tarafından biliniyor olur. Ama aniden elektrik kesilirse volum değeri kayıt edilmediği için seçilen değer kaybolacaktır.

2. Diğer taraftan volum, çok oynanan bir ayar ünitesidir. Sıklıkla değiştirilen bir birimin kayıt altına alınması doğrumudur?
    Zira sistem açılırken kısık bir ses ayarı ile açılsa sorun olmaz diye düşünürüm. Ama yapılan cihazda elbette ayar olması ve önceden yapılmış bir ayarla açılması en güzelidir. O halde ne yapmalıyım.? Tabiiki hem ayar yapıp hemde kayıt yapmam gerekiyor. Ama öyle bir şey yapılmalı ki her değer değişiğinde değil artık ayar bırakıldığında bu iş yapılmalı. Böylece kayıt etme oranı epeyce düşecektir. Zira Volum değerini 2 den 12 ye çıkartacak isem her değer değişiminde kayıt alırsam 10 defa kayıt yapmış olurum ama 12 de bıraktığım zaman tek bir kayıt alırsam sorun önemli ölçüde halledilmiş olur.
Bunun için ayar kısmını gosub ile gidilen bir alt programdan çıkartıp ya ayar tuşlarına bakılan ve yapılacak ise ayar yapılan bir alt programa dönüştürüp ana programdan yalnızca GOSUB VOLUMBAK şeklinde bir komut ile oraya gelip ayar varsa yapmak değilse yapmadan geri dönmek en güzelidir.

3. F.T nin açıkladığı şekilde sistem kapatılıyor iken bir kayıt almak da bir çözüm olabilir. Ancak elektrik kesintisinden etkileneceği açıktır.

4. Senin yaptığın gibi belirli sayıda değişiklikten sonra kayıt almak çözüm değildir. Hem işi gerektiği gibi halletmez hemde boşuna bir gecikme yaratır bana kalırsa.

Bütün bunlara bakınca 2. şıkta açıklanan çözümün en doğrusu olacağı açıktır.
Bu durumda Vol_Menu isimli alt programını şöyle düzenlesek;
vol_menu:
   YAZ=0 
    IF AZBUT=1 THEN
       WHILE AZBUT=1
          vol=vol+1
          if vol>16 then VOL=15   
          lcdout $fe,$81,"   Volume   ",DEC2 vol," "
          PAUSE 100
       WEND
       YAZ=1
     ENDIF
     
     IF ARTBUT=1 THEN
       WHILE ARTBUT=1
          VOL=VOL-1
          IF VOL=255 THEN VOL=0
          lcdout $fe,$81,"   Volume   ",DEC2 vol," "
          PAUSE 100
       WEND
       YAZ=1 
     ENDIF
     IF YAZ=1 THEN
       write 0,vol:pause 10
       yaz=0
     ENDIF
     RETURN


Görüleceği üzere volum değişikliği yapmış isem en azından yalnızca volum değerini kayıt etmem daha doğrudur.
Burada Volum konusunda yaptıklarımızın aynısını Bas - Tiz değişikliklerinede uygulayabilirsin.
Bu sistem asgari kayıt adedi ile kayıt yapmanı sağlayacak verilerinde emniyetli bir şekilde korunmuş olacaktır.

Yazdığım bazı programlarda çok fazla kayıt alındığı için eprom ömürlerinin çabuk biteceği konusunda endişelerim bulunuyordu. Her bir adresin yaklaşık 1.000.000 defa (Ortalama) kayıt ömrü olduğunu düşününce  değişken adres kayıt mantığını kurmaya çalışmıştım. Sistem mantığı şöyle idi. Programda zaman da tutulduğu için tarih üzerinden bir kayıt veya okuma adresi hesaplıyor idim. Temel mantık o tarihin yılın kaçıncı günü olmasına dayanıyor idi. Daha farklı adres hesaplama algoritmaları uygulanabilir. Böylece değişken kayıt adresi işini devreye sokunca eprom sıkıntısı ortadan kalkmış oldu. Bu şekilde diyelimki yalnızca volume kaydını 100 adrese yayarsak bu 100 milyon kayıt ederki bitirilmesi herhalde güç olurdu.
Bu son bilgiyi illaki yapasın diye vermedim. Başka bir işte değerlendiresin diye aklının bir köşesinde dursun diye verdim.

Ete

ali

#12
ikide bir sorup sizleri rahatsız ediyorum.kusura bakmayın.mantığı anlamaya çalışıyorum.pwr tusu ile ilk açılışta kayıt dedim kayıt etiketine gitti . if sayac=50  then  yaz=1 dedikten sonra kaydetti.tuslara basmadan işem yapmaması lazım değilmi?
vol_art ve vol_az satırına ilave etmem gereken vbirşey armı?


İF tus=0 then gossub KAYIT

vol_art:

    vol=vol+1
        if vol>16 then VOL=15

     
return

vol_az:

    vol=vol-1
        if vol=255 then vol=0
 
return
if YAZ=0 then return
KAYIT:
      sayac=sayac+1
      if sayac=50  then  yaz=1
      write 0,vol
      write 5,bas
      write 10,bass
      write 15,treb
      write 20,tiz
      PAUSE 30
      sayac=0:yaz=0
     
     return

ali

#13
cevabınızı yeni gördüm.özür dilerim.verdiğiniz bilgiler için teşekkür ederim.



ete

Power tuşu kullanarak bu işi yapmak istersen;
Tuşun sistemi kapatma konumu kollaman gerekiyor. Böylece sistem kapatılırken verileri kayıt edebilirsin.

Bas ve Tiz kısmında bas tiz değerlerinin 7 den büyük olması durumunda lüzümsuz select case komutunu kullanmışsın. Basit bir formül ile o satırlara gerek olmadan işi çözebilirsin. Şöyle;
IF BAS>7 THEN BAS=15-(BAS-8)

Aynı formülü Tiz içinde kullanabilirsin.
Bu durumda BAS_ART yada BAS_AZ alt programlarınada gerek kalmaz. Zira tek formül ikisinide halleder.
Aynı şey Tiz için de geçerli.

Ete


Powered by EzPortal