pic basic buton ile saydırma hatası

Başlatan bulut---gs, 22 Şubat 2012, 22:05:26

bulut---gs

aşağıdaki devre sıcaklık kontolü burada butondan girilen değere sensöR gelince fan çalışacak burada 99 a kadar tanımlama  yaptım ama proteusda simülasyonda her çalıştırmamda 196 da değer başlıyor hata neden kaynaklanıyor acaba yanlışları düzeltmemde yerdımcı olabilir misiniz
BTN_UST: 
  LCDOUT $FE,$80,"SICAKLIK:", DEC3 SCK, "  %"
  LCDOUT $FE,$C0,"                              "
i=0
  BUTTON PORTA.1, 0,98,99,i,1,ARTI
  i=0
  BUTTON PORTA.2, 0,98,99,i,1,EKSI
  i=0
  BUTTON PORTA.0, 0,98,0,i,1,SON
  GOTO BTN_UST:
SON:
WHILE SET=0
       WEND
        TOGGLE DRM
        IF DRM=0 THEN BASLA
  ARTI:
  PAUSE 100
  SCK=SCK +1

IF  SCK=99  THEN  SCK=0
  WRITE 0,SCK
 
GOTO BTN_UST:

EKSI:
PAUSE 100
SCK =SCK -1
 
IF SCK=99 THEN SCK=0
  WRITE 0,SCK 
  GOTO BTN_UST:

fryrmnd

biraz pic basic kullandım. bu kodlar tam değil sanırım. pek bişey anlayamadım.

bulut---gs

sadece butona basıldığında arttırma azaltma yapan kısmı

fryrmnd

SCK nın başlangıç değerinde kaynaklanabilir mi. sıfırladınız mı.

bulut---gs

başlangıç değeri yok yazmadım nasıl yazacağız ve nereeye yazmam gerekir

fryrmnd

port ayarlarından sonra
SCK değişkeninin tanımlandığı yerde SCK=0 yazıp deneyin.

bulut---gs

port ayarlarından sonra yazdığımda değişken tanımlanmadığı için hata veriyor değişkenlerden sonra da yazdım programın başlamasından sonra da yazdım ilk çalıştırmada o değerleri kabul ediyor fakat değerleri butonla değiştirmek istediğimde yine ilk değerleri kabul ediyor değiştirmeye imkan tanımıyor

fryrmnd

PORT tanımlamaları

SCK VAR BYTE
SCK=0

anadöngü:


GOTO anadöngü

şeklinde olmuyormu

bulut---gs

malesef olmuyor benim döngü de mi problrm var acaba yukardaki program parçasında

ete

#9
Neden yalnızca programa konsantre oluyorsun. Acaba donanım kısmı doğrumudur.
Buton komutu çok karmaşık bir komuttur ve çok az kişi bunu doğru kullanabiliyor.
BU nedenle kendi buton kontrolünüzü yazmanız daha doğru olurdu.
Ancak soruna çözüm bulmak açısından bana şunları açıklarmısınız.
- Devrede butonlar nasıl bağlıdır. Yani butona basılınca Buton pinine ne verilmektedir. (LOW-HIGH)
- Butonlar boşta beklerken buton pinlerinde hangi lojik durum vardır (LOW-HIGH)

BU soruların cevabını programdan alabilirim ama sizden duymak bana bağlantıların doğru yada yanlış olduğunu açıklayacak.

Aslında hem programı hemde simulasyon devresini buraya koysaydınız hemen doğru cevabı alacaktınız. Bu şekilde yarım yamalak oluyor .

Programda SON isimli bir etiket var ve PORTA.0 daki butona basılınca program bu etikete geliyor.
Bir bakalım ne var bu etikette;
SON:
WHILE SET=0:WEND
TOGGLE DRM
IF DRM=0 THEN BASLA
Bu etikette şayet SET=0 ise program orada bekleyecek taaki SET=1 oluncaya kadar.
Hadi SET=1 oldu diyelim. Bu durumda DRM=0 ise BASLA etiketine gidecek ama değilse bir alt satıra geçecek ve orada sanki ARTI butonuna basılmış gibi SCK yı bir artıracaktır. Bu ise bana göre yanlış bir uygulamadır. Orda başka bir komut daha olması gerekir.

Ete

