マイコン・プログラミング・メモ
RX-8025の使い方(1)
ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
マイコン用のリアルタイムクロックRX-8025、その機能と使用方法について、これまで製作したものを元に紹介します。
■参考資料■
Real Time Clock Module RX-8025SA/NB アプリケーションマニュアル :セイコーエプソン
Real Time Clock Module RX-8025SA/NB カタログ :セイコーエプソン
1.概要

RX-8025は、セイコーエプソン製のリアルタイムクロックICで、I2Cバスインタフェースで容易にマイコンと接続できるものです。パッケージによってRX-8025SAとRX-8025NBがあります。
リアルタイムクロック(以降RTC)とはマイコンに接続して使う時計ICのことで、ほとんどの場合マイコンの電源がOFFの状態でも計時を続けるように、バックアップ電源を付けて使用します。
先に説明しているRTC-8564と同様に水晶振動子を内蔵し、“年,月,日,曜日,時,分,秒”カウンタと、時刻アラーム割り込み機能および定周期割り込み機能、そしてI2Cバスインタフェースを持ったRTCです。
電源電圧範囲が1.7~5.5Vと広いため、マイコンの電源が3.3Vでも5.0Vでも接続できて便利です。また、時計の精度も月差±13秒程度(周囲温度25℃)と、RTC-8564と比べても高い精度を持っています。
備考:ここでは、IICバス(Inter IC Bus)をI2Cと表記します。

2.ブロック図とピン配置

下記にRX-8025のブロック図とRX-8025NBのパッケージを示します。
RX-8025SA/NBブロック図
(エプソン RX-8025SA/NB アプリケーションマニュアルより)
RX-8025NBのピン配置
(エプソン RX-8025SA/NB カタログより)

3.秋月電子通商のモジュール

RX-8025は、SOPまたはSONという趣味の電子工作では使いにくいパッケージなので、下の写真のように8ピンDIPに変換したものとして秋月電子通商で販売されています。
このモジュールは、SONパッケージのRX-8025NBを実装したもので、I2Cバスのプルアップ抵抗や割り込み出力/INTAをモニタするLED等も載っています。それらは、同じ秋月電子通商のRTC-8564NBモジュールと同様、基板上のジャンパーをハンダでショートすると使用できるようになっています。

このモジュールをバックアップあり電源で動作させる場合は次の点に注意が必要です。
  1. 割り込み出力/INTAを使う場合に/INTAをモニタするLEDを使うと、LEDがバックアップ電源を消費してしまうので、LEDは使わない方がいいです。
  2. クロック出力端子FOUTからクロックを出力させていると、消費電流が増えるためバックアップ時間が短くなってしまいます。
  3. モジュールにあるI2Cバスのプルアップ抵抗を使うと、同じバスに接続された他のデバイスの保護ダイオードなどを通ってバックアップ電源がリークするので、バックアップ時間が短くなってしまいます。
AE-RX-8025NBの外観

秋月電子通商のRX-8025NBモジュールの回路とピン配置は下図のようになっています。
AE-RX-8025NBのピン配置

4.内部レジスタ

RX-8025の内部レジスタ一覧表を下記に示します。これは「RX-8025SA/NBアプリケーションマニュアル」から抜粋したものです、詳細を知りたい人はそちらを参照してください。
この中で便利な機能として、電源電圧低下を検知する機能があります。
コントロールレジスタ2(0xF0:Control2)のVDETビットは、電源電圧が2.1Vまたは1.3Vより下がると“1”になるビットで、RTCのバックアップが無効になったかどうか知ることができます。つまり、マイコンが起動時にVDETビットを調べることでRTCを初期化すべきか判断できます。
検知電圧を2.1Vにするか1.3Vにするかは、同じコントロールレジスタ2のVDSLビットで設定します。具体的には、VDSL="0"で2.1V(初期状態)、VDSL="1"で1.3Vになります。
他に、コントロールレジスタ2の/XSTビットで発振停止を検知することができます。/XSTビットは、はじめに/XST="1"をセットしておくと、発振停止を検知したとき/XST="0"になるビットです。これも、RTCのバックアップが無効になったかどうか知ることに利用できます。
RX-8025のレジスタ一覧表

5.設定

5-1.機能設定

コントロールレジスタ1で、次に示す機能を設定します。
ビット 名称 機能 設定値 初期値
"0" "1"
b2~b0 CT2~CT0 定周期割り込みの設定 (下図参照) 0,0,0
b3 TEST 検査用ビット (使用禁止) 0
b4 /CLEN2 FOUT端子から出力するクロックの設定 (下図参照) 0
b5 /12,24 計時動作設定 12時間制 24時間制 0
b6 DALE アラームD割り込み機能設定 使わない 使う 0
b7 WALE アラームW割り込み機能設定 使わない 使う 0

FOE端子をオープンにしている場合、FOE端子にはプルダウン抵抗が内蔵されているため、/CLEN1,/CLEN2の設定値にかかわらずFOUT端子からクロックは出力されません。

コントロールレジスタ1

