DS1337 RTC library RTC 55 bytes nvram

Committer:
labishrestha
Date:
Thu Oct 29 02:38:18 2015 +0000
Revision:
2:66dbf3ae0f89
Parent:
0:366fa629ac27
Intermediate changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
labishrestha 0:366fa629ac27 1 #ifndef __DS1337_H_
labishrestha 0:366fa629ac27 2 #define __DS1337_H_
labishrestha 0:366fa629ac27 3
labishrestha 0:366fa629ac27 4 #include "time.h"
labishrestha 0:366fa629ac27 5 #include "mbed.h"
labishrestha 0:366fa629ac27 6
labishrestha 0:366fa629ac27 7 #define DS1337_ADDR 0x68<<1 /// I2C library needs address shifted left by 1-bit
labishrestha 0:366fa629ac27 8 #define DS1337_BUFFER_SIZE 16 /// Max address for DS1337
labishrestha 0:366fa629ac27 9 #define DS1337_I2C_FCY 300000 /// I2C frequency
labishrestha 2:66dbf3ae0f89 10 #define ERR_BUFFER_LEN 40
labishrestha 0:366fa629ac27 11
labishrestha 0:366fa629ac27 12 typedef struct tm Time;
labishrestha 0:366fa629ac27 13
labishrestha 0:366fa629ac27 14 /**
labishrestha 0:366fa629ac27 15 * class to use a DS1337 rtc
labishrestha 0:366fa629ac27 16 */
labishrestha 0:366fa629ac27 17 class DS1337
labishrestha 0:366fa629ac27 18 {
labishrestha 0:366fa629ac27 19 public:
labishrestha 0:366fa629ac27 20
labishrestha 0:366fa629ac27 21 /// String containing error code when command fails
labishrestha 2:66dbf3ae0f89 22 char err[ERR_BUFFER_LEN];
labishrestha 0:366fa629ac27 23
labishrestha 0:366fa629ac27 24 /** Create DS1337 instance on the specified pins of I2C bus
labishrestha 0:366fa629ac27 25 */
labishrestha 0:366fa629ac27 26 DS1337(PinName sda, PinName scl);
labishrestha 0:366fa629ac27 27
labishrestha 0:366fa629ac27 28 /** Read current real time from DS1337
labishrestha 0:366fa629ac27 29 *
labishrestha 0:366fa629ac27 30 * @returns
labishrestha 0:366fa629ac27 31 * current time on success,
labishrestha 0:366fa629ac27 32 * 0 on error (I2C fail, clock not set)
labishrestha 0:366fa629ac27 33 */
labishrestha 0:366fa629ac27 34 bool now(Time * time);
labishrestha 0:366fa629ac27 35
labishrestha 0:366fa629ac27 36 /** Write current real time to DS1337
labishrestha 0:366fa629ac27 37 *
labishrestha 0:366fa629ac27 38 * @param time Real time to set up
labishrestha 0:366fa629ac27 39 * @returns
labishrestha 0:366fa629ac27 40 * true on success,
labishrestha 0:366fa629ac27 41 * false on error (I2C fail)
labishrestha 0:366fa629ac27 42 */
labishrestha 0:366fa629ac27 43 bool set_time(Time * time);
labishrestha 0:366fa629ac27 44
labishrestha 0:366fa629ac27 45 /** Convert Time to simple string timestamp
labishrestha 0:366fa629ac27 46 *
labishrestha 0:366fa629ac27 47 * @param time to print
labishrestha 0:366fa629ac27 48 * @param str String to print to
labishrestha 0:366fa629ac27 49 */
labishrestha 0:366fa629ac27 50 void time2str(Time * time, char * str);
labishrestha 0:366fa629ac27 51
labishrestha 0:366fa629ac27 52 private:
labishrestha 0:366fa629ac27 53
labishrestha 0:366fa629ac27 54 I2C _i2c; /// I2C port
labishrestha 0:366fa629ac27 55 char buffer[DS1337_BUFFER_SIZE]; /// I2C Port Buffer
labishrestha 0:366fa629ac27 56
labishrestha 0:366fa629ac27 57 /** Convert BCD to decimal
labishrestha 0:366fa629ac27 58 @param bcd
labishrestha 0:366fa629ac27 59 */
labishrestha 0:366fa629ac27 60 static int bcdToDecimal(int bcd) {
labishrestha 0:366fa629ac27 61 return ((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F);
labishrestha 0:366fa629ac27 62 }
labishrestha 0:366fa629ac27 63
labishrestha 0:366fa629ac27 64 /** Convert decimal to BCD
labishrestha 0:366fa629ac27 65 @param decimal
labishrestha 0:366fa629ac27 66 */
labishrestha 0:366fa629ac27 67 static int decimalToBcd(int dec) {
labishrestha 0:366fa629ac27 68 return (dec % 10) + ((dec / 10) << 4);
labishrestha 0:366fa629ac27 69 }
labishrestha 0:366fa629ac27 70 };
labishrestha 0:366fa629ac27 71
labishrestha 0:366fa629ac27 72 #endif // __DS1337_H_