歩き遍路 平成19年春(J1) 記録の準備
SPIでUSB( 4) Visual C#とPIC18USBのドライバで
              MAX3420を制御

 パソコンのデバイスドライバはパソコンで動くプログラムだし、ターゲットのマイコンプログラムはマイコンで独立して動いている。デバイスドライバとターゲットプログラムは機能さえ合えばいろいろなものを組合せて使えるのではと思いこの実験をします。
 ここでは、パソコン側はPIC18系のプログラム、デバイス側はMAX3420の組合せで行います。
 Visual C#でPIC18F4550のUSBを使うデモプログラムを記載しているサイト
   PICcoder http://www.piccoder.co.uk/content/view/42/26/  を参考に
Visual C#とPIC18USBのドライバでMAX3420を制御 しました。
 作成したプログラムをここに置きます


●今回実験するソフトとハードの構成


 今回の構成に示す様に、PICcoderのデモプログラムのパソコンのソフトでMAX3420のターゲットを制御します。




●PICcoderのデモプログラム

 PICcoderのデモプログラムは、マイクロチップ社のPIC18F4550とUSBフレームワークの汎用USBクラスとUSBドライバを使ったUSBターゲットをVisual C#で制御します。

 左はVisual C#のGUIでLED3とLED4を点灯、消灯することと、2つの数値を送ってその加算結果を得て表示します。

 左の例では、LED3を消灯、LED4を点灯させます。又、3と8の数値を送って加算結果の11を得て表示しています。






●Visual C#とPIC18USBのドライバでMAX3420を制御するソフトとハード

・Visual C#のプログラム
 PICcoderのデモプログラムを出来るだけそのまま使います。
 PIC18F4550ではINトとOUTのエンドポイントは共にエンドポイント1を使っているが、MAX3420はINはエンドポイント1、OUTはエンドポイント2と固定しているのでMAX3420に合わせて変更。

・マイクロチップ社のUSBドライバ
 そのまま使用します。

・MAX3420のプログラム
 前に作成したMAX3420のプログラムをベースに変更。 前に作成したプログラムはSPIでUSB( 3)を参照。
 MAX3420のプログラムは3ファイル構成です。SPIでUSB( 3)で作成したファイル構成を次の様にしました。
 変更内容はファイル比較ソフト DFで調べさせて頂いています。

   Max3420Pic18EnumAn_BF1.C --> Max3420Pic18EnumAn_BF1.C   :主にコマンド処理関係を変更
   EnumApp_enum_data.h    --> PICcoderMax3420_enum_data.h :主にHIDクラスから汎用クラスに変更
   MAX3420E_BF1.h      --> MAX3420E_BF1.h        :変更無し

・ハードウエア
 SPIでUSB( 2)SPI接続USBデバイスMAX3420をPIC18F4520で制御 で作成したMAX3420ボードとSPIマスタボードをそのまま使用します。

●USBケーブル上の情報 エニュメレーション


 パソコンとMAX3420をUSBケーブルで結び、PIC18F4550を動作させた時のエニュメレーションの内容です。
 GET_DESCRIPTOR から始まり SET_ADDRESS でUSBアドレスが設定された後にデバイスの内容をパソコンに渡して内容が正しければSET_CONFIGURATION で動作許可されています。問題無く動作許可されているようです。



●USBケーブル上の情報 LED点灯・消灯


 上に示したGUIでLEDを点灯・消灯させた時のデータの流れを次に示します。
 GUIでLED4をチェックしてボタンを押すと次のデータが流れます。LED3を消灯、LED4を点灯させるデータを送るだけにしては大量の情報です。これはPICcoderのVisual C#のデモプログラムの作りによるもので、LED3のデータと、LED4のデータを別々に送っています。その上其々のLEDデータを送るのにUSBのオープンから始めてるからなのです。
 PICcoderのVisual C#のデモプログラムのLEDデータを送る部分を次に示します。
   private void UpdateLEDs_Click(object sender, System.EventArgs e)
    {
     usb_int.UpdateLED(3,LED1.Checked);
     System.Threading.Thread.Sleep(1000);
     usb_int.UpdateLED(4,LED2.Checked);
    }

 LED3のデータは、SOF=100 OUT ADR=1 ENP=1 DATA0 32 03 00 で送っています。
 LED4のデータは、SOF=520 OUT ADR=2 ENP=1 DATA0 32 04 01 で送っています。




●USBケーブル上の情報 加算データの送受


 上に示したGUIで3と8を設定してボタンを押すと次のデータが流れます。

 3と8の加算データは、SOF=180 OUT ADR=1 ENP=1 DATA0 EE 03 08 00 で送っています。

 加算結果は、SOF=1A1 I N ADR=1 ENP=2 DATA0 EE 0B で受けています





●困っている事 その1 デバイスマネージャの表示


 デバイスドライバをインストールは正常にインストールするのですがデバイスマネージャの表示に ? がでるのが気になります。
 まだ調べてないのですが、そのうち調べます。




●困っている事 その2 LED点灯・消灯


  LED点灯・消灯の動作で不具合があります。

 次のPICcoderのVisual C#のデモプログラムのLEDデータを送る部分で Sleep を入れたら正常に動くのですが無しでは具合が悪いです。処理時間の問題と思うのですが当面はこのままです。

   private void UpdateLEDs_Click(object sender, System.EventArgs e)
    {
     usb_int.UpdateLED(3,LED1.Checked);
     System.Threading.Thread.Sleep(1000);
     usb_int.UpdateLED(4,LED2.Checked);
    }



●困っている事 その3 VISTAでPICのドライバが動作しない


  私は、開発用パソコンとして主に WINDOWS VISTAを使っているのですが、マイクロチップ社のUSBドライバをインストールして動作させても動きません。
 デバイスマネージャでUSBドライバのインストール状況を見ても正しそうなのですが動作しないのです。
 WINDOWS XPで試したら、動作しました。原因は不明です。上の内容はWINDOWS XPでの動作結果です。


ホームへ戻る