Arkadaşlar periyodik zamanlayıcı yapacağım CCS C lütfen yardım

Başlatan silivrili, 01 Ocak 2011, 23:29:01

silivrili

     Merhaba arkadaşlar. CCS C de periyodik zamanlayıcı programı yazmak istiyorum. Saat ve tarih bilgilerini DS1302 den okutuyorum. LCD ekrandan menu oluşturdum menuden girilecek mesela 2 saatte veya 3 saate bir çıkış versin bu kısmı kullanıcı menuden giricek. Saat 23 ten sonra 00 a dönmesi kafamı karıştırıyor. CCS C de bunu karşılayan bir komut var mı saat değeri değiştiğinde oradan aldığım bilgiyi kullansam. Bir türlü doğru fonksiyonu bulamadım. 

if (saat-(saate_atanan)==periyodik_değer && dakika_atanan==dakika)
       { output_high(pin_a1);}
         
         else if  (saat-(saate_atanan)==(periyodik_değer*2) && dakika_atanan1==dakika)
         {output_high(pin_a1);}
      .
      .
      .
      else {output_low(pin_a1);}
   saate periyodik değer girildiği an o anki saat saate_atanan değer olacak. Burada bişeyler eksik.
   Meslek lisesinde öğretmenim okul için yapacağımız proje için gerekli.  Yardımlarınızı bekliyorum şimdiden teşekkürler..

RcALTIN

çok basit düşüneceksiniz, şu saati geçtim mi , bu saate vardım mı gibi...
örneğin :

int saat, dakika, saniye;
//saat değerleri 24lük dilimde olmalıdır... yukarıdaki değişkenlere sürekli zaman bilgisi yazılıyor diye varsayıyoruz
int bas_saat = 17, bas_dakika = 23, bit_saat  = 9, bit_dakika = 45;

if ( saat >= bas_saat  && saat <= bit_saat)
{
// yukarıda atanan değerlere göre akşam 17:00'dan itibaren, sabah 10:00'a kadar bu blok işler...(10:00 dahil değil, 9:59:59 dahil)
    if( dakika >= bas_dakika && dakika <= bit_dakika )
    {
         //yukarıda atanan değerlere göre, akşam 17:23'den itibaren, sabah 9:45'e kadar bu blok işler(9:45:59 dahi)
    }
}
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

onder

selam arkadaşlar benimde ccs c ile geri sayıcı yapmam gerekiyor. Örneğin sayıcıyı 20ye buton vasıtası ile kurcam daha sonra sayıcı her gün bir adet eksilecek. Zamanlayıcı entegresi olarak ds1302 kullanıyorum. Nasıl yapıldığıyla ilgili yardımcı olursanız sevinirim...

silivrili

@ Onder
  Butonla gün sayısını arttırdığın zaman o günün değerini bir değişkene atayacaksın (g diyelim). 1 ile 7 arasında bir değer ds 1307 den okunabiliyor (1 pazar, 7 cumartesi). Bir de arttırdığın gün değeri bir değişkende olacak (c diyelim) Gün değeri her değiştiğinde değişken 1 eksilecek ve sıfıra uaştığında istediğin işlemi yapacak. Bir de hangi saatte gün değerini arttırdıysan o saatte c değişkenin düşmeli.
Umarım yardımcı olabilmişimdir.

onder

teşekkürler yardımın için ama
sorun dahada karmaşıklaştı ds1302 saat entegrem butonla seçme yaptığım zaman çalışmıyor butondan elimi çektiğimde çalışmaya başlıyor buda zamanda sapmalara neden oluyor bunu nasıl aşabilirim acaba?

silivrili

Alıntı yapılan: onder - 08 Ocak 2011, 23:48:14
teşekkürler yardımın için ama
sorun dahada karmaşıklaştı ds1302 saat entegrem butonla seçme yaptığım zaman çalışmıyor butondan elimi çektiğimde çalışmaya başlıyor buda zamanda sapmalara neden oluyor bunu nasıl aşabilirim acaba?

   DS1302 saat entegresi zaten. Pic e yaptığınız girişler onu etkilemez. Muhtemelen butonla giriş yaptığınızda pic onu okumuyodur. Okuma zamanını 300ms olarak ayarlayın. Çok sık okuma yaptırıyorsanız o da probleme sebep olabilir. Hangi dilde yazıyorsunuz? CCS C ile yazdığım ve okulda zil devresi olarak kullandığım bir devre elimde mevcut. örnek olarak paylaşabilirim.

onder

