Set RTC Time

Now that we have the module wired up and verified that you can see the module with i2cdetect, we can set up the module.

First, load up the RTC module by running

sudo modprobe i2c-bcm2708
 sudo modprobe i2c-dev

sudo modprobe rtc-ds1307

Then, as root (type in sudo bash) run

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

If you happen to have an old Rev 1 Pi, type in

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device

You can then type in exit to drop out of the root shell.

Then check the time with sudo hwclock -r which will read the time from the DS1307 module. If this is the first time the module has been used, it will report back Jan 1 2000, and you'll need to set the time

First you'll need to get the right time set on the Pi, the easiest way is to connect it up to Ethernet or Wifi - it will automatically set the time from the network. Once the time is correct (check with the date command), run sudo hwclock -w to write the system time to the RTC

You can then verify it with sudo hwclock -r

Next, you'll want to add the RTC kernel module to the /etc/modules list, so its loaded when the machine boots. Run sudo nano /etc/modules and add rtc-ds1307 at the end of the file (the image below says rtc-1307 but its a typo)

Raspbian Jessie (Systemd)

Thanks to kd8twg for the hints!

Start by editing a new service configuration

sudo nano /etc/conf.d/rtc-i2c

And paste in the following, then save:

# /etc/conf.d/rtc-i2c

Now create a new service file that will start/stop the real time clock manager

sudo nano /lib/systemd/system/rtc-i2c.service

# /lib/systemd/system/rtc-i2c.service

Description=Initialize i2c hardware RTC device driver

ExecStart=/bin/sh -c "echo ${CHIP} ${ADDRESS} > /sys/class/i2c-adapter/i2c-${BUS}/new_device"


Enable the new service, so that it will always start with the Pi when it boots!

sudo systemctl enable rtc-i2c.service

And disable the fake hwclock which interferes with the 'real' hwclock

sudo apt-get remove fake-hwclock

sudo update-rc.d -f fake-hwclock remove

That's it! Next time you boot the time will automatically be synced from the RTC module

Raspbian Wheezy or other pre-systemd Linux

Older pre-Jessie raspbian is a little different. First up, you'll want to create the DS1307 device creation at boot, edit /etc/rc.local by running

sudo nano /etc/rc.local

and add:

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device (for v1 raspberry pi)
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device (for v2 raspberry pi)
sudo hwclock -s (both versions)

before exit 0 (we forgot the hwclock -s part in the screenshot below)

That's it! Next time you boot the time will automatically be synced from the RTC module
Last updated on 2016-04-29 at 11.41.52 PM Published on 2012-08-31 at 01.19.59 PM