RTC-8564NB Real Time Clock Module by EPSON TOYOCOM
RTC8564.h@1:d1b58c478a7a, 2017-08-23 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Aug 23 09:27:22 2017 +0000
- Revision:
- 1:d1b58c478a7a
- Parent:
- 0:863510ffa8ff
countermeasure for NonCopyable
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:863510ffa8ff | 1 | /* |
kenjiArai | 0:863510ffa8ff | 2 | * mbed library program |
kenjiArai | 0:863510ffa8ff | 3 | * Control RTC-8564NB Real Time Clock Module |
kenjiArai | 0:863510ffa8ff | 4 | * EPSON TOYOCOM |
kenjiArai | 0:863510ffa8ff | 5 | * |
kenjiArai | 1:d1b58c478a7a | 6 | * Copyright (c) 2015,'17 Kenji Arai / JH1PJL |
kenjiArai | 0:863510ffa8ff | 7 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:863510ffa8ff | 8 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 1:d1b58c478a7a | 9 | * Created: Feburary 1st, 2015 |
kenjiArai | 1:d1b58c478a7a | 10 | * Revised: August 23rd, 2017 |
kenjiArai | 0:863510ffa8ff | 11 | */ |
kenjiArai | 0:863510ffa8ff | 12 | /* |
kenjiArai | 0:863510ffa8ff | 13 | *---------------- REFERENCE ---------------------------------------------------------------------- |
kenjiArai | 0:863510ffa8ff | 14 | * Original Information |
kenjiArai | 0:863510ffa8ff | 15 | * http://www.epsondevice.com/docs/qd/ja/DownloadServlet?id=ID000514 |
kenjiArai | 0:863510ffa8ff | 16 | * http://www5.epsondevice.com/ja/quartz/product/rtc/i2c_bus/rtc8564je_nb.html |
kenjiArai | 0:863510ffa8ff | 17 | * Sensor board |
kenjiArai | 0:863510ffa8ff | 18 | * http://akizukidenshi.com/catalog/g/gI-00233/ |
kenjiArai | 0:863510ffa8ff | 19 | */ |
kenjiArai | 0:863510ffa8ff | 20 | |
kenjiArai | 0:863510ffa8ff | 21 | #ifndef RTC8564_H |
kenjiArai | 0:863510ffa8ff | 22 | #define RTC8564_H |
kenjiArai | 0:863510ffa8ff | 23 | |
kenjiArai | 0:863510ffa8ff | 24 | #include "mbed.h" |
kenjiArai | 0:863510ffa8ff | 25 | |
kenjiArai | 0:863510ffa8ff | 26 | // RTC EPSON TOYOCOM RTC8564 |
kenjiArai | 0:863510ffa8ff | 27 | // 7bit address = 0b1010001(No other choice) |
kenjiArai | 0:863510ffa8ff | 28 | #define RTC8564ADDR (0x51 << 1) |
kenjiArai | 0:863510ffa8ff | 29 | |
kenjiArai | 0:863510ffa8ff | 30 | #define RTC_Wk_Monday ((uint8_t)0x01) |
kenjiArai | 0:863510ffa8ff | 31 | #define RTC_Wk_Tuesday ((uint8_t)0x02) |
kenjiArai | 0:863510ffa8ff | 32 | #define RTC_Wk_Wednesday ((uint8_t)0x03) |
kenjiArai | 0:863510ffa8ff | 33 | #define RTC_Wk_Thursday ((uint8_t)0x04) |
kenjiArai | 0:863510ffa8ff | 34 | #define RTC_Wk_Friday ((uint8_t)0x05) |
kenjiArai | 0:863510ffa8ff | 35 | #define RTC_Wk_Saturday ((uint8_t)0x06) |
kenjiArai | 0:863510ffa8ff | 36 | #define RTC_Wk_Sunday ((uint8_t)0x07) |
kenjiArai | 0:863510ffa8ff | 37 | |
kenjiArai | 0:863510ffa8ff | 38 | // Register definition |
kenjiArai | 0:863510ffa8ff | 39 | #define RTC8564_REG_CONTL1 0 |
kenjiArai | 0:863510ffa8ff | 40 | #define RTC8564_REG_CONTL2 1 |
kenjiArai | 0:863510ffa8ff | 41 | #define RTC8564_REG_SEC 2 |
kenjiArai | 0:863510ffa8ff | 42 | #define RTC8564_REG_MIN 3 |
kenjiArai | 0:863510ffa8ff | 43 | #define RTC8564_REG_HOUR 4 |
kenjiArai | 0:863510ffa8ff | 44 | #define RTC8564_REG_DAY 5 |
kenjiArai | 0:863510ffa8ff | 45 | #define RTC8564_REG_WDAY 6 |
kenjiArai | 0:863510ffa8ff | 46 | #define RTC8564_REG_MON 7 |
kenjiArai | 0:863510ffa8ff | 47 | #define RTC8564_REG_YEAR 8 |
kenjiArai | 0:863510ffa8ff | 48 | #define RTC8564_REG_ALARM_MIN 9 |
kenjiArai | 0:863510ffa8ff | 49 | #define RTC8564_REG_ALARM_HOUR 0xa |
kenjiArai | 0:863510ffa8ff | 50 | #define RTC8564_REG_ALARM_DAY 0xb |
kenjiArai | 0:863510ffa8ff | 51 | #define RTC8564_REG_ALARM_WDAY 0xc |
kenjiArai | 0:863510ffa8ff | 52 | #define RTC8564_REG_CLK_OUT 0xd |
kenjiArai | 0:863510ffa8ff | 53 | #define RTC8564_REG_TMR_CTRL 0xe |
kenjiArai | 0:863510ffa8ff | 54 | #define RTC8564_REG_TIMER 0xf |
kenjiArai | 0:863510ffa8ff | 55 | |
kenjiArai | 0:863510ffa8ff | 56 | // Buffer size |
kenjiArai | 0:863510ffa8ff | 57 | #define RTC_BUF_SIZ (RTC8564_REG_TIMER + 5) |
kenjiArai | 0:863510ffa8ff | 58 | |
kenjiArai | 0:863510ffa8ff | 59 | /** Interface for RTC (I2C Interface) EPSON TOYOCOM RTC8564 |
kenjiArai | 0:863510ffa8ff | 60 | * |
kenjiArai | 0:863510ffa8ff | 61 | * Standalone type RTC via I2C interface |
kenjiArai | 0:863510ffa8ff | 62 | * |
kenjiArai | 0:863510ffa8ff | 63 | * @code |
kenjiArai | 0:863510ffa8ff | 64 | * #include "mbed.h" |
kenjiArai | 0:863510ffa8ff | 65 | * |
kenjiArai | 0:863510ffa8ff | 66 | * // I2C Communication |
kenjiArai | 0:863510ffa8ff | 67 | * RTC8564 rtc8564(dp5,dp27); // RTC(RTC8564) SDA, SCL (Fixed address) |
kenjiArai | 0:863510ffa8ff | 68 | * // If you connected I2C line not only this device but also other devices, |
kenjiArai | 0:863510ffa8ff | 69 | * // you need to declare following method. |
kenjiArai | 0:863510ffa8ff | 70 | * I2C i2c(dp5,dp27); // SDA, SCL |
kenjiArai | 0:863510ffa8ff | 71 | * RTC8564 rtc8564(i2c); // RTC(RTC8564) (Fixed address) |
kenjiArai | 0:863510ffa8ff | 72 | * |
kenjiArai | 0:863510ffa8ff | 73 | * int main() { |
kenjiArai | 0:863510ffa8ff | 74 | * tm t; |
kenjiArai | 0:863510ffa8ff | 75 | * time_t seconds; |
kenjiArai | 0:863510ffa8ff | 76 | * char buf[40]; |
kenjiArai | 0:863510ffa8ff | 77 | * |
kenjiArai | 0:863510ffa8ff | 78 | * rtc8564.get_time_rtc(&t); // read RTC data |
kenjiArai | 0:863510ffa8ff | 79 | * seconds = mktime(&t); |
kenjiArai | 0:863510ffa8ff | 80 | * strftime(buf, 40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds)); |
kenjiArai | 0:863510ffa8ff | 81 | * printf("Date: %s\r\n", buf); |
kenjiArai | 0:863510ffa8ff | 82 | * } |
kenjiArai | 0:863510ffa8ff | 83 | * @endcode |
kenjiArai | 0:863510ffa8ff | 84 | */ |
kenjiArai | 0:863510ffa8ff | 85 | |
kenjiArai | 0:863510ffa8ff | 86 | class RTC8564 |
kenjiArai | 0:863510ffa8ff | 87 | { |
kenjiArai | 0:863510ffa8ff | 88 | public: |
kenjiArai | 0:863510ffa8ff | 89 | |
kenjiArai | 0:863510ffa8ff | 90 | typedef struct { // BCD format |
kenjiArai | 0:863510ffa8ff | 91 | uint8_t rtc_seconds; |
kenjiArai | 0:863510ffa8ff | 92 | uint8_t rtc_minutes; |
kenjiArai | 0:863510ffa8ff | 93 | uint8_t rtc_hours; |
kenjiArai | 0:863510ffa8ff | 94 | uint8_t rtc_weekday; |
kenjiArai | 0:863510ffa8ff | 95 | uint8_t rtc_date; |
kenjiArai | 0:863510ffa8ff | 96 | uint8_t rtc_month; |
kenjiArai | 0:863510ffa8ff | 97 | uint8_t rtc_year_raw; |
kenjiArai | 0:863510ffa8ff | 98 | uint16_t rtc_year; |
kenjiArai | 0:863510ffa8ff | 99 | } rtc_time; |
kenjiArai | 0:863510ffa8ff | 100 | |
kenjiArai | 0:863510ffa8ff | 101 | /** Configure data pin |
kenjiArai | 0:863510ffa8ff | 102 | * @param data SDA and SCL pins |
kenjiArai | 0:863510ffa8ff | 103 | */ |
kenjiArai | 0:863510ffa8ff | 104 | RTC8564(PinName p_sda, PinName p_scl); |
kenjiArai | 0:863510ffa8ff | 105 | |
kenjiArai | 0:863510ffa8ff | 106 | /** Configure data pin (with other devices on I2C line) |
kenjiArai | 0:863510ffa8ff | 107 | * @param I2C previous definition |
kenjiArai | 0:863510ffa8ff | 108 | */ |
kenjiArai | 0:863510ffa8ff | 109 | RTC8564(I2C& p_i2c); |
kenjiArai | 0:863510ffa8ff | 110 | |
kenjiArai | 0:863510ffa8ff | 111 | /** Read RTC data with Standard C "struct tm" format |
kenjiArai | 0:863510ffa8ff | 112 | * @param tm (data save area) |
kenjiArai | 0:863510ffa8ff | 113 | * @return none but all data in tm |
kenjiArai | 0:863510ffa8ff | 114 | */ |
kenjiArai | 0:863510ffa8ff | 115 | void read_rtc_std(tm *); |
kenjiArai | 0:863510ffa8ff | 116 | void get_time_rtc(tm *); |
kenjiArai | 0:863510ffa8ff | 117 | |
kenjiArai | 0:863510ffa8ff | 118 | /** Write data to RTC data with Standard C "struct tm" format |
kenjiArai | 0:863510ffa8ff | 119 | * @param tm (save writing data) |
kenjiArai | 0:863510ffa8ff | 120 | * @return none but all data in tm |
kenjiArai | 0:863510ffa8ff | 121 | */ |
kenjiArai | 0:863510ffa8ff | 122 | void write_rtc_std(tm *); |
kenjiArai | 0:863510ffa8ff | 123 | void set_time_rtc(tm *); |
kenjiArai | 0:863510ffa8ff | 124 | |
kenjiArai | 0:863510ffa8ff | 125 | /** Read one byte from specific register |
kenjiArai | 0:863510ffa8ff | 126 | * @param register address |
kenjiArai | 0:863510ffa8ff | 127 | * @return register data |
kenjiArai | 0:863510ffa8ff | 128 | */ |
kenjiArai | 0:863510ffa8ff | 129 | uint8_t read_reg_byte(uint8_t reg); |
kenjiArai | 0:863510ffa8ff | 130 | |
kenjiArai | 0:863510ffa8ff | 131 | /** Write one byte into specific register |
kenjiArai | 0:863510ffa8ff | 132 | * @param register address, data |
kenjiArai | 0:863510ffa8ff | 133 | * @return register saved data |
kenjiArai | 0:863510ffa8ff | 134 | */ |
kenjiArai | 0:863510ffa8ff | 135 | uint8_t write_reg_byte(uint8_t reg, uint8_t data); |
kenjiArai | 0:863510ffa8ff | 136 | |
kenjiArai | 0:863510ffa8ff | 137 | /** Read RTC data with own format |
kenjiArai | 0:863510ffa8ff | 138 | * @param tm (data save area) |
kenjiArai | 0:863510ffa8ff | 139 | * @return none but all data in tm |
kenjiArai | 0:863510ffa8ff | 140 | */ |
kenjiArai | 0:863510ffa8ff | 141 | void read_rtc_direct(rtc_time *); |
kenjiArai | 0:863510ffa8ff | 142 | |
kenjiArai | 0:863510ffa8ff | 143 | /** Read RTC data with own format |
kenjiArai | 0:863510ffa8ff | 144 | * @param tm (save writing data) |
kenjiArai | 0:863510ffa8ff | 145 | * @return none but all data in tm |
kenjiArai | 0:863510ffa8ff | 146 | */ |
kenjiArai | 0:863510ffa8ff | 147 | void write_rtc_direct(rtc_time *); |
kenjiArai | 0:863510ffa8ff | 148 | |
kenjiArai | 0:863510ffa8ff | 149 | /** Set I2C clock frequency |
kenjiArai | 0:863510ffa8ff | 150 | * @param freq. |
kenjiArai | 0:863510ffa8ff | 151 | * @return none |
kenjiArai | 0:863510ffa8ff | 152 | */ |
kenjiArai | 0:863510ffa8ff | 153 | void frequency(int hz); |
kenjiArai | 0:863510ffa8ff | 154 | |
kenjiArai | 0:863510ffa8ff | 155 | protected: |
kenjiArai | 0:863510ffa8ff | 156 | uint8_t bin2bcd(uint8_t); |
kenjiArai | 0:863510ffa8ff | 157 | uint8_t bcd2bin(uint8_t); |
kenjiArai | 0:863510ffa8ff | 158 | |
kenjiArai | 1:d1b58c478a7a | 159 | I2C *_i2c_p; |
kenjiArai | 1:d1b58c478a7a | 160 | I2C &_i2c; |
kenjiArai | 0:863510ffa8ff | 161 | |
kenjiArai | 0:863510ffa8ff | 162 | private: |
kenjiArai | 0:863510ffa8ff | 163 | uint8_t RTC8564_addr; |
kenjiArai | 0:863510ffa8ff | 164 | uint8_t rtc_buf[RTC_BUF_SIZ]; // buffer for RTC |
kenjiArai | 0:863510ffa8ff | 165 | }; |
kenjiArai | 0:863510ffa8ff | 166 | |
kenjiArai | 0:863510ffa8ff | 167 | #endif // RTC8564_H |
kenjiArai | 1:d1b58c478a7a | 168 |