ds1302 ile zaman aralığı kontrolü hk.

Başlatan frkcn, 05 Haziran 2011, 14:52:52

frkcn

Yapmak istediğim, saat için kullandığım rtc nin dakika bilgisi alarak;
çıkışa bağladığım rölenin çalışma ve durma zamanlarını tayin etmek. Bunun için şöyle bir kod yazdım:

sayac=dakika
if(kontrol==1)
{
if(atanan_dakika+sayac>=dakika;){output_high(role);}
}


burada "sayac=dakika" satırının tekrar tekrar çalışmasını gözardı etmenizi isteyerek soruma geliyorum. Sayacı, dakika bilgisi ""55"" iken 10 dakikalık zamana kurduğumda sayac değişkeni 65 değerini alıcak  ve çıkış sürekli açık kalıcak oysaki benim istediğim 10 dk açık kalması. Bu sorunu nasıl aşarım?
Bugün ömrümün geride kalan son günü...

Klein

bu işlemi yapacak onlarca algoritma bulunabilir.  Saat , dakika , saniye gün dönümleri gibi durumlardan etkilenmeyecek en basit yöntem , değişim zamanını yakalamaktır.
şöyle bir kod  işinizi basitleştirebilir.

char  dakika,eski_dakika;
char sayac;

/***********************/
void sayacı_kur(char yeni_sayac){
         sayac = yeni sayac;
}

void tick (void){
      if(dakika != eski dakika){
               eski_dakika = dakika;
               if (sayac )  sayac--;  
      }
}

void role_kontrol(void){
        if(sayac) role=1; else role=0; 
}


Buradaki en önemli sorun şu:  Eğer sayacı kurduğunuzda  saniye 55 gibi bir değerse  5 saniye donra dakika değişecek ve tam 1 dakikalık süreden önce tetikleme gerçekleşecek.
Bunun çözümü de  dakika yerine saniye bazında işlem yapmak olabilir.

frkcn

Programı yeni öğrendiğimiz için algoritma konusunda fikirler üretmek zor olabiliyor. Yardımınız için teşekkürler bahsettiğiniz erken tetikleme şu an için çok önemli değil. 
Bugün ömrümün geride kalan son günü...