PIC24F電子遊戯(3)
更新日:2021年2月13日

時計・温度計・湿度計・気圧計に仕上げる
いよいよマジョカアイリスハックの実用製作第一弾の発表です。今回は過去の遺産(?)をそのまま使って完成品に仕上げました。この液晶モジュールって結構楽しいですね。まずは完成した姿を御覧下さい。
(時計・温度計・湿度計・気圧計に仕上げました)
折角の横長液晶なのでその特徴を活かした製作としました。高速スクロールなんかは求めておりません。というかこのPICマイコンではそこまでの能力は出ないですね。回路図はこんな感じです。回路図をクリックすると大きく見れます。
(回路図です)
マイコンにはPIC24FJ64GA004を使用しました。RAMが8kBありますので、4色モードでなんとかギリギリで640x48ドットの画面が収まります。その辺りはプログラムソースで確認して下さい。気圧センサーと温度センサーはI2Cタイプを使用しました。湿度センサーはアナログ出力タイプを使用しました。回路電圧は湿度センサーのみが5Vで他回路は3.3Vです。バックライトはDC9V程度が必要です。バックライトの輝度を調整出来るようにしています。
(STマイクロ製の気圧センサーLPS331AP)
(気圧センサー仕様の抜粋)
過去の遺産から摘出したモジュールなので、ちょっと古すぎました。当時は秋月で購入出来たのですが今はもう販売されていないようです。今はこれと親戚のようなモジュールが発売されていますので少しのソースの修正で使えると思います。
(アナデバ製の温度センサーADT7410)
(温度センサーの仕様抜粋)
このモジュールは今でも秋月で購入が可能です制御も簡単で使い易いと思います。
(TDK製の湿度センサーCHSシリーズ)
(湿度センサーの仕様抜粋)
この湿度センサーは価格が高いですが、今でもマルツで購入が出来ます。補正された湿度データがアナログで出力されるのでとても使い易いです。
(センサー出力とA/D値変換値)
湿度100%の時に1.0Vの出力となります。マイコンの電源は3.3VでA/Dコンバータは10bit精度を使用しましたので上図の数値変換で湿度のデータとなります。
(PICマイコンのポート割付)
LCDモジュールへの制御をできるだけ高速化するためにRCxポートは全てモジュール用のデータバスに当てました。スイッチは5個分を用意しましたが4個しか使用しませんでした。キー入力のプルアップ抵抗はマイコン内蔵を使いました。
表示用フォントは48x24ドットでデザインしています。4色まで可能ですが、今回は3色でデザインしています。全部で30個分です。
(表示フォント一覧)
今回少しカラーデータをいじりました。結論としてはいじらなくても良かったのですが、そのままにしています。
(基本の15色)
色的には65536色が発色可能ですので、皆さんの好きな色に設定してみて下さい。PIC内部のRAMには4色モードでフォントが展開されています。それだけでは色的に寂しいのでパレット方式で表示色を変えるようにしています。いろいろあってパレットの配色も変えています。バリエーション豊かな色表示が出来ました。
(パレット色の定義)
時計・温度計・湿度計・気圧計を横長の液晶に表示するため表示パターンをいくつか用意しました。
(表示モードのバリエーション)
全てを見えるようにするために表示一部が変わるモードもあります。
(表示部分の右側が温度・湿度・気圧の順に変わります)
スイッチの操作について記します。SW1がパレット変更、SW2が表示モード変更になります。
(スイッチ操作一覧)
RTC(リアルタイムクロック)はマイコン内蔵を使いますので、電源投入時には必ず日付と時計の設定を行います。外部モジュールを使ってバッテリーバックアップはしていませんので常時電源につないで使用するものとなります。私はトランスタイプの6V用ACアダプターを使用しています。定電圧化されていないタイプですので、出力は9V程度ありますのでバックライトの明るさは丁度良いと思います。動作中からも時計の設定は可能です。SW3を5秒程度長押しして下さい。SW4を長押しするとバックライトの輝度を調整出来ます。PWMのデューティを変えられるようにしています。表示の内容は次の通りです。
(時計設定とバックライト設定)
時計設定に入ると設定可能な数値の右側に矢印が点滅しますので、SW1(UP)、SW2(DOWN)で数値を設定してSW3(SET)で次の項目に移ります。分の設定後0秒スタートとなります。設定時のエラー判定はしていません。あらぬ数値も入力出来るようなので、常識の範囲で入力を行って下さい。時計用に32.768kHzの水晶発振子を接続していますが、水晶の特性からコンデンサの容量を調整する必要がありそうです。この回路図にあるように22pFのコンデンサでは時計が進み過ぎます。この辺りは各々で調整をお願いいたします。
バックライトの輝度調整は10%から100%の範囲で10%毎に設定が可能です。見やすい輝度に調整して下さい。私は100%のままにしています。
(湿度センサーはケースから一部を出して取り付けています)
表示パターンのバリエーションです。
(日付・時計・温度・湿度)
(日付・時計・気圧)
(日付・時計秒付き・温度)
(時計・温度・湿度・気圧)
パレット色のバリエーションです。
(パレット色による変化)
この製作のMPLAB X IDE用のプロジェクトファイルを公開いたします。ここからダウンロードして下さい。コード生成はMCCを使用しました。また合わせて「Peripheral Library」も組み込んでいます。今回の製作でMCCの恩恵を受けた部分と受けない部分がありました。コード生成のMCCは日々進化しているようでWEBでも全く調べられない内容があるようです。私の使いこなしが上手くないせいかもしれません。今回はI2CとADコンバータが上手く使えませんでした。初期化の部分に関してはかなりの恩恵を受けたのでプログラムの開発スピードは向上したように思います。うまく使えこなせなかった部分はWEBを参考にしたり過去の製作のものをそのまま使っています。RTCとPWM(設定には苦労しましたが)はなんとか使いこなせたと思っています。
プロジェクトファイルのダウンロードはこちらへ
今回使ったPIC24FJ64GA004でどれだけ早く画面描画が出来るかを突き詰めました。マイコンのRAM容量の関係から4ドット(8バイト)分を7680回行って1画面の表示を行っています。4ドット分の周期は次のようになりました。
(4ドットの表示周期測定)
約8usecですので1画面分で約62msecになります。このPICではこれが限界と思います。スクロールもしないのでこれはこれで良しとしておきます。上の表示はクリックすると大きく見れます。
今回はかなりサクッと仕上げることが出来ました。ちなみに透明ケースは100均で購入したものです。今回の液晶モジュールの大きさにピッタリでした。まだ液晶がいくつかあるので次の製作にネタを練ることにします。今後も楽しいPIC24Fの世界をマジョカアイリスハックで楽しみましょう。

「PIC24F電子遊戯の表紙」へ戻る