はじめに
前回は、温湿度センサーを使った3色スクロール温湿度計を紹介しました。今回は、リアルタイムクロックモジュールを使ったスクロール時計を紹介します。
方法
前回同様、表示フォーマット Array にmemmove関数を使って、時と分のバッファの内容をコピー/上書きしています(下図)。リアルタイムクロックモジュールが時刻をカウントアップする毎に、内蔵EEPROMから数字キャラクター(0~9)が読み出され、Hour10(時10の位), Hour01(時1の位), Minu10(分10の位), Minu01(分1の位)の各バッファにコピーされます。memmoveが指定したArrayのアドレスに時と分のバッファの内容がコピーされ、バッファが更新されると表示内容も更新されます。実験では 時(赤), コロン(橙), 分(緑)で表示しています。
使用したリアルタイムクロックモジュールは、過去記事の「7セグメントLEDデジタル時計+温湿度計」と同じRTC-8564NBです。今回も、モジュールからのCLKOUT信号(1Hz)をPICマイコンの外部割り込み(INT)ピンに入力して時刻に換算します。
これだけで時刻をカウントしますが、時計は時刻合わせが必要です。時刻合わせも過去記事同様、2色LED&スイッチ付ロータリーエンコーダDIP化を使いました。このロータリーエンコーダの軸は、回す以外にプッシュスイッチも兼ねており、また、2色LEDで光らせることもできます。
下表は、時刻合わせのシーケンスです。
時刻設定スイッチ(SW1)は、時計モード/時刻設定モードの切り替えです。ロータリーエンコーダ軸のスイッチ(SW2)は、時刻設定モードでの時分設定Stateの切り替えです。また、軸を 時刻設定モード(橙), 時設定(赤), 分設定(緑)に発光させることでフェーズが分かるようにしました。
内容
下は、回路図とブレッドボードでの実験の様子です。実験(その3)の回路に、RTC-8564NBとロータリーエンコーダを追加しています。
以下は、本例プログラムの抜粋です。
H10,H01,M10,M01はそれぞれ、時(10の位), 時(1の位), 分(10の位), 分(1の位)の設定用変数で、各変数にロータリーエンコーダのカウントを取り込み、TimeSet関数で内蔵EEPROMの数字キャラクターを読み出し、DispTime関数で表示します。
結果
本例の動画はこちら。時刻18:47設定の様子です。
まとめ
2色ドットマトリックスLEDの使い方について、5回にわたりダイナミック点灯およびシフトレジスタを使った3色スクロール表示を応用例も交え紹介してきました。配線や制御が多少面倒ですが、液晶表示器や7セグメントLED以上の視認性や表示キャラクターの自由度があります。今回で一連の実験は終了ですが、これらがマトリックスLEDへの興味につながれば幸いです。
– 以上 –