XRTC_PCF85063A - askn37/askn37.github.io GitHub Wiki

XRTC_PCF85063A I2CカレンダヌICクラス

これはNXP PCF85063AカレンダヌIC倖郚RTCを制埡するむンタフェヌスを提䟛する。 この I2CデバむスIC は "Duino" 系列補品のオンボヌドに搭茉されおおり 内臓呚蟺機胜での蚈時なしに長呚期割蟌、アラヌム割蟌、カレンダヌ日時保持を提䟛する。

以䞋の解説では暗に "Duino" ボヌド固有機胜を前提にした内容も含たれるこずに泚意されたい。

甚䟋

#include <XRTC_PCF85063A.h>
XRTC_PCF85063A XRTC = {Wire};
void setup (void) {
  pinControlRegister(PIN_PF1) = PORT_PULLUPEN_bm | PORT_ISC_FALLING_gc;
  Serial.begin(CONSOLE_BAUD);
  Wire.initiate(TWI_SM);
  if (!XRTC.update()) {
    Serial.println(F("Failed XRTC"));
    for (;;);
  }
  XRTC.startPeriodTimer(1);
  set_sleep_mode(SLEEP_MODE_IDLE);
  sleep_enable();
}
ISR(PORTF_PORT_vect) {
  PORTF_INTFLAGS = PIN1_bm;
}
void loop (void) {
  digitalWrite(LED_BUILTIN, TOGGLE);
  if (XRTC.update()) {
    bcddatetime_t BCD = XRTC.getBcdDateTimeNow();
    Serial
      .print(_BCDDT(BCD)->col.year, ZHEX, 4)
      .write('-')
      .print(_BCDDT(BCD)->col.month, ZHEX, 2)
      .write('-')
      .print(_BCDDT(BCD)->col.day, ZHEX, 2)
      .write(' ')
      .print(_BCDDT(BCD)->col.hour, ZHEX, 2)
      .write(':')
      .print(_BCDDT(BCD)->col.minute, ZHEX, 2)
      .write(':')
      .print(_BCDDT(BCD)->col.second, ZHEX, 2)
      .ln();
  }
  Serial.flush();
  sleep_cpu();
}

この甚䟋ではXRTCに1秒呚期割蟌を指瀺し、 それをPIN_PF1端子で捉えお CPU䌑止状態を解陀し、 シリアルモニタヌに珟圚時刻を衚瀺しおたた CPU䌑止状態に入る動䜜を繰り返す。 時刻取埗ず衚瀺には <bcddatetime.h> を利甚しおいる。

時刻蚭定を䜿わずに単に呚期割蟌を発生させたいだけならstartPeriodTimerを、 単発割蟌を発生させたいだけならstartCountdownTimerを䜿えば良い。 割蟌出力はオヌプンドレむンなので、倖郚入力端子にプルアップ蚭定は必芁。

/* 60秒呚期割蟌 : 毎00秒発動 */
XRTC.setMinuteInterruptEnable(true).activeTimer();

/* 30秒呚期割蟌 : 毎00秒ず毎30秒発動 */
XRTC.setHarfMinuteInterruptEnable(true).activeTimer();

/* その他任意長呚期割蟌 : 1〜15300 秒範囲 : 珟時刻起点 */
XRTC.startPeriodTimer(20);

/* 単発タむムアりト割蟌 : 1〜15300 秒範囲 : 珟時刻起点 */
XRTC.startCountdownTimer(20);

/* 単発割蟌解陀 : 解陀するたで割蟌端子は LOW を維持 */
XRTC.clearTimerFlag();

/* 割蟌タむマヌ動䜜停止 */
XRTC.deactiveTimer();

このデバむスを䜿甚せず、時刻管理も䞍芁なら次の方法で停止できる。 停止しなければ䞍意に呚期割蟌等が発生する堎合がある。

/* デバむスを初期状態に戻し、蚈時機胜停止 */
XRTC.reset();
XRTC.stop();

䞖玀補正

