avatar_elektro77

Gerçek Devrede Epromu İlk Okuma

Başlatan elektro77, 27 Temmuz 2020, 19:19:47

elektro77

Pice hex dosyasını yükleyip devreyi gerçekte ilk enerjilendirdiğimde ekranda 55 rakamları görünüyor.
 
Tüm değişkenleri sıfırlayıp daha önce hiçbir şey yazılmamış epromu okuduğumda neden 255 olur.
epromu neden sıfırlayamıyorum.
değerleri belirli bir sayıya set ederek başlattığımda ise hep aynı değerden başlıyor. Sorun nedir acaba
Saygılarımla

BSAYAC  VAR BYTE:BSAYAC=0
BSN     VAR BYTE:BSN=0 
BDAK    VAR BYTE:BDAK=0
BSAAT   VAR BYTE:BSAAT=0
OK      VAR BYTE
CSAYAC  VAR BYTE:CSAYAC=0
CSN     VAR BYTE:CSN=0
CDAK    VAR BYTE:CDAK=0
CSAAT   VAR BYTE:CSAAT=0
'----------------------------------------------
CLEAR   'TÜM DEĞİŞKENLERİ SIFIRLA
PAUSE 200
READ 0,BSN 
READ 1,BDAK
READ 2,CSN
READ 3,CDAK
'-----------------------------------------------
BASLA:
  LCDOUT $FE,$80,  DEC2 CDAK,":",DEC2 CSN," "
  LCDOUT $FE,$C0,  DEC2 BDAK,":",DEC2 BSN," "

IF CALIS=0 AND ROLE1=0 AND ROLE2=0 THEN 'Eğer cihaz run durumunda değilse
   IF BARTIR=0 THEN'bekleme ARTIRMA
      BSN=0
      WHILE BARTIR=0:WEND 
      BDAK=BDAK+1         
      IF BDAK=61 THEN BDAK=60
      WRITE 0,BSN  :pause 20
      WRITE 1,BDAK  :pause 20
    ENDIF
    IF BAZALT=0 THEN'bekleme AZALTMA
       BSN=0
       WHILE BAZALT=0:WEND
       BDAK=BDAK-1
       IF BDAK=0 THEN BDAK=1
       WRITE 0,BSN  :pause  20
       WRITE 1,BDAK  :pause 20 
    ENDIF
   

    IF CARTIR=0 then'Calısma ARTIRMA
       WHILE CARTIR=0:WEND         
       CSN=CSN+1
       IF CSN=31 THEN CSN=30
       WRITE 2,CSN  :pause 20
    ENDIF    
    IF CAZALT=0 then'Calısma AZALTMA
       WHILE CAZALT=0:WEND
       CSN=CSN-1
       IF CSN=0  THEN CSN=1
       WRITE 2,CSN  :pause 20
    ENDIF           
ENDIF           

GOTO BASLA
"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"

MC_Skywalker

Yanlış hatırlamıyorsam Microchip üretimde Eprom alanını FF değeriyle üretiyor. Yani Eprom silindiğinde 00 değilde FF değerini alıyor.

şurda da tartışılmış ---> https://www.microchip.com/forums/m692341.aspx

ete

Bildiğim bütün epromların boş hali $FF lerle doludur. Bu bir standart olsa gerek.
Sonuçta epromda sıfır olmuş $FF olmuş pek farketmez herhalde. Üstelik sıfır rakamının epromla çalışırkende olma ihtimali $FF olmasından daha fazladır. Programlarını $FF in boş bilgi olmasına göre uyarlarsan rahat edersin.

Ete

elektro77

#3
Alıntı yapılan: ete - 28 Temmuz 2020, 08:59:07Bildiğim bütün epromların boş hali $FF lerle doludur. Bu bir standart olsa gerek.
Sonuçta epromda sıfır olmuş $FF olmuş pek farketmez herhalde. Üstelik sıfır rakamının epromla çalışırkende olma ihtimali $FF olmasından daha fazladır. Programlarını $FF in boş bilgi olmasına göre uyarlarsan rahat edersin.

