NAT7210で作るGPIB リスナー/トーカー
投稿日 2025年07月21日

National InstrumentsのNAT7210APD(上)とTI社のTMS9914NL(旧型)
40ピンDIP
データシートはネットで参照可能
TMS9914は特に入手しずらくなっている
GPIBは忘れ去られようとしていますが、中古の計測器や電源などを入手すると背面にGPIBコネクタが出ており、リモートで制御したくなります。当局が仕事をしていたころはGPIBの普及期でしたので、大変お世話になりましたし、その後入手した手持ちの計測器などは今でもGPIBで制御しながら使っています。確実に動くので大変信頼感は高いです。
ところで、そのような環境において、ちょっとした計測器などを自作した場合でも、既存のGPIBシステムに組み込むためにGPIBで制御したくなるのは当然のことです。そこでGPIB I/F コントロールICの登場です。GPIB I/F コントロールICを使用しないとGPIB制御機器の作成はほぼ不可能です。比較的入手しやすいのはNational InstrumentsのNAT7210またはNECのμPD7210と思いますが、オリジナルのTI社TMS9914はほとんど見かけません。もし中古計測機などを安く入手出来たら、GPIB部分から部品取りするのが、周辺部品も含め手っ取り早いかも知れません。
当局は以前からNAT7210とμPD7210を所有しており、i以前mbedを使って簡単なコントローラ(GPIBシステムを総括して各機器を制御するPCなど)の実験はしたことがあります。このときはDMMのHP3478Aをリスナー/トーカー(スレーブ)にして、電圧や電流などの計測値をPCに読み込んでみただけでした。しかしコントローラーはPCにCONTECのようなGPIB I/Fボードや、USB-GPIBアダプタなどで実現可能ですから、しばらくしてバラしてしまいました。

NAT7210(μPD7210)を使用したGPIB リスナー/トーカー回路
(コントローラーには使用できない配線になっている)
データバスのドライバ/レシーバはSN75160を、制御信号ラインはSN75161を使用した回路
ただしSN75162(右下)も使用可能
今回はNAT7210を使用してリスナー、トーカーの実験を行いました。ゆくゆくは以前作った簡易電子負荷をGPIBで制御してみたいと思います。参考にできる書籍には松野壽夫著「GPIBインターフェースの使い方」日刊工業新聞社刊 1986年発行があります。TMS9914の使い方が説明されています。
NAT7210の制御にはマイコンが必要です。機器に組み込むのでなるべく小型のマイコン・ボードを使いたいところですが、今回は開発環境が使いやすくプログラミングが簡単なArduino UNOを使用しました。制御にGPIOピンは14ピン必要ですので、Arduino UNOのGPIO(D0からD13)をすべて使うことになります。またバス・ドライバー/レシーバとしてSN75160とSN75161(またはSN75162)を使います。NAT7210よりもこれらのほうが入手性がよくないかもしれません。SN75160はデーター・ラインのドライバー/レシーバです。SN75161またはSN75162は制御信号ラインのドライバー/レシーバです。SN75162はマルチ・コントローラー用ですが、シングルでも使え、リスナー/トーカーにも使えます。

μPD7210で組んだGPIB リスナー/トーカー
コントローラ(PC)から送られたメッセージ"GPIB TEST! 12345"を受信
マイコンはArduino UNOを使用
この画像では制御信号ラインのドライバ/レシーバはSN75162を使用
問題はNAT7210の制御方法ですが、ネットでC言語のヘッダファイルTMS9914.h を入手して利用します。名前のとおりTMS9914用ですので、NAT7210を9914モードで使用します。このTMS9914.hはコントローラーの場合しか考慮されていませんが、簡単な修正でリスナー/トーカーでも使用できます。たとえはコントローラーはIFC(インターフェース・クリア)を送信する必要があるので、そのためのルーティンが用意されていますが、リスナー/トーカーで必要なIFCの受信は配慮されていません。
Arduinoを使用するうえで注意すべき点ですが、GPIBバスは双方向なのでGPIOをINPUT/OUTPUTを切り替えて使う必要があります。mbedではBusinoutがあって便利に使え、Arduino用にインプリメントされたBusinoutも存在しますが、それを使うまでもなくGPIOをINPUT/OUTPUTを切り替えながら使えば問題ありません。実際TMS9914.hはBusinoutで書かれていますが、Arduino用に変更するのは簡単です。
また、ArduinoはGPIOのD0とD1がRS232のTXとRXにアサインされています。このためデバッグ等でSerial.printlnなどシリアル通信を使うと、GPIBのデータバス・ラインが混乱します。ただし、Serial.begin()とSerial.end()で挟んで使うようにすれば問題はありません。当局はそのようにしてデバッグしてましたが、動くのを確認してI2C LCDに表示するように変更しました。
一般的にはリスナー/トーカー(コントローラーでない)の場合はデーターの入出力のほかに、コントローラから送られてくるIFCには少なくとも反応するように作り、GPIBをイニシャライズしなければなりません。またDCLやSDCも同様です。SRQやPPLを使うかどうかは任意です。
今回はリスナー/トーカーとして動くかどうかを確認するまでにとどめましたが、ゆくゆくは以前製作した簡易電子負荷をGPIBでリモート制御したいと思います。
(JF1VRR)