ノキア5110グラフィックLCDで
気圧、温度、湿度の3つの表示をさせるには? その2


実は「その1」でも触れましたが、3種混合表示ルーチンにバグが有る事が判りました。ところが、それを修正するには、プログラムの今までの累積している無駄なコモン変数の宣言(特に浮動小数点や、配列等)や、無駄な関数を良く吟味しながら省いて、ソースプログラムのダイエットをしないと、プログラムメモリーにほとんど余裕が無くなってしまいました。

また、ようやく気がついたのですが、元々はPIC 12F系用の気圧センサーとのインターフェース用ソースプログラムだったので、RS232Cについてもピットのパタパタ通信で行っておりました。

私としては、ビットのパタパタ通信は、さほどプログラムサイズが増えずに不特定のビットに割り付ける事ができるので愛着があるのですが、RS232Cについては、16系以上のPICには専用のUSART内蔵機能が独立して設けられているので、せっかく持っているこのUSART機能を使わない手は有りません。

後で判った事ですが、内蔵のUSART機能を使うと、データをセットして通信を開始すれば、PIC自信はこの通信制御の手間をUSART機能にまかせて、他の仕事にうつれるのでした。事実この後で紹介する、ハードウエアと、ソフトウエアで運用すると、RS232Cの送信完了を待つ事無く、すぐに、別のポートで湿度センサーユニットとのビットパタパタ通信を始めてくれます。つまり、並列処理ができてしまうのです。

16F系、18F系で内蔵機能を使う時の最大の難点は、その使用できるポートが固定であるという事です。したがって、今回のUSARTを使用できる様にするために、ハードウエアと、ソフトウエアの使用ポートの変更をしなくてはなりませんでした。



16F886では、USARTは、RC6:TX、RC7:RX を両方確保しなくてはなりません。TXのだけを使うという様な事が、残念ながらできませんでした。従って、3カ所のハードウエアの変更となりました。

今まで、RC6で行っていた湿度センサーユニットとの通信用「SCK」を「RB2」へ変更し、RC7で行っていた湿度センサーユニットの「DATA」をRB3へ10kのプルアップ抵抗と供に移動しました。

さらに、今まで、RA5で行っていたRS232CへのTXDを止めてUSART指定のRC6へ移動しました。

そして、ソフトウエアも上記ハードウエアに合わせて、変更、修正をいたしました。

またしてもパレットソフトさんから提供していただいたUSART部分の参考例ソースを使って、RS232C部分のビットパタパタ通信ソース部分と入れ替えました。

さらに、プログラムソースの自分の変更した部分を見直して、不要な部分を削除しました。また、各データー毎にバラバラに存在していたグラフィックプロット関数部分を見直して、ひとつにまとめた3種混合プロット関数を新たに作り、重なり検出のバグを修正いたしました。

混合プロットのバグは何とかとれた様ですが、3種データのプロットが近くなると、どれがどれだか判らなくなって見難いという根本的な欠点があります。

これを、3種独立分離表示方式や、単独表示を押しボタン等で切換えて表示すれば良いのですが、やはり、このままではプログラムメモリーが不足していてどうにもなりません。

縦軸方向のスケーリングや表示領域のシフトも行っていないので、気圧については表示領域の上限と、下限があります。

サンプルのソースリストでは、nokiaGlcdlib.h の宣言文で、気圧表示の上限と下限をそれぞれ
#define LCD_MAX_PRES 1025

#define LCD_MIN_PRES 977
として、ちょうど1hPs/dotにしてあります。

ここの値を調整すればオートレンジに対応できるのですが、問題はレンジを変更するためには、そこまでの表示しているデータの記憶を取る必要があり、また、レンジ変更時に再描画する必要が有るという事です。


やはり、それだけの事を詰め込める余裕がメモリーに残っていません。

また、16F886で3.3Vの8MHzで使用する場合には、うまくいくのですが、ノキアLCDユニットや、湿度センサーとのインターフェース部分には、タイマー等を使った時間調整をしていないので、Fosc(内部のシステムクロック周波数)の異なる16Fや18LFに移植すると、ノキアLCDユニットや、湿度センサーだけが位相も含めて通信のタイミングが合わなくなる様で、残念ながらノキアLCDユニットに表示が全く出ません。

でも、面白い事に、パレットソフトさんの設計した部分については、内蔵タイマー等を使っているので、ちゃんと専用のパラメータ値をFoscに併せて変更するれば、その部分は問題なく動き出します。

実際に、18LF2550の16MHzに移植しようと試みているのですが、気圧センサーから得られた気圧値と、気温を、RS232Cで通信してパソコンに表示されるのに、ノキアLCDは無反応の真っ白で、湿度も0.1%と最低の値でパソコンに表示されてしまいます。

自分のプログラミング能力の無さを棚に上げていますが、でも見事に、パレットソフトさんから移植した部分については、全て稼働していて、他から移植した部分は、全く動いていないという何とも情けない結果になってしまいました。

面白いと云うか、手を抜くと固有のハードウエアでしか動かない様なソフトウエアになってしまう事が、顕著に現れてしまいます。

とりあえず、ここまでの部分に対応した最新のプロジェクトファイル一式を下記にリンクしておきます。

16886prrh07.zip

※ご注意 本プロジェクトは HI-TECH C for the PIC10/12/16 v9.81 以前のバージョンにて作成されています。 HI-TECH C for the PIC10/12/16 v9.81 以降のバージョンでそのままコンパイルすると、コンパイルエラーが発生いたします。これを解消するには、下記をご参照下さい。

HI-TECH C for the PIC10/12/16 v9.81リリースとその注意点!
http://ohta.no-ip.com/Pages/templan/index60.html
(Mar. the 1st 2011)


プログラムサイズが7415バイトです。8192-7415は、あと残り、あ、777バイトですね!偶然!!

このソースプログラムは、PICC Pro Lite により書かれています。
気圧センサー部分を含むプログラムの根幹は全て、パレットソフトさんのプログラムを利用しています。

ノキア5110表示用のライブラリー部分は、
CQ出版の「トランジスタ技術2006年3月号」に掲載された、
R8C/15付録マイコン基板活用企画 
第9回 小型グラフィック液晶表示器で作る簡易温度計 山本 秀樹氏 のR8C/15用ソフトウエアをPICC Pro Lite用に移植して使用しています。

湿度センサーSHT-11とのインターフェース部分は、海外のサイトのプログラムを利用しています。
作者と連絡する方法が解りません。リンクを表記しておきます。

http://www.edaboard.com/ftopic398316.html
上記ページの一番下のソースを利用しています。

今、18LF2550への移植を試みていますが、それがうまくいけば、24FJ64GA002へも移植しようと思っています。

どちらも手元にあるし、同一ピン数なので・・でも、本当にいつになる事やら!
(Aug. the 4th 2010)

注意事項
General disclaimer
トッ プページへ

なお、当ホームページで公開しているデーター(写真、音声)等を個人の枠を超えて複製・転用する事はご遠慮下さいませ。
ご意見/苦情/ご感想はこちらまで