Ete
Hoca aşağıdaki yöntem doğrumu sizce?
Aşağıdaki kodlarla Hexi pice ilk yazdığımda ilk enerjilenmede 255 olan ($FF) eprom değerleri 0 a çekilmiş olur değilmi?
Sonrasında ise gerçek devrede, sistem tuş kodları ile içinde 255 olmayan istenen değerler arasında tutulacağı için yeni bir açılışta tekrar 255 i görmeyecek ve aynı değerlerden de başlamayacaktır değil mi hocam.
Kontrol edebilirmisiniz. Yada başka bir öneriniz var mı? Yok sa anlatmak istediğiniz zaten bumuydu?

READ 0,BSN 'GERÇEKTE İlk enerjilenmede epromun adresleri 255 okunuyor ve ekrana 55 olarak yansıyor 
READ 1,BDAK
READ 2,CSN
READ 3,CDAK
IF BSN =255 THEN BSN =0
IF BDAK=255 THEN BDAK=1
IF CSN =255 THEN CSN =0
IF CDAK=255 THEN CDAK=0
'------------------------------------------------------------
BASLA:
  LCDOUT $FE,$80,  DEC2 CDAK,":",DEC2 CSN," "
  LCDOUT $FE,$C0,  DEC2 BDAK,":",DEC2 BSN," "

IF CALIS=0 AND ROLE1=0 AND ROLE2=0 THEN 'Eğer cihaz run durumunda değilse
   IF BARTIR=0 THEN'bekleme ARTIRMA
      BSN=0
      WHILE BARTIR=0:WEND 
      BDAK=BDAK+1         
      IF BDAK=61 THEN BDAK=60
      WRITE 0,BSN  :pause 20
      WRITE 1,BDAK  :pause 20
    ENDIF
    IF BAZALT=0 THEN'bekleme AZALTMA
       BSN=0
       WHILE BAZALT=0:WEND
       BDAK=BDAK-1
       IF BDAK=0 THEN BDAK=1
       WRITE 0,BSN  :pause  20
       WRITE 1,BDAK  :pause 20 
    ENDIF
   

    IF CARTIR=0 then'Calısma ARTIRMA
       WHILE CARTIR=0:WEND         
       CSN=CSN+1
       IF CSN=31 THEN CSN=30
       WRITE 2,CSN  :pause 20
    ENDIF    
    IF CAZALT=0 then'Calısma AZALTMA
       WHILE CAZALT=0:WEND
       CSN=CSN-1
       IF CSN=0  THEN CSN=1
       WRITE 2,CSN  :pause 20
    ENDIF           
ENDIF           

GOTO BASLA
"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

Neden yadığın şeylerden emin olamıyorsun yada iyice emin olmak için denemeler yapmıyorsun?
Her şeyi soracakmısın? Olmaz böyle. Çok basit şeyleri bile soruyorsun. Hep cevaplıyorum ama senin içından doğru olmadığını belirtmek isterim.
Bir epromdaki değerin sıfıra çekilip çekilmediğini test etmek çok zor bir iş değil. Program yazmak mantık işidir. Doğru mantık kuruyorsan işin doğru gider.
Bir eprom içindeki değer değiştirilmediği müddetçe aynı kalır. Sen eprom içindeki değeri açılışta değiştirmiyorsun. Yanlızca 255 değil ise sıfırı kullan diyorsun ama epromdaki değer hala 255. Ancak tuşlara basılınca değerler eproma yazdırılıyor. Basmaz isen epromdaki değer değişmeyecek!!!.
Üstelik her tuşa basıldığında o değeri eproma yazdırmanında bir anlamı yok. sürekli tuşa basıyor isem eprom yazma ömrünü kısa sürede dolduracaksın ve o eprom ölecek. Yanlızca yazma bitini set et ve bir kaç dönsün program sonra artık gidip eproma yazılacakları tek bir yerde yazma biti set edilmiş ise yazsın.

