In this tutorial we will see hot to interface DS1307(RTC) with Pic16f877a.
First we will see the internals of DS1307 and later how to read and write the date and time.

DS1307 Basics

The Real time clock DS1307 IC basically is stand alone time clock with following features.

  • Real-time clock (RTC) counts seconds, minutes, hours, date of the month, month, day of the week, and year with leap-year compensation valid up to 2100.
  • The clock operates in either the 24-hour or 12-hour format with AM/PM indicator.
  • 56-byte, battery-backed, nonvolatile (NV) RAM for data storage
  • Two-wire(I2C) serial interface
  • Programmable squarewave output signal
  • Automatic power-fail detect and switch circuitry
  • Consumes less than 500nA in battery backup mode with oscillator running
  • Optional industrial temperature range: -40°C to +85°C

DS1307 Pins

Below image shows the pin diagram and the recommended connections for DS1307. DS1307 PinDiagram.png VCC, GND: These pins are used to provide the power to the chip. When 5V is applied within normal limits, the device is fully accessible and data can be written and read. When a 3V battery is connected to the device and VCC is below 1.25 x VBAT, reads and writes are inhibited. However, the timekeeping function continues unaffected by the lower input voltage. As VCC falls below VBAT the RAM and timekeeper are switched over to the external power supply (nominal 3.0V DC) at VBAT.

X1-X2:Pins to connect the external 32.768kHz oscillator that provides the clock source to the chip.

Vbat: A 3.3v Lithium battery can be connected to this pin in order to provide the power source when the external supply voltage is not available. Battery voltage must be held between 2.0V and 3.5V for proper operation.

SCL: This pin must be connected to SCL pin of the I2C Bus/Master.

SDA: This pin must be connected to SDA pin of the I2C Bus/Master.

SQW/OUT: When enabled, the SQWE bit set to 1, the SQW/OUT pin outputs one of four square wave frequencies (1Hz, 4kHz, 8kHz, 32kHz).

  • Note: The SCL,SDA and SQW are open drain and must be pulled up with appropriate pull up resistors as shown in the image.

DS1307 Memory

The RTC keeps the date and time arranged in it's memory as shown below: DS1307 Memory Map.png

Control Register
7 6 5 4 3 2 1 0
OUT 0 0 SQWE 0 0 RS1 RS0

OUT: This bit controls the output level of the SQW/OUT pin when the square-wave output is disabled. If SQWE = 0, the logic level on the SQW/OUT pin is 1 if OUT = 1 and is 0 if OUT = 0. By default this pin will be 0.

SQWE:This bit, when set to logic 1, enables the oscillator output. The frequency of the square-wave output depends upon the value of the RS0 and RS1 bits.

RS1-RS0:These bits control the frequency of the square-wave output when the squarewave output has been enabled. Ds1307 SQWE.png

Steps

Ds1307 ID
7 6 5 4 3 2 1 0
1 1 0 1 0 0 0 R/W
  • R/W is 0 then we Write to RTC
  • R/W is 1 then we Read from RTC

This is defined in the code as:

#define C_Ds1307ReadMode_U8   0xD1u  // DS1307 ID
#define C_Ds1307WriteMode_U8  0xD0u  // DS1307 ID
  • Steps to initialize the DS1307
  1. Start the I2C communication.
  2. Send the DS1307 address and select write operation
  3. Send the Address of Control Register for sending the command.
  4. Send the Command to Disable the SQW Out.
  5. Stop the Communication.


DS1307 WriteOperation.png

  • Steps to Write the Date and Time
  1. Start the I2C communication.
  2. Send the DS1307 address and select write operation
  3. Send the Address of SECOND Register for writing the second value.
  4. Write the Sec,min,hour,weekDay,date,month,year one by one.
  5. Stop the Communication.


DS1307 ReadOperation.png

  • Steps to Read the Date and Time
  1. Start the I2C communication.
  2. Send the DS1307 address and select write operation
  3. Send the Address of SECOND Register for reading the second value.
  4. Stop the Communication.
  5. Send the DS1307 address and select Read operation
  6. Read the Sec,min,hour,weekDay,date and month one by one and send positive acknowledgement.
  7. Read the Year and send the Neg/No Acknowledgement.
  8. Stop the Communication.