R

60 Dakika Geri Sayıcı Hakkında

Başlatan ronin_2000, 07 Haziran 2012, 08:56:14

ronin_2000

Merhaba arkadaşlar.
Devre enerjilendiği anda displaylarda 60:00 yazarak butona basıp bıraktığım anda 60 dakikadan geri sayacak bir program üzerine çalışıyorum fakat işin içinden çıkamadım. Yardımcı olabilecek arkadaşlara şimdiden teşekkür ederim.

ete

#1
Programı aşağıdaki şekilde değiştir;
@ DEVICE pic16F84A 'işlemci 16F84A 
@ DEVICE pic16F84A, WDT_ON 'Watch Dog timer kapalı
@ DEVICE pic16F84A, PWRT_ON 'Power on timer açık
@ DEVICE pic16F84A, PROTECT_OFF 'Kod Protek kapalı
@ DEVICE pic16F84A, XT_OSC

TRISB = 0
TRISA = %00000001
'----PORT TANIMLAMASI YAPILDI B TÜM ÇIKIŞ A0 GİRİŞ---------------

X     VAR word
SAYMA VAR WORD
SAYI  VAR BYTE
SAYI1 VAR BYTE
SAYI2 VAR BYTE
SAYI3 VAR BYTE
symbol TUS=PORTA.0
sYMBOL LED = PORTB.3
'----DEĞİŞKENLER TANIMLANDI-----------

X = 0
SAYMA = 60
SAYI  = 0
SAYI1 = 0
SAYI2 = 0
SAYI3 = 0

PORTB = 0
PORTA = 0

'----DEĞİŞKENLERİN DEĞERİ SIFIRLANDI----------------------
BASLA:

     SAYMA=60:GOSUB EKRAN 
     WHILE TUS=0:wend 
BIR:
     SAYMA = SAYMA - 1
     IF SAYMA=65535 THEN BASLA     
      gosub ekran
     PAUSE 900   
     GOTO BIR
EKRAN:     
     X = SAYMA DIG 0
     LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57,64],SAYI
   
     X = SAYMA DIG 1
     LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57,64],SAYI1
   
     X = SAYMA DIG 2
     LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57,64],SAYI2
     
     X = SAYMA DIG 3
     LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57,64],SAYI3
     
     SHIFTOUT PORTB.0,PORTB.1,1,[SAYI,SAYI1,SAYI2,SAYI3]
     HIGH PORTB.2 : PAUSEUS 2 : LOW PORTB.2
     TOGGLE LED
     return


Ete

ronin_2000

ETE Hocam saniye sıfırlandıktan sonra displayde önce 55:35 sonrada 00:60 yazıp sayma duruyor.

ete

Programda ufak bir yer değiştirme yaptım sonradan. Bak bakalım BIR ile EKRAN arasındaki program satırları aşağıdaki ile aynımı değilse o şekilde değiştir.

Ete

BIR:
     SAYMA = SAYMA - 1
     IF SAYMA=65535 THEN BASLA     
      gosub ekran
     PAUSE 900   
     GOTO BIR
EKRAN:

ronin_2000

Hocam söylediğiniz gibi  IF SAYMA=65535 THEN BASLA satırını başa aldım saniye 60 tan 0 a kadar düzgün sayıyor ve duruyor.
Şimdiki sorum bunu nasıl 60 dakikadan 0 a kadar sayar hale getirebiliriz?

ete

İşin içine dakika girince bir şekilde saat sinyalini sağlaman gerekiyor. Yoksa pause ile saat sinyali elde etmek zor. Edebilirsin ama hassas olmaz.  Ayrıca geriye doğru saymalar 60 değil 59 dan başlar. 0-59 arası çalışan bir saniye de 60 adet saniye vardır. 60 rakamını alırsan 61 sn de geri sıfırlamış olur. Dolaysıyla dakika olarak saydıracak isen 59:59 dan itibaren geri sayması gerekir.

İşin formülü şöyle;
@ DEVICE pic16F84A 'işlemci 16F84A 
@ DEVICE pic16F84A, WDT_ON 'Watch Dog timer kapalı
@ DEVICE pic16F84A, PWRT_ON 'Power on timer açık
@ DEVICE pic16F84A, PROTECT_OFF 'Kod Protek kapalı
@ DEVICE pic16F84A, XT_OSC

TRISB = 0
TRISA = %00000001
'----PORT TANIMLAMASI YAPILDI B TÜM ÇIKIŞ A0 GİRİŞ---------------

X     VAR byte
SAYMA VAR WORD
SAYI  VAR BYTE
SAYI1 VAR BYTE
SAYI2 VAR BYTE
SAYI3 VAR BYTE
SN    VAR BYTE
DAK   VAR BYTE
symbol TUS=PORTA.0
sYMBOL LED = PORTB.3
'----DEĞİŞKENLER TANIMLANDI-----------

X = 0
SAYMA = 60
SAYI  = 0
SAYI1 = 0
SAYI2 = 0
SAYI3 = 0

PORTB = 0
PORTA = 0

'----DEĞİŞKENLERİN DEĞERİ SIFIRLANDI----------------------
BASLA:

     SN=59:DAK=59:GOSUB EKRAN 
     WHILE TUS=0:wend 
BIR:
     PAUSE 480:SN= SN - 1
     IF SN=255 then
         SN=59
         DAK=DAK-1
         IF DAK=255 then BASLA
     ENDIF           
      gosub ekran   
     GOTO BIR
EKRAN:     
     X = SN DIG 0
     LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57,64],SAYI
   
     X = SN DIG 1
     LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57,64],SAYI1
   
     X = DAK DIG 0
     LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57,64],SAYI2
     
     X = DAK DIG 1
     LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57,64],SAYI3
     
     SHIFTOUT PORTB.0,PORTB.1,1,[SAYI,SAYI1,SAYI2,SAYI3]
     HIGH PORTB.2 : PAUSEUS 2 : LOW PORTB.2
     TOGGLE LED
     pause 500
     toggle led
     return


Ete

ronin_2000

Sayın ETE Hocam size ne kadar teşekkür etsem azdır. Günlerdir bu sorunun çözümü ile uğraşıyorum.
Kolay gibi görünmesine rağmen ne zormuş bu saydırma işi.
Hassasiyet şu an için önemli değil ileride dediğiniz gibi yapmaya çalışabilirim.
Size tekrar sonsuz teşekkürlerimi sunuyorum...

erdoganacun

ete  hocam  bu  sayıcı tam aradığım bir şey  fakat  bunda  59 dk  geri sayarken  reset tuşunu  nasıl koyarız

ete

Reset tuşu , SYMBOL RST=PORTX.x şeklinde tanımlanır.
Programda GOSUB EKRAN satırından bir önceki satıra,
IF RST=0 THEN BASLA
şeklinde bir satır ilave ediver olsun bitsin.

Ete


erdoganacun

 teşekkür  ediyorum  ete  hocamM

Powered by EzPortal