PCF85063Aの堎合、幎は2桁粟床か぀センチュリヌビット機胜を持たない。 このため00幎には垞に2月29日があり、2000幎以倖ず䞀臎しない。 ぀たり時刻管理の有効範囲は1900-03-01から2100-02-28である。 しかし曜日はそれず無関係に正しく曎新されるので、 getCenturyDateTimeNowメ゜ッドは以䞋の補正を加えるこずで 1900-01-01から2299-12-31の400幎間を正しく返华できる。

  1. 珟圚幎月日を2000-01-01から2099-12-31ず芋做しお MJD修正ナリりス通日を取埗。
  2. MJDから埗られる曜日から珟圚保持しおいる曜日を枛じお7の剰䜙Xを埗る。
  3. Xが0であるなら2000幎代であるから補正䞍芁。
  4. MJDが51603以䞋2000-02-29以前である堎合、
    a. MJDが51603であるなら存圚しおはならない閏日であるからYをマヌク。
    b. Xが5であるなら1900幎代であるからMJDより36524を枛じる。
    c. Xが1であるなら2100幎代であるからMJDに36525を加える。
    d. Xが3であるなら2200幎代であるからMJDに73049を加える。
  5. MJDが51604以䞊2000-03-01以降である堎合、
    a. Xが6であるなら1900幎代であるからMJDより36525を枛じる。
    b. Xが2であるなら2100幎代であるからMJDに36524を加える。
    c. Xが4であるなら2200幎代であるからMJDに73048を加える。
  6. 補正されたMJDから新たな幎月日を導く。これは同時に存圚しない02-29を03-01に眮換する。
  7. Yがマヌク枈なら珟圚幎月日は誀りなので、新たな幎月日を珟圚幎月日に蚭定する。

䞊蚘の補正刀定から挏れた幎月日ず曜日の組は、 グレゎリオ暊には存圚しないので2000幎代ず芋做さざるを埗ない。 䜕故ならグレゎリオ暊は以䞋の匏に埓っお、400幎間で幎月日ず曜日の組が埪環しおいるからだ。

400幎 × 365日 + 閏日97日 == 146097日 == 20871週 × 7日端数なし

この性質から100幎毎の同月同日の曜日はただ4通りしかなく、 それを超える範囲は曜日補正法では求めるこずが出来ない。

もしそれが必芁なら西暊䞊䜍桁をsetRamByteで保持しおおいお補うず良い。

<XRTC_PCF85063A.h>

䟝存性<api/TWIM.h> <bcddatetime.h>

classXRTC_PCF85063Aを定矩する。

クラスむンスタンス

初期化子にはTWIM_ClassむンスタンスWire等を䞎える。 その I2C Bus を別途初期化するこずで、デバむス通信準備が敎う。 通信速床は通垞 100kbpsTWI_SMを指瀺するが、 400kbpsTWI_FMでも、 10kbpsTWI_LMでも良い。

#include <XRTC_PCF85063A.h>
XRTC_PCF85063A XRTC = {Wire};
...
Wire.initiate(TWI_SM); /* Wire.begin(100000L) も可 */
XRTC.update();

デバむス制埡

PCF85063Aの堎合、2皮類の粟床校正機胜がある。 たた1バむトの任意RAM保持機胜がある。

bool update (void)

デバむスの珟圚の制埡状態を取埗する。実行は即時。成功すれば真を返す。 これには珟圚の時刻情報の他、各皮制埡状態が含たれる。 遅延䞭の蚭定呜什は反映されずに砎棄される。 このメ゜ッドは、これ以埌の他の制埡に先立っお呌ばれなければならない。

bool load (void)

これはupdateメ゜ッドの別名ずしお機胜する。

bool saveSettings (void)

デバむスに新たな制埡状態を反映させる。実行は即時。成功すれば真。 これは「実行は遅延」ず説明された蚭定倉曎を、デバむスに送信する。

bool reset (void)

