マイコン・プログラミング・メモ
RX-8025の使い方(2)
ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
マイコン用のリアルタイムクロックRX-8025、その機能と使用方法について続きです。
5-8.日時の設定と読み込み

下図に示すレジスタが日付・曜日・時刻をカウントしています、これらのレジスタは自由に読み込み/書き込みができます。
時計カウンタ,カレンダカウンタは、それぞれBCD(BinaryCodedDecimal:2進化10進数)形式のデータになっています。BCD形式に存在しないデータを書き込むと正常に動作しない場合があります。ただし、時レジスタHoursのb5と、月レジスタMonthsのb7は特別の機能があります。

RX-8025は、読み込み中/書き込み中に日時が更新してデータの不整合が起きないように、通信中つまりI2C通信のスタート条件からストップ条件まで時刻の更新を一時停止します。RTC-8564のように、コントロールレジスタのSTOPビットでカウントを一時停止させておく必要はありません。
従って、正確な日時を読み込む/書き込むには、日付~曜日~時刻を1回の通信で読み込むあるいは書き込むようにします。
曜日レジスタWeekdaysは、0x00=日,0x01=月,0x02=火,0x03=水,0x04=木,0x05=金,0x06=土となっています。0x07以上の設定は禁止です。
月レジスタMonthsのC(b7)は、年レジスタYearsが0x99→0x00に更新したとき"1"になります。
日付・曜日・時刻レジスタ

6.マイコンとの接続

6-1.RX-8025モジュールの接続

下図は、秋月電子通商のRX-8025モジュールとマイコンとの接続例です。
RX-8025は、図に示す電気二重層コンデンサーで電源をバックアップしています。電源は、ショットキーダイオード(正確にはショットキーバリアダイオード)を通して供給し、同時に電気二重層コンデンサーに充電するようになっています。ショットキーダイオードには、電源VCCがOFFのときRX-8025に電気二重層コンデンサーから電源が供給されるよう切り替える役目があります。
ショットキーダイオードは、一般のスイッチングダイオードに比べ順方向電圧VFが0.5V前後と低く、スイッチング速度(ONからOFFへの切り替え)も速いため使用しています。
前にも述べましたが、RX-8025モジュール内にあるI2Cバスのプルアップ抵抗は使用しません。図のようにモジュールの外に抵抗を付けます。
なおRX-8025は、I2C通信のクロック(SCL)が最大400kHz(つまり400Kbps)の速度まで通信可能です。
I2Cによる接続回路例

6-2.I2C通信フォーマット

下図にI2Cの通信フォーマットを示します。RX-8025のアドレス(スレーブアドレス)は0x64です。
RTC-8564などと同様、下図のように複数バイト連続して書き込み/読み込みを行うと、レジスタアドレスは自動的に+1されて行きます(実際にはb7~b4が+1される)。
ただRTC-8564と違うのは、図のようにレジスタアドレスをb7~b4の4ビットで指定し、b3~b0は転送モードを指定するようになっている点です。
この転送モードを使って、読み込み時に転送するデータを短縮することができます。
通常I2C通信では、データ読み込みであっても最初に書き込み指定でレジスタアドレスを与え、次に読み込み指定でデータを読むという手順が必要です。でもこの短縮モードでは、最初の書き込み指定時にレジスタアドレスと同時に転送モードで4(短縮読み出しを意味する)を与えることで、そのまま読み込みできるようになっています。
そのほかRX-8025には、0xF0のコントロールレジスタ2から連続して読み込むことに限定した、さらに短縮した読み込み方法がありますが、ここでは省略します。

RX-8025の通信フォーマット

7.制御プログラム

下記にRX-8025の制御フロー図と、マイコンRX220を使用した場合の制御プログラム例を示します。
この中で、I2Cバスインタフェースによる通信関数を呼んでいますが、ここではI2Cバスインタフェースについては省略しています。

RX-8025の制御フロー図

RX-8025の制御プログラム例

注意:これらは例であり、必ずしも正常にコンパイルおよび正常に動作することを保証するものではありません。

この例では、RX-8025の定周期割り込み機能を使って、マイコンに対し1秒周期の割り込み(IRQ0)を発生させています。この割り込みは時刻の「秒」更新と同期しているので、この割り込み直後に時刻を読み込めば秒単位で最新の時刻を得ることができます。
また、設定した時刻に割り込みを発生するアラーム機能を実現する関数も用意しています。このアラーム機能は、RX-8025のアラームW機能を使って実現しています。
割り込み処理関数Int_IRQ0のフローにあるように、時刻の読み込みはIRQ0割り込み処理内では行っていません。1秒フラグbIntFlag_Aというのを用意しておいて、割り込み処理内ではそれをセットするだけです。アラームW割り込みも同様に、IRQ1割り込み処理内でbIntFlag_Bをセットするだけです。
使用方法は概ね次のようになります。ただし、初期化関数Init_RTCをあらかじめ1回実行しておく必要があります。

(1)関数ChkSecIntFlgを呼ぶ。
(2)関数ChkSecIntFlgの戻り値がTRUEだった場合、続いて関数GetRTCIntFlagを呼ぶ。
(3)関数GetRTCIntFlagの戻り値を判定し、定周期割り込みが発生していた場合は、続いて関数GetDTbyteまたは関数GetDtimeを読んでRX-8025から日時を得る。
    アラーム割り込みが発生した場合は、アプリケーションに従った処理(例えば音を鳴らすなど)を行う。

この(1)~(3)は常に繰り返し、最新の日時をRX-8025から取得するようにします。
このプログラム例は、簡素化するために定周期割り込みをパルスモードとし、/INTAを立下りエッジで受け付けるように作成しているので、時刻更新前に時刻を読み込んでしまう可能性はあります。

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