ccs c ile yazıyorum
dediğin gibi butonla giriş yaptığım zaman okuma yapmıyor
while(1){ ds1302 çıkış kodları ve buton kodlarım bu sonsuz döngüde yer alıyor . butonla işlem yaptığımda ds1302 çalışmıyor buda zamanda sapmalara sebep oluyor. ds1302 çıkış kodlarını while(1) döngüsünün dışında kullandığımda ise saat kodlarını bir defa okuyup sonsuz döngüye giriyor ve bir daha saat çalışmıyor
}
yardımların için şimdiden teşekkür ederim


silivrili

Foruma nasıl dosya upload ediliyor bulamadım. Yardımcı olursanız örnek gönderebilirim

onder

bilmiyorum arkadaşım kodları açıp not defterinden buraya kopyala yapıştır yapabilirsin yada istersen mail adresimi vereyim
yardımcı olduğun için şimdiden teşekkürler

silivrili

/* 
 
   LCD İLE SAAT - TARİH - SICAKLIK- OKUL ZİLİ
   BİRKAN HOŞGÖR 
   OLTU TEKNİK VE ENDÜSTRİ MESLEK LİSESİ
-DS1302
-LM35
-2X16 LCD
-16F877  
*/

//----- ds1302 pinleri tanımlanıyor --------------------------------------------
#ifndef     rtc_sclk
#define     rtc_sclk   pin_c1
#define     rtc_io     pin_c2       
#define     rtc_rst    pin_c0
#endif                        
//------------------------------------------------------------------------------ 
  
#include <16f877.h>
#device adc=10
#fuses XT,NOWDT,NOPROTECT            
#use delay (clock=12000000) 
#define use_portb_lcd TRUE  
#include <lcd_flex.c>    
#include <DS1302.c>  
#define set pin_c4
#define mod pin_c5               
#define arttir pin_c6
#define azalt pin_c7  
                     
byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu; 
int set_degeri=0;
int mod_degeri=0; 
int a,b,c;
unsigned long int sicaklik_bilgisi;     
float sicaklik_degeri,sicaklik_voltaj;                                          

