Library to make use of the DS1302 timekeeping IC. The functions are identical to those used by the mbed RTC's

Dependents:   temp_humid_time_DS1302_LM35_DHT11 temp_humid_light_time_DS1302_LM35_DHT11_LDR DSKY DS1302_HelloWorld ... more

HelloWorld program: https://mbed.org/users/Sissors/code/DS1302_HelloWorld/

For usage of the returned UNIX time code, see for example https://mbed.org/handbook/Time, http://www.cplusplus.com/reference/ctime/strftime/?kw=strftime and http://mbed.org/handbook/Time?action=view&revision=11592

Committer:
Sissors
Date:
Mon Mar 31 21:26:14 2014 +0000
Revision:
1:9a746f303e59
Parent:
0:c7cea2a415c3
Fixed doxygen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sissors 0:c7cea2a415c3 1 //The license: Its on the internet, have fun with it.
Sissors 0:c7cea2a415c3 2
Sissors 0:c7cea2a415c3 3 #ifndef DS1302_H
Sissors 0:c7cea2a415c3 4 #define DS1302_H
Sissors 0:c7cea2a415c3 5
Sissors 0:c7cea2a415c3 6 #include "mbed.h"
Sissors 0:c7cea2a415c3 7
Sissors 0:c7cea2a415c3 8 /**
Sissors 0:c7cea2a415c3 9 * Library to make use of the DS1302 timekeeping IC
Sissors 0:c7cea2a415c3 10 *
Sissors 0:c7cea2a415c3 11 * The library functions the same as the standard mbed time function,
Sissors 0:c7cea2a415c3 12 * only now you have to first make a DS1302 object and apply the
Sissors 0:c7cea2a415c3 13 * functions on the object.
Sissors 0:c7cea2a415c3 14 *
Sissors 0:c7cea2a415c3 15 * Example code:
Sissors 0:c7cea2a415c3 16 * @code
Sissors 0:c7cea2a415c3 17 * #define SCLK PTC5
Sissors 0:c7cea2a415c3 18 * #define IO PTC4
Sissors 0:c7cea2a415c3 19 * #define CE PTC3
Sissors 0:c7cea2a415c3 20 *
Sissors 0:c7cea2a415c3 21 * //Comment this line if the DS1302 is already running
Sissors 0:c7cea2a415c3 22 * #define INITIAL_RUN
Sissors 0:c7cea2a415c3 23 *
Sissors 0:c7cea2a415c3 24 * #include "mbed.h"
Sissors 0:c7cea2a415c3 25 * #include "DS1302.h"
Sissors 0:c7cea2a415c3 26 *
Sissors 0:c7cea2a415c3 27 * DS1302 clk(SCLK, IO, PTC3);
Sissors 0:c7cea2a415c3 28 *
Sissors 0:c7cea2a415c3 29 * int main() {
Sissors 0:c7cea2a415c3 30 * #ifdef INITIAL_RUN
Sissors 0:c7cea2a415c3 31 * clk.set_time(1256729737);
Sissors 0:c7cea2a415c3 32 * #endif
Sissors 0:c7cea2a415c3 33 *
Sissors 0:c7cea2a415c3 34 * char storedByte = clk.recallByte(0);
Sissors 0:c7cea2a415c3 35 * printf("Stored byte was %d, now increasing by one\r\n", storedByte);
Sissors 0:c7cea2a415c3 36 * clk.storeByte(0, storedByte + 1);
Sissors 0:c7cea2a415c3 37 *
Sissors 0:c7cea2a415c3 38 * while(1) {
Sissors 0:c7cea2a415c3 39 * time_t seconds = clk.time(NULL);
Sissors 0:c7cea2a415c3 40 * printf("Time as a basic string = %s\r", ctime(&seconds));
Sissors 0:c7cea2a415c3 41 * wait(1);
Sissors 0:c7cea2a415c3 42 * }
Sissors 0:c7cea2a415c3 43 * }
Sissors 0:c7cea2a415c3 44 * @endcode
Sissors 0:c7cea2a415c3 45 *
Sissors 0:c7cea2a415c3 46 * See for example http://mbed.org/handbook/Time for general usage
Sissors 0:c7cea2a415c3 47 * of C time functions.
Sissors 0:c7cea2a415c3 48 *
Sissors 0:c7cea2a415c3 49 * Trickle charging is not supported
Sissors 0:c7cea2a415c3 50 **/
Sissors 0:c7cea2a415c3 51 class DS1302
Sissors 0:c7cea2a415c3 52 {
Sissors 0:c7cea2a415c3 53 public:
Sissors 0:c7cea2a415c3 54 /**
Sissors 0:c7cea2a415c3 55 * Register map
Sissors 0:c7cea2a415c3 56 */
Sissors 0:c7cea2a415c3 57 enum {
Sissors 0:c7cea2a415c3 58 Seconds = 0x80,
Sissors 0:c7cea2a415c3 59 Minutes = 0x82,
Sissors 0:c7cea2a415c3 60 Hours = 0x84,
Sissors 0:c7cea2a415c3 61 Dates = 0x86,
Sissors 0:c7cea2a415c3 62 Months = 0x88,
Sissors 0:c7cea2a415c3 63 Days = 0x8A,
Sissors 0:c7cea2a415c3 64 Years = 0x8C,
Sissors 0:c7cea2a415c3 65 WriteProtect = 0x8E,
Sissors 0:c7cea2a415c3 66 Charge = 0x90,
Sissors 0:c7cea2a415c3 67 ClockBurst = 0xBE,
Sissors 0:c7cea2a415c3 68 RAMBase = 0xC0
Sissors 0:c7cea2a415c3 69 };
Sissors 0:c7cea2a415c3 70
Sissors 0:c7cea2a415c3 71 /**
Sissors 0:c7cea2a415c3 72 * Create a new DS1302 object
Sissors 0:c7cea2a415c3 73 *
Sissors 0:c7cea2a415c3 74 * @param SCLK the pin to which SCLK is connectd
Sissors 0:c7cea2a415c3 75 * @param IO the pin to which IO is connectd
Sissors 0:c7cea2a415c3 76 * @param CE the pin to which CE is connected (also called RST)
Sissors 0:c7cea2a415c3 77 */
Sissors 0:c7cea2a415c3 78 DS1302(PinName SCLK, PinName IO, PinName CE);
Sissors 0:c7cea2a415c3 79
Sissors 0:c7cea2a415c3 80 /** Set the current time
Sissors 0:c7cea2a415c3 81 *
Sissors 0:c7cea2a415c3 82 * Initialises and sets the time of the DS1302
Sissors 0:c7cea2a415c3 83 * to the time represented by the number of seconds since January 1, 1970
Sissors 0:c7cea2a415c3 84 * (the UNIX timestamp).
Sissors 0:c7cea2a415c3 85 *
Sissors 0:c7cea2a415c3 86 * @param t Number of seconds since January 1, 1970 (the UNIX timestamp)
Sissors 0:c7cea2a415c3 87 *
Sissors 0:c7cea2a415c3 88 */
Sissors 0:c7cea2a415c3 89 void set_time(time_t t);
Sissors 0:c7cea2a415c3 90
Sissors 0:c7cea2a415c3 91 /** Get the current time
Sissors 0:c7cea2a415c3 92 *
Sissors 0:c7cea2a415c3 93 * Use other functions to convert this value, see: http://mbed.org/handbook/Time
Sissors 0:c7cea2a415c3 94 *
Sissors 0:c7cea2a415c3 95 * @param t ignored, supply NULL
Sissors 0:c7cea2a415c3 96 * @return number of seconds since January 1, 1970
Sissors 0:c7cea2a415c3 97 */
Sissors 0:c7cea2a415c3 98 time_t time(time_t *t = NULL);
Sissors 0:c7cea2a415c3 99
Sissors 0:c7cea2a415c3 100 /**
Sissors 0:c7cea2a415c3 101 * Store a byte in the battery-backed RAM
Sissors 0:c7cea2a415c3 102 *
Sissors 0:c7cea2a415c3 103 * @param address address where to store the data (0-30)
Sissors 0:c7cea2a415c3 104 * @param data the byte to store
Sissors 0:c7cea2a415c3 105 */
Sissors 0:c7cea2a415c3 106 void storeByte(char address, char data);
Sissors 0:c7cea2a415c3 107
Sissors 0:c7cea2a415c3 108 /**
Sissors 1:9a746f303e59 109 * Recall a byte from the battery-backed RAM
Sissors 0:c7cea2a415c3 110 *
Sissors 0:c7cea2a415c3 111 * @param address address where to retrieve the data (0-30)
Sissors 0:c7cea2a415c3 112 * @return the stored data
Sissors 0:c7cea2a415c3 113 */
Sissors 0:c7cea2a415c3 114 char recallByte(char address);
Sissors 0:c7cea2a415c3 115
Sissors 0:c7cea2a415c3 116 /**
Sissors 0:c7cea2a415c3 117 * Read a register
Sissors 0:c7cea2a415c3 118 *
Sissors 0:c7cea2a415c3 119 * Only required to for example manually set trickle charge register
Sissors 0:c7cea2a415c3 120 *
Sissors 0:c7cea2a415c3 121 * @param reg register to read
Sissors 0:c7cea2a415c3 122 * @return contents of the register
Sissors 0:c7cea2a415c3 123 */
Sissors 0:c7cea2a415c3 124 char readReg(char reg);
Sissors 0:c7cea2a415c3 125
Sissors 0:c7cea2a415c3 126 /**
Sissors 0:c7cea2a415c3 127 * Write a register
Sissors 0:c7cea2a415c3 128 *
Sissors 0:c7cea2a415c3 129 * Only required to for example manually set trickle charge register
Sissors 0:c7cea2a415c3 130 *
Sissors 0:c7cea2a415c3 131 * @param reg register to write
Sissors 0:c7cea2a415c3 132 * @param val contents of the register to write
Sissors 0:c7cea2a415c3 133 */
Sissors 0:c7cea2a415c3 134 void writeReg(char reg, char val);
Sissors 0:c7cea2a415c3 135
Sissors 0:c7cea2a415c3 136 protected:
Sissors 0:c7cea2a415c3 137
Sissors 0:c7cea2a415c3 138 void writeByte(char data);
Sissors 0:c7cea2a415c3 139 char readByte(void);
Sissors 0:c7cea2a415c3 140
Sissors 0:c7cea2a415c3 141 DigitalOut _SCLK;
Sissors 0:c7cea2a415c3 142 DigitalInOut _IO;
Sissors 0:c7cea2a415c3 143 DigitalOut _CE;
Sissors 0:c7cea2a415c3 144 bool writeProtect;
Sissors 0:c7cea2a415c3 145
Sissors 0:c7cea2a415c3 146
Sissors 0:c7cea2a415c3 147 };
Sissors 0:c7cea2a415c3 148
Sissors 0:c7cea2a415c3 149
Sissors 0:c7cea2a415c3 150
Sissors 0:c7cea2a415c3 151 #endif