DS1338 RTC library RTC + 55 bytes nvram

This library let you access a DS1338, which includes a RTC and some nvram.

Most of the mbed chip already have a good rtc, but they can't be powered by a separate backup battery.

With a DS1338, plus a small lithium 3V battery, you will keep trace of time.

You will also have 55 bytes (DS1338 says 56 bytes, but I use one of them for the library) of NVRAM backed up by the battery, to store fast changing data (which would tear down an eeprom), and keep it, even in the case of a watchdog reset.

Demo code

#include "mbed.h"
#include "fr_time.h"
#include "ds1338.h"

int main() {
    struct tm time;
    int count;

    pc=new RawSerial(USBTX, USBRX);
    pc->baud(115200);
    pc->printf("DS1338 Demo\r\n");
    DS1338 ds1338(P0_19,P0_20);
#ifdef INIT_TIME
    count=0;
    time.tm_sec=0;
    time.tm_min=0;
    time.tm_hour=8;
    time.tm_mday=4;
    time.tm_mon=2;
    time.tm_year=115;
    time.tm_wday=1;
    time.tm_yday=0;
    time.tm_isdst=0;
    ds1338.writeTime(&time);
#endif


    while (true) {
        wait(0.5);
        ds1338.readTime(&time);
        ds1338.read(0,4,(char *)(&count));
        count++;
        ds1338.write(0,4,(char *)(&count));
        pc->printf("loop %d at %s\r\n",count,asctime(&time));
    }
}

Files at this revision

API Documentation at this revision

Comitter:
scachat
Date:
Wed Mar 04 13:09:54 2015 +0000
Parent:
0:0ffb7046206a
Commit message:
bug in month handling

Changed in this revision

ds1338.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/ds1338.cpp	Wed Mar 04 08:49:37 2015 +0000
+++ b/ds1338.cpp	Wed Mar 04 13:09:54 2015 +0000
@@ -103,7 +103,7 @@
    buffer[3]=(((time->tm_hour/10)<<4)+(time->tm_hour%10))&0x3F;//mode 24h
    buffer[4]=(time->tm_wday)&0x03;
    buffer[5]=(((time->tm_mday/10)<<4)+(time->tm_mday%10))&0x3F;
-   buffer[6]=(((time->tm_mon/10)<<4)+(time->tm_mon%10))&0x1F;
+   buffer[6]=((((time->tm_mon+1)/10)<<4)+((time->tm_mon+1)%10))&0x1F;
    buffer[7]=((((time->tm_year%100)/10)<<4)+(time->tm_year%10))&0xFF;
    buffer[8]=0x90;//1Hz, erase error cond
    buffer[9]=0xCA;