(20)トラ技mbedでリアルタイム・クロック(RX8025ライブラリ)
Page last updated
03 Nov 2014, by
yasuyuki onodera.
0
replies
RX8025
(20)RX8025(RX8025 library)
概要
- RX8025用の制御ライブラリです。
- 2つの付録基板を活用します。
- トランジスタ技術2014年2月号の付録基板(実験基板)
- トランジスタ技術2014年3月号の付録基板(トラ技mbed)
- 実験基板は表示機として使用します。LPC810は外しておきます。
RX8025モジュール
- RX8025は表面実装なのでDIPモジュールを利用しました。
- 端子のmbed風表記です。
仕様(spec.)
- RX8025はリアルタイム・クロックです。
- 32.786KHxの発振子を内蔵しています。
- 低消費電流のためボタン電池(3V)でバックアップできます。
- 時刻を設定しておけば、自動的に時刻を刻みます。
- I2Cアドレス(7ビット)は0x32(プログラム上の表記は0x64)
- 精度を追い込むためのオフセット調整ができます。
- デフォルトは12時間表示です。24時間表示に切り替えることもできます。
- 2つのアラーム設定ができます。
- ウィークリー・アラームは週単位で発生します。WAFGビット=1で有効になります。INTBピン=Lを出力し、WALビット=1になります。
- ディリー・アラームは毎日発生します。DAFGビット=1で有効になります。INTAピン=Lを出力し、DALEビット=1になります。
RX8025メンバー関数
関数名 | 用途 | 引数 | 戻り値 |
RX8025 rx8025(P0_5, P0_4) | インスタンス生成 | SDA, SCL | - |
RX8025 rx8025(i2c) | インスタンス生成 | i2c | - |
rx8025.setTIME(t) | データ | Time t | void |
rx8025.setALARMw(a) | データ | Alarmw a | void |
rx8025.setALARMd(a) | データ | Alarmd a | void |
rx8025.setCONTROL(c) | データ | Control c | void |
rx8025.getTIME() | データ | void | Time t |
rx8025.getALARMw() | データ | void | Alarmw a |
rx8025.getALARMd() | データ | void | Alarmd a |
rx8025.getCONTROL() | データ | void | Control c |
- インスタンス生成はどちらかの方法で行います。i2cを継承することもできます。
- Time構造体、Alarmw構造体、Alarmd構造体、Control構造体を利用して、設定と取得を行います。
- 時刻データはBCDコードです。10進数ではなく16進数です。たとえば11時は0x11です。
- BCD:Binary coded decimal
Time構造体
変数 | 型 |
seconds | unsigned char |
minutes | unsigned char |
hours | unsigned char |
weekdays | unsigned char |
days | unsigned char |
months | unsigned char |
years | unsigned char |
Alarmw構造体
変数 | 型 |
minute | unsigned char |
hour | unsigned char |
weekday | unsigned char |
Alarmd構造体
変数 | 型 |
minute | unsigned char |
hour | unsigned char |
Control構造体
変数 | 型 |
control1 | unsigned char |
control2 | unsigned char |
offset | unsigned char |
BCDコード
- 時の内容です。24時間と12時間で内容が異なります。
- 12時間表示のとき、ビット5がPMを示します。
24時間制 | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x10 | 0x11 |
24時間制 | 0x12 | 0x13 | 0x14 | 0x15 | 0x16 | 0x17 | 0x18 | 0x19 | 0x20 | 0x21 | 0x22 | 0x23 |
12時間制(AM) | 0x12 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x10 | 0x11 |
12時間制(PM) | 0x32 | 0x21 | 0x22 | 0x23 | 0x24 | 0x25 | 0x26 | 0x27 | 0x28 | 0x29 | 0x30 | 0x31 |
Weekdaysコード
- 曜日と数値の関係です。
- 日付から曜日を自動計算してくれません。
- ツェラーの公式を利用します。
曜日 | 日 | 月 | 火 | 水 | 木 | 金 | 土 |
Weekdays | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 |
AlarmwのWeekdayコード
- ウェークリィ・アラームの曜日は時刻の曜日と形式が異なります。
- 任意の曜日を同時設定できるようにするためです。
- ビットが曜日を意味します。
曜日 | 日 | 月 | 火 | 水 | 木 | 金 | 土 |
Weekday | 0ビット | 1ビット | 2ビット | 3ビット | 4ビット | 5ビット | 6ビット |
時計精度の調整
- 内蔵発振子は気温の影響をうけ、進んだり遅れたりします。
- 気温が低いと進み、気温が高いと遅れます。
- そこで±3.05E-6単位で調整します。
- offset値を設定することで調節します。
- 進むとき
期間 | 24時間=24x60x60=86400秒 |
進み | 1秒 |
ズレ量 | 1秒/86400秒 |
調整量 | ズレ量/3.05E-6=3.79 |
設定データ | 3.79=0x04 |
期間 | 24時間=24x60x60=86400秒 |
遅れ | 1秒 |
ズレ量 | 1秒/86400秒 |
調整量 | ズレ量/3.05E-6=3.79 |
設定データ | 128-3.79=124=0x7C |
制御レジスタ1
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
control1 | WALE | DALE | /12,24 | /CLEN2 | TEST | CT2 | CT1 | CT0 |
- WALE=1のときウィークリー・アラーム有効
- DALE=1のときディリー・アラーム有効
- /12,24=1のとき24時間制
- /CLEN2,FO端子の制御
- TEST=0
- CT2:CT1:CT0 INTA端子の制御
制御レジスタ2
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
control2 | VDSL | VDET | /XST | PON | /CLEN1 | CTFG | WAFG | DAFG |
- VDSL=1のとき2.1V,VDSL=0のとき1.3V
- VDET=1のとき電圧低下検出
- /XST=0のとき発振停止検出
- PON=1のときリセット検出
- /CLEN1,FO端子の制御
- CTFG,INTAの状態
- WAFG=1のときアラーム検出
- DAFG=1のときアラーム検出
mbedソフトウェア
- サンプルプログラムはmbed_RX8025です。
- mbed_RX8025_LPC11U35_501.binを書き込みます。
トラ技mbedのプログラム書き込み方法
- ISPボタンを押しながらRESETをON/OFFします。
- PCにUSBストレージとして認識されます。
- firmware.binを削除します。
- バイナリファイルをコピーします。
- RESETを押します。
接続
- RX8025のFOE(1)は未接続(内部でプルダウン)。
- RX8025のFO(2)は未接続(クロック出力)。
- RX8025のA(3)は未接続(アラーム出力)。
- RX8025のGND(4)をmbedのGNDに接続します。
- RX8025のSDA(5)をmbedのSDAに接続します。
- RX8025のSCL(6)をmbedのSCLに接続します。
- RX8025のB(7)は未接続(アラーム出力)。
- RX8025のVDD(8)をmbedの3.3Vに接続します。
著作権と免責事項
- 個人利用に限定され、著作権者の許可なく商用利用できません。
- 直接間接に関わらず、使用によって生じたいかなる損害も筆者は責任を負いません。
Please log in to post comments.