Edit: Kodu şimdi denedim. Bir sorun gözükmüyor. Tabiiki ben programa bakıp olması gereken şekilde bağladım butonları.
Ayrıca bir SET değişkeni kullanılmış. Onu kim set edecek. Zira PortA.0 daki butona basarsan SON etiketine gidiyor program ve orada çakılıp kalıyor. Taaki SET=1 oluncaya kadar. Peki kim SET=1 yapacak o belli değil. Belliki bir bit değişkeni ama nasıl set edilecek onu açıklaman gerekiyor. Sonuç olarak program tuş kontrolünü sorunsuz yapmakta ve bendeki değer sıfırdan başlamaktadır.
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

bulut---gs

ete hocam devre aslında nem kontrol devresi bunun aynısını sıcaklık için de yapacağım o yüzden sıcaklık için program parçasını verdim bu devre ile aynı  internette var ben onu çok değiştirdim nem için alt ve üst değerler belirledim nem sensörü üst değere gelince sulamayı kesiyor alt değere gelince de sulamayı açıyor bu şekilde çalışıyor fakat butonlarda bi problem var ilk açtığımda nem üst(nmu) 197 nemalt (nma) 126 da başlıyor ben 99 a kadar ayarlamak istiyorum bir de programı kapatıp açrığımda kaydetmiyor siteye direk programı yükleyemedim  linki burada devre şeması  tüm dosyalar içinde. set butonu kaydetmek için kullanılıyor hemde nmu yu ayarlamak için hataları düzeltirseniz sevinirim . teşekkürler


http://www.dosya.tc/server11/ajqtRb/nem.rar.html

ete

#11
Hata yok aslında programda. Programda bir kere kayıt yapılmış. Üst nem (NEM) değeri 197 alt nem (NEM1) değeri ise 126 olarak kayıt edilmiş ve programın başında da;
READ 0,NEM1
READ 1,NEM
şeklinde iki komut var. Bu kayıtlı değerleri epromdan okuyup ekrana getiriyor.
Yapman gereken şu.
Programın en başına şu satırı ilave et ve programı çalıştır.
DATA@ 0,255,255
bu komut eproma 255 değerlerini kayıt edip o okunan değerleri silecek.

Daha sonra Read komutlarını şöyle değiştir.
READ 0,NEM1
IF NEM1=255 then NEM1=10
READ 1,NEM
IF NEM=255 then NEM=50

SOnra ilk yazdığın data satırını sil oradan.
Böylece kayıtlar üst için 50 ve alt için 10 şeklinde değişmiş olacaktır.

Programda yer alan bütün pause 100 leri pause 200 olarak değiştir.
Ayrıca SONN etiketini aşağıdaki şekilde değiştir.
SONN:
      TOGGLE DRM
      WHILE SET=0:WEND
      goto basla

Bunları yaptıktan sonra asıl menü tuşun daha doğrusu değer ayarlama tuşun PortA.4 de bağlı olan tuş oluyor.
Buna bir kere basınca karşına NEM ALT Ayarı geliyor. Bunu ayarladıktan sonra PORTA.0 daki butona basınca bu seferde karşına NEM UST ayarı geliyor. Onuda ayarladıktan sonra yeniden PORTA.0 daki butona basarak çalışma ekranına dönüyorsun.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

bulut---gs

ete hocam dediklerinizi aynen yaptım dediğiniz şeklde ayar yapıyor kaydediyor fakat proteus dosyasını kapatıp açtığımda tekrar nmu 197 nma 126 değerinde başlıyor

ete

Simulasyondanmı bahsediyorsun yoksa gerçek devredenmi söz ediyorsun acaba.

Her neyse kesin sonuç almak için o değerleri bir kerede kayıt etmek gerekir.
Bunun için iki yöntem kullanılabilir.
Birincisi
READ 0,NEM1
IF NEM1=255 then NEM1=10
READ 1,NEM
IF NEM=255 then NEM=50
satırlarını şöyle değiştirebiliriz.

READ 0,NEM1
IF NEM1=255 then
  NEM1=10
  WRITE 0,NEM1:pause 10
ENDIF
READ 1,NEM
IF NEM=255 then
  NEM=50
  WRITE 1,NEM:PAUSE 10
ENDIF

İkinci yöntem biraz daha basit.
Önceki dediklerimi yaptıktan sonra programda hem Alt hemde üst nemi değiştirmeye çalış. Bu konumda zaten kayıt ediliyorlar.

Bu şekilde sorunu aşarsın.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

bulut---gs

Ete hocam  simülasyondan bahsediyorum bu problemi çözdükten sonra uygulamaya geçedeğim son yazdıklarınızı da denedim simülasyon çalışıyor kaydediyor fakat simülasyonu kapatıp tekrar çalıştırdığımda ayarlar 197-126 şeklini alıyor son ayarladığım değerler kayboluyor