Çalışma süresi ayarlama sorunu

Başlatan teketek, 02 Haziran 2006, 17:27:36

teketek

Selamlar;

Bir devrenin çalışma süresini ayarlayan bi program var ve mesela 10 dk çalışması isteniyorsa bu devrenin 10 dk çalışıp sonra kapanması gerekiyor.Ben bunun için devrede bulunan DS1302'den dakika bilgisini okuyup bir değişkene (KD) attım ve bunu o anki dakika değeriyle karşılaştırmaya başladım.Dakika bilgisi her değiştiğinde kalan zamandan 1 eksiltiyorum ancak problem şu ki, eğer program dakika değişiminden  5 saniye önce başlatılırsa 5 saniye sonra kalan zaman 9 dakikaya iniyor. Bu da çalışma süresinin sağlıklı ayarlanmadığı anlamına geliyor.

C1: KD=DAKIKA
CE: GOSUB GETTIME
       GOSUB ADCEV
       .
       .
       .

KLNZMN:    
    IF KD=DAKIKA THEN CE
    IF KD!=DAKIKA THEN
      KZMN=KZMN-1
      GOTO C1
     ENDIF


Bu süreyi daha kullanışlı bir şekilde nası ayarlayabilirim ??
Bilgi fark yaratır..

ete

Demekki saniyeyide karşılaştırmaya dahil etmen gerekiyor.

Yani;
if dakika=dk and Saniye=sn ise  
demen gerekir.

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

teketek

@ete hocam sağol un ilgiliniz için,
Ancak sorumu biraz daha açıklamam gerek sanırım.

GOSUB GETTIME
C1: KD=DAKIKA : KS=SANIYE   'DAKIKA ve SANIYE bilgilerini KD ve KS değişkenlerine kaydet
CE: GOSUB GETTIME 
     GOSUB ADCEV 
       . 
       . 
       GOTO KLNZMN
       . 

KLNZMN:    
    IF KD=DAKIKA THEN CE ' kaydedilen DAKIKA bilgisi değişmemişse değişene kadar CE etiketine dallan.
    IF KD!=DAKIKA THEN  ' eğer DAKIKA bilgisi değişmişse                         
    KZMN=KZMN-1 '(KZMN dakika cinsinden zaman belirtici)kalan zamanı bir eksilt.
    GOTO C1 
    ENDIF
    GOTO CE


burda DAKIKA bilgisi KD ye eşit olduğu zaman değil eşitsizlik olduğu zaman yani DAKIKA bir arttığı zaman kalan zaman (KZMN) bir eksiliyor.Yapmak istediğim tam olarak şu :

herhangi bir dakika/saniye anında devre çalıştırıldığında ayarlanan süre ne ise tam olarak bu andan o ayarlanan zaman sonra devrenin durması.bunu saniye olayını gözönünde bulundurmadığım için süreyi bi türlü tutturamadım dediğiniz gibi saniye faktörünüde gözönünde bulundurup bi ayar vermem lazım ama nası yapacağımı çözemedim hala :(
Bilgi fark yaratır..

ete

bence en iyisi tüm zaman değişkenlerini saniyeye çevir ve öyle karşılaştır.
1 dak=60 sn
o halde sn=dakika x 60 + Saniye dersin ve direk saniyeleri karşılaştırırsın.

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

teketek

dakikayı saniye böyle çevirdim

kalanzaman=ayarlanansüre*60

sonra saniyeleri karşılaştırıp kalanzamanı 1 eksilttim ve bu değeri tekrar dakika cinsinden ifade etmek için 60 a böldüm ama gene bişeyleri yanlış yapmış olmalyım ki gene çalışmadı.

aklıma takıldı KALAN_ZAMAN değişkenini WORD mü yapmalıydım?WORD yapınca bu eksiltme işini LowByte tan mı yapmam gerek yoksa HighByte'dan mı ??

KALAN_ZAMAN=AYARLANAN_SURE * 60 ' burda dakika cinsinden ayarlanan zamanı saniye'ye cevirdim.
KSANIYE=SANIYE+1 ' o anki saniye bilgisini bu değişkene atadım, bir dakika boyunca bu atadığım değerle o anki saniye bilgisi sadece bir kere eşit olabilir işte o anda 

ZAMAN:
IF KSANIYE=SANIYE THEN
   KALAN_ZAMAN=KALAN_ZAMAN-1
   ENDIF

GERCEK_SURE=KALAN_ZAMAN/60  ' saniye cinsinden olan değeri dakikaya çevir.
GOTO ZAMAN
Bilgi fark yaratır..

ete

Kalan zaman kesinlikle word olacak ve eksilme normal olarak,
kalan zaman=kalanzaman-1 şeklinde yapılacak.
Low bayt dan da yapabilirsin ancak low baytın 0 olup sıfırdan 255 döndüğü anda high byt dan da bir çıkarman gerekir. Halbuku komut normal halinde istediğin şekilde çalışır.

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