デバむスを再起動する。実行は即時。updateも続けお実行され、成功すれば真。 珟圚時刻は砎棄されお2000-01-01 00:00:00から蚈時を始め、 アラヌムずタむマヌは停止され、 呚波数出力COT端子制埡は初期蚭定ずなり、 isPowerDownは真ずなる。

bool isPowerDown (void)

デバむスが再起動したか、バックアップ電源喪倱を経隓したなら真を返す。 珟圚時刻は信甚できない。 あらたな時刻を再蚭定するたで真に留たる。

デバむス蚭定

bool isExternalTestMode (void)

テストモヌドが有効なら真。通垞運甚では䜿甚しない。

bool isCapacitorSelection (void)

氎晶発振子負荷容量蚭定の遞択倀を返す。通垞運甚では䜿甚しない。

uint8_t getRamByte (void)

ナヌザヌ蚭定RAMバむトの蚭定倀を返华する。保持できるのは1バむトだけである。

XRTC_PCF85063A& setExternalTestMode (const bool t_enable)

テストモヌドの有効/無効を真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。 通垞運甚では䜿甚しない。

XRTC_PCF85063A& setCapacitorSelection (const bool t_enable)

氎晶発振子負荷容量12.5pf/7pfの切替を真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。 通垞運甚では䜿甚しない。

"Duino" ボヌドでは通垞7pf氎晶発信子が搭茉されおいるので既定倀でよい。

XRTC_PCF85063A& setRamByte (const uint8_t t_ram_byte)

ナヌザヌ蚭定RAMバむトを0〜255の範囲で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。

䜿甚は任意。保存期間はバックアップキャパシタ次第。 デバむス再起動で0初期化される。 1バむトしか保持できないので甚途は限られるだろう。

NIMEM機胜を䜿うほうがより倧容量を保持できおか぀非砎壊怜査が出来る。

時刻粟床校正

bool isCorrectionOffsetMode (void)

粟床校正モヌド蚭定の遞択倀を真理倀で返す。

bool isCorrectionInterruptEnable (void)

粟床校正が有効である時、補正パルスの割蟌端子出力が蚭定されおいるならば真。通垞運甚では䜿甚しない。

uint8_t getCorrectionOffset (void)

粟床校正の珟圚の補正倀を返华する。

XRTC_PCF85063A& setCorrectionOffsetMode (const bool t_enable)

粟床校正モヌドの1/0の別を真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。

校正モヌド0の堎合、2時間毎時桁が偶数の時起点で指定数の 1/32768秒×分 を増やすか枛らす。 ぀たり調敎可胜粟床は ±4.34 ppm 粒床。

䟋えば粟床校正倀が-3だず、2時間に付き 1/32768秒 が 1分間隔で 3回枛らされる。

校正モヌド1の堎合、4分毎分桁が4の倍数の時起点で指定数の 1/32768秒×秒 を増やすか枛らす。 ぀たり調敎可胜粟床は ±4.069 ppm 粒床。

䟋えば粟床校正倀が-3だず、4分に付き 1/32768秒 が 1秒間隔で 3回枛らされる。

粟床校正は時刻刻みに察しお行われるが、呚波数出力端子の出力呚波数には圱響しない。

XRTC_PCF85063A& setCorrectionInterruptEnable (const bool t_enable)

粟床校正モヌドで補正クロックが挿入/陀去されるずき、 割蟌端子を掻動させるかを真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。

XRTC_PCF85063A& setCorrectionOffset (const uint8_t t_offset)

粟床校正倀を-64〜+63の範囲で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。 曎新反映は次回校正時刻から有効。

時刻制埡

時刻管理には既定の 24時間衚珟モヌドず、12時間衚珟モヌドずがある。 䞡者の切替は透過ではないので時刻の再蚭定が必芁になる。

PCF85063Aの幎管理は2桁だがセンチュリヌビットはサポヌトされおいない。 このため幎が00の堎合、垞に閏日2月29日が存圚する。 しかし曜日曎新はそれず別に機胜するから゜フトりェアで閏日補正を行うこずができ、 1900〜2299幎範囲の西暊を正しく扱うこずが出来る。

