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

Dependents:   LPC1114_data_logger Check_external_RTC LPC1114_barometer_with_data_logging

Committer:
kenjiArai
Date:
Sat Jun 21 04:37:56 2014 +0000
Revision:
0:2919f8bd90f3
Child:
1:9d7702a887d3
1st fixed version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:2919f8bd90f3 1 /*
kenjiArai 0:2919f8bd90f3 2 * mbed library program
kenjiArai 0:2919f8bd90f3 3 * Control M41T62 RTC Module
kenjiArai 0:2919f8bd90f3 4 *
kenjiArai 0:2919f8bd90f3 5 * Copyright (c) 2014 Kenji Arai / JH1PJL
kenjiArai 0:2919f8bd90f3 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:2919f8bd90f3 7 * http://mbed.org/users/kenjiArai/
kenjiArai 0:2919f8bd90f3 8 * Created: June 21st, 2014
kenjiArai 0:2919f8bd90f3 9 * Revised: June 21st, 2014
kenjiArai 0:2919f8bd90f3 10 *
kenjiArai 0:2919f8bd90f3 11 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:2919f8bd90f3 12 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:2919f8bd90f3 13 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:2919f8bd90f3 14 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:2919f8bd90f3 15 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:2919f8bd90f3 16 */
kenjiArai 0:2919f8bd90f3 17
kenjiArai 0:2919f8bd90f3 18 #ifndef M41T62_H
kenjiArai 0:2919f8bd90f3 19 #define M41T62_H
kenjiArai 0:2919f8bd90f3 20
kenjiArai 0:2919f8bd90f3 21 #include "mbed.h"
kenjiArai 0:2919f8bd90f3 22
kenjiArai 0:2919f8bd90f3 23 // RTC STmicro M41T62
kenjiArai 0:2919f8bd90f3 24 // Address b7=1,b6=1,b5=0,b4=1,b3=0,b2=0,b1=0, b0=R/W
kenjiArai 0:2919f8bd90f3 25 #define M41T62ADDR 0xd0 // No other choice
kenjiArai 0:2919f8bd90f3 26
kenjiArai 0:2919f8bd90f3 27 #define RTC_Wk_Monday ((uint8_t)0x01)
kenjiArai 0:2919f8bd90f3 28 #define RTC_Wk_Tuesday ((uint8_t)0x02)
kenjiArai 0:2919f8bd90f3 29 #define RTC_Wk_Wednesday ((uint8_t)0x03)
kenjiArai 0:2919f8bd90f3 30 #define RTC_Wk_Thursday ((uint8_t)0x04)
kenjiArai 0:2919f8bd90f3 31 #define RTC_Wk_Friday ((uint8_t)0x05)
kenjiArai 0:2919f8bd90f3 32 #define RTC_Wk_Saturday ((uint8_t)0x06)
kenjiArai 0:2919f8bd90f3 33 #define RTC_Wk_Sunday ((uint8_t)0x07)
kenjiArai 0:2919f8bd90f3 34
kenjiArai 0:2919f8bd90f3 35 #define RTC_SQW_NONE ((uint8_t)0x0)
kenjiArai 0:2919f8bd90f3 36 #define RTC_SQW_32KHZ ((uint8_t)0x1)
kenjiArai 0:2919f8bd90f3 37 #define RTC_SQW_8KHZ ((uint8_t)0x2)
kenjiArai 0:2919f8bd90f3 38 #define RTC_SQW_4KHZ ((uint8_t)0x3)
kenjiArai 0:2919f8bd90f3 39 #define RTC_SQW_2KHZ ((uint8_t)0x4)
kenjiArai 0:2919f8bd90f3 40 #define RTC_SQW_1KHZ ((uint8_t)0x5)
kenjiArai 0:2919f8bd90f3 41 #define RTC_SQW_512HZ ((uint8_t)0x6)
kenjiArai 0:2919f8bd90f3 42 #define RTC_SQW_256HZ ((uint8_t)0x7)
kenjiArai 0:2919f8bd90f3 43 #define RTC_SQW_128HZ ((uint8_t)0x8)
kenjiArai 0:2919f8bd90f3 44 #define RTC_SQW_64HZ ((uint8_t)0x9)
kenjiArai 0:2919f8bd90f3 45 #define RTC_SQW_32HZ ((uint8_t)0xa)
kenjiArai 0:2919f8bd90f3 46 #define RTC_SQW_16HZ ((uint8_t)0xb)
kenjiArai 0:2919f8bd90f3 47 #define RTC_SQW_8HZ ((uint8_t)0xc)
kenjiArai 0:2919f8bd90f3 48 #define RTC_SQW_4HZ ((uint8_t)0xd)
kenjiArai 0:2919f8bd90f3 49 #define RTC_SQW_2HZ ((uint8_t)0xe)
kenjiArai 0:2919f8bd90f3 50 #define RTC_SQW_1HZ ((uint8_t)0xf)
kenjiArai 0:2919f8bd90f3 51
kenjiArai 0:2919f8bd90f3 52 typedef struct { // BCD format
kenjiArai 0:2919f8bd90f3 53 uint8_t rtc_seconds;
kenjiArai 0:2919f8bd90f3 54 uint8_t rtc_minutes;
kenjiArai 0:2919f8bd90f3 55 uint8_t rtc_hours;
kenjiArai 0:2919f8bd90f3 56 uint8_t rtc_weekday;
kenjiArai 0:2919f8bd90f3 57 uint8_t rtc_date;
kenjiArai 0:2919f8bd90f3 58 uint8_t rtc_month;
kenjiArai 0:2919f8bd90f3 59 uint16_t rtc_year;
kenjiArai 0:2919f8bd90f3 60 }rtc_time;
kenjiArai 0:2919f8bd90f3 61
kenjiArai 0:2919f8bd90f3 62 class M41T62 {
kenjiArai 0:2919f8bd90f3 63 public:
kenjiArai 0:2919f8bd90f3 64 M41T62(PinName p_sda, PinName p_scl);
kenjiArai 0:2919f8bd90f3 65 M41T62(I2C& p_i2c);
kenjiArai 0:2919f8bd90f3 66
kenjiArai 0:2919f8bd90f3 67 void read_rtc(rtc_time *);
kenjiArai 0:2919f8bd90f3 68 void write_rtc(rtc_time *);
kenjiArai 0:2919f8bd90f3 69 void set_sq_wave(uint8_t);
kenjiArai 0:2919f8bd90f3 70
kenjiArai 0:2919f8bd90f3 71 protected:
kenjiArai 0:2919f8bd90f3 72 void i2c_read_n_bytes(int, char*, int);
kenjiArai 0:2919f8bd90f3 73 void i2c_write_n_bytes(int, char*, int);
kenjiArai 0:2919f8bd90f3 74 uint8_t bin2bcd(uint8_t);
kenjiArai 0:2919f8bd90f3 75 uint8_t bcd2bin(uint8_t);
kenjiArai 0:2919f8bd90f3 76
kenjiArai 0:2919f8bd90f3 77 I2C i2c;
kenjiArai 0:2919f8bd90f3 78
kenjiArai 0:2919f8bd90f3 79 private:
kenjiArai 0:2919f8bd90f3 80 uint8_t M41T62_addr;
kenjiArai 0:2919f8bd90f3 81 uint8_t rtc_buf[8 + 2]; // buffer for RTC
kenjiArai 0:2919f8bd90f3 82 };
kenjiArai 0:2919f8bd90f3 83
kenjiArai 0:2919f8bd90f3 84 #endif // M41T62_H