5-2.動作状態

コントロールレジスタ2は、次の動作状態を示します。ただし、/CLEN1,DVSLビットは設定です。
/CLEN1,DVSLを除く各ビットは、発生を検知後に"0"クリア(/XSTは"1")して次回の発生に備える必要があります。

ビット 名称 機能 状態/設定値 初期値
"0" "1"
b0 DAFG アラームD割り込みの発生を示す なし あり 0
b1 WAFG アラームW割り込みの発生を示す なし あり 0
b2 CTFG 定周期割り込みの発生を示す なし あり 0
b3 /CLEN1 FOUT端子から出力するクロックの設定 (下図参照) 0
b4 PON パワーオンリセットの検知を示す なし あり 1
b5 /XST 発振停止の検知を示す あり なし
b6 VDET 電源電圧低下の検知を示す なし あり 0
b7 VDSL 電源電圧低下検知の基準電圧を選択 2.1V 1.3V 0

CTFGまたはDAFGが"1"のとき/INTA端子はLOW(割り込みON)です。WAFGが"1"のとき/INTB端子はLOW(割り込みON)です。
マイコンは、/INTAによる割り込みを検知後、CTFGが"1"ならCTFGを、DAFGが"1"ならDAFGを"0"クリアして、次回の割り込みに備える必要があります。また、/INTBによる割り込みを検知後、WAFGが"1"ならWAFGを"0"クリアして、次回の割り込みに備える必要があります。
ただし、定周期割り込みによる/INTAをパルスモードに設定している場合はCTFGを"0"クリアできません。

コントロールレジスタ2

5-3.定周期割り込みを使う

一定周期でマイコンに割り込みをかけたい場合、定周期割り込みを使います(割り込み出力は/INTA端子)。
設定は下図に示すように、コントロールレジスタ1のCT2,CT1,CT0ビットで行います。
パルスモードというのは、割り込み発生で/INTA端子がLOWになり、一定時間後にHIGHに戻るというモードです。一定時間とは、下図にあるように0.5秒(1Hz)または0.25秒(2Hz)です。マイコンが/INTAの立下りエッジで検知する場合に使用するモードです。
レベルモードというのは、割り込み発生で/INTA端子がLOWになったら、コントロールレジスタ2のCTFGビットに"0"を書き込むまでLOWを維持するモードです。マイコンは/INTAの立下りエッジ検知でもLOWレベル検知でも使用できるモードです。
定周期割り込みを使わない場合は、CT2,CT1,CT0ビットを全て"0"に設定します。
注意1.パルスモードに設定している場合はCTFGを"0"クリアできません。
注意2./INTA端子による割り込み出力はアラームD割り込みと兼用のため、CTFGビットに“0”を書き込んでもDAFGビットが"1"の間は/INTA端子はHIGHになりません。
注意3.パルスモードでは、定周期割り込み発生により/INTA端子がLOWになるのが時刻の更新より92μS早いので、割り込み検知ですぐに時刻を読み込むと、まだ秒が更新されていないということがあります。
コントロールレジスタ1で定周期割り込み設定

5-4.アラームW割り込みを使う

アラームW割り込みは、指定した曜日の指定した時刻(時:分)に割り込みを発生させる機能です(割り込み出力は/INTB端子)。
設定は次のとおりです。
(1)コントロールレジスタ1のWALEビットに“0”を書き込み、アラームW機能を停止します。
     このときコントロールレジスタ2のWAFGビットは"0"になります。
(2)アラームWレジスタに割り込みを発生させたい時刻(時:分)と曜日をセットします。
     時:分はBCD(BinaryCodedDecimal:2進化10進数)形式です。ただし、レジスタHourのb5は、12時間制ではAM/PMの意味です。
(3)コントロールレジスタ1のWALEビットに“1”を書き込み、アラームW機能を有効にします。

以上で準備完了です、アラームWレジスタと時計の曜日と時刻(時:分)が一致したとき、コントロールレジスタ2のWAFGビットが“1”になって割り込み(/INTB端子LOW)が発生します。
/INTB端子はレベル出力なので、割り込みを受け付けたらコントロールレジスタ2のWAFGビットに“0”を書き込んで、次の割り込みに備えます。もし、この1度きりで次回の割り込みを使用しないのであれば、コントロールレジスタ1のWALEビットに“0”を書き込んでおきます。
セットできるのは曜日と時刻(時:分)で、日付は指定できません。
アラームW機能設定レジスタ

5-5.アラームD割り込みを使う

アラームD割り込みは、指定した時刻(時:分)に割り込みを発生させる機能です(割り込み出力は/INTA端子)。
設定は次のとおりです。
(1)コントロールレジスタ1のDALEビットに“0”を書き込み、アラームD機能を停止します。
     このときコントロールレジスタ2のDAFGビットは"0"になります。
(2)アラームDレジスタに割り込みを発生させたい時刻(時:分)をセットします。
     時:分はBCD(BinaryCodedDecimal:2進化10進数)形式です。ただし、レジスタHourのb5は、12時間制ではAM/PMの意味です。
