Plam で測定器のコントロール(シリアル - GPIB 変換器の製作)


シリアル - GPIB 変換器があれば、 Palm からでも、シリアルクレードル等を通して、 GPIB 機器のコントロールができるはずである。 (できたから何?っていう気もするが)

という訳で、シリアル - GPIB コンバータの製作資料と、 測定器コントロールのサンプルプログラムの紹介である。


シリアル - GPIB コンバータ

元記事は、トランジスタ技術 1998.08号にあったものだが、 PIC16F877 1CPU で動作するようにしたのと、 測定器側との絶縁等をはしょったりして、 結局以下のような回路図になった。 プログラムも C を使うことにして、最初から作り直した。 GPIB コネクタは、普通のアンフェノール 24pin コネクタで代用している。 RS232C コネクタは D-Sub 9pin オス。コネクタのケースも GND に落としておいた方がよいかも。 そうしないと、一部シリアルケーブルで通信できない場合がある。 回路図にはないけれど、電源には 9V 角電池とスイッチを接続した。

プログラムは以下。もとは Windows 上の CCS-C コンパイラ + MPLAB で開発していたが、 試しに MacOS X 上に環境を移して、SDCC + GPUTILS でやってみたら、何とか動くものができたので、 一応、二種類とも置いておく。

CCS-C 用ソースファイルと HEX ファイル
SDCC 用ソースファイルと HEX ファイル


GPIB 各信号の簡単な説明と、製作上の注意

In/Out は、本コンバータの動作、 つまりコントローラとしての動作に関してのものである。 信号はすべて反転で出力される。

信号名簡単な説明本器での入出力方向
GIO1-88bit のデータ。In/Out
EOILow のときデータの終端に達したことを示す。In/Out
DAV (Data Available) トーカがデータバス上にデータが出力されていることを知らせる。
リスナはこの信号が Low であることを確認した後、GIO, EOI を読みにいく。
In/Out
NRFD (Not Ready For Data) リスナがデータ受け入れ準備OKになったことを知らせる。
トーカはこの信号が Low であることを確認した後、GIO, EOI を出力し、DAV を Low にする。
In/Out
NDAC (Not Data Accepted) リスナがデータを読み終ったことを知らせる。
トーカはこの信号が Low であることを確認した後、GIO, EOI を Open にして DAV を High に戻す。
In/Out
SRQ リスナからトーカへの要求があるときに使用する 未使用
IFCGPIBバスのリセットOut
ATN Low のときはコマンドモード (コントローラから全機器へコマンドを送る)
High のときはデータモード (トーカからリスナへデータを送る)
Out
REN これがLow の間のみリモート状態で通信可能Out

このうち、NRFD, NDAC は、 2つ以上の機器がバスに同時に出力することがあるので、 短絡しないような処置が必要。 本来なら、オープンコレクタ出力でバスに接続するのであるが、 今回は単純にダイオードを入れただけで済ましている。 ピンを High にしたときに出力オープンになるようにする。 Low 側は、終端抵抗からの電流が流れ込むだけなので、保護は不要。

また、入力については、レベルが TTL であることに注意。つまり、2V 以上で High となることが必要。実際、ほとんどの測定器は、 High レベルとして、 3〜4 V 程度しか出さない。PIC16F877 の場合、入出力ピンはたくさんあるが、 C,D,E port はシュミットトリガ入力なので使えない。TTL バッファの入力ピ ンは、B port と、A4 を除く A port だけなので、それらを入力として使用す る可能性のある信号へ割り当てる必要がある。


完成写真

内部はこんな感じ。かなり詰め込んだ。

使用中はこんな感じになる。


Terminal を使った動作確認

Terminal から1行づつコマンドを送ることによって、動作確認ができる。 Terminal の設定は、9600bps, 8bit, Stop bit 1, フロー制御無しにして、終端文字は CR としておく。 RS232C クロスケーブルでパソコンとつないで、電源を入れると、 "Serial-GPIB Converter" というメッセージの後に、 プロンプト "#" が表示される。 ここに以下のコマンドをタイプしてやると、 測定機器がつながっていれば、何らかの反応があるはずである。

TALK num
num には、測定機器の GPIB アドレスを指定する。 この後、プロンプトが "+"に変わるので、 そこで測定機器への命令をタイプすればよい。 一通り命令を指示し終ったら、空行をタイプすると、 プロンプトが "#" に戻る。
直前に TALKコマンドを使用していた場合には、 num を省略することができ、その場合は その直前のコマンドで指定していたアドレスへ命令を送る。

LISTEN num
num には、測定機器の GPIB アドレスを指定する。 今度はコントローラ側がリスナになって、 指定したアドレスの機器からのデータを受取り、 ターミナルに表示する。
これも num を省略すると、直前の LISTEN コマンドで 指定したアドレスからデータを読む。

RESET
GPIB バスをリセットする。


Palm 側のサンプルプログラム

早速ためしに一つ、サンプルプログラムを作ってみる。 Agilent のスぺクトラムアナライザ 856xE につないで 波形を読み込んでみた。 (マニュアルによると、"TDF M;TRA?;" という命令で、カンマ区切り・600点の波形データを返してくれるらしい。)

テストプログラム "GetTrace" (.prc ファイルとソース)

実行結果はこんな感じ。アドレスを指定してやってボタンをタップするだけ。

画面が小さいので、表示がつぶれてしまう。取り込んだデータは、メモ上にテキストで残るので、 HotSync 後、Excel 等にとりこんで活用することができる。

インターフェイスがシリアルなので、Palm に限らず、 LX200 とか、CE マシンとか、Zaurus なんかでも 動かせるはず。 もちろん PC でも。実際 GPIB ボードを買ったら高いし、 用途を限れば十分実用に耐えるのではないかと。


戻る