DS1337 RTC library RTC 55 bytes nvram

Committer:
labishrestha
Date:
Sat Oct 24 20:15:44 2015 +0000
Revision:
0:366fa629ac27
Child:
2:66dbf3ae0f89
DS1337 Working on Arch GPRS V2

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