なおPCF85063Aにはタむムスタンプストップりォッチモヌドはなく、切り替えもできない。

bool start (void)

蚈時停止䞭のデバむスに蚈時を再開させる。実行は即時。成功すれば真。 成功すればちょうど 0.5秒埌に最初の蚈時秒の桁のむンクリメントが発生する。 蚈時タむミング合わせに䜿甚する。

bool stop (void)

蚈時䞭のデバむスに蚈時を停止させる。実行は即時。成功すれば真。 蚈時タむミング合わせ、あるいはデバむスを䜿甚しない堎合の省電力埅機に䜿甚する。

bool isRunning (void)

デバむスが蚈時䞭なら真を返す。stopメ゜ッドを実行するたで真に留たる。

bool isStopped (void)

デバむスが蚈時停止䞭なら真を返す。startメ゜ッドを実行するたで真に留たる。

bool is12hourMode (void)

デバむスが12時間衚珟モヌドで皌働䞭なら真を返す。 24時間衚珟モヌド既定倀で皌働䞭なら停を返す。

XRTC_PCF85063A& setRunning (const bool t_enable)

蚈時機胜の蚈時/停止を真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。 start stopず機胜は同じだが即時実行ではない。

XRTC_PCF85063A& set12hourMode (const bool t_enable)

時刻衚瀺モヌドの12時間制/24時間制の別を真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。

時刻衚瀺モヌド倉曎埌の時刻保持内容は䞍正であるから、改めお蚭定しなければならない。

時刻取埗

time_t getEpochNow (void)

珟圚時刻をtime_t型のUNIX Epochに倉換しお返华する。 UTC䞖界協定時か吊かは䜿甚者定矩による。

返华倀は珟圚時刻が西暊2000〜2099幎範囲のあいだのみ正しい。

time_t now (void)

getEpochNowの別名。

bcddatetime_t getBcdDateTimeNow (void)

珟圚時刻をbcddatetime_t型で幎月日時分秒を返华する。 幎は2000〜2099範囲で、曜日情報は含たない。

有効範囲倖の時刻では曜日が正しくならない。

bcddatetime_t getCenturyDateTimeNow (void)

珟圚時刻をbcddatetime_t型で幎月日時分秒を返华する。 幎は1900〜2299範囲で、曜日情報は含たない。

グレゎリオ暊は 400幎呚期で埪環しおいるため、範囲倖の指定は結果的に䞞められる。

uint8_t getWeekdays (void)

珟圚時刻が保持しおいる曜日を返す。範囲は0:日(Sun)〜6:土(Sat)である。

幎の粟床が2桁の堎合、 保持しおいる幎月日を21䞖玀ず芋做しお曜日を算出し、それず異なるなら 保持しおいる幎月日は21䞖玀ではないず刀定できる。 グレゎリオ暊でのその曜日組み合わせは蚈4通りしか存圚しないので、 それらを20〜23䞖玀の䜕れかであるず芋做すこずができる。

他の3皮はグレゎリオ暊に珟れるはずがないので、結果は未知である。

時刻蚭定

bool adjustEpoch (const time_t t_time)

time_t型で珟圚時刻を蚭定する。実行は即時。成功すれば真。 珟圚時刻には正しい曜日が蚭定される。

蚭定可胜なのは西暊2000〜2099幎範囲のあいだに限られる。
閏日のない幎の 2月29日は、3月1日ずみなされる。

bool adjustBcdDateTime (const bcddatetime_t t_bcd)

bcddatetime_t型で珟圚時刻を蚭定する。実行は即時。成功すれば真。 幎には1900〜2299範囲が指定でき、 珟圚時刻には正しい曜日が蚭定される。

グレゎリオ暊は 400幎呚期で埪環しおいるため、範囲倖の指定は結果的に䞞められる。
閏日のない幎の 2月29日は、3月1日ずみなされる。

bool adjustBcdDate (const bcddate_t t_bcd_date)

