pic içinde menu ve kayıt

Başlatan assyh, 29 Kasım 2014, 11:33:20

assyh

merhaba,
pic16f877a
içerisine bir menu yazmak istiyorum mesela , menu tuşuna basılınca ekranda
menu çıkısın altında
sarı ısık
yeşil ışık seçenekleri çıksın örneğin
yeşil işik alt menusu seçildiğinde açılan menude
yanmasını istediğmiz led sayısı nı kayıt edelim örneğin 4 , dört adet led yansın.
KAYDET butonuna basınca bu bilgi kaydolsun ve önemli olan burası enrji kesildiğinde tekrar açıldığında kaybolmasın.
normal ekranda ise seçiminiz yeşil ışık seçilen led 4ad. yazsın gibi.

programı yazarım fakat ben kayıt nereye ve nasıl yapılır enerji gittiğinde geri gelme işini bilmiyorum bu olay nasıl yapılır.

teşekkürler.
Her bişeye meraklı.

ete

İşlemcilerin çoğunda dahili eprom bulunmaktadır.
Bu epromu kayıt alanı olarak kullanacaksın. İşlemcilere göre eprom kapasiteside değişmektedir. Yanlış bilmiyorsam en küçüğü 128 byte alıyor idi. Data sheet'e bakıp kapasitesini öğrenebilirsin.
Genelde programlarda sonradan hatırlanması gereken bilgiler eproma kayıt edilir ve program ilk çalıştırıldığında başla satırına gelmeden bu eprom değerleri okunur. Okunanlar ilgili değişkenlere yerleştirilerek programa BASLA etiketinden başlanır.

Eproma yazmak için şu komutlar kullanılır.
SAY isimli bir BYTE değişkenimiz olsun bunu epromun ilk adresi olan 0(sıfır) nolu adrese yazmak isteyelim.
WRITE 0, SAY:PAUSE 10
Her yazma komutu sonuna 10 ms lik yazma süresini eklemeniz gerekir. Bu süre bilginin eproma yazılması iiçin gereklidir.
Bir başka örneği WORD tipi değişken için verelim. SAYAC isimli WORD değişkenimiz olsun bunu epromun 10 nolu adresinden itibaren yazalım. Word değişkenleri 2 adrese yazılırlar. WRITE 10,SAYAC.Byte1 , SAYAC.Byte0 : PAUSE 10
Bu şekilde değişkenleri kayıt ettikten sonra sıra okumaya geliyor.
READ 0,SAY: IF SAY=255 THEN SAY=0
Burada normalda sıfır nolu adrese kayıt edilmiş bilgiyi okuyup SAY isimli değişkene aktarmış olduk.
Şayet daha önce bir kayıt yapılmış ise SAY değeri 255 den farklı çıkacaktır. Epromdan okunan değerler kayıt yapılmamış ise hep 255 dir. Bu nedenle default değer olarak şayet okunan değer=255 ise değer=default şeklinde ayarlama yapmak uygun olur. Ben yukarıda bunu default değer olarak sıfır vererek yapmış oldum.
Programda değişkeni WORD olarak tanımlamış ve buna karşılık gelen değeri epromdan okumuş iseniz;
READ 10,SAYAC.Byte1,SAYAC.Byte0
Okunan 2 byte otomatikman Word olarak değişkene yerleşir. Hiç kayıt yapılmadan okuma yapılmış ise okunan değer otomatikman 65535 çıkacaktır. Bun nedenle word tipi değişkenlerde default ayarlarken bunu göz önünde bulundurmanız gerekir.  IF SAYAC=65535 then SAYAC=300 gibi.
Anlaşılmayan bir yer var ise yada eksik kalan bir açıklamam varsa sorarsın.

Ete

assyh

cevap için teşekkür ederim bir iki deneme yaptıktan sonra daha iyi kavrarım gibi geliyor konuyu..
burada da hafıza kısıtlamasından dolayı sadece değişkenin değeri atılıyor, geri çağırırken write 0 ın ne olduğunu bildiğimizden değeri alıp SAY a aktarıyoruz..

