RX-8025NB Real Time Clock Module by EPSON

Dependents:   TYBLE16_simple_data_logger Check_external_RTC

Committer:
kenjiArai
Date:
Sun Jun 07 07:50:14 2015 +0000
Revision:
1:817e81048235
Parent:
0:cdf2921959b4
Child:
2:ce49c4ba4c02
Changed default setting 24 Hours format

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:cdf2921959b4 1 /*
kenjiArai 0:cdf2921959b4 2 * mbed library program
kenjiArai 0:cdf2921959b4 3 * Control RX-8025NB Real Time Clock Module
kenjiArai 0:cdf2921959b4 4 * EPSON
kenjiArai 0:cdf2921959b4 5 *
kenjiArai 0:cdf2921959b4 6 * Copyright (c) 2015 Kenji Arai / JH1PJL
kenjiArai 0:cdf2921959b4 7 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:cdf2921959b4 8 * http://mbed.org/users/kenjiArai/
kenjiArai 0:cdf2921959b4 9 * Created: June 3rd, 2015
kenjiArai 0:cdf2921959b4 10 * Revised: June 5th, 2015
kenjiArai 0:cdf2921959b4 11 *
kenjiArai 0:cdf2921959b4 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:cdf2921959b4 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:cdf2921959b4 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:cdf2921959b4 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:cdf2921959b4 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:cdf2921959b4 17 */
kenjiArai 0:cdf2921959b4 18 /*
kenjiArai 0:cdf2921959b4 19 *---------------- REFERENCE ----------------------------------------------------------------------
kenjiArai 0:cdf2921959b4 20 * Original Information
kenjiArai 0:cdf2921959b4 21 * http://www.epsondevice.com/docs/qd/ja/DownloadServlet?id=ID000515
kenjiArai 0:cdf2921959b4 22 * Sensor board
kenjiArai 0:cdf2921959b4 23 * http://akizukidenshi.com/catalog/g/gK-08585/
kenjiArai 0:cdf2921959b4 24 */
kenjiArai 0:cdf2921959b4 25
kenjiArai 0:cdf2921959b4 26 #ifndef RX8025_H
kenjiArai 0:cdf2921959b4 27 #define RX8025_H
kenjiArai 0:cdf2921959b4 28
kenjiArai 0:cdf2921959b4 29 #include "mbed.h"
kenjiArai 0:cdf2921959b4 30
kenjiArai 0:cdf2921959b4 31 // RTC EPSON RX8025
kenjiArai 0:cdf2921959b4 32 // 7bit address = 0b1010001(No other choice)
kenjiArai 0:cdf2921959b4 33 #define RX8025ADDR (0x32 << 1)
kenjiArai 0:cdf2921959b4 34
kenjiArai 0:cdf2921959b4 35 #define RTC_Wk_Sunday ((uint8_t)0x00)
kenjiArai 0:cdf2921959b4 36 #define RTC_Wk_Monday ((uint8_t)0x01)
kenjiArai 0:cdf2921959b4 37 #define RTC_Wk_Tuesday ((uint8_t)0x02)
kenjiArai 0:cdf2921959b4 38 #define RTC_Wk_Wednesday ((uint8_t)0x03)
kenjiArai 0:cdf2921959b4 39 #define RTC_Wk_Thursday ((uint8_t)0x04)
kenjiArai 0:cdf2921959b4 40 #define RTC_Wk_Friday ((uint8_t)0x05)
kenjiArai 0:cdf2921959b4 41 #define RTC_Wk_Saturday ((uint8_t)0x06)
kenjiArai 0:cdf2921959b4 42
kenjiArai 0:cdf2921959b4 43 // Register definition
kenjiArai 0:cdf2921959b4 44 #define RX8025_REG_SEC 0
kenjiArai 0:cdf2921959b4 45 #define RX8025_REG_MIN 1
kenjiArai 0:cdf2921959b4 46 #define RX8025_REG_HOUR 2
kenjiArai 0:cdf2921959b4 47 #define RX8025_REG_WDAY 3
kenjiArai 0:cdf2921959b4 48 #define RX8025_REG_DAY 4
kenjiArai 0:cdf2921959b4 49 #define RX8025_REG_MON 5
kenjiArai 0:cdf2921959b4 50 #define RX8025_REG_YEAR 6
kenjiArai 0:cdf2921959b4 51 #define RX8025_REG_OFFSET 7
kenjiArai 0:cdf2921959b4 52 #define RX8025_REG_ALARMW_MIN 8
kenjiArai 0:cdf2921959b4 53 #define RX8025_REG_ALARMW_HOUR 9
kenjiArai 0:cdf2921959b4 54 #define RX8025_REG_ALARMW_WDAY 0xa
kenjiArai 0:cdf2921959b4 55 #define RX8025_REG_ALARMD_MIN 0xb
kenjiArai 0:cdf2921959b4 56 #define RX8025_REG_ALARMD_HOUR 0xc
kenjiArai 0:cdf2921959b4 57 #define RX8025_REG_RESERVED 0xd
kenjiArai 0:cdf2921959b4 58 #define RX8025_REG_CONTL1 0xe
kenjiArai 0:cdf2921959b4 59 #define RX8025_REG_CONTL2 0xf
kenjiArai 0:cdf2921959b4 60
kenjiArai 0:cdf2921959b4 61 // Buffer size
kenjiArai 0:cdf2921959b4 62 #define RTC_BUF_SIZ (RX8025_REG_CONTL2 + 5)
kenjiArai 0:cdf2921959b4 63
kenjiArai 0:cdf2921959b4 64 /** Interface for RTC (I2C Interface) EPSON RX8025
kenjiArai 0:cdf2921959b4 65 *
kenjiArai 0:cdf2921959b4 66 * Standalone type RTC via I2C interface
kenjiArai 0:cdf2921959b4 67 *
kenjiArai 0:cdf2921959b4 68 * @code
kenjiArai 0:cdf2921959b4 69 * #include "mbed.h"
kenjiArai 0:cdf2921959b4 70 *
kenjiArai 0:cdf2921959b4 71 * // I2C Communication
kenjiArai 0:cdf2921959b4 72 * RX8025 RX8025(dp5,dp27); // RTC(RX8025) SDA, SCL (Fixed address)
kenjiArai 0:cdf2921959b4 73 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:cdf2921959b4 74 * // you need to declare following method.
kenjiArai 0:cdf2921959b4 75 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 0:cdf2921959b4 76 * RX8025 RX8025(i2c); // RTC(RX8025) (Fixed address)
kenjiArai 0:cdf2921959b4 77 *
kenjiArai 0:cdf2921959b4 78 * int main() {
kenjiArai 0:cdf2921959b4 79 * tm t;
kenjiArai 0:cdf2921959b4 80 * time_t seconds;
kenjiArai 0:cdf2921959b4 81 * char buf[40];
kenjiArai 0:cdf2921959b4 82 *
kenjiArai 0:cdf2921959b4 83 * RX8025.get_time_rtc(&t); // read RTC data
kenjiArai 0:cdf2921959b4 84 * seconds = mktime(&t);
kenjiArai 0:cdf2921959b4 85 * strftime(buf, 40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 0:cdf2921959b4 86 * printf("Date: %s\r\n", buf);
kenjiArai 0:cdf2921959b4 87 * }
kenjiArai 0:cdf2921959b4 88 * @endcode
kenjiArai 0:cdf2921959b4 89 */
kenjiArai 0:cdf2921959b4 90
kenjiArai 0:cdf2921959b4 91 class RX8025
kenjiArai 0:cdf2921959b4 92 {
kenjiArai 0:cdf2921959b4 93 public:
kenjiArai 0:cdf2921959b4 94
kenjiArai 0:cdf2921959b4 95 typedef struct { // BCD format
kenjiArai 0:cdf2921959b4 96 uint8_t rtc_seconds;
kenjiArai 0:cdf2921959b4 97 uint8_t rtc_minutes;
kenjiArai 0:cdf2921959b4 98 uint8_t rtc_hours;
kenjiArai 0:cdf2921959b4 99 uint8_t rtc_weekday;
kenjiArai 0:cdf2921959b4 100 uint8_t rtc_date;
kenjiArai 0:cdf2921959b4 101 uint8_t rtc_month;
kenjiArai 0:cdf2921959b4 102 uint8_t rtc_year_raw;
kenjiArai 0:cdf2921959b4 103 uint16_t rtc_year;
kenjiArai 0:cdf2921959b4 104 } rtc_time;
kenjiArai 0:cdf2921959b4 105
kenjiArai 0:cdf2921959b4 106 /** Configure data pin
kenjiArai 0:cdf2921959b4 107 * @param data SDA and SCL pins
kenjiArai 0:cdf2921959b4 108 */
kenjiArai 0:cdf2921959b4 109 RX8025(PinName p_sda, PinName p_scl);
kenjiArai 0:cdf2921959b4 110
kenjiArai 0:cdf2921959b4 111 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:cdf2921959b4 112 * @param I2C previous definition
kenjiArai 0:cdf2921959b4 113 */
kenjiArai 0:cdf2921959b4 114 RX8025(I2C& p_i2c);
kenjiArai 0:cdf2921959b4 115
kenjiArai 0:cdf2921959b4 116 /** Read RTC data with Standard C "struct tm" format
kenjiArai 0:cdf2921959b4 117 * @param tm (data save area)
kenjiArai 0:cdf2921959b4 118 * @return none but all data in tm
kenjiArai 0:cdf2921959b4 119 */
kenjiArai 0:cdf2921959b4 120 void read_rtc_std(tm *);
kenjiArai 0:cdf2921959b4 121 void get_time_rtc(tm *);
kenjiArai 0:cdf2921959b4 122
kenjiArai 0:cdf2921959b4 123 /** Write data to RTC data with Standard C "struct tm" format
kenjiArai 0:cdf2921959b4 124 * @param tm (save writing data)
kenjiArai 0:cdf2921959b4 125 * @return none but all data in tm
kenjiArai 0:cdf2921959b4 126 */
kenjiArai 0:cdf2921959b4 127 void write_rtc_std(tm *);
kenjiArai 0:cdf2921959b4 128 void set_time_rtc(tm *);
kenjiArai 0:cdf2921959b4 129
kenjiArai 0:cdf2921959b4 130 /** Read one byte from specific register
kenjiArai 0:cdf2921959b4 131 * @param register address
kenjiArai 0:cdf2921959b4 132 * @return register data
kenjiArai 0:cdf2921959b4 133 */
kenjiArai 0:cdf2921959b4 134 uint8_t read_reg_byte(uint8_t reg);
kenjiArai 0:cdf2921959b4 135
kenjiArai 0:cdf2921959b4 136 /** Write one byte into specific register
kenjiArai 0:cdf2921959b4 137 * @param register address, data
kenjiArai 0:cdf2921959b4 138 * @return register saved data
kenjiArai 0:cdf2921959b4 139 */
kenjiArai 0:cdf2921959b4 140 uint8_t write_reg_byte(uint8_t reg, uint8_t data);
kenjiArai 0:cdf2921959b4 141
kenjiArai 0:cdf2921959b4 142 /** Read RTC data with own format
kenjiArai 0:cdf2921959b4 143 * @param tm (data save area)
kenjiArai 0:cdf2921959b4 144 * @return none but all data in tm
kenjiArai 0:cdf2921959b4 145 */
kenjiArai 0:cdf2921959b4 146 void read_rtc_direct(rtc_time *);
kenjiArai 0:cdf2921959b4 147
kenjiArai 0:cdf2921959b4 148 /** Read RTC data with own format
kenjiArai 0:cdf2921959b4 149 * @param tm (save writing data)
kenjiArai 0:cdf2921959b4 150 * @return none but all data in tm
kenjiArai 0:cdf2921959b4 151 */
kenjiArai 0:cdf2921959b4 152 void write_rtc_direct(rtc_time *);
kenjiArai 0:cdf2921959b4 153
kenjiArai 0:cdf2921959b4 154 /** Set I2C clock frequency
kenjiArai 0:cdf2921959b4 155 * @param freq.
kenjiArai 0:cdf2921959b4 156 * @return none
kenjiArai 0:cdf2921959b4 157 */
kenjiArai 0:cdf2921959b4 158 void frequency(int hz);
kenjiArai 0:cdf2921959b4 159
kenjiArai 0:cdf2921959b4 160 protected:
kenjiArai 0:cdf2921959b4 161 uint8_t bin2bcd(uint8_t);
kenjiArai 0:cdf2921959b4 162 uint8_t bcd2bin(uint8_t);
kenjiArai 1:817e81048235 163 void init(void);
kenjiArai 1:817e81048235 164
kenjiArai 0:cdf2921959b4 165 I2C _i2c;
kenjiArai 0:cdf2921959b4 166
kenjiArai 0:cdf2921959b4 167 private:
kenjiArai 0:cdf2921959b4 168 uint8_t RX8025_addr;
kenjiArai 0:cdf2921959b4 169 uint8_t rtc_buf[RTC_BUF_SIZ]; // buffer for RTC
kenjiArai 0:cdf2921959b4 170 };
kenjiArai 0:cdf2921959b4 171
kenjiArai 0:cdf2921959b4 172 #endif // RX8025_H