気圧、温度、湿度の3つの表示を分離表示させるには?その1


さて、いよいよ最後の課題に挑戦です。
それは、分離表示をさせる事です。

混合表示はY軸方向に広い幅を持たせる事が出来るので、気圧の様な他と比べてあまり急激に変化の少ない物理現象は、分解能を高くして細かな変化を表示できるので有利です。

その反面、気圧や、気温、湿度が殆ど中央に表示されると、ごちゃごちゃになり、何が何やらさっぱり分からなくなってしまいます。

そこで、それぞれを分離表示してみやすくしてやろうというのですが、それぞれのグラフ空間を独立させるのですから、今度はY軸方向の表示領域が均等に1/3になってしまうのです。

でも、今までそれぞれのグラフの変化を観ていると、特別な理由が無い限り殆ど一定の領域の範囲内にとどまっていて、急に飛び飛びの値を取る事など物理現象的にもあり得ません。

この事をふまえて、ある程度の分解能を持たせたままで、プロット表示を3区画に分け、それぞれの上限値、下限値を超えてしまう様な場合には、支障がない限り分解能をそのままにして、表示範囲だけをシフトしてやれば上手く表示できるのでないかと思うのです。


そのかわり、今までの過去の48回分(正確には、新しい表示1回分と、過去の2回分の3回分を引いた45回分)の履歴を記憶して、新しいシフト範囲内でグラフを再表示しておかないと、シフトする前と、後でグラフに不自然なずれを生じてしまいます。

配列変数を使って、新しい表示をする為に過去のデータを記憶しておく必要があるのです。

ここで、16F886と18LF2550で決定的な違いが有ります。
それは、Cコンパイラーでのデータメモリーの消費しかたなのです。

18FシリーズのPICには、新しい命令セットが追加され、今まで固定の変数しか使用する事が出来なかったプログラムメモリー領域を、新たにデーターメモリー用に読み書きできる様になったのです。

Cコンパイラーは、18F系では、配列宣言等の比較的連続した記憶領域が必要な場合には、積極的にこの追加された命令を使って、プログラムメモリー領域を使用する様になっているのです。

せっかく共通化してきたプログラミングも、ここからは全て16F886ベースでプログラム開発をしないといけません。

うっかり、18LF2550ベースでプログラムを書いてコンパイルが通っても、16F886の少ないデーターメモリー領域ではコンパイルエラーとなってしまうからです。


実験中の16F886による分離表示です。

気圧は、16dot幅、
最大1022hPa、
最小977hPa
3hPs/dotで、シフト機能無し、固定スケーリング表示。

気温も、16dot幅、
最大50℃、
最小0℃、
3.1℃/dotで、同様にシフト機能無し、固定スケーリング表示。

相対湿度も、16dot幅、
最大100%、
最小0%、
6.3%/dotで、やっぱりシフト機能無し、固定スケーリング表示です。

気温や湿度表示は、
おおよそこのままの分解能で、
シフト機能やスケーリングの必要は無さそうですが、
気圧は・・

気圧表示の為の「ひと工夫」が必要なのです。
それぞれのグラフィック空間が縦方向に16dot分しかないので、当然せまい範囲で測定しうる全範囲を当ててしまえば、分解能が下がって変化がよく見えなくなってしまいます。

表示したい範囲に対する、数値変化の割合の問題です。

おそらく、
気圧表示は、
自動シフト表示機能と、
場合によっては、
自動スケーリング表示機能が
必要なのだろうと思っているのですが・・

縦軸も単純で、
16dot毎の目盛りしか打っていませんし、
横軸も書いてません。

ここまでで、
16F886で6115ステップで、
データメモリー325バイト消費中、
気圧履歴記憶用に、符号無し16ビットデータメモリー 48個分、
温度履歴記憶用に、符号無し8ビットデータメモリー 48個分、
湿度履歴記憶用に、符号無し16ビットデータメモリー 48個分、
が、16F886上で確保できました。

本当は気温履歴メモリー用にも16ビット欲しいのですが、
16F886ではこれ以上配列を宣言できません。
意外に、プログラムメモリーが余裕あります。

気圧だけならば、
自動シフト表示や自動スケーリングを
組込めそうです。

逆に、気温や湿度の履歴メモリーは必要無さそうですが・・(Aug. 23th 2010)


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

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