Do You Have The Time? DS1307 RT Clock + Arduino

Time DS1307 RT Clock

Most microcontrollers are time-agnostic, meaning they are unaware of the time around them, but that’s ok as most things we make have no need for it. But… every once in awhile you come up with an idea that requires knowing the actual time. Mostly this is used for data-logging, or creating this year’s newest clock. (Why do we come up with harder ways to tell time?) But whatever your reason, we have a solution: The DS1307 RTC (Real Time Clock). Time DS1307 RT Clock

For this article we will be discussing and using Sparkfun’s RTC Module because it incorporates everything you need to make it work, including a backup battery good for a minimum of 9 years. It also comes with the time preset so you may not even need to configure it when you get it.

Why write this article?

If you look around, this chip has been used for years, and there are dozens of tutorials on using it. So why write another? I read a lot of them and they all had slightly different information, and most of them talked about the chip without the crystal or other needed addons. So im writing this specifically about using Sparkfun’s RTC module version, and specifically for use on an Arduino.

About

The DS1307 is actually a very simple I2C chip. It just gives you back 7 bytes of information that is the time. So all we need to do is receive it … and transcode it to decimal. “Transcode it to decimal?!?” Yeah, don’t worry, it sounds scary, but it’s not. See the DS1307 encodes all the data in “Binary Coded Decimal” or BCDBCD is just a way to encode numbers, and works by encoding each digit in 4 digits of binary… like so:
157 = 0001 0101 0111
1 = 0001
5 = 0101
7 = 0111

Normally you would say that 157 = 10011101. But that is 157, BCD encodes each digit separately. 1, 5, 7 not 157. hence 0001, 0101, 0111 not 10011101.

Ok, now that we know we will be receiving the data as BCD, we just need a way to convert that to decimal. Luckily, John Boxall over at TronixStuff (incredibly awesome site) has a pretty simple function to do that for us. Lucky for me too because my method was much more complicated.

Schematic  Time DS1307 RT Clock

 

Read more: Do You Have The Time? DS1307 RT Clock + Arduino

Leave a Comment

Your email address will not be published. Required fields are marked *