2015-08-26 00:07 | カテゴリ:PIC応用回路
当面、このLCDディスプレイと悪戦苦闘すると思いますので、タイトルを変えました(笑)


このLCDディスプレイの開発環境ソフトに慣れてきました。
いくつかのプログラミングモードがあって、ビジュアルCの様にグラフィックのパーツを画面に並べて、イベントハンドラーを設定
して、プログラミング言語をあまり入力しなくてもソフトが組めるモードや、純粋なプログラミング言語だけで、組むモード、それ
らを組み合わせたものなどがあります。

こちらの目標は、RS232通信で、取得したデータを、グラフィカルなメータなどの表示に反映することにしましたので、まずは
、通常のプログラミングモードで、RS232通信で、温度計・湿度計・気圧計の例のデバイスからデータを読み込み、それが正し
く読み込まれているか確認する為に、画面に数字を表示するところまでをまずは検討します。

プログラミング言語のマニュアルと内蔵関数のレファレンスを参考に、色々調べていましたが、いくつか検討する必要がある問題が
わかりました。

まずは、グラフィカルメータ等の表示は、数値変数で与える必要があります。
しかし、RS232で送られてくるデータは、温度などのASCIIデータです。したがって、ASCII文字列から数値データに

変換しなければなりません。
しかも、このプログラミング言語は、16ビットワードで、変数も文字も16ビット単位です。
8ビットのASCIIデータをうまく変換しなければなりません。
つまり、8ビット単位で受信したASCIIデータをとりあえず、温度などをあらわす数字文字列に仕上げ、それを数字変数に変換
する必要があるということです。

次に、RS232の受信についてですが、ある条件で、受信データが正しく受信できないことがあるようで、このあたりの条件もチ
ェックしなければなりません。

まず、RS232で所定のデータがちゃんと受信できているか、簡単な確認プログラムを作成してチェックしました。
一文字づつASCIIデータを読み込んでそれをLCDに順次表示するものです。

実行すると、温度や気圧湿度などのデータが期待通りLCDに表示されました。
順調なスタートです。

DSC01221.jpg

次に、これに見易い様に、区切りなどを入れてこのテストプログラムを完了としようとしましたが、この区切りの文字(たとえばa)を表示するPRINT文を挿入した途端、LCD表示がデタラメニなってしまいました。

DSC01222.jpg


これがそのプログラムの問題の一部です。

while(1)
char := serin1();
// Loop until LF command.
if (char == 0x0A)
break ;
endif
print ([CHR]char);
// print ("a"); // -----------------これが問題の行です
wend
print("\n");


ここでコメントアウトしてあるPRINT文を実行するか否かで、結果が劇的におかしくなってしまいます。
PRINT文を実行しないと、ちゃんと表示されます。
PRINT文を実行すると、こうなってしまいます。

これはもうお手上げ。
私の手には負えません。
そういう時は、この4D SYSTEMSのフォーラムに質問すれば、エンジニアの人や、他のユーザが教えてくれます。
このあたりは、この会社のすばらしいところです。

screen1.jpg


質問をポストして、コーヒーを飲んでいたら、もう返事がありました。
そうそう、申し送れましたが、この会社はオーストラリアの会社で、日本と-1時間の時差なので、ありがたいです。

screen2.jpg

で、返事を見ますと、なになに、マニュアルを良く見ろ!と?

RS232の送受信のリファレンスマニュアルを見ましたが、特にそれらしいところはありません。
で、アプリケーションノートの所で、SERIALで検索したら、一つヒット。
これを見ると、
「SERIAL inputの関数は、データが入力されるまで、待たない」
と、ありました。
つまり、プログラムで、シリアルポートを見に行って、データがあれば読み出して、それを返すけれど、データがまだ受信されてい

なければ、「-1」を返す、とあります。

私のプログラムは、シリアルデータを受信するまで待って、それを持ち帰ることを前提で組んでいましたので、そこでおかしくなっ

た様です。
でも一般は、PICのC言語でも、データが受信するまで待っているのだけれど、、、、

まー、とりあえず、問題は解決しました。
ちゃんとシリアル通信で、受信できるようになりました。




管理者のみに表示する