柏野氏の汎用USBドライバを使ったUSBオシロスコープ


【ソフトウェア全体構成】

ここでは前項と同じオシロスコープを汎用USBクラスを使って作ります。
さらにパソコン側には、柏野 政弘氏製作の汎用USBドライバを使い
Visual Basic 6.0で作りました。
柏野氏の汎用USBドライバは、PICのUSBフレームワークの汎用クラスとは
そのまま直接接続することができますので、以外と簡単です。
これでVisual Basic 6.0 やVisual C++ 6.0などの既存の開発環境でも
容易にUSB2.0対応PICの開発を行うことができます。

このUSBオシロスコープのプログラム全体構成は下図のようになっています。





【PICメイン部詳細】

PIC側のプログラムは、前項のCDCクラスベースのものと全く同じ流れで、
Read Writeの関数が汎用クラスのものを使う部分だけが異なるだけです。
Generic ClassのUSBフレームワークをベースにしてmain.cとio_cfg.hを
書き替えるだけでできます。プログラム全体の流れは下図のようになっています。
USBのIDを変更しましたので、柏野氏製 汎用USBドライバのINFファイルの修正が
必要になります。
 メインの流れでは、まず最初にI/Oポート、タイマ1、CCP1、A/Dコンバータ、
USBの初期化を実行したあと、メインループに入ります。
 メインループでは、USBのイベントポーリングをしたあと受信データの有無を
チェックし、受信データがある場合にはそのコマンド内容に従って各処理を行います。
この受信用の関数は、汎用クラスで提供されるものを使います。
 CCP1の割り込みは一定間隔で発生しますが、その周期はパソコン側からコマンドの
パラメータとして送られてきますので、可変周期となっています。
この周期ごとの割り込みで指定されたチャネルのA/D変換を行い、8ビットのデータ
としてメモリに保存します。保存先のメモリは、通常のRAMエリアが512バイトと、
USB用RAMエリア448バイトの合計960バイトとなっています。
ここに計測したデータを順番に格納します。保存したデータはパソコンからの
送信要求で64バイトごとのパケットとして送信します。この送信の時に使う関数も
汎用クラスで提供されるものを使います。







【PIC側ソフトウェアデータ】

オシロスコープのPIC側ソフトウェアはMPLAB C18用のC言語プログラムとなっています。
下記をダウンロードして、各Cのソースをプロジェクトに登録してお使い下さい。

★★ USBオシロスコープのプログラム


【柏野氏作 汎用USBドライバ】

この柏野 政弘さんが作成した汎用USBドライバは有名なので、参考になる資料が
たくさんあります。また柏野さん自身のホームページもあります。「カジマルの森
ここから汎用USBドライバがダウンロードできます。
汎用USBドライバのインストールと使い方は下記ページを参照して下さい。
USBのIDを追加する必要がありますので、INFファイルの修正が必要です。

汎用USBドライバの使い方

この汎用USBドライバを使うと、パイプを指定してオープンすることができますので
パイプの拡張やインターフェースを拡張したときのテスト用に便利に使うことが
できます。


【PC側ソフトウェア概要】

  USBオシロスコープのパソコン側のプログラムを作ります。機能は前項と全く
同じですが、Visual Basic 6.0と汎用USBドライバから提供されるDLL関数を使って
作ります。
 基本的な機能は下図の基本フォームから実行されます。





 まずUSB接続は、正常に接続ができたら波形を表示するためのフォームを開きます。
手動計測、自動計測、フリーランはいずれも同じような処理で、コマンドの値が異なるのと、
繰り返しのためのタイマ2の起動の有無がことなるだけです。
このコマンドの時に、チャネル指定、同期レベル、サンプル周期の設定値を読み取って
パラメータとして送信しています。
 送信完了後、タイマ1を500msec周期で起動してPICデバイス側のデータ収集完了を
問い合わせます。
 収集が完了していれば64バイトずつデータ送信を要求して受信し、配列に格納します。
全部で15回受信すれば960バイトのすべてのデータの受信が完了します。
このときのRead、Writeの関数が、汎用USBドライバDLL提供されるものを使うことになります。
手動計測以外の場合には、タイマ1と同時にタイマ2も起動して周期的に計測要求を出す
ようにします。

実際に測定した波形を表示した例が下図となります。500Hzの正弦波を測定したものです。
2kHz程度までは結構きれいな正弦波が再現できます。





【PC側ソフトウェア概要】

プログラムはVB6.0で作成しています。まずUSB接続のボタンの処理部分ですが、
下記リストのようになります。
このように、USB接続そのものを実行したあとに、PIC側で用意したエンドポイントを
指定してパイプのオープンを行いますので、PIC側でコンフィギュレーションを変更した
ときにもテストとして使うことができます。





実際のUSBの送受信処理の仕方は、下記リスト例のように、ReadとWriteの関数を
呼ぶだけですので、簡単にできます。これらの関数は、柏野製 汎用USBドライバDLL
で提供されます。PIC側がこれに応じて内部で汎用クラスのRead Write関数を実行
していることになります。





【PC側ソフトウェアデータ】

PC側のプログラムはVisual Basic 6.0用となっています。
下記をダウンロードしプロジェクトを開いて下さい。
EXEの実行ファイルはそのまま実行可能です。

★★PC側プログラム ソースと実行ファイル





  トップページへ