(3)コントロールレジスタ1のDALEビットに“1”を書き込み、アラームD機能を有効にします。

以上で準備完了です、アラームDレジスタと時計の時刻(時:分)が一致したとき、コントロールレジスタ2のDAFGビットが“1”になって割り込み(/INTA端子LOW)が発生します。
/INTA端子はレベル出力なので、割り込みを受け付けたらコントロールレジスタ2のDAFGビットに“0”を書き込んで、次の割り込みに備えます。もし、この1度きりで次回の割り込みを使用しないのであれば、コントロールレジスタ1のDALEビットに“0”を書き込んでおきます。
セットできるのは時刻(時:分)のみで、日付・曜日は指定できません。
注意4./INTA端子による割り込み出力は定周期割り込みと兼用のため、DAFGビットに“0”を書き込んでもCTFGビットが"1"の間は/INTA端子はHIGHになりません。
アラームD機能設定レジスタ

5-6.時計精度調整機能を使う

RX-8025は高精度と言っても、およそ5×10-6(約13秒/月)の誤差があり、周囲温度によって発振周波数の変動もあるため、時計の進み/遅れが発生します。
下図に示すレジスタDigitalOffsetによって、3.05×10-6単位(0.26秒/日,7.9秒/月に相当)で進めるまたは遅らせることができます。
調整手順(例)を以下に示します。

(1)現在の発振周波数(f[Hz])を測定。
     測定できない場合は、時計の進み/遅れから周波数を計算。
(2)ずれ量(Dev)を計算する。
     Dev = ( f - 32768) / 32768
(3)ずれ量から調整データ(Adj)を得る。
     Devが負の時:Adj = 128 + ( Dev / 3.05×10-6 )
     Devが正の時:Adj = ( Dev / 3.05×10-6 ) + 1
(4)調整データAdjを整数にしレジスタDigitalOffsetにセットする。
     レジスタDigitalOffsetのb7は必ず"0"であること。

この機能を使えば、RX-8025周囲温度を測定することでマイコンによって自動的に調整することも可能です。ただし、データシートによると、およそ25±9℃の範囲では「ずれ量」が少ないため、3.05×10-6単位の調整対象になりません。
調整値は+63(遅らせる)~-64(進める)の範囲で設定できますが、その単位は3.05ppm(±0.26秒/日,±7.9秒/月に相当)であり、月差±7.9秒に満たない微調整は困難です。
精度調整機能設定レジスタ
【参考】
実際に、例えば遅らせるために調整値として +2(-3.05ppm)を設定してみたところ、(3.05ppmとは思えない)期待よりかなり遅れてしまいました。
そこで、調整値を終日有効するのではなく一定時間のみ有効になるようにし、その他の時間は調整値を0に戻しておくようにしてやってみました
具体的には、下記の例のように1時間のうち1/10の時間、つまりXX時00分~XX時05分の間だけ調整値を設定し、その他は0に戻しておくようにしました。これで、調整量は終日行う場合の1/10になるはずです。
その結果、まだ1年未満ではありますが、なかなか良好な動作をしております。 ただ、今後の動作を見て調整量の検討は必要かと思います。
 

5-7.定周期割り込みをパルスモードで使用する場合の注意

定周期割り込みをパルスモードで使用し、同時にアラームD割り込みも使い、それをマイコンが立下りエッジで検出する構成では、ほとんどの場合アラームD割り込みを検知できません。
それは、アラームD割り込みが定周期割り込みより少し遅れて発生するためで、下図で詳細を説明します。
定周期割り込みの発生を示すCTFG="1"は時刻更新の92μS前、アラームD割り込みの発生を示すDAFG="1"は時刻更新の61μS後なので同時ではありません。
そのため、INTA割り込みを検知後すぐにDAFGを読み込むと、まだ"1"ではないためアラームDは発生していないと判断されます。
また、CTFG="1"つまり/INTA端子のLOWは継続するので、その後DAFG="1"が発生してもエッジがないためマイコンは検知できません。
なお、通信中(ストップ条件受信まで)は図にあるように時刻の更新が遅延されるため、アラームD割り込みの発生を示すDAFG="1"は、さらに遅れる可能性があります。

結局はアラームD割り込みの発生を示すDAFGのクリア処理が必要になるので、定周期割り込みとアラームD割り込みの両方を使うのであれば、定周期割り込みもレベルモードとし、マイコンもINTA割り込みをLOWレベルで検知する構成にすることをお勧めします。
パルスモードでの定周期割り込みのタイミング

RX-8025の使い方(2)」へつづく
ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
■■■ 注 意 ■■■
1.ここに掲載された内容(写真,図,表などを含む)の、全てまたは一部を無断で使用しないでください。
2.ここで紹介した手法(構造や仕組み,回路,プログラムなどを含む)を使用したことにより、問題や不利益が発生したとしても一切関知しません。
3.ここで紹介したプログラム例は、正常なコンパイルおよび正常な動作を保証するものではありません。