シリアル - GPIB 変換器があれば、 Palm からでも、シリアルクレードル等を通して、 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 ファイル
In/Out は、本コンバータの動作、 つまりコントローラとしての動作に関してのものである。 信号はすべて反転で出力される。
| 信号名 | 簡単な説明 | 本器での入出力方向 |
|---|---|---|
| GIO1-8 | 8bit のデータ。 | In/Out |
| EOI | Low のときデータの終端に達したことを示す。 | 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 | リスナからトーカへの要求があるときに使用する | 未使用 |
| IFC | GPIBバスのリセット | 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 から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 バスをリセットする。
早速ためしに一つ、サンプルプログラムを作ってみる。 Agilent のスぺクトラムアナライザ 856xE につないで 波形を読み込んでみた。 (マニュアルによると、"TDF M;TRA?;" という命令で、カンマ区切り・600点の波形データを返してくれるらしい。)
テストプログラム "GetTrace" (.prc ファイルとソース)
実行結果はこんな感じ。アドレスを指定してやってボタンをタップするだけ。
画面が小さいので、表示がつぶれてしまう。取り込んだデータは、メモ上にテキストで残るので、 HotSync 後、Excel 等にとりこんで活用することができる。
インターフェイスがシリアルなので、Palm に限らず、 LX200 とか、CE マシンとか、Zaurus なんかでも 動かせるはず。 もちろん PC でも。実際 GPIB ボードを買ったら高いし、 用途を限れば十分実用に耐えるのではないかと。