write 0 ile 9 arası byte  olarak yazabiliyormuyuz. write 8 var mı?
write 10 ile ??? arası word

tekrar teşekkürler.
Her bişeye meraklı.

ete

Pic eprom hafızası 128 Byte ise 0-128 arası adresleri kullanabilirsin anlamına geliyor.
0-255 arası hafızaya sahip ise (255 Byte) o zaman 0-255 arası adresleri kullanabilirsin.

WRITE ile yazıyoruz (WRITE Adres, VERI)
READ ile okuyoruz (READ Adres , Veri)

Ete

assyh

Her bişeye meraklı.

ali

#5
merhaba hocam benim öğrenmek istediğim.programada uygulamak istesek bu şekildemi yapacağım?
,dahili hafızaya devamlı yazmasın diye nasıl bir yol izlemeliyim.?



read 0,deger
IF deger=255 then deger=0
read 5,data
if data=255 then data=0
.......................................................
deger_art:
      deger=deger+1
        if deger>15 then deger=16
    write 0,değer
deger_az:
     deger=deger-1
        If deger=255 Then deger=0
write 0,deger

data_art:
      data=data+1
        if data>15 then data=16
    write 5,data

data_az:
     data=data-1
        If data=255 Then data=0
write 5,data

ete

Buton ile yada encoder pot ile yapaılan ayarlarda her değer artışında ilgili değerin kayıt edilmesine gerek yoktur.
Bu tür ayarlarda genelde ard arda sayı artışı yada azaltılması yapılır. Sonuçta bir noktada karar kılınıp ayar butonu bırakıllır yada encoder bırakılır. Bu aşamada ayar yapılması en doğrusudur. Bunu algılamanın yoluda aşağıdaki sistemden geçiyor.
Her değer değişiminde YAZ=1 diye bir bit değişkeni set edilir.
Bu değişken ayarlarda değişiklik yapıldığını bir bayrak işaretidir. Daha sonra program döngüsüne bir sayaç eklenir.
Bu sayac tuşa basılmadığı zaman geçen süreyi sayar ve yeterli süre basılmamış ise gider bilgiyi kayıt eder.
Sistem budur.

Ete

ali

#7
verdiğiniz bilgiler için teşekkür ederim.anladığım kadarıyla uygulamaya çalıştım.similasyonda denedim, deger kaydedildi.
yaz   var BIT
sayac VAR BYTE
yaz=0
read 0,deger
IF deger=255 then deger=0
read 5,data
if data=255 then data=0
.......................................................
BASLA:

deger_art:
      if tus_artır=1 Then
        deger=deger+1
        if deger>15 then deger=16
        yaz=1:tur=0     
      endif
     
deger_az:
      if tus_azalt=1 then
        deger=deger-1
        If deger=255 Then deger=0
        yaz=1:tur=0
         goto basla
      endif   

      If yaz=1 THEN
        TUR=TUR+1
        IF TUR=100 then
           TUR=0
           yaz=0
           WRITE 0,deger
        ENDIF
      ENDIF     
     
      GOTO BASLA


Ete_edit: olması gereken şekilde değiştirdim.

ete

Yazdıklarını olması gereken şekilde değiştirdim. Bu sisteme Data artışlarınıda dahil edebilirsin.
Artış yada azalışlar kesilip program BASLA ile GOTO BASLA arasında saymaya başlarsa TUR değişkeni artmaya devam edecektir.
100 sayısına ulaşınca sistem değerleri kaıt edecektir. 100 sayısını rast gele yazdım ortalama bir değerdir. Programda gecikme yok ise bu rakamı 250 olarak değiştirebilirsin.
Dediğim gibi temel mantık. Değer değişince YAZ=1 olacak. Aynı zamanda TUR sayacı her değer değişiminde sıfırlanacak.
Değer değiştirmeyi bıraktığın an TUR değeri sürekli artarak serr değerine ulaşılacak ve o zamanda eproma kayıt edilecek.

Ete

ali

çok teşekkür ederim .kıymetli vaktinizi aldım.

Powered by EzPortal