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.
RTC8564.h
- Committer:
- kenjiArai
- Date:
- 2017-08-23
- Revision:
- 1:d1b58c478a7a
- Parent:
- 0:863510ffa8ff
File content as of revision 1:d1b58c478a7a:
/*
* mbed library program
* Control RTC-8564NB Real Time Clock Module
* EPSON TOYOCOM
*
* Copyright (c) 2015,'17 Kenji Arai / JH1PJL
* http://www.page.sannet.ne.jp/kenjia/index.html
* http://mbed.org/users/kenjiArai/
* Created: Feburary 1st, 2015
* Revised: August 23rd, 2017
*/
/*
*---------------- REFERENCE ----------------------------------------------------------------------
* Original Information
* http://www.epsondevice.com/docs/qd/ja/DownloadServlet?id=ID000514
* http://www5.epsondevice.com/ja/quartz/product/rtc/i2c_bus/rtc8564je_nb.html
* Sensor board
* http://akizukidenshi.com/catalog/g/gI-00233/
*/
#ifndef RTC8564_H
#define RTC8564_H
#include "mbed.h"
// RTC EPSON TOYOCOM RTC8564
// 7bit address = 0b1010001(No other choice)
#define RTC8564ADDR (0x51 << 1)
#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)
// Register definition
#define RTC8564_REG_CONTL1 0
#define RTC8564_REG_CONTL2 1
#define RTC8564_REG_SEC 2
#define RTC8564_REG_MIN 3
#define RTC8564_REG_HOUR 4
#define RTC8564_REG_DAY 5
#define RTC8564_REG_WDAY 6
#define RTC8564_REG_MON 7
#define RTC8564_REG_YEAR 8
#define RTC8564_REG_ALARM_MIN 9
#define RTC8564_REG_ALARM_HOUR 0xa
#define RTC8564_REG_ALARM_DAY 0xb
#define RTC8564_REG_ALARM_WDAY 0xc
#define RTC8564_REG_CLK_OUT 0xd
#define RTC8564_REG_TMR_CTRL 0xe
#define RTC8564_REG_TIMER 0xf
// Buffer size
#define RTC_BUF_SIZ (RTC8564_REG_TIMER + 5)
/** Interface for RTC (I2C Interface) EPSON TOYOCOM RTC8564
*
* Standalone type RTC via I2C interface
*
* @code
* #include "mbed.h"
*
* // I2C Communication
* RTC8564 rtc8564(dp5,dp27); // RTC(RTC8564) 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
* RTC8564 rtc8564(i2c); // RTC(RTC8564) (Fixed address)
*
* int main() {
* tm t;
* time_t seconds;
* char buf[40];
*
* rtc8564.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 RTC8564
{
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
* @param data SDA and SCL pins
*/
RTC8564(PinName p_sda, PinName p_scl);
/** Configure data pin (with other devices on I2C line)
* @param I2C previous definition
*/
RTC8564(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 *);
/** 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:
uint8_t bin2bcd(uint8_t);
uint8_t bcd2bin(uint8_t);
I2C *_i2c_p;
I2C &_i2c;
private:
uint8_t RTC8564_addr;
uint8_t rtc_buf[RTC_BUF_SIZ]; // buffer for RTC
};
#endif // RTC8564_H