Most of the microcontrollers are time-agnostic, meaning they are unaware of the time around them, but it doesn’t matter as most experiments do not require it.  But, there are several experiments that require the actual time. For example, most of the experiments related to data-logging require time.

The following Real time clock (RTC) module can add actual time value to your data-logging experiments.

For this article we will be discussing and using a RTC Module available at buildcircuit.net because it incorporates everything you need to make it work, including a backup battery good for a minimum of 3 years. It comes with the time preset, but you can easily reset it and configure to your own time.

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 converts it to decimal. The DS1307 encodes all the data in “Binary Coded Decimal” or BCD. BCD 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.

Connecting the module to Arduino:

Because the DS1307 is an I2C device (I2C is a 2-wire serial connection), you just need to connect the SDA (Data) and SCL (Clock) lines to your Arduino for communication. On your Arduino (all boards but the mega) SDA is on analog pin 4, and SCL is on analog pin 5. On an Arduino mega, SDA is digital 20, and SCL is digital 21.

You can buy the real time clock module at www.buildcircuit.net. The store is owned and operated by BuildCircuit Team.

Sketch:

If you intend to use the clock to set alarms and trigger events based on time, then you should take a look at Lady Ada’s library for this. It’s more advanced, and allows you to make alarms, and check how much time is left and so on.

The following source codes have been copied from bildr.org. The code can be used for testing the module. It simply displays the set time and date.