[Japanes][English] 1.概 要先に公開したUSBのHUBドライバーを内蔵したUSBホストモジュールを使ったデモシステムを作成したので紹介する。
デモシステムの構築には、ランニングエレクトロニクス社から 販売されている 「SBDBT32」基板を使った。 この基板には、PIC32MX695F512H が搭載されており、USBのAコネクタが付属しているので、USBのホスト システムを作成するのに便利な基板である。外部インタフェースも、プログラマーの接続とRS232Cのみの10ピンとシンプルである。 これに、USB2.0仕様のセルフパワーの4ポートHUBを接続し、UVCクラスのWebカメラ、Wheel付きのマウス、USBメモリディスクを接続する。 デモシステムを動かすには、更に、RS232Cにより、SBDBT32 と Windowsパソコンとを接続する。パソコン上では、ハイパーターミナルまたはテラタームを 115.2Kbpsで動かしておく。 デモシステムでは、マウスの動作確認やUSBメモリ内のファイルの操作、さらに、Webカメラからの画像をUSBメモリに書き込んだり出来る。 2.動かし方 2−1.デモシステムの構築 以下のプロジェクトファイルをダウンロードし、MPLAB IDE にてコンパイルした後、Pickit3 などのプログラマーを使って、出来上がったバイナリ(HEXファイル)を、 SBDBT32 に書き込む。
デモシステムの動作では、プログラム内で、malloc() 関数によるメモリ確保を随所で行っているので、MPLAB のリンカオプションの Heap Size の指定が必要だ。 今回は、右に示したような設定で動かしている。 ちなみに、Heap Size を 15,360 バイトに設定したら、カメラ画像のメモリディスクへの書き込み途中でメモリ不足となり動作不安定となった。 なお、SBDBT32のブートローダーでは書き込むことが出来ないし、一旦、このデモシステムを書き込むとブートローダーは使えなくなるので、心して対処して頂きたい。 SBDBT32への書き込み方法など、詳細については、ランニングエレクトロニクスの サポートページを参照して欲しい。
バイナリ(HEXファイル): usb_hub_demo_SBDBT32.hex
主なプログラムファイルは、次のとおりである。
2−2.デモシステムの起動とデバイスの接続
デモシステムが書き込まれたSBDBT32とパソコンを接続し、SBDBT32に+5Vの電源を供給するとデモシステムが起動する。 パソコンのターミナルに、次のようなメッセージが表示されれば起動成功である。
wait for webcamera & mouse & memory disk attached. 次に、SBDBT32のUSBポートにHUBを接続する。HUBを接続しただけでは、画面表示は何も変わらないが、続けて、HUBのポート1にマウスを接続すると、 次のようなメッセージが出力される。
address=2 ここで、マウスを一旦外して、その後、マウスをHUBのポート4に繋ぎ変えると、次のようなメッセージが出力される。
mouse attached. address=5 以下続けて、USBメモリをHUBのポート1に、UVCクラスのWebカメラをHUBのポート3に接続すると、次のようなメッセージが出力され、デモシステムが操作出来るようになる。
address=2 camera atached. address=4 *** Demonstration program Menu ********************* m:Mouse read test. d:Memory disk test. v:List camera control current value.(Wheel Button) i:List camera supported image format and image resolution.(Left Button) c:Capture camera image data and write it to memory disk.(Right Button) => 今回の紹介では、上記のような接続としたが、実際には、カメラ、マウス、メモリは、HUBのどのポートに接続してもよい。ただし、3つのデバイスが接続されないと、 デモシステムの操作は出来ないようにプログラムしている。 2−3.デモシステムの操作 以下の操作メニューに従って操作する。
m:Mouse read test. d:Memory disk test. v:List camera control current value.(Wheel Button) i:List camera supported image format and image resolution.(Left Button) c:Capture camera image data and write it to memory disk.(Right Button) => キーボードをタイプして、m を入力すると、マウスのテストを行うことが出来る。また、d を入力すると、 USBメモリ内のファイル操作を行うことができる。 2−3−1.マウスの動作テスト マウスのテストでは、マウスのボタンの状態を画面に表示する。m を入力した後、手元のマウスの ボタンを押したり離したり、左右前後にぐるぐる動かすと、画面に次のようなメッセージが表示される。何かキーをタイプすれば、操作メニューに戻ることができる。
right button on. wheel button on. move to up. move to down. move to right. move to left. move to right up. move to right down. move to left up. move to left down. wheel up. wheel down. 2−3−2.メモリディスクのファイル操作 操作メニューにて、d を入力すると、ファイル操作のためのサブメニューが、次のように表示される。
m: make the directory in current directory. r: delete the directory in current directory. c: change the current directory. l: list file in current directory. w: text write to a file. t: read text from a file. v: file binary dump. d: delete the file. f: format a memory disk. q: quit and return to main menu. => 特に説明するまでも無い内容である。動かして試して見て欲しい。なお、ファイル名は、ロングファイル名はサポートせず、8.3形式に限定している。大文字、小文字の区別もなく、ファイル名は、全て大文字となる。 必要なら、システムを再構築して欲しい。 q を入力すれば、操作メニューに戻ることが出来る。 2−3−3.カメラの操作 次に、以下のWebカメラに関する操作について説明する。
i:List camera supported image format and image resolution.(Left Button) c:Capture camera image data and write it to memory disk.(Right Button) カメラに関する操作の選択については、キーのタイプの他、マウスのボタンでもできるようになっている。 v を入力するか、マウスのWheelボタンを押すと、カメラのコントラストなどの現在値、最小値、最大値 が表示される。
Min 1 Max 10000
Min 0 Max 255
Min 0 Max 255
Min 0 Max 255 i を入力するか、マウスの左ボタンを押すと、カメラがサポートする画像フォーマットとリゾリューションの一覧が表示される。
Resolution:
Resolution:
320x176 320x240 352x288 432x240 544x288 640x360 752x416 800x448 800x600 c を入力するか、マウスの右ボタンを押すと、カメラから画像データの取得を開始し、1フレームの画像データを取得する毎に、 メモリディスクに、その画像データを書き込む。 画像データの取得ならびに書き込み中は、SBDBT32基板のLEDが点滅する。何かキーをタイプするか、マウスのボタンを押しておくと、 データ取得を停止し、操作メニューに戻る。 動作中の画面表示は、次のようになる。
Capture Start! 何かキーをタイプまたはマウスのボタンを押すと Capture Stop!
取得画像フォーマットは、MJPEG のみとしており、MJPEG フォーマットをサポートしないカメラでは、次のようなエラーメッセージを表示する。 (画像の確認) USBメモリに書き込まれた画像データは、CAPTURE.DAT という名前のファイルに格納されている。このファイルに格納されたMJPEG画像は、 ランニングエレクトロニクスのSBDBT32のサポートページで紹介されている Windows用プレイヤー「MJPEGPlayerForUVC.exe」を使ってパソコン上で確認できる。
なお、USBメモリへの画像データの書き込みは、64バイトパケットのバルク転送で行っていることと、採用したファイルシステム(microchipのFSIO.c)の 処理が遅く、1フレームの画像データの書き込みに約350msecの時間を要しており、結果として、USBメモリに書き込まれた画像は、 3fps程度の動画像となっている。 そのため、30fps で動画再生するように作られている MJPEGPlayerForUVC.exe で再生すると、およそ10倍ほどの高速で再生される。 このプレイヤーは、AVIファイルの出力も出来る優れものだ。ロジクールのWebカメラ「C525」を使って、自宅の窓から撮ったものを右に掲載しておく。 高速再生されているのが判るかと思う。 3.最後に 以上、HUBを使って、PICマイコンに複数のUSBデバイスを接続する例を紹介した。PICのUSBは、フルスピードであり、余り高速な処理を行わせるには 無理があるが、処理速度の許される範囲であれば、本例のように複数のデバイスを同時に接続して制御できる。各自で色々と面白い電子工作に挑戦されて見てはと思う。 |