Real time clock RTC DS1307 is a chip that works via i2c communication protocol. It can supply and maintain current hour, minute, secod, day, month and year in a 12 or 24 hour format. It features (in the case of the shield used in this tutorial) a CR2032 battery backup.
Connections to Arduino UNO are as follow, it is only necessary to provide 5V and GND along with i2c (SCL A5 and SDA A4 of Arduino UNO).
I first got code from this blog and the library from this Github. Here is the code and the serial monitor result:
//Program : Clock with RTC DS1307
//Author : MakerHero
//Load RTC DS1307's library
#include <DS1307.h>
//i2c ports in Arduino UNO
DS1307 rtc(A4, A5);
void setup()
{
//Turn the clock on
rtc.halt(false);
//The lines below set the date and time
//uncomment them, use once and comment them again
/*rtc.setDOW(WEDNESDAY); //Define the day of week
rtc.setTime(19, 47, 00); //Define time
rtc.setDate(3, 7, 2024); //Define day, month, year*/
//SQW/Out pin definition
rtc.setSQWRate(SQW_RATE_1);
rtc.enableSQW(true);
Serial.begin(9600);
}
void loop()
{
//Show info on Serial Monitor
Serial.print("Hour (24h) : ");
Serial.print(rtc.getTimeStr());
Serial.print(" ");
Serial.print("Date : ");
Serial.print(rtc.getDateStr(FORMAT_SHORT));
Serial.print(" ");
Serial.println(rtc.getDOWStr(FORMAT_SHORT));
//Wait 1s and do it all over
delay (1000);
}
Notice that time is in 24h format (it is showing 7:57 PM) and date is not in American format (hence July 3rd/2024). To test it I removed Arduino power completely for a couple of minutes. After restablishing it the time and date remained current, so the CR2032 battery really works its purpose.
Remember you have to change the lines below with your current date and time. Do it only once then you have to comment or remove the lines.
rtc.setDOW(WEDNESDAY); //Define the day of week
rtc.setTime(19, 47, 00); //Define time
rtc.setDate(3, 7, 2024); //Define day, month, year
Regarding the piece of code below, it seems to be a square wave generated every second (SQW_RATE_1). I disabled the entire two lines because had no visible use to it.
//SQW/Out pin definition
rtc.setSQWRate(SQW_RATE_1);
rtc.enableSQW(true);
Apparently it is used to inform your microcontroller that the time is passing. So that it can have its own control of time without reading the DS1307. We are not going to use it, despite the DS1307 module we are using having the SQ pin available.
Battery usage and duration
According to the DS1307 datasheet, a 48mAh battery will retain time and date on the chip for 10 years. So most likely it will take a long time before you have to replace the module battery.
There are 56 bytes of information which the battery will backup, including hour, minute, second, day, month and year. That includes automatic number of days in the month calculations and also leap years. The module’s logic is guaranteed to work until 2100.
Final words
The DS1307 chip a bit old already, there are better options available. Specially in the 2100 time limitation. It remains an easy to use and cheap real time clock module for hobby and students projects.
If you want to follow along and replicate the experiment, buy a DS1307 via my Aliexpress affiliate link, here. A bit unrelated but still talking about energy consumption, check my article about lowering relay power consumption.
Leave a Reply