CCS C ile DS1302 RTC Uygulaması

pr_01_37_max

 

DS1302 entegresi gerçek-zaman saati (RTC) olarak çalışır. Saniyeyi, dakikayı, saati, günü, ayı, yılı, haftanın gününü sayar. 2100 yılına kadarki tarih bilgileri entegrenin içinde kayıtlıdır. Her ayın sonunda otomatik olarak ay ve gün bilgisini ayarlar. Örneğin 29 Şubat 2008 tarihinden sonra 1 Mart 2008 tarihine geçer. 2 V ile 5 V arasındaki gerilimlerde çalışan entegrede, 31 baytlık RAM bölgesi vardır. 2 V besleme geriliminde çalışırken 300 nA’den daha az akım çeker.

Entegrenin çalışması için X1 ve X2 adlı bacaklara 32.768 kHz’lik bir kristal bağlanması gerekir. Kristalin niteliği ve duyarlılığı, saatin doğruluğunu etkiler. Piyasada kolayca bulunan kristallerden kullanılması durumunda ayda birkaç dakikalık hata ortaya çıkması normaldir. Daha doğru bir saat yapmak istenirse, DS32kHz adlı özel kristal entegresi kullanılmalıdır. Bu kristalle saatin hatası yılda bir dakikaya kadar düşürülebilir.

DS1302 entegresi mikrodenetleyiciyle haberleşmek için CE, I/O ve SCLK uçlarını kullanır. Entegrenin iki besleme ucu bulunur. Vcc2 adlı ana besleme ucuna 5 V’luk gerilim kaynağı bağlanır. Vcc1 adlı besleme ucuna da pil ya da yüksek kapasiteli bir kondansatör bağlanır. Böylece enerji kesintisi olduğu durumda güncel saati ve tarihi saymayı sürdürür. Örneğin yedek besleme kaynağı olarak 1 F’lık kondansatör kullanılırsa, yaklaşık bir aylık bir enerji kesintisinden bile etkilenmeden çalışmasını sürdürür. 50 mAh’lik lityum batarya kullanıldığındaysa bu süre 10 yıla kadar çıkar.

/******************************************************************
 PIC16F877 ile DS1621 Sıcaklık ve Termostat Entegresi Uygulaması
*******************************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık // dosyası tanıtılıyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#define use_portb_lcd TRUE // LCD B portuna bağlı
#include <lcd.c> // LCD.c dosyası programa ekleniyor
#include <DS1302.c> // DS1302.c dosyası programa ekleniyor

byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu; // byte türünde değişkenler tanımlanıyor

//******************* ANA PROGRAM FONKSİYONU *******************
void main ()
{
 setup_psp(PSP_DISABLED); // PSP birimi devre dışı
 setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
 setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
 setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
 setup_adc(ADC_OFF); // ADC birimi devre dışı
 setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
 setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı

 lcd_init(); // LCD başlangıç ayarları yapılıyor
 rtc_init(); // DS1302 başlangıç ayarları yapılıyor

 rtc_set_datetime(20,07,07,6,22,52); // Tarih ve Saat ayarları yapılıyor

 while(1)
 {
 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
 printf(lcd_putc,"\fT:%02d/%02d/20%02d ",gun,ay,yil); //LCD'ye gün,ay,yıl bilgileri yazdırılıyor

 switch(haftanin_gunu) // DS1302'den sayısal olarak alınan haftanın günü bilgisine
 { // metin olarak karşılık atanıyor
 case 1: printf(lcd_putc,"PAZ"); break; // Eğer "1" ise LCD'ye PAZ yaz
 case 2: printf(lcd_putc,"PZT"); break; // Eğer "2" ise LCD'ye PZT yaz
 case 3: printf(lcd_putc,"SAL"); break; // Eğer "3" ise LCD'ye SAL yaz
 case 4: printf(lcd_putc,"CRS"); break; // Eğer "4" ise LCD'ye CRS yaz
 case 5: printf(lcd_putc,"PER"); break; // Eğer "5" ise LCD'ye PER yaz
 case 6: printf(lcd_putc,"CUM"); break; // Eğer "6" ise LCD'ye CUM yaz
 case 7: printf(lcd_putc,"CTS"); break; // Eğer "7" ise LCD'ye CTS yaz
 }
 printf(lcd_putc,"\nSaat:%02d:%02d:%02d",saat,dakika,saniye); // LCD'ye saat,dakika ve saniye değerlerini yaz
 delay_ms(1000); // 1 sn gecikme veriliyor
 }
}

DS1302 RTC Uygulaması

Bu yazı CCS C Örnekleri kategorisine gönderilmiş ve , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.