void ayarlar()
{
 if (input(set)){while(input(set)); set_degeri=1;  }
 else { goto ayardan_cik; }                                                  
 
//write_DS1302(0x8E,0x00); // Kontrol kaydedicisi ayarları
//write_ds1302(0x90,0xA5); // Şarj kaydedicisi ayarları

 while(set_degeri==1) //tarih ayarı
 {
   printf( lcd_putc "\f   Tarih Ayarı  " );
   delay_ms(20);           
  
   if(input(set)){ while(input(set)); set_degeri=2; goto set1_den_cik; }
   if(input(mod)){ while(input(mod)); mod_degeri=1; } 
  while(mod_degeri==1) //gun           
 { 
                            
  printf( lcd_putc, "\fGUN: %02d",gun ); 
  delay_ms(20);
  if(input(arttir)){gun++; while(input(arttir)); if(gun==32){gun=1;} }
  if(input(azalt)){gun--; while(input(azalt)); if(gun==0){gun=31;} } 
  if(input(mod)){while(input(mod)); mod_degeri=2; goto mod1t_cik;}
  write_ds1302(0x86,get_bcd(gun));
  printf( lcd_putc, "\fGUN: %02d",gun );
  delay_ms(20);
 }// while tmod deger=1 
 mod1t_cik:
   
  while(mod_degeri==2) //ay 
 { 
  printf( lcd_putc, "\fAY: %02d",ay );
  delay_ms(20);
  if(input(arttir)){ay++; while(input(arttir)); if(ay==13){ay=1;} }
  if(input(azalt)){ay--; while(input(azalt)); if(ay==0){ay=12;} } 
  if(input(mod)){while(input(mod)); mod_degeri=3; goto mod2t_cik;}                                    
  write_ds1302(0x88,get_bcd(ay)); //ay degeri gonder. 1-12   
  printf( lcd_putc, "\fAY: %02d",ay );
  delay_ms(20);
 }// while tmod deger=2 
 mod2t_cik:
 
  while(mod_degeri==3) //yıl
 { 
  printf( lcd_putc, "\fYIL: 20%02d",yil ); 
  delay_ms(20);
  if(input(arttir)){yil++; while(input(arttir)); if(yil==100){yil=0;} }
  if(input(azalt)){yil--; while(input(azalt)); if(yil==-1){yil=99;} }
  if(input(mod)){while(input(mod)); mod_degeri=4; goto mod3t_cik;}                                    
  write_ds1302(0x8C,get_bcd(yil)); //yil degeri gonder. 00-99 
  printf( lcd_putc, "\fYIL: 20%02d",yil );
  delay_ms(20);
 }// while tmod deger=3 
mod3t_cik: delay_us(1);

  while(mod_degeri==4) //yıl
 { 
  printf( lcd_putc, "\fDAY: %02d",haftanin_gunu ); 
  delay_ms(20);
  if(input(arttir)){haftanin_gunu++; while(input(arttir)); if(haftanin_gunu==8){haftanin_gunu=1;} }
  if(input(azalt)){haftanin_gunu--; while(input(azalt)); if(haftanin_gunu==0){haftanin_gunu=7;} }
  if(input(mod)){while(input(mod)); mod_degeri=0; goto mod4t_cik;}                                    
  write_ds1302(0x8A,get_bcd(haftanin_gunu)); //yil degeri gonder. 00-99 
  printf( lcd_putc, "\fDAY: %02d",haftanin_gunu );
  delay_ms(20);
 }// while tmod deger=4 
mod4t_cik: delay_us(1);                             
 }// while set deger = 1 
set1_den_cik:                 

  while(set_degeri==2) //saat ayarı
 {
  printf( lcd_putc "\f   Saat Ayarı   " );
  delay_ms(20);
  if(input(set)){ while(input(set)); set_degeri=0; goto set2_den_cik; }
  if(input(mod)){ while(input(mod)); mod_degeri=1; } 
                             
  while(mod_degeri==1) //saat                 
 {                      
  printf( lcd_putc, "\fSAAT: %02d",saat );
  delay_ms(20);
  if(input(arttir)){saat++; while(input(arttir)); if(saat==24){saat=0;} }
  if(input(azalt)){saat--; while(input(azalt)); if(saat==-1){saat=23;} } 
  if(input(mod)){while(input(mod)); mod_degeri=2; goto mod1s_cik;}                                    
  write_ds1302(0x84,get_bcd(saat)); //saat degeri gonder. 0-23   
  printf( lcd_putc, "\fSAAT: %02d",saat );
  delay_ms(20);
 }// while smod deger=1 
mod1s_cik:
 
  while(mod_degeri==2) //dakika 
 {  
  printf( lcd_putc, "\fDAKiKA: %02d",dakika ); 
  delay_ms(20);
  if(input(arttir)){dakika++; while(input(arttir)); if(dakika==60){dakika=0;} }
  if(input(azalt)){dakika--; while(input(azalt)); if(dakika==-1){dakika=59;} } 
  if(input(mod)){while(input(mod)); mod_degeri=3; goto mod2s_cik;}                                    
  write_ds1302(0x82,get_bcd(dakika)); //dakika degeri gonder. 00-59    
  printf( lcd_putc, "\fDAKiKA: %02d",dakika ); 
  delay_ms(20);
 }// while smod deger=2 
mod2s_cik:
 
  while(mod_degeri==3) //saniye 
 { 
  printf( lcd_putc, "\fSANiYE: %02d",saniye );
  delay_ms(20);
  if(input(arttir)){saniye++; while(input(arttir)); if(saniye==60){saniye=0;} }
  if(input(azalt)){saniye--; while(input(azalt)); if(saniye==-1){saniye=59;} } 
  if(input(mod)){while(input(mod)); mod_degeri=0; goto mod3s_cik;}                                    
  write_ds1302(0x80,get_bcd(saniye)); //saniye degeri gonder. 00-59   
  printf( lcd_putc, "\fSANiYE: %02d",saniye );
  delay_ms(20);
 }// while smod deger=3 
mod3s_cik: delay_us(1); 
 
 }// while set deger = 2 
set2_den_cik: 
 
ayardan_cik: delay_us(1);
} //void ayarlar                
         
              
void main ()                                                                                             
{    
   setup_adc(adc_clock_internal);
   setup_adc_ports(AN0);              
   lcd_init();
   delay_ms(20); 
   rtc_init();              
   delay_ms(20);
   set_tris_e(0x00);
   output_e(0x00);

   for(;;)
   {    
   
   rtc_get_time(saat,dakika,saniye);
  
   delay_ms(50);
    if(haftanin_gunu==1 || haftanin_gunu==7) 
   {
   output_low(pin_e0);
goto haftasonu;
}


//Etüt başla
if(saat==06 && dakika==00 && saniye<10) //kalk
   {
output_high(pin_e0);
}

 if(saat==06 && dakika==00 && saniye>10) //kalk zili bit
   {
output_low(pin_e0);
}
if(saat==06 && dakika==20 && saniye<10) //toplanma zili  başla
   {
output_high(pin_e0);
}

 if(saat==06 && dakika==20 && saniye>10) //toplanma zili bit
   {
output_low(pin_e0);
}


if(saat==07 && dakika==00 && saniye<10) //toplanma zili  başla
   {
output_high(pin_e0);
}

 if(saat==07 && dakika==00 && saniye>10) //toplanma zili bit
   {
output_low(pin_e0);
}


if(saat==18 && dakika==00 && saniye<10) //toplanma zili  başla
   {
output_high(pin_e0);
}

 if(saat==18 && dakika==00 && saniye>10) //toplanma zili bit
   {
output_low(pin_e0);
}



if(saat==18 && dakika==45 && saniye<10) //toplanma zili  başla
   {
output_high(pin_e0);
}

 if(saat==18 && dakika==45 && saniye>10) //toplanma zili bit
   {
output_low(pin_e0);
}

if(saat==19 && dakika==45 && saniye<10) //toplanma zili  başla
   {
output_high(pin_e0);
}

 if(saat==19 && dakika==45 && saniye>10) //toplanma zili bit
   {
output_low(pin_e0);
}

if(saat==20 && dakika==00 && saniye<10) //toplanma zili  başla
   {
output_high(pin_e0);
}

 if(saat==20 && dakika==00 && saniye>10) //toplanma zili bit
   {
output_low(pin_e0);
}

if(saat==21 && dakika==00 && saniye<10) //toplanma zili  başla
   {
output_high(pin_e0);
}

 if(saat==21 && dakika==00 && saniye>10) //toplanma zili bit
   {
output_low(pin_e0);
}

if(saat==22 && dakika==30 && saniye<10) //toplanma zili  başla
   {
output_high(pin_e0);
}

 if(saat==22 && dakika==30 && saniye>10) //toplanma zili bit
   {
output_low(pin_e0);
}



//Etüt saatleri bit

   if(saat==07 && dakika==50 && saniye<10) //toplanma zili  başla
   {
output_high(pin_e0);
}

 if(saat==07 && dakika==50 && saniye>10) //toplanma zili bit
   {
output_low(pin_e0);
}

if(saat==8 && dakika==00 && saniye<10) //1. giriş zili başla
   {
output_high(pin_e0);
}

 if(saat==8 && dakika==00 && saniye>10) //1.giriş zili bit
   {
output_low(pin_e0);
}

if(saat==8 && dakika==40 && saniye<10) //1.tenefüs çıkış başla
   {
output_high(pin_e0);
}

 if(saat==8 && dakika==40 && saniye>10) //1. tenefüs çıkış bit
   {
output_low(pin_e0);
}


if(saat==8 && dakika==50 && saniye<10) //1.tenefüs giriş başla
   {
output_high(pin_e0);
}

 if(saat==8 && dakika==50 && saniye>10) //1.tenefüs giriş  bit
   {
output_low(pin_e0);
}


if(saat==9 && dakika==30 && saniye<10) //2.tenefüs çıkış başla
   {
output_high(pin_e0);
}

 if(saat==9 && dakika==30 && saniye>10) //2. tenefüs çıkış bit
   {
output_low(pin_e0);
}


if(saat==9 && dakika==40 && saniye<10) //2.tenefüs giriş başla
   {
output_high(pin_e0);
}

 if(saat==9 && dakika==40 && saniye>10) //2.tenefüs giriş  bit
   {
output_low(pin_e0);
   }

if(saat==10 && dakika==20 && saniye<10) //3.tenefüs çıkış başla
   {
output_high(pin_e0);
}
 if(saat==10 && dakika==20 && saniye>10) //3. tenefüs çıkış bit
   {
output_low(pin_e0);
}
if(saat==10 && dakika==30 && saniye<10) //3.tenefüs giriş başla
   {
output_high(pin_e0);
}
 if(saat==10 && dakika==30 && saniye>10) //3.tenefüs giriş  bit
   {
output_low(pin_e0);
   }

if(saat==11 && dakika==10 && saniye<10) //4.tenefüs çıkış başla
   {
output_high(pin_e0);
}

 if(saat==11 && dakika==10 && saniye>10) //4. tenefüs çıkış bit
   {
output_low(pin_e0);
}

if(saat==11 && dakika==15 && saniye<10) //4.tenefüs giriş başla
   {
output_high(pin_e0);
}

 if(saat==11 && dakika==15 && saniye>10) //4.tenefüs giriş  bit
   {
output_low(pin_e0);
   }

if(saat==11 && dakika==55 && saniye<10) //öğle arası çıkış başla
   {
output_high(pin_e0);
}

 if(saat==11 && dakika==55 && saniye>10) //öğle arası çıkış bit
   {
output_low(pin_e0);
}

if(saat==13 && dakika==05 && saniye<10) // ö.s. toplanma başla
   {
output_high(pin_e0);
}

 if(saat==13 && dakika==05 && saniye>10) //ö.s toplanma  bit
   {
output_low(pin_e0);
}

if(saat==13 && dakika==15 && saniye<10) //6.ders giriş başla
   {
output_high(pin_e0);
}

 if(saat==13 && dakika==15 && saniye>10) //6. giriş bit
   {
output_low(pin_e0);
}

if(saat==13 && dakika==55 && saniye<10) //6.tenefüs çıkış başla
   {
output_high(pin_e0);
}

 if(saat==13 && dakika==55 && saniye>10) //6.tenefüs çıkış  bit
   {
output_low(pin_e0);
   }
if(saat==14 && dakika==00 && saniye<10) //7.ders giriş  başla
   {
output_high(pin_e0);
}

 if(saat==14 && dakika==00 && saniye>10) //7. ders giriş bit
   {
output_low(pin_e0);
}

if(saat==14 && dakika==40 && saniye<10) //7.tenefüs çıkış başla
   {
output_high(pin_e0);
}

 if(saat==14 && dakika==40 && saniye>10) //7.tenefüs çıkış  bit
   {
output_low(pin_e0);
   }

if(saat==14 && dakika==50 && saniye<10) //8.ders giriş başla
   {
output_high(pin_e0);
}

 if(saat==14 && dakika==50 && saniye>10) //8. ders giriş bit
   {
output_low(pin_e0);
}

if(saat==15 && dakika==30 && saniye<10) //8.tenefüs çıkış başla
   {
output_high(pin_e0);
}

 if(saat==15 && dakika==30 && saniye>10) //8.tenefüs çıkış  bit
   {
output_low(pin_e0);
   }
if(saat==15 && dakika==35 && saniye<10) //9. ders giriş başla
   {
output_high(pin_e0);
}

 if(saat==15 && dakika==35 && saniye>10) //9. ders giriş bit
   {
output_low(pin_e0);
}
if(saat==16 && dakika==15 && saniye<10) //9.tenefüs çıkış başla
   {
output_high(pin_e0);
}

 if(saat==16 && dakika==15 && saniye>10) //9.tenefüs çıkış  bit
   {
output_low(pin_e0);
   }
if(saat==16 && dakika==20 && saniye<10) //10.ders giriş başla
   {
output_high(pin_e0);
}

 if(saat==16 && dakika==20 && saniye>10) //10.ders giriş bit
   {
output_low(pin_e0);
}


if(saat==17 && dakika==00 && saniye<10) //paydos başla
   {
output_high(pin_e0);
}

 if(saat==17 && dakika==00 && saniye>10) //paydos bit
   {
output_low(pin_e0);

}

haftasonu:
   
      for(a=0;a<=10;a++) //saat-tarih 
      { 
        if (input(set)){ayarlar();}
        rtc_get_time(saat,dakika,saniye); // DS1302'den saat,dakika,saniye bilgileri alınıyor
   
        rtc_get_date(gun,ay,yil,haftanin_gunu); // DS1302'den gün,ay,yil ve günün isim bilgisi alınıyor
        delay_ms(300);
        printf(lcd_putc,"\f%02d/%02d/20%02d/g:%02d ",gun,ay,yil,haftanin_gunu);
      
      //delay_ms(10);
        printf(lcd_putc,"\nSaat: %02d:%02d:%02d",saat,dakika,saniye);
           //delay_ms(10);           
        for (b=0;b<=250;b++)      
        {                   
        delay_ms(2);            
        if (input(set)){ayarlar();} 
        }//for bekle
                             
      }//for saat-tarih
      
     for(c=0;c<=25;c++) //sıcaklık      
      {
        set_adc_channel(0); //an0
        delay_us(20);                                                                                           
        sicaklik_bilgisi= read_adc();          
        sicaklik_voltaj=(0.0048828125*sicaklik_bilgisi)*1000;
        sicaklik_degeri=(sicaklik_voltaj/10)+2;    
        printf(lcd_putc,"\fSıcaklık: %2.0f'C",sicaklik_degeri);
        delay_ms(10);                 
      }//for sıcaklık    
   }//for sonsuz                     
} //main                   

okul için yaptığım zil devresinin ccs c kodları.
Bilgi paylaştıkça çoğalır..

onder

teşekkürler arkadaşım tekrar denicem verdiğin bilgilerle inşallah olur