bcddate_t型で幎月日のみを珟圚時刻に蚭定する。実行は即時。成功すれば真。 幎には1900〜2299範囲が指定でき、 珟圚時刻には正しい曜日が蚭定される。

グレゎリオ暊は 400幎呚期で埪環しおいるため、範囲倖の指定は結果的に䞞められる。
閏日のない幎の 2月29日は、3月1日ずみなされる。

bool adjustBcdTime (const bcdtime_t t_bcd_time)

bcdtime_t型で時分秒のみを珟圚時刻に蚭定する。実行は即時。成功すれば真。

bool adjustMjd (const date_t t_mjd)

date_t型の MJD修正ナリりス通日で幎月日のみを珟圚時刻に蚭定する。実行は即時。成功すれば真。 幎には1900〜2299範囲が指定でき、 珟圚時刻には正しい曜日が蚭定される。

グレゎリオ暊は 400幎呚期で埪環しおいるため、範囲倖の指定は結果的に䞞められる。
閏日のない幎の 2月29日は、3月1日ずみなされる。

bool adjust (const bcddatetime_t t_bcd)

adjustBcdDateTimeの別名。bcddatetime_t型を枡す。

bool adjust (const time_t t_time)

adjustEpochの別名。time_t型を枡す。

アラヌム制埡

アラヌムには週 日 時 分 秒の5぀の比范芁玠が有り、その論理和を取る。 耇数の比范を有効にするず、その党おが真ずならなければアラヌム動䜜は発動しない。

アラヌム動䜜自䜓は単発ストロヌブであり、発動フラグをクリアしなければ 次の比范条件を満たした時刻が蚪れおも、アラヌム動䜜は発動しない。

アラヌム発動䞭は割蟌端子がLOWに匕かれたたたずなるので、これをクリアしなければ他の割蟌もたた通知されない。

struct XRTC_ALARM_SETTINGS

アラヌム比范条件を栌玍する構造䜓定矩。 ひず぀の曜日ず、5぀の比范フラグを保持しおいる。

XRTC_ALARM_SETTINGS 型 説明
.WEEKDAYS 3bit 曜日指定 0-7
.SECOND bool 真で秒比范有効
.MINUTE bool 真で分比范有効
.HOUR bool 真で時比范有効
.DAY bool 真で日比范有効
.WEEKDAY bool 真で曜日比范有効

bool isAlarm (void)

アラヌムが発動したなら真を返す。 新たなアラヌムを蚭定するか、クリアするたで真に留たる。

これがクリアされなければ発動䞭のアラヌム割蟌端子制埡LOWは取り䞋げられない。

bool isAlarmInterruptEnable (void)

アラヌム割蟌が有効なら真を返す。

bool activeAlarm (const bool t_enable)

アラヌムの有効/無効を真/停で蚭定する。実行は即時。成功すれば真。 アラヌムを有効化するず、アラヌム割蟌もたた有効化される。 アラヌムを無効化するず、アラヌム割蟌もたた無効化される。

bool clearAlarmFlag (void)

珟圚発動䞭のアラヌムをクリアする。実行は即時。成功すれば真。 発動したアラヌムをクリアしおも、アラヌム割蟌は無効化されない。

XRTC_PCF85063A& setAlarmSettings (const bcdtime_t t_bcd, XRTC_ALARM_SETTINGS t_enable_flags)

アラヌム比范条件を蚭定する。実行は遅延。メ゜ッドチェヌンを埌続できる。 匕数にはひず぀のbcdtime_t型の時分秒ず、 䞀組のXRTC_ALARM_SETTINGS構造䜓を䞎える。

bcdtime_t getAlarmTime (void)

珟圚のアラヌム比范時分秒をbcdtime_t型で返华する。

XRTC_ALARM_SETTINGS getAlarmSettings (void)

珟圚のアラヌム比范蚭定をXRTC_ALARM_SETTINGS型で返华する。

タむマヌ制埡

タむマヌ動䜜には呚期動䜜ず単発動䜜がある。 呚期動䜜には曎にふた぀の組蟌固定長呚期タむマヌがある。

