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 用途
無し IN/OUT コントロール転送
コンフィギュレーション用
バルクIN 未使用
バルクOUT コマンドの出力
計測指令などの指示
バルクIN 未使用
バルクOUT ディジタル出力
発光ダイオードの点滅制御
バルクIN 計測データ入力
4チャンネル10ビットのA/D変換データ
バルクOUT 液晶へのメッセージ出力
16文字までのメッセージ表示用

基本デバイスプログラムに追加したユーザープログラム部分は下記のようになって
います。
まず、PICの初期化への追加と液晶表示器の初期化部分です。
もちろんこの前で液晶表示器ライブラリをincludeしておくのと、LEDREDなどの
定数の定義をしておく必要があります。





ユーザー処理部としての追加部は、パイプ1のコマンドの受信部分で、下記リスト
のように、コマンドの値を判別し、「1」だったら計測指示として、4チャンネルのA/D
変換をして、送信バッファに格納すると同時に、液晶表示器の2行目に16進数で
表示します。計測が完了したらすぐUSBのパイプ4で送信します。

次は、パイプ3の受信処理部で、受信したデータの1バイト目をディジタルポート
への出力データとしてそのままポートCへ出力しています。
さらに残りは、パイプ5の受信処理部で、受信した16バイトのデータを液晶表示器
への表示データとしてそのまま液晶の1行目に出力します。








【ホスト側プログラム】

ホスト側のプログラムとしては、前ページのアセンブラベースのものと
全く同一ですので省略します。
ホストプログラムの基本フォームは下図となっていて、これで全ての
操作を行います。







目次に戻る