Skip to content

ArduinoRTC/RTC_4543_U

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EPSON 4543SA/SB

このライブラリは, エプソンの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目なので,タイミングの問題かもしれませんが,解決できていません.

通信関係の問題はロジアナ等もっていないので解決はほぼ無理な状況です.

API

詳しい動作が知りたい方は本ドキュメントと合わせて,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の情報の取得

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()を実行していれば 本関数を呼び出す必要はありません.

About

Device driver of EPSON 4543 RTC for arduino.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages