Site icon Ercan Koçlar

DS1307 Entegresi ile Saat Devresi ve MikroC Kütüphanesi

DS1307-gercek-zamanli-saat

DS1307-gercek-zamanli-saat

This post is also available in: English

  1. DS1307  – Gerçek Zamanlı Saat
  2. DS1307   Çalışma Prensipleri
  3. DS1307 Gerçek Zamanlı Saat Devresi
  4. DS1307 Gerçek Zamanlı Saat MikroC Kütüphanesi
  5. SONUÇ
  6. Kütüphane Dosyaları
    1. DS1307 Entegresi ile Saat Devresi Açık Kaynak Kod Kütüphaneyi Satın Almak için Tıklayınız
    2. Ücretsiz kütüphane dosyaları (.mcl)
  7. Yararlanılan Belgeler

1-DS1307  – Gerçek Zamanlı Saat


2-DS1307   Çalışma Prensipleri

3 volt lithyum pil ile DS1307 yaklaşık 10 yıl kadar çalışabilir

2A- DS1307 Pinleri ve Görevleri

PIN Numarası PIN Adı İşlevi
1 X1 Bu pinler 32,768khz kristalin bağlanacağı pinlerdir
2 X2
3 Vbat Bu pin enerji kesildiğinde saatin çalışmasını sağlayan  3V lithyum pilin (+) ucunun bağlanacağı pindir (-) uç GND ye bağlanır
4 GND GND
5 SDA Seri data pinidir. I2C protokolünde kullanılır PIC üzerinde hangi pin SDA olarak kullanıyorsa buraya bağlanır
6 SCL Clock pinidir. I2C protokolünde kullanılır PIC üzerinde hangi pin SCL olarak kullanıyorsa buraya bağlanır
7 SQW/OUT DS1307 den bir takım sinyal çıkışları alınabilir benim kendi devremde ve kütüphanemde bu özellik devre dışıdır normal saatin çalışmasına etkisi yoktur
8 Vcc Ana besleme pinidir DS1307 ana beslemeden 5volt ile beslenmelidir.

 

2B – DS1307 den RAM Haritasını Okuma

Aşağıdaki tablo DS1307 nin RAM haritasıdır. Buna göre hangi adresten hangi verinin nasıl okunup değelendirilmesi gerektiğini anlayacağız. Adresler hexadesimal tabanda yazılmıştır.

 ADRES 7.Bit 6.Bit 5.Bit 4.Bit 3.Bit 2.Bit 1.Bit 0.Bit İŞLEV BOYUT
00h  CH    10 Saniye     Saniye  Saniye Verisi  00-59
01h  0    10 Dakika     Dakika  Dakika Verisi  00-59
 02h  0  12/24 10Sa./Pm  10Sa.     Saat  Saat Verisi  1-12/00-23
 03h  0  0  0  0  0        Gün  Gün Verisi  01-07
 04h  0  0   10 Tarih     Tarih  Tarih Verisi  01-31
 05h  0  0  0  10 Ay     Ay  Ay Verisi  01-12
 06h     10 Yıl     Yıl  Yıl Verisi  00-99
 07h  OUT  0  0  SQWE  0  0  RS1 RS0  Kontrol

