このライブラリは, エプソンのRTC4543SA/SB用の ドライバです.
RTCは秋月電子の [AkizukiRTC_4543][32kHz出力シリアルRTC基板モジュール RT4543使用]を使いました.
動作が確認できた機種は以下の3種類です.
| CPUアーキ | 利用した機種 |
|---|---|
| AVR | Arduino Mega |
| SAMD | Arduino MKR WiFi 1010 |
| SAM | Arduino Due |
電源喪失を検出するフラグの読み取りint checkLowPower(void)に失敗(電源OFFにしたのに,電源喪失していない)という結果を返すことがあり,挙動不審です.これはすべての機種(Mega, Due等)で同じでした.
データアクセスのシーケンスの最初の1bit目なので,タイミングの問題かもしれませんが,解決できていません.
通信関係の問題はロジアナ等もっていないので解決はほぼ無理な状況です.
詳しい動作が知りたい方は本ドキュメントと合わせて,EPSONが公開しているアプリケーションマニュアルを参照してください.
RTC_4543_U(uint8_t _dataPin, uint8_t _clkPin, uint8_t _wrPin, uint8_t _cePin, uint8_t _fsel, int32_t _rtcID=-1)
4543が利用する各端子に接続しているピン番号とrtcのIDを引数で与えます.
_fselはクロック信号出力で利用するので,そちらを参照してください.
bool begin(bool init, uint32_t addr)
第1引数は,時刻やタイマ,アラームの設定を実施するか否かを示すフラグ.
第2引数はI2Cのデバイス等のためのものなので,本RTC用ドライバでは無視されます.
| 返り値 | 意味 |
|---|---|
| true | 初期化成功 |
| false | 初期化失敗 |
RTCのチップの種類や機能の情報を取得するメンバ関数.
void getRtcInfo(rtc_u_info_t *info)
bool setTime(rtc_date_t* time)
引数で与えた時刻をRTCに設定.
| 返り値 | 意味 |
|---|---|
| true | 設定成功 |
| false | 設定失敗 |
なお,引数のデータ型はdateUtils.hで下のように定義されています.ミリ秒単位の時刻は本RTC含め大部分のRTCでは利用できません.
typedef struct {
uint16_t year;
uint8_t month;
uint8_t mday;
uint8_t wday;
uint8_t hour;
uint8_t minute;
uint8_t second;
int16_t millisecond;
} date_t;
bool getTime(rtc_date_t* time)
RTCから取得した時刻情報を引数で与えた構造体に格納.
| 返り値 | 意味 |
|---|---|
| true | 取得成功 |
| false | 取得失敗 |
int setClockOut(uint8_t num, uint8_t freq, int8_t pin=-1)
本RTC(4543SA/SB)では,クロック信号の出力は1種類であり,外部からピンの電圧設定で出力する周波数が決定され,別のピンの電圧で出力する/しないが決まります.
そのため,第1引数は0である必要があります.pinにはRTCのFOE端子に接続しているArduinoのピン番号を指定してください.
| freqの値 | 出力される周波数 |
|---|---|
| 0 | 32.768kHz |
| その他 | 1Hz |
実際の動作としては,本クラスのオブジェクト生成の時に指定した_fselピンの電圧をfreqの値に合わせてHIGHもしくはLOWに設定することで,RTCのクロック信号の出力周波数を制御しています.そのため,_fselやこの関数のpinが正しくRTCに接続されていないと正しく信号が出力されないので,ご注意ください.
| 返り値 | 意味 |
|---|---|
| RTC_U_SUCCESS | 設定成功 |
| RTC_U_ILLEGAL_PARAM | numの値が不正 |
int setClockOutMode(uint8_t num, uint8_t freq)
各引数の意味や動作の中身はsetClockOut()と同じです.
| freqの値 | 出力される周波数 |
|---|---|
| 0 | 32.768kHz |
| その他 | 1Hz |
| 返り値 | 意味 |
|---|---|
| RTC_U_SUCCESS | 設定成功 |
| RTC_U_ILLEGAL_PARAM | numの値が不正 |
int controlClockOut(uint8_t num, uint8_t mode)
周波数信号を出力する端子は1つしかないため,numは0限定です.また,第2引数は以下の表のような意味となります.
modeの値 |
意味 |
|---|---|
| 0 | クロック出力停止 |
| 1 | クロック出力開始 |
実際の動作としては,setClockOut()で指定したpin(foeピン)の電圧をHIGHもしくはLOWに設定することで,RTCからの信号出力をON/OFFしています.
| 返り値 | 意味 |
|---|---|
| RTC_U_SUCCESS | 設定成功 |
| RTC_U_FAILURE | 設定失敗 |
| RTC_U_ILLEGAL_PARAM | サポートしていないパラメータの設定など |
int checkLowPower(void)
RTCのデータのうち,電源電圧の低下を示すFDTの値を取得して返します.
| 返り値 | 意味 |
|---|---|
| 0 | 電圧低下なし |
| 1 | 電圧低下あり |
本RTCでは,RTCの全データを読み取るとFDTはクリアされるため,複数回読み取ることはできません.
int clearPowerFlag(void)
電源喪失を示すフラグ(FDT)をクリアする関数.常時RTC_U_SUCCESSが返されます.
本RTCでは,RTCの全データを読み取るとFDTはクリアされるため,checkLowPower()を実行していれば
本関数を呼び出す必要はありません.