● 実験テーマ60

「PIC32MXとRTC8564による、時計設定及び、バックアップ付時計の実験」
(PIC内蔵のRTCCは、BUPには向いてないので、外付I2C_RTCで、BUP付の時計実験をしてみました)

  ・以下、この実験の顛末記です。

■ 2014.10.24
  <この実験の目的について>
   @ PIC32MXには、内蔵のRTCCがあるが、バックアップをするような構成にはなっていない。
      よって、電源を切ると、毎回ONの度に、時計設定をしなければならない。
      そのため、純粋な時計或いは、タイムスタンプのような用途には向いてない。
      前回の実験では、簡易的に内蔵のRTCCを使ったが、今後予定している
      本番の、PIC32MX_モノクロ単CHオシロ(イメージのSDへの保存機能付)では使いにくい。

      よって、外付けの、I2C接続による、RTC8564(使用実績あり)を使い、CR2032の
      ボタン電池によってバックアップし、電源を落としても、時を刻み続けるようにする。

  <作業予定>
   @ 水魚堂にて回路図作成
   A ハードは、PIC32MXトレーニング基板を使用。
      但し、簡単な改造をしないといけない。
      オリジナルでは、I2C1ポートには、I2C_EEPROMが接続されているので、ここのポートを
      切替えて、I2C_RTCの実験もできるように改造が必要である。


■ 2014.10.26
  ・RTC8564については、このICが搭載されている、秋月のRTCモジュール:AE8564NBを使った
   治具を、だいぶ前(dsPIC30Fで作ったロガーの時)に作ったのがあるので、それを使うことにする。

   dsPIC30Fで作ったロガー(実験テーマ2を参照してください)の時、時計合わせのソフトを
   書いているので、仕様はその時のものに準ずることにした。
   ただ、液晶が当時は、16キャラクタx2行のもだったのに対し、今回は、128x64ドットの液晶
   なので、出力フォーマットを考えないといけない。
   また、だいぶ前に書いたソフトなので、無駄な部分もある思うので、そこいら辺は、見直して
   いきたいと考えている。
   たかが、時計ソフトであるが、時計設定まで書くとなるとかなり面倒なものになる。
   それは、いろいろな数値の形態(bin, bcd, ascii等)変換を使うからである。
   まあ今回は、自作の古い資料があるので、少しはましであるが・・・


■ 2014.10.28
  ・時計設定仕様の概要をまとめてみた。

  ・ソフトを考え始める。
   最初は、時計設定抜きで記述し、時計部分のみのテストプロにしてみた。
   ソース名:「PIC32MX_RTC8564_TEST_1.c」


■ 2014.10.29
  ・トレーニング基板の改造を終え、昨日書き上げたソフトの、HEXを書込んで、動作確認するも
   まずは駄目!!
   液晶にタイトルメッセージ以外、何も表示せず。
   これは、RTC8564設定の前に、RTC8564内部水晶振動子が動くまでの、約1秒程度の、
   ウエイトが必要なのに入れてないのが原因だった。

   これを追加して時計は動き出したが、液晶の表示がどうもおかしい。
   何というか、秒と分の表示はよいのだが、20秒の時と、40秒の時、月の数字と、時の表示
   が動いてしまう?

   これは前やった時のことを思い出したら、直ぐに判った。
   RTC8564では、内部レジスタ読出し時、未定義(不定)ビット及び、他の機能ビットの
   マスク処理が必要だった。これが抜けていた。
   この修正で、TEST_1は、OKになった。



■ 2014.10.30
  ・面倒な、時計合わせのソフト(
PIC32MX_RTC8564_TEST_2.c)を考えないといけない。
   まあ、操作仕様は、既に決めてあるので、それに合わせて書けばよいだけだが・・・

   必要なプロセジャーを決め、ソフトを書き始めた。

   I2C関連では、
   WriteRTC(・・・)と、
   ReadRTC(・・・)
   があるが、これらは、既に書き上げ、TEST_1で動作確認済である。

   本日、書かないといけないのは、
   操作関連では、
   まず、SWの外部割込み処理、INT4, INT3, INT2
   それと、時計合わせのプロセジャー:time_adjust_mode()
   である。

   今回、設定値・表示値等にするための、変数の形態(bin,  bcd. ascii, pacdec)変換処理は
   プロセジャーにせず、直接、関数の引数のとこに変換式を記述する方法を取った。

   ソフトは、10/30中に全て書き上げ、動作確認も、遅くまでかかったが、その日の内に清んだ。
   そんな致命的なミスは無く、動きでは、最初カーソルの移動が思うようになっていなかったが、
   それは単に、ロケーションミスによるものだった。
   思っているより、順調に動いた。


■ 2014.10.31
  ・これで、タイムアジャストも、バックアップも、うまく行くことが確認できたので、今日は
   いくつかの画面サンプル取りを行った。
   実験風景と、画面サンプルのついては、このページトップの写真を参照してください。


<最終回路図>
 ・こちらから、どうぞ→ 「PIC32MX_RTC8564_実験回路」
                   (前回の実験回路を残したまま、RTC8564部分を追加した形になっているので、今回の実験で未使用なブロックの回路も含まれています。)

<最終ソース>
 ・こちらから、どうぞ→  PIC32MX_RTC8564_TEST_1.c (時計設定、バックアップ無しのテストプログラムです。)
                                        PIC32MX_RTC8564_TEST_2.c (時計設定、バックアップ有りのテストプログラムです。)


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ61へ →