bool isTimer (void)

䜕れかのタむマヌが発動したなら真を返す。 新たなタむマヌを蚭定するか、クリアするたで真に留たる。 これがクリアされなければ単発動䜜で発動䞭のタむマヌ割蟌端子のLOW制埡は取り䞋げられない。

bool isTimerInterruptEnable (void)

タむマヌ割蟌が有効なら真を返す。

bool isTimerPeriod (void)

任意タむマヌが呚期動䜜蚭定なら真を返す。 任意タむマヌが単発動䜜蚭定なら停を返す。

XRTC_PCF85063A& setTimerEnable (const bool t_enable)

タむマヌ動䜜の有効/無効を真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。 通垞これは他のタむマヌ操䜜内で䞊曞きされるため、䜿甚する機䌚はない。

XRTC_PCF85063A& setTimerInterruptEnable (const bool t_enable)

タむマヌ割蟌動䜜の有効/無効を真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。 通垞これは他のタむマヌ操䜜内で䞊曞きされるため、䜿甚する機䌚はない。

bool deactiveTimer (void)

タむマヌ動䜜ず割蟌を無効化する。実行は即時。成功すれば真。 珟圚のタむマヌ発動フラグはクリアされる。 activeTimer(false, false)に同じ。

bool activeTimer (const bool t_enable = true)

タむマヌ動䜜ず割蟌の有効/無効を真/停で蚭定する。実行は即時。成功すれば真。 珟圚のタむマヌ発動フラグはクリアされる。 activeTimer(void)はactiveTimer(true)に同じ。 activeTimer(false)はactiveTimer(false, false)に同じ。

bool activeTimer (const bool t_enable, const bool t_interrupt)

タむマヌ動䜜ずタむマヌ割蟌の個別の有効/無効を真/停で蚭定する。実行は即時。成功すれば真。 珟圚のタむマヌ発動フラグはクリアされる。 activeTimer(false, false)はdeactiveTime(void)に同じ。 activeTimer(true, true)はactiveTimer(void)に同じ。

activeTimer(false, true)は蚭定可胜だが意味をなさない。

activeTimer(true, false)はタむマヌ発動フラグ曎新のみ蚱可され、割蟌端子は駆動しない。 タむマヌが発動したか吊かはisTimerで調べるこずができる。

bool clearTimerFlag (void)

珟圚のタむマヌ発動フラグをクリアしお割蟌端子制埡を取り䞋げる。実行は即時。成功すれば真。

呚期動䜜タむマヌ蚭定

呚期動䜜タむマヌは有効である間、指定の呚期長間隔で単発パルスストロヌブを繰り返す。 タむマヌ発動フラグは初回発動時に真ずなり、以埌クリアされるたで真を維持する。

任意蚭定タむマヌの他に60秒および30秒の固定長呚期タむマヌが別にあり、 任意動䜜の呚期タむマヌず同時に䜿甚できる。 ただしタむマヌ発動フラグはひず぀なので、どのタむマヌが発動したかを知るこずは出来ない。

bool isMinuteInterruptEnable (void)

組蟌60秒呚期タむマヌが有効なら真。

bool isHarfMinuteInterruptEnable (void)

組蟌30秒呚期タむマヌが有効なら真。

XRTC_PCF85063A& setMinuteInterruptEnable (const bool t_enable)

組蟌60秒呚期長タむマヌの有効/無効を真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。 この組蟌呚期タむマヌは秒桁が00の時に単発割蟌を発生させる。

組蟌60秒呚期タむマヌは、任意蚭定呚期タむマヌず同時に䜿甚できる。

XRTC_PCF85063A& setHarfMinuteInterruptEnable (const bool t_enable)

組蟌30秒呚期長タむマヌの有効/無効を真/停で蚭定する。実行は遅延。メ゜ッドチェヌンが埌続できる。 この組蟌呚期タむマヌは秒桁が00か30の時に単発割蟌を発生させる。 埓っお組蟌60秒呚期長タむマヌの効果は隠蔜される。

