M41T62 is a serial real-time clock (RTC) made by STMicroelectronics.

Dependents:   LPC1114_data_logger Check_external_RTC LPC1114_barometer_with_data_logging

Revision:
0:2919f8bd90f3
Child:
1:9d7702a887d3
diff -r 000000000000 -r 2919f8bd90f3 m41t62_rtc.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m41t62_rtc.h	Sat Jun 21 04:37:56 2014 +0000
@@ -0,0 +1,84 @@
+/*
+ * mbed library program 
+ *  Control M41T62 RTC Module
+ *
+ * Copyright (c) 2014 Kenji Arai / JH1PJL
+ *  http://www.page.sannet.ne.jp/kenjia/index.html
+ *  http://mbed.org/users/kenjiArai/
+ *      Created: June      21st, 2014
+ *      Revised: June      21st, 2014
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+ * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef M41T62_H
+#define M41T62_H
+
+#include "mbed.h"
+
+// RTC STmicro M41T62
+// Address b7=1,b6=1,b5=0,b4=1,b3=0,b2=0,b1=0, b0=R/W
+#define M41T62ADDR  0xd0        // No other choice
+
+#define RTC_Wk_Monday       ((uint8_t)0x01)
+#define RTC_Wk_Tuesday      ((uint8_t)0x02)
+#define RTC_Wk_Wednesday    ((uint8_t)0x03)
+#define RTC_Wk_Thursday     ((uint8_t)0x04)
+#define RTC_Wk_Friday       ((uint8_t)0x05)
+#define RTC_Wk_Saturday     ((uint8_t)0x06)
+#define RTC_Wk_Sunday       ((uint8_t)0x07)
+
+#define RTC_SQW_NONE        ((uint8_t)0x0)
+#define RTC_SQW_32KHZ       ((uint8_t)0x1)
+#define RTC_SQW_8KHZ        ((uint8_t)0x2)
+#define RTC_SQW_4KHZ        ((uint8_t)0x3)
+#define RTC_SQW_2KHZ        ((uint8_t)0x4)
+#define RTC_SQW_1KHZ        ((uint8_t)0x5)
+#define RTC_SQW_512HZ       ((uint8_t)0x6)
+#define RTC_SQW_256HZ       ((uint8_t)0x7)
+#define RTC_SQW_128HZ       ((uint8_t)0x8)
+#define RTC_SQW_64HZ        ((uint8_t)0x9)
+#define RTC_SQW_32HZ        ((uint8_t)0xa)
+#define RTC_SQW_16HZ        ((uint8_t)0xb)
+#define RTC_SQW_8HZ         ((uint8_t)0xc)
+#define RTC_SQW_4HZ         ((uint8_t)0xd)
+#define RTC_SQW_2HZ         ((uint8_t)0xe)
+#define RTC_SQW_1HZ         ((uint8_t)0xf)
+
+typedef struct {    // BCD format
+  uint8_t rtc_seconds;    
+  uint8_t rtc_minutes;
+  uint8_t rtc_hours;    
+  uint8_t rtc_weekday;
+  uint8_t rtc_date;
+  uint8_t rtc_month;
+  uint16_t rtc_year;
+}rtc_time;
+
+class M41T62 {
+public:
+    M41T62(PinName p_sda, PinName p_scl);
+    M41T62(I2C& p_i2c);
+
+    void read_rtc(rtc_time *);
+    void write_rtc(rtc_time *);
+    void set_sq_wave(uint8_t);
+
+protected:
+    void i2c_read_n_bytes(int, char*, int);
+    void i2c_write_n_bytes(int, char*, int);
+    uint8_t bin2bcd(uint8_t);
+    uint8_t bcd2bin(uint8_t);
+
+    I2C i2c;
+
+private:
+    uint8_t M41T62_addr;
+    uint8_t rtc_buf[8 + 2];   // buffer for RTC
+};
+
+#endif      // M41T62_H
\ No newline at end of file