Önemli Not: DS1307 içerisinde veriler BCD f0rmatında saklanır yani örneğin saniye verisini ele alalım saniye verisini saklayan adresi okuduğumuzda önümüze 00100101 gibi bir veri geldi. Bunu okurken 4 er bit olarak ayrı ayrı okumalıyız, ilk 4 bit(0010 =2son 4 bit( 0101=5 )  o halde saatin 25. saniyede olduğunu anlıyoruz. Tüm veriler BCD olarak saklandığından bu şekilde parçalanıp değerlendirilmelidir.

Önemli Not2 : DS1307 içerisinde bir adres seçildiğinde otomatik olarak pointeri arttırdığından dolayı tekrar adres seçimi yapmaya gerek yoktur. Örnek olarak 00h adresinden okumaya başlarsak bir kez 00h adresini seçeriz sonrasında her okumada otomatik olarak bir sonraki adrese geçer her seferinde adres seçmeye gerek kalmaz.

Şimdi adresleri inceleyelim.

 

 

 

 

 

 

 

 

RS1 RS0 SQW/OUT Çıkış SQWE OUT
0 0 1HZ 1 x
0 1 4.096kHz 1 x
1 0 8.192kHz 1 x
1 1 32.768kHz 1 x
x x 0 0 0
x x 1 0 1

 

2C – DS1307 Çalışma Protokolleri

 

DS1307 veri yazma blok şeması

 

DS1307 veri okuma blok şeması

 

DS1307 Veri Okuma Sistemi Tüm Protokol

 

3- DS1307 Gerçek Zamanlı Saat Devresi

3A – DS1307 Devre Şeması

DS1307 devre şeması

3B – Gerekli Malzemeler

  1. 1AD 32,768 khz Kristal
  2. 2 AD 20 k direnç
  3. 1 AD 3v pil soketi ve Lithyum pil
  4. 1 AD 100 nf polyester kondansatör
  5. 1 AD DS1307 entegresi
  6. 1 AD 8li entegre soketi

Not : Tüm lithyum piller şarj olmaz mutlaka üzerindeki kodu araştırarak şarj olup olmadığını öğrenin aksi halde şarj olmayan pilleri şarj etmeye çalışmak patlamalarına sebep olabilir.

3C – Devrenin Yapımı

DS1307-saat-devresi
32.768khz kristal
Kristalin kılıfı mutlaka topraklanmalıdır.
smd kristal

 

4- DS1307 Gerçek Zamanlı Saat MikroC Kütüphanesi

4A- Fonksiyonlar

4A – (A) Çevrim Fonksiyonları

 

–  BCD_DESIMAL_CEVIRICI Fonksiyonu

Fonksiyon : unsigned char BCD_DESIMAL_CEVIRICI(unsigned char BCD_KOD)

Amacı : 8 bitlik BCD formundaki binary kodunu desimale çevirir.

Parametreler:

Kullanım Şekli :

BCD_DESIMAL_CEVIRICI(dakika); // dakika adındaki değişkeni desimal şekle çevirir

Geri Bildirim : Sonucu geri bildirim olarak gönderir.

 

–  DESIMAL_BCD_CEVIRICI Fonksiyonu

Fonksiyon : unsigned char DESIMAL_BCD_CEVIRICI(unsigned char DESIMAL)

Amacı : 8 bitlik desimal kodu BCD formundaki binary koduna çevirir

Parametreler :

Kullanım Şekli :

DESIMAL_BCD_CEVIRICI(DAKIKA);// dakika adındaki değişkeni BCD formuna çevirir

Geri Bildirim : Sonucu geri bildirim olarak gönderir.

 

4A – (B) Saat Okuma Fonksiyonları

 

– DS1307_SANIYE_OKU Fonksiyonu

Fonksiyon : unsigned char DS1307_SANIYE_OKU()

Amacı : Saniye verisini okur.

Parametreler : Bulunmuyor

Kullanım Şekli :

DS1307_SANIYE_OKU();//saniye verisini okur

Geri Bildirim :

 

– DS1307_DAKIKA_OKU Fonksiyonu

Fonksiyon : unsigned char DS1307_DAKIKA_OKU()

Amacı : Dakika verisini okur

Parametreler : Bulunmuyor

Kullanım Şekli :

DS1307_DAKIKA_OKU();//dakika verisini okur

Geri Bildirim :

 

– DS1307_SAAT_OKU Fonksiyonu

Fonksiyon : unsigned char DS1307_SAAT_OKU()

Amacı : Saat verisini okur

Parametreler : Bulunmuyor

Kullanım Şekli:

DS1307_SAAT_OKU();//saat verisini okur

Geri Bildirim :

 

4A – (C) Tarih Okuma Fonksiyonları

 

– DS1307_GUN_OKU Fonksiyonu

Fonksiyon : unsigned char DS1307_GUN_OKU()

Amacı : Haftanın kaçıncı günü olduğunu okur

Parametreler : Bulunmuyor

Kullanım Şekli :

DS1307_GUN_OKU() ; // haftanın kaçıncı günü olduğunu okur

Geri Bildirim :

 

– DS1307_AYIN_KACI_OKU Fonksiyonu

Fonksiyon : unsigned char DS1307_AYIN_KACI_OKU()

Amacı : Ayın kaçı olduğunu okur

Parametreler : Bulunmuyor

Kullanım Şekli :

DS1307_AYIN_KACI_OKU() ; // ayın kaçı olduğunu okur

Geri Bildirim :

 

– DS1307_AY_OKU Fonksiyonu

Fonksiyon : unsigned char DS1307_AY_OKU()

Amacı : Hangi ayda olunduğu bilgisini okur. Örnek Ocak = 1 gibi

Parametreler : Bulunmuyor

Kullanım Şekli :

DS1307_AY_OKU();// kaçıncı ayda olunduğu bilgisini okur

Geri Bildirim :

 

– DS1307_YIL_OKU Fonksiyonu

Fonksiyon : unsigned int DS1307_YIL_OKU()

Amacı : Yıl bilgisini okur. Yıl bilgisini tam olarak verir . örn : 2017 gibi

Parametreler : Bulunmuyor

Kullanım Şekli :

DS1307_YIL_OKU();// yıl bilgisini okur

Geri Bildirim:

 

4A – (D) Saat ve Tarih Ayarlama Fonksiyonları

 

– DS1307_SAAT_TARIH_AYARLA Fonskiyonu

Fonksiyon : unsigned char DS1307_SAAT_TARIH_AYARLA(unsigned char SANIYE,unsigned char DAKIKA,unsigned char SAAT,unsigned char GUN,unsigned char AYIN_KACI,unsigned char AY,unsigned int YIL)

Amacı : Saati ve tarihi ayarlamayı sağlar.

Parametreler :

Kullanım Şekli :

DS1307_SAAT_TARIH_AYARLA(0,5,3,6,16,12,2017);// Saat: 03:05:00 ( gece 3ü 5 geçe)   Tarih: 16.12.2017  Cumartesi(6. gün)

Geri Bildirim :

 

4A – (E) Alarm Fonksiyonları

 

– ALARM_ZAMAN Fonksiyonu

Fonksiyon : unsigned char ALARM_ZAMAN(unsigned char SANIYE,unsigned char DAKIKA,unsigned char SAAT)

Amacı : Zamana göre alarm kurar

Parametreler :

Kullanım Şekli :

ALARM_ZAMAN(0,10,23);// (00:10:23 - akşam saat 11 i 10 geçe) alarm tüm parametreler doğru olduğunda aktifleşir

Geri Bildirim :

 

– ALARM_TARIH Fonksiyonu

Fonksiyon : unsigned char ALARM_TARIH(unsigned char GUN,unsigned char AYIN_KACI,unsigned char AY,unsigned int YIL)

Amacı : Tarihe göre alarm kurar

Parametreler :

Kullanım Şekli :

ALARM_TARIH(01,15,01,2018);// buna göre alarm 15 Ocak Pazartesi 2018 tarihinde aktif olur

Geri Bildirim :

 

4B- Fonksiyonların Uygulanması

//I2C protokolü için pin ayarlamaları
 sbit I2C_SDA at RA5_bit;
 sbit I2C_SCL at RE0_bit;
 
 sbit I2C_SDA_VERI at LATA5_bit;//27.01.2019 güncellemesi ile eklendi
 sbit I2C_SDA_Direction at TRISA5_bit;
 sbit I2C_SCL_Direction at TRISE0_bit;

void  main()
{
    ADCON1=13;
    CMCON=7;

    DS1307_SAAT_TARIH_AYARLA(0,5,3,6,16,12,2017);//tarih ve saat ayarlandı
}
//I2C
 sbit I2C_SDA at RA5_bit;
 sbit I2C_SCL at RE0_bit;
 
 sbit I2C_SDA_VERI at LATA5_bit;//27.01.2019 güncellemesi ile eklendi
 sbit I2C_SDA_Direction at TRISA5_bit;
 sbit I2C_SCL_Direction at TRISE0_bit;



void  main()
{
    unsigned char txt[7];// stringe çevrim için oluşturuldu
    ADCON1=13;
    CMCON=7;

    
    SAP1024_INIT (240,128,6);//GLCD yi çalıştırdım
    
    while(1)//sürekli saati okumak için sonsuz döngü kuruldu
  
  {
    ShortToStr(DS1307_SANIYE_OKU(),txt);// saniye okunup değer stringe çevrildi
    SAP1024_YAZI_YAZMA(7,1,txt);// saniye  verisi GLCD de yazdırıldı

    SAP1024_YAZI_YAZMA(8,1,":");//araya ":"  işareti eklendi
 
    ShortToStr(DS1307_DAKIKA_OKU(),txt);//dakika okunup stringe çevrildi
    SAP1024_YAZI_YAZMA(4,1,txt);// dakika verisi GLCD de yazdırıldı

    SAP1024_YAZI_YAZMA(5,1,":");// araya ":" işareti eklendi

    ShortToStr(DS1307_SAAT_OKU(),txt);// saat okunup değer stringe çevrildi
    SAP1024_YAZI_YAZMA(1,1,txt);// saat verisi GLCD de yazdırıldı
    
    
    intToStr(DS1307_YIL_OKU(),txt);//yıl okunup değer stringe çevrildi
    SAP1024_YAZI_YAZMA(7,3,txt);// yıl verisi GLCD de yazdırıldı

    SAP1024_YAZI_YAZMA(8,3,".");araya "." işareti eklendi

    ShortToStr(DS1307_AY_OKU(),txt);//ay okunup değer stringe çevrildi
    SAP1024_YAZI_YAZMA(4,3,txt);// ay verisi GLCD de yazdırıldı

    SAP1024_YAZI_YAZMA(5,3,".");araya "." işareti eklendi

    ShortToStr(DS1307_AYIN_KACI_OKU(),txt);//ayın kaçı olduğu okunup değer stringe çevrildi
    SAP1024_YAZI_YAZMA(1,3,txt);// ayın kaçı olduğu verisi GLCD de yazdırıldı

    delay_ms(1000);// her 1 sn de bir kez saat bilgilerini okumasını sağladık
  }

}
DS1307  okunan tarih ve zamanın GLCD de yazdırılması

Çalışmanın çok kısa görüntüsü – gif dosyası

SONUÇ


Kütüphane Dosyaları

 


Yararlanılan Belgeler


 

Exit mobile version