Skip to content

MicroPython driver for the DS1307 real time clock

License

Notifications You must be signed in to change notification settings

peter-l5/DS1307

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

DS1307

MicroPython driver for the DS1307 real time clock

This module provides a MicroPython driver for the DS1307 real time clock.

Acknowledgement: This module was derived in outline from the Adafruit circuit python DS1307 real time clock library. That library was authored by Philip R. Moyer and Radomir Dopieralski for Adafruit Industries. See repository: Adafruit_CircuitPython_DS1307.

Beware the DS1307 breakout works at 5V but many micro-controller and computer boards have a 3.3v logic level. Make sure that the SCL and SDA pins on the board used are 5v tolerant or level shifted to 3.3v!

The accompanying example code uses the SoftI2C class. With the Raspberry Pi Pico, using the SoftI2C class instead of the hardware I2C class can avoid EIO errors that may be otherwise experienced, perhaps due to I2C clock stretching (see: RP2: Hard I2C is intolerant of clock stretching).

Version

This is a production version (v104).

Usage

Here is an example of using the DS1307 class.

First you will need to import the MicroPython Pin and SoftI2C modules to use the sensor

from machine import Pin, SoftI2C
import ds1307

Once this is done you can construct a SoftI2C object and a ds1307.DS1307 object

# uses SoftI2C class and pins for Raspberry Pi pico 
i2c0 = SoftI2C(scl=Pin(1), sda=Pin(0), freq=100000)
ds1307rtc = ds1307.DS1307(i2c0, 0x68)

Now you can give the current time to the DS1307 device using the class' datetime property. This takes a 7-tuple consisting of the year (4-digit format), month, day, hour (24-hour clock), minutes, seconds, weekday (in the range 0-6). Setting the time with this property also enables the clock's oscilator. The base for the weekday (that is zero) can be choosen according to user preferences. (The MicroPython port for the Pi pico sets Monday to zero for the pico internal RTC so Monday=0 may be a good choice for consistency.)

# set time (year, month, day, hours. minutes, seconds, weekday: integer: 0-6 )
ds1307rtc.datetime = (2022, 12, 18, 18, 9, 17, 6)

You can access the current time from the DS1307 using the datetime property. This property returns the date, time and weekday as a 7-tuple as follows: 4-digit year, month, day, hour (24-hour clock), minutes, seconds, weekday (in the range 0-6).

current_time = ds1307rtc.datetime

The datetimeRTC property returns the current time from the DS1307 in a format suitable for setting the Pico's internal real time clock. This is as an 8-tuple with the date as the first three elements followed by a None value, then the time and finally another None value. In order to set the Pico's clock the machine.RTC class must be imported.

from machine import RTC
machine.RTC().datetime(ds1307rtc.datetimeRTC)

Finally, the disable oscillator property may be useful to stop the clock when not in use and reduce demand on the standby battery.

See also the example code provided in this repository.

Features

The current time is set and access by means of properties. A 12 hour am/pm time stored in the DS1307 will be read as a 24 hour clock time. The time can only be set using 24-hour clock format

Interfaces and tested devices

The code uses the I2C interface of the DS1307.

This driver has been tested with a Raspberry Pi Pico and an Adafruit DS1307 breakout. As the DS1307 works at 5V and the Pico uses 3.3V logic, an I2C-compatible level shifter breakout was also used.

Requirements

This code has been tested with MicroPython version 1.19.1.

Datasheet

DS1307.pdf at Analog industries

Release notes

Version 104

Initial version

About

MicroPython driver for the DS1307 real time clock

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages