Skip to main content

Meadow.Foundation.RTCs.Ds1307

Ds1307
StatusStatus badge: working
Source codeGitHub
Datasheet(s)GitHub
NuGet packageNuGet Gallery for Meadow.Foundation.RTCs.Ds1307

The DS1307 is a low-power realtime clock (RTC) controlled via I2C.

Code Example

Ds1307 rtc;

public override Task Initialize()
{
Resolver.Log.Info("Initializing...");

rtc = new Ds1307(Device.CreateI2cBus());

return base.Initialize();
}

public override Task Run()
{
var dateTime = new DateTime();
var running = rtc.IsRunning;

Resolver.Log.Info($"{(running ? "is running" : "is not running")}");

if (!running)
{
Resolver.Log.Info(" Starting RTC...");
rtc.IsRunning = true;
}

dateTime = rtc.GetTime();
Resolver.Log.Info($" RTC current time is: {dateTime.ToString("MM/dd/yy HH:mm:ss")}");

Resolver.Log.Info($" Setting RTC to : {dateTime.ToString("MM/dd/yy HH:mm:ss")}");
dateTime = new DateTime(2030, 2, 15);
rtc.SetTime(dateTime);

dateTime = rtc.GetTime();
Resolver.Log.Info($" RTC current time is: {dateTime.ToString("MM/dd/yy HH:mm:ss")}");

var rand = new Random();

var data = new byte[56];

for (int i = 0; i < 56; i++)
{
data[i] = (byte)rand.Next(256);
}

Resolver.Log.Info($" Writing to RTC RAM : {BitConverter.ToString(data)}");
rtc.WriteRAM(0, data);
Resolver.Log.Info($" Reading from RTC RAM : ");
data = rtc.ReadRAM(0, 56);
Resolver.Log.Info(BitConverter.ToString(data));

return base.Run();
}

Sample project(s) available on GitHub

Wiring Example

The DS3231 real time clock module (see image below) requires only four (for simple timekeeping) or five (for alarms) connections

DS3231Meadow Pin
GNDGND
VCC3V3
SCLD08 (SCL Pin)
SDAD07 (SDA Pin)

The 32K pin outputs the 32,768 Hz clock signal from the module. This signal is only available when power is supplied by Vcc, it is not available when the module is on battery power.