ロビ2のRTC調査
2018年10月17日
19日/24日改訂


 ロビ2 68号でRTC(リアルタイムクロック)が配布されました。
 これによりロビ2では現在の日付と時刻が分かるので日付や時間のイベントが行えるようになっています。



 この基板はロビ2の頭の後(内側)に取り付けられ他のデバイスと同様シリアルバス(I2C)でマイコンボードに接続されます。


RTC値の取得

 LED基板とマイコンから来ているシリアルケーブルをRTC基板に接続しました。



 音声認識ボードなどロビのデバイスの値はマイコンボードのメモリーの値を読んで取得しています。
 RTCも同様の方法で取得できると思われます。
 ロビ1のメモリマップ(ini\memmap.csv)を見ると0x0e00から人感センサーや音声認識ボードの値に割付けられています。
 0x0f00からはプログラムの変数として使われていので0x0e00〜0x0effの256バイトのメモリダンプを採取します。

 メモリダンプの採取にはSTARTUP.BINをリモート対応したものを利用しました。
 リモート対応はREMOTE.LOGファイルを読み書きするものでファイル名の変更と対象のアドレスをメモリーダンプを採るアドレスに変更しただけです。

 RTCは時計なので時間と共に値が変化するはずで時間を置いてメモリーダンプを採ればRTCの部分の値が変化するはずです。



 上と下では0x0e72と0x0e73の値が異なっています。
 数分おいて採ったのでおそらく分と秒だと思います。

 この近辺(0x0e70〜0x0e7f)のアドレスのメモリーダンプを数種類採取しました。



 RTCはまだ日付と時刻をセットしていないのででたらめの値を示していますが0x0e2は採取した秒に0x0e73は分に0x0e74は時間に比例した値を示しています。
 また最後に採取したものは0x0e75と0x0e76が変化しています。
 これはRTCの日付が変わったと思われます。
 おそらく0x0e7は月、0x0e8年を表すと思われます。
 なお変化した0x0e6が日付だとすると0x0e5は曜日だと思われます。
 曜日はRTCでは0〜7の数字で表されるのでメモリダンプの値もこの範囲に入っています。

 次のアドレスを読めばRTCの値が取得できます。
  0x0e72    秒
  0x0e73    分
  0x0e74    時(24時間)
  0x0e75    曜日(0:日〜6:土)
  0x0e76    日
  0x0e77    月
  0x0e78    年(西暦下2桁)


RTC値の設定

 RTCを現在時刻に設定する方法を調べてみました。
 デバイスの値はマイコンボードのメモリーを読み込む事で取得できますがメモリーに値を書き込む事で設定する事ができます。
 次の値をメモリーに書き込んでみます。



 0x0e70〜0x0e7fに書き込んでみました。
 続いて0x0e70〜0x0e7fの値を読込んでみます。


 設定前は時差が-7時間でしたが読込んだ時刻に対して+6時間に変化しています。
 0x0cを書き込んだのは0x0e7cなのでこのアドレスが時の値を設定するアドレスだと推測できます。
 また分の値が0x0bに変化しているのでアドレス0x0e7bが分の値を設定するアドレスだと思われます。
 しかし曜日を表す0x0e75と日付を表す0x0e76〜0x0e78が変化していません。



 0x0e79を0x0aに変更して0x0e70〜0x0e7fに書き込んでから0x0e70〜0x0e7fの値を読込んでみます。



 日の値が0x0dに変化しているのでアドレス0x0e7dが日の値を設定するアドレスだと思われます。
 月の値が0x0eに変化しているのでアドレス0x0e7eが月の月を設定するアドレスだと思われます。
 年の値が0x0fに変化しているのでアドレス0x0e7fが年の月を設定するアドレスだと思われます。
 日付の設定により曜日の値も変化していますが設定している値と一致するものはないので日付より計算されて設定されるのかも知れません。

 次のアドレスに書き込めばRTCの時刻が設定できました。
  0x0e79    0x09
  0x0e7a    秒
  0x0e7b    分
  0x0e7c    時(24時間)



 上記の値を0x0e79〜0x0e7fに書き込むと時刻を15:30:00に設定できます。

 次のアドレスに書き込めばRTCの日付が設定できました。
  0x0e79    0x0a
  0x0e7d    日
  0x0e7e    月
  0x0e7f    年(西暦下2桁)



 上記の値を0x0e79〜0x0e7fに書き込むと日付を18/10/17に設定できます。



 2018/10/17 15:32:50 に採取したメモリダンプです。
 曜日を表す値は03(水曜日)と自動的にセットされています。



RTCテストプログラム

 メモリーダンプでRTCの値を取得する方法は分かりにくいのでRTCで取得した値を目のLEDで表すテストプログラムを作成しました。
 RTCの秒数に応じてロビ2の目のLEDの色を変化させるようロビ2のテストプログラムを変更しました。
 Q-boのココロに入っているロビ2のテストプログラム(STARTUP.BIN)と置き換えて動かします。
 なおこのテストプログラムは従来のサーボと音声のテストは行えません。
 実際に動かした動画です。

   

 テストプログラムはRTC設定プログラムにマージしました。


RTC設定プログラム

 設定ファイルで日付と時刻を設定できるプログラムを作成しました。
 テキストファイルなのでメモ帳で簡単に編集できます。



 また設定ファイルを消すとロビ2が時間を音声再生して目のLEDの色を1分周期で変化させます。

 設定プログラムは以下のURLよりダウンロードできます。
 http://www.mcc3.mbsrv.net/robox/rtc.zip

 実際に動かした動画です。

   

 なおデアゴスティーニから提供されたプログラム以外のものを動かすとマイコンボードやサーボモーターに影響を及ぼす可能性があるのであくまでも自己責任という事でお願いします。

   目次に戻る