Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: TYBLE16_simple_data_logger Check_external_RTC
RX8025NB.h
- Committer:
- kenjiArai
- Date:
- 2017-08-22
- Revision:
- 5:e8e8b1b6c103
- Parent:
- 4:d8ce59684dfa
- Child:
- 6:414dbeb77add
File content as of revision 5:e8e8b1b6c103:
/*
* mbed library program
* Control RX-8025NB Real Time Clock Module
* EPSON
*
* Copyright (c) 2015,'16,'17 Kenji Arai / JH1PJL
* http://www.page.sannet.ne.jp/kenjia/index.html
* http://mbed.org/users/kenjiArai/
* Created: June 3rd, 2015
* Revised: August 21st, 2017
*/
/*
*---------------- REFERENCE ---------------------------------------------------
* Original Information
* http://www5.epsondevice.com/ja/products/rtc/rx8025nb.html
* Akizuki
* http://akizukidenshi.com/catalog/g/gK-08585/
*/
#ifndef RX8025_H
#define RX8025_H
#include "mbed.h"
// RTC EPSON RX8025
// 7bit address = 0b0110010(No other choice)
#define RX8025ADDR (0x32 << 1)
#define RTC_Wk_Sunday ((uint8_t)0x00)
#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)
// Register definition
#define RX8025_REG_SEC 0x0
#define RX8025_REG_MIN 0x1
#define RX8025_REG_HOUR 0x2
#define RX8025_REG_WDAY 0x3
#define RX8025_REG_DAY 0x4
#define RX8025_REG_MON 0x5
#define RX8025_REG_YEAR 0x6
#define RX8025_REG_OFFSET 0x7
#define RX8025_REG_ALARMW_MIN 0x8
#define RX8025_REG_ALARMW_HOUR 0x9
#define RX8025_REG_ALARMW_WDAY 0xa
#define RX8025_REG_ALARMD_MIN 0xb
#define RX8025_REG_ALARMD_HOUR 0xc
#define RX8025_REG_RESERVED 0xd
#define RX8025_REG_CONTL1 0xe
#define RX8025_REG_CONTL2 0xf
// Buffer size
#define RTC_BUF_SIZ (RX8025_REG_CONTL2 + 5)
/** Interface for RTC (I2C Interface) EPSON RX8025
*
* Standalone type RTC via I2C interface
*
* @code
* #include "mbed.h"
*
* // I2C Communication
* RX8025 RX8025(dp5,dp27); // RTC(RX8025) SDA, SCL (Fixed address)
* // If you connected I2C line not only this device but also other devices,
* // you need to declare following method.
* I2C i2c(dp5,dp27); // SDA, SCL
* RX8025 RX8025(i2c); // RTC(RX8025) (Fixed address)
*
* int main() {
* tm t;
* time_t seconds;
* char buf[40];
*
* while(1){
* RX8025.get_time_rtc(&t); // read RTC data
* seconds = mktime(&t);
* strftime(buf, 40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
* printf("Date: %s\r\n", buf);
* }
* }
* @endcode
*/
class RX8025
{
public:
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;
uint8_t rtc_year_raw;
uint16_t rtc_year;
} rtc_time;
/** Configure data pin (with other devices on I2C line)
* @param data SDA and SCL pins
*/
RX8025(PinName p_sda, PinName p_scl);
/** Configure data pin (with other devices on I2C line)
* @param I2C previous definition
*/
RX8025(I2C& p_i2c);
/** Read RTC data with Standard C "struct tm" format
* @param tm (data save area)
* @return none but all data in tm
*/
void read_rtc_std(tm *);
void get_time_rtc(tm *);
/** Write data to RTC data with Standard C "struct tm" format
* @param tm (save writing data)
* @return none but all data in tm
*/
void write_rtc_std(tm *);
void set_time_rtc(tm *);
/** Set Alarm-D / INTA time
* @param next time (unit: minutes) from now on minimum = 2 minutes!!
* @return none
*/
void set_next_alarmD_INTA(uint16_t time);
/** Clear Alarm-D / INTA interrupt
* @param none
* @return none
*/
void clear_alarmD_INTA(void);
/** Read one byte from specific register
* @param register address
* @return register data
*/
uint8_t read_reg_byte(uint8_t reg);
/** Write one byte into specific register
* @param register address, data
* @return register saved data
*/
uint8_t write_reg_byte(uint8_t reg, uint8_t data);
/** Read RTC data with own format
* @param tm (data save area)
* @return none but all data in tm
*/
void read_rtc_direct(rtc_time *);
/** Read RTC data with own format
* @param tm (save writing data)
* @return none but all data in tm
*/
void write_rtc_direct(rtc_time *);
/** Set I2C clock frequency
* @param freq.
* @return none
*/
void frequency(int hz);
protected:
I2C *_i2c_p;
I2C &_i2c;
uint8_t bin2bcd(uint8_t);
uint8_t bcd2bin(uint8_t);
uint8_t set_alarmD_reg (uint16_t time);
void init(void);
private:
uint8_t RX8025_addr;
char rtc_buf[RTC_BUF_SIZ]; // buffer for RTC
};
#endif // RX8025_H