歩き遍路 平成19年春(J1) 記録の準備

Visual C#で
   PIC18F4550 USBを使ってLCDと通信


 Visual C#を使ってPIC18F4550のUSBを経由してLCDと通信しました。

 Visual BASICは、Visual BASIC6からVisual BASIC 2008に大幅変更だし。Visual C++2008も、も一つ理解できてないし。どちらにしても Framework を一から勉強がいるので、Visual BASIC6の使い勝手で、厳密なプログラムが出来るVisual C#にチャレンジすることにしました。
 又、USBデバイスはPIC18F4550のUSBフレームワークの汎用USBクラスを使います。そしてLCDと通信して確認します。

 PIC18F4550のUSBフレームワークの汎用USBクラスは、マイクロチップ社の評価ボードのMCHPFSUSB_v12を変更させていただきました。 PIC18F4550用LCD制御関数は、後閑氏の関数を使用させていただきました。
 又、パソコン側のVisual C#のプログラムは、Jan Axelson氏が評価ボードのMCHPFSUSB_v12用に書かれたプログラムを変更させていただきました。

 
●Visual C#でPIC18F4550 USBを使ってLCDと通信の構成

 次に構成を示します。














●USBデバイスのハードウエア

 USBデバイスのハードウエアと回路図です


 USBデバイスのハードウエアは、汎用基板に作成しました。

 今回の実験で必要な物以外も組み込みましたので除いて見てください。基板の上に有るフラットパッケージのICは拡張用に付けた物で今回は関係有りません。


 PIC18F4550は、ICソケットに実装して、リセット回路、20MHzの水晶発振器、4つのLED,16文字x2行のLCD,USBコネクタとプログラム書込用のICSPコネクタと接続しています。



 下に回路図を示します。
 DC電源は、USBコネクタからと拡張コネクタからのを切替出来るようにしています。



















































●実験結果

 左の画面はパソコンの画面です。 送信文字列のデータを送信して、返信を受信文字列に表示しています。
 返信の受信文字列は、デバイス側で文字数を数えて文字列に追加して返します。
 送信文字数は16文字に制限しています。

 右画面はデバイス側です。 LCDに受信した文字を表示しています

 PIC18F4550の右下にLEDが4つ有ります。左端がLED4で、その右がLED3です。パソコン画面の上にあるLEDのチェックで制御しています。



 
































































●ソフトウエアの概要

 パソコン側の概略動作

1,パソコンの画面で送信文字列に送信する文字を入力して「送信」をクリック
2,「送信」をクリックすると、ファイルUSBdemo.csに有る Button2_Click() が呼ばれて、送信文字列の内容を読み出して次に進む。
3,次は、ファイルusb_interface.csに有る usb_int.Add() が呼ばれる。
  ここでは、送信文字列の内容を2バイトのUnicodeから1バイトのASCIIに変換と、先頭に制御コード(0xEE)を追加してSendReceivePacket()を呼び出す。SendReceivePacket()は、ドライバに制御コード+送信文字列を渡しUSB送信する。

4,USBデバイスに制御コード+送信文字列をUSB送信でき、USBデバイスから返信が有ればその内容を2バイトのUnicodeに変換してファイルusb_interface.csに有る usb_int.Add() に戻る。
5,ファイルusb_interface.csに有る usb_int.Add() では、返信を受信文字列に表示する。

プログラムは、Jan Axelson氏のホームページから取得ください。


USBデバイス側の概略動作

1,パソコンからUSB送信は、ファイルuser.cに有る ServiceRequests() 調べられる。
2,USB送信が有れば、受信データの先頭にある制御コードでスィッチしてそれぞれの処理に分岐する。
3,送信文字列の送信処理は、マイクロチップ社の評価ボードのMCHPFSUSB_v12には無いのでスィッチ分岐処理に追加しました。
4,追加機能は、制御コードで分岐、受信文字列をLCDに表示と受信文字列に文字数情報を追加して返信することです。
5,USB返信は、スィッチ分岐処理が終わった時に、Counter != 0 の処理で返信デ−タの有無が調べられるので追加機能部分では
返信データの作成と返信データ数の設定をします。


プログラムは、ここに置きます。



ホームへ戻る