Ana sayfa | Hakkımda | İletişim | Sosyal platform
PIC CCS C & ASM / Kendi kütüphanemiz
DS3231 kütüphanesi

Bildiğiniz üzere DS3231 kendi iç donanımsal yapısı ile uzun vadede en doğru sonucu veren bir entegredir. Kulağınıza aşina olmuştur elbet. İhtiyacım doğrultusunda DS3231 modülü için basit bir kütüphane oluşturdum.

Bilmeniz gerekenler ve yapabilecekleriniz aşağıdadır.

  • Saniye, Dakika, Saat, Haftanın günü, Gün, Ay, Yıl ayarları ve sıcaklık ölçümü.
  • Saat formatı 24 saat olarak belirlendi.
  • Haftanın günü; 1-7 arasında çıktı verir. 1 pazar, 2 pazartesi şeklindedir.
  • Yıl iki haneli formdadır ve 99 yılına kadar uzanır.
  • Sıcaklık çözünürlüğü 0.25° C dir. Hassasiyeti ±3°C
  • I2C protokolü ile haberleşir.

Nasıl ayarlarım?

Ayar işlemi gayet basit. Kütüphane dosyasında rtc_ds3231 dizisi var;

unsigned int8 rtc_DS3231[9]={0,46,2,6,13,7,18,0,0};

//Sırayla: saniye, dakika, saat, haftanın günü, gün, ay, yıl,sicaklik(tam kısım),sicaklik(ondalık kısım)

Bu dizinin ilk 7 elemanını yazılımınızda veya programınız koşarken(dinamik olarak) değiştirebilirsiniz. O şekli size kalmış. Sadece hayal edin ve uygulayın.

Aşağıdaki örnek kodda yazılım yüklenmeden önce ayarlama işlemi üzerinde durulmuştur. Dahili eeprom bellek yardımıyla sadece bir defa ayarlama işlemi geçekleştirilmiştir.

Bağlantı şekli kütüphane dosyasında mevcuttur. Modül üzerinde sadece VCC, GND, SDA, SCL pinleri kullanılmıştır.

ds3231_kutuphane.c dosyasını indirmek için buraya tıklayın. Arşiv parolası: elektrocavus.com

Test edilmiş örnek kod:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <16f877a.h>
#fuses XT,NOWDT
#USE delay(clock=4M)
#include <\lcd420.c>
#include <\ds3231_kutuphane.c>

int1 izin=1;

Void main()
{

   rtc_ds3231_init();
   if(read_eeprom(0)==255)
   {
      rtc_ayarla();
      write_eeprom(0,0);
   }

   lcd_init(); 

   for(;;)
   {
         RTC_ds3231_OKU();
      if(rtc_ds3231[0]==0 && izin==0)
      {
         izin=1;
      }
      
      if(izin==1)
      {
         izin=0;
         printf(lcd_putc,"\f%02u:%02u:%02u - %u - \n%02u.%02u.20%02u\n%02d.%02u",
         RTC_DS3231[2], //Saat
         RTC_DS3231[1], //Dakika
         RTC_DS3231[0], //Saniye
         RTC_DS3231[3], //Haftanın günü
         RTC_DS3231[4], //Gün
         RTC_DS3231[5], //Ay
         RTC_DS3231[6], //Yıl
         RTC_DS3231[7], //Sıcaklık(tam kısım)
         RTC_DS3231[8]);//Sıcaklık(ondalık kısım)
      }
      
      lcd_gotoxy(7,1);
      printf(lcd_putc,"%02u",rtc_ds3231[0]);
      DELAY_MS(100);
   }
}

Yararlanılan kaynaklar:

İlgili entegrenin (DS3231) datasheet dökümanı: https://datasheets.maximintegrated.com/en/ds/DS3231.pdf

Serdar Çiçek'in "CCS C ile PIC PROGRAMLAMA" kitabındaki I2C haberleşme kısımları(Sayfa 450, 4. baskı[2009])

ELEKTRO ÇAVUŞ
Ana sayfa | Hakkımda | İletişim | Sosyal platform
ELEKTRO ÇAVUŞ2012 | elektrocavus.com