İlk program açılışında şayet epromdaki değerlerin 255 değilde sıfır ile açılmasını istiyor isen onun iiçin bir komut var.
Data @adres,0,0,0,0,0,0,0,0,0
bu komut her işlemci ilk defa programlandığında epromdaki adres ve sonrasında gelene adresleri sıfırlar. Komut açıklamasına bakılırsa bu işlem yanlızca işlemci programlandığı zaman yapılıyormuş. Böylece her çalıştırmada yapılmayan bu işlem sayesinde istediğin eprom adreslerine açılış değerlerini yazdırmış olursun.
Mesela epromun 10 nolu adresi ile 20 nolu adresleri arasındaki hafızalara sıfır yazdırıp o şekilde kullanmak için;
DATA@10, 0,0,0,0,0,0,0,0,0,0,0
şeklinde komut u BASLA satırından evvel bir yere yerleştirmen yeterli olacaktır. İŞlemci programlanırken bu değerler epromun ilgili adreslerine yazılır. Sonradan istediğin adresdeki değeri değiştirebilirsin yine program içi yaz (WRITE) komutu ile.


Ete

elektro77

Alıntı yapılan: ete - 29 Temmuz 2020, 08:55:25Yanlızca yazma bitini set et ve bir kaç dönsün program sonra artık gidip eproma yazılacakları tek bir yerde yazma biti set edilmiş ise yazsın.
Ete

Bununla ilgili  bir algoritmayı yukarıdaki yazılım üzerinde örnekleyebilirseniz sevinirim hocam.

(daha az soru sormaya çalışırım Hocam.Kusura bakmayın lütfen)
"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

Tuşlara basıldığında değer değiştirip WRITE,xx,xxx  şeklinde hemen eproma yazmak yerine,
Orada yanlızca YAZ=1 yapman yeterli olacak. Yani nerede WRITExx,xx komutun var ise oraya yanlızca YAZ=1 yazacaksın ve Write komutlarını sileceksin.
Program çalışırken BASLA..... GOTO BASLA arasında gidip geliyor. GOTO BASLA komut satırından evvel
IF YAZ=1 THEN SAY=SAY+1
IF SAY=10 (daha büyük yada daha küçük değerler yazılabilir) THEN
  WRITE xx,xx
  WRITE
   ...
  WRITE
  YAZ=0
  Pause 10
ENDIF

şeklinde bütün yazılacakları bir yerde yazdırıp YAZ bitini tekrar sıfırlarsın.
Böylece her seferinde yazmak yerine değer değiştirme işin bittiğinde bir seferde yazdırmış olursun.
Soru sormandan rahatsız değilim. Ancak hem mantık ile çözülecek şeyleri hemde kolaylıkla deneyebileceğin şeyleri,de soru sorarak öğrenmeye çalışıyorsun. Buda sana bir şey katmıyor. Deneyerek öğrenme en iyi öğrenme metodudur ve öğrendiğini kolay kolay unutmazsın.


Ete

elektro77

#7
Teşekkür ederim hocam.
Fakat yukarıda verdiğiniz örnekte say=10 olmadan elektirik kesilirse eproma yazamamış olacak değil mi? Örneğin Kullanıcı 5 tuşta istediğini ayarladı. Bu durumda say=5 olacak. Bu şekilde 10 saat çalıştı program ama hala eski kayıtlar duruyor hafızada. Doğrumu söylüyorum?   

Düzeltme: Pardon yanlış düşünüyorum
"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

Çook teşekkür ederim hocam.
Yazılım en sonunda en iyi halini aldı ve çalışıyor. Sayenizde.
Allah sizi başımızdan eksik etmesin.
"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