USBの計測ロガ−ユニット(C言語版)
パソコンとUSBで接続し、4チャンネルの計測データ
を収集できる計測ロガ−で、C言語版です。
【概要】
PIC16F876にUSBデバイスコントローラである、ナショナルセミコンダクタ社の
「USBN9603」を接続し、フルスピードでのUSB通信をC言語で実現しています。
このユニットで、USB通信で可能なことはアセンブラ版と同じで下記となっています。
液晶表示器の制御ライブラリを追加していますので、参考にして下さい。
(1) パソコンからのコマンド出力
計測指示など
(2) 計測したデータのパソコンへの入力
4チャンネルの10ビットのA/D変換結果のデータをパソコンに送ります。
(3) ディジタルポートの制御
発光ダイオードのOn/Off制御など
(4) 液晶表示器への表示メッセージ出力
パソコンからのメッセージを液晶表示器に表示する。
【ユニットの構成】
この計測ロガ−ユニットの内部構成は、前ページのアセンブラベースのものと
全く同一で、下図のブロック図のようになっています。
USBのコントローラのUSBN9603はPICとSPI通信モードで接続しています。
【デバイス側プログラム】
下記がデバイス側のプログラムの全体で、4つのファイルがダウンロードされます。
すべてCCS社のC言語で作成していますので、解凍すれば、CCS社のPCMコンパイ
ラを統合したMPLABでそのままコンパイル可能です。
PIC16F876が対象プロセッサとなっています。
★ デバイス側プログラム(C言語版)
・usb9603c.c :メインプログラム本体
・usbdef.h :USBデバイスディスクリプタデータファイル
・usbn960x.h :USBN9603のICのレジスタ類の定義ファイル
・lcd_lib5.c :液晶表示器制御ライブラリ
上記基本デバイスプログラムの改良版で作成したロガ-プログラムのデータです。
バグ改修とプロダクトIDが変更されています。(11/24)
★ 改良版 デバイス側プログラム(11/24)
・usblog2.c :ロガ-本体
・usbmain.c :USB制御プログラム本体
・usbdef42.h :USBデバイスディスクリプタデータファイル
・usbn960x.h :USBN9603のICのレジスタ類の定義ファイル
・lcd_lib5.c :液晶表示器制御ライブラリ
★改良版 デバイス側プログラム (2002/2/14)
・usbmain.c で 動作安定化のため下記変更
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);
↓ ↓
setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
★改良版 デバイス側プログラム (2002/3/3)
・TX_2()内のエラー処理 T1SIZE→T2SIZEに修正
前ページで紹介した「基本デバイスプログラム(C言語版)」に、各エンドポイントの
ユーザー処理部分を追加します。
エンドポイントの構成は下表のようにしています。IN/OUTの見方はホスト側から
見た入出力となっています。
USBN9603は最大でエンドポイントがコントロール+6個まで使えます。基本デバ
イスプログラムでは、全部が使えるようになっていますが、計測ロガ-として使って
いるのは、下表のコントロール+4個です。
パイプNo エンドポイント IN/OUT 用途 無し 0 IN/OUT コントロール転送
コンフィギュレーション用0 1 バルクIN 未使用 1 2 バルクOUT コマンドの出力
計測指令などの指示2 3 バルクIN 未使用 3 4 バルクOUT ディジタル出力
発光ダイオードの点滅制御4 5 バルクIN 計測データ入力
4チャンネル10ビットのA/D変換データ5 6 バルクOUT 液晶へのメッセージ出力
16文字までのメッセージ表示用
基本デバイスプログラムに追加したユーザープログラム部分は下記のようになって
います。
まず、PICの初期化への追加と液晶表示器の初期化部分です。
もちろんこの前で液晶表示器ライブラリをincludeしておくのと、LEDREDなどの
定数の定義をしておく必要があります。
ユーザー処理部としての追加部は、パイプ1のコマンドの受信部分で、下記リスト
のように、コマンドの値を判別し、「1」だったら計測指示として、4チャンネルのA/D
変換をして、送信バッファに格納すると同時に、液晶表示器の2行目に16進数で
表示します。計測が完了したらすぐUSBのパイプ4で送信します。
次は、パイプ3の受信処理部で、受信したデータの1バイト目をディジタルポート
への出力データとしてそのままポートCへ出力しています。
さらに残りは、パイプ5の受信処理部で、受信した16バイトのデータを液晶表示器
への表示データとしてそのまま液晶の1行目に出力します。
【ホスト側プログラム】
ホスト側のプログラムとしては、前ページのアセンブラベースのものと
全く同一ですので省略します。
ホストプログラムの基本フォームは下図となっていて、これで全ての
操作を行います。