組蟌30秒呚期長タむマヌは、任意蚭定呚期タむマヌず同時に䜿甚できる。

bool startPeriodTimer (const uint16_t t_seconds)

任意蚭定呚期長タむマヌに、珟時刻を起点ずする呚期長をt_secondsで䞎えお有効化する。実行は即時。成功すれば真。 タむマヌ発動フラグはクリアされる。 指定可胜な最䜎倀は1秒。 255秒たでは秒刻みで指定可胜。 それ以䞊は60秒刻みに䞞められ、15300秒たでが指定できる。 0を指定するずこのタむマヌ動䜜ず割蟌は無効化される。

単発動䜜タむマヌ蚭定

単発動䜜タむマヌ割蟌は、その発動䞭は割蟌端子をLOWに匕く。 それはclearTimerFlagでクリアするたで取り䞋げられない。

struct XRTC_TIMER_SETTINGS

activateTimerを実行する際の詳现蚭定構造䜓。 通垞これを䜿甚する必芁はない。

XRTC_TIMER_SETTINGS 型 説明
.Value uint8_t カりントダりン蚭定倀0〜255
.InterruptMode bool 真で呚期動䜜、停で単発動䜜
.InterruptEnable bool 真で割蟌端子制埡蚱可
.Enable bool 真でタむマヌ動䜜有効
.ClockFrequency 2bit カりントダりン呚波数を以䞋で指定
0 4.096kHz
1 64Hz
2 1Hz
3 1/60Hz

XRTC_TIMER_SETTINGS getTimerValues (void)

任意蚭定タむマヌの珟圚の詳现情報をXRTC_TIMER_SETTINGS構造䜓に返华する。

bool activateTimer (const XRTC_TIMER_SETTINGS t_settings)

任意蚭定タむマヌに詳现か぀完党な動䜜蚭定をXRTC_TIMER_SETTINGSで䞎える。実行は即時。成功すれば真。 タむマヌ発動フラグはクリアされる。 通垞これを䜿甚する必芁はない。

bool startCountdownTimer (const uint16_t t_seconds)

任意蚭定単発動䜜タむマヌに、珟時刻を起点ずするカりントダりン時間をt_secondsで䞎えお有効化する。実行は即時。成功すれば真。 タむマヌ発動フラグはクリアされる。 指定可胜な最䜎倀は1秒。 255秒たでは秒刻みで指定可胜。 それ以䞊は60秒刻みに䞞められ、15300秒たでが指定できる。 0を指定するずこのタむマヌ動䜜ず割蟌は無効化される。

任意蚭定単発動䜜タむマヌが発動するずタむマヌ発動フラグが真になり、 それがクリアされるたで割蟌端子もLOWを維持する。

呚波数出力端子制埡

呚波数出力端子COTは既定で 32.768kHz の矩圢波push-pullを垞時出力しおいる。 この信号は "Duino" ボヌドのPIN_PF0にゞャンパヌ蚭定で入力するこずができ、 RTC呚蟺機胜に䟛絊、たたは䞻制埡クロックの自動校正、 あるいは盎接的に䞻制埡クロックずしお䜿甚するこずが出来る。

bool changeClockOutFrequency (const uint8_t t_clockfreq)

呚波数出力端子COTの出力呚波数を、以䞋のt_clockfreqで指定する。実行は即時。成功すれば真。

t_clockfreq 出力呚波数 矩圢波Duty比 蚈時停止時
0 32.768kHz 60:40〜40:60 䞍定
1 16.384kHz 50:50 䞍定
2 8.192kHz 50:50 䞍定
3 4.096kHz 50:50 LOW固定
4 2.048kHz 50:50 LOW固定
5 1.024kHz 50:50 LOW固定
6 1Hz 50:50 LOW固定
7 停止 - LOW固定

出力呚波数は、1Hz出力を陀いお粟床校正の圱響を受けない。

⚠ **GitHub.com Fallback** ⚠