Program başında hangi pinlerin nereye bağlanması gerektiği yazılmıştır. Ancak DS1302 ve TIME kütüphane dosyalarını indirmeli ve daha önceki uygulamalarımızda yaptığımız gibi sıkıştırılmış dosyaları klasöre çıkartmalı ve klasör olarak library içine atmalısınız. Aşağıdaki programı kopyalayıp arduino derleyicisine yapıştırın ve yükleyin. Bu kadar basit.

İlk kullanımda RTC modül içinde saat ve tarih verileri yüklü değildir. Bu yüzden lcd ekranda 0/0/2000 gibi bir tarih görebilirsiniz. Bir sonraki uygulamamız saat ve tarih verilerini RTC modüle yüklemek olacak. Bu işlem bir kere yapılır ve üzerindeki pil çıkartılmadığı sürece yada pil bitmediği sürece veriler kaybolmaz.

2×16 LCD kullanılmıştır ve 4 pinlidir. (SDA, SCL, VCC, GND)

//***************** Program Başlangıcı*************************

// DS1302:  CE pin (RST)   -> Arduino Digital 13

//          I/O pin(DAT)       -> Arduino Digital 12

//          SCLK pin             -> Arduino Digital 11

//          VCC pin              -> Arduino Digital 9

//          GND pin             -> Arduino Digital 10

// LCD 4 pinli 2×16 = SDA : A4

//                            SCL : A5

// VCC pini arduinodaki 5V yazan yere ve GND pini GND yazan yere takılacak

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#include <DS1302RTC.h>

#include <Time.h>

// Init the DS1302

// Set pins:  CE, IO,CLK

DS1302RTC RTC(13, 12, 11);

 

#define DS1302_GND_PIN 10

#define DS1302_VCC_PIN 9

void setup()

{

// Setup LCD to 16×2 characters

lcd.begin(16, 2);

digitalWrite(DS1302_GND_PIN, LOW);

pinMode(DS1302_GND_PIN, OUTPUT);

digitalWrite(DS1302_VCC_PIN, HIGH);

pinMode(DS1302_VCC_PIN, OUTPUT);

lcd.print(“RTC aftif”);

delay(500);

lcd.clear();

if (RTC.haltRTC())

lcd.print(“Clock stopped!”);

else

lcd.print(“Clock working.”);

lcd.setCursor(0,1);

if (RTC.writeEN())

lcd.print(“Write allowed.”);

else

lcd.print(“Write protected.”);

delay ( 2000 );

 

lcd.clear();

lcd.print(“RTC Sync”);

setSyncProvider(RTC.get); // the function to get the time from the RTC

if(timeStatus() == timeSet)

lcd.print(” Ok!”);

else

lcd.print(” FAIL!”);

delay ( 2000 );

lcd.clear();

}

void loop()

{

lcd.setCursor(3, 0);

print2digits(hour());

lcd.print(”  “);

print2digits(minute());

lcd.print(”  “);

print2digits(second());

lcd.setCursor(0, 1);

lcd.print(dayShortStr(weekday()));

lcd.setCursor(5, 1);

lcd.print(” “);

print2digits(day());

lcd.print(“/”);

print2digits(month());

lcd.print(“/”);

lcd.print(year());

if(timeStatus() != timeSet) {

lcd.setCursor(0, 1);

lcd.print(F(“RTC ERROR: SYNC!”));

}

delay ( 1000 ); // Wait approx 1 sec

}

void print2digits(int number) {

if (number >= 0 && number < 10) {

lcd.write(‘0’);

}

lcd.print(number);

}

//**************** program sonu *********************************

İnternette de yer alan bir uygulamadır. Timur Maksimov tarafından yazılmıştır.

 0000988_ds1302-rtc-gercek-zamanli-saat-modulu-bataryasi-le_300