2015.12.23 東京大学大学院 工学系研究科電気系工学専攻 准教授 三田吉郎
(本ページは、参考文献[1] 応用物理学会誌 「応用物理」特集「今さら聞けない?測定・制御のコツ」寄稿記事の第2節の補足です。)
PC(パーソナルコンピュータ)やマイコン、「ワンボードパソコン(注1)」などを使って、意味のある電気信号をやりとりするために、最初に必要なことは「指令に従って電気信号を特定の端子から出力/入力する」ことでしょう。出力は正論理で語られることが普通で、従って「やりたいこと(作業の到達目標)」は、
出力端子にLEDなどの発光素子を接続し、論理の高低を適当な(目に見える)時間感覚で切り替えることで、LEDをチカチカと点滅させることができるようになります。これを俗にLチカと呼んでおり、PCによる制御を云々する者達が、最初に通過するべき関門になります。
(昔のことを語るのは自分が歳を取った証拠ともいい、言いたくないところですが、それでもやはり、)制御の一丁目一番地「Lチカ」を実現するには、昔むかしのPCが最適でした。昔のPCには、プリンタと接続するための専用のポートとして、「プリンタポート」というものが付いており(図1)、これを使えば、極めて簡単に「Lチカ」が実現できたのです。
プリンタポートは、図2の接続表にあるとおり、
![]() |
![]() |
図1: 「パラレルポート」(D-SUB25ピン) | 図2: 接続図 |
int fd;
uint8_t val;
val = 0x5a;
ioctl(fd, PPISDATA, &val);
このように、非常に勘弁に、かつそれなりのスピード(毎秒200kバイト、従って毎秒1.6メガビット)でデータの出力ができるため、Lチカのような作業をするのに便利に利用されていましたが、ご承知のとおり、USB (Universal System Bus)の普及につれてパラレルポートは「レガシーポート」と呼ばれるようになり、次第にパソコンから姿を消してゆきました。自作派には辛い、冬の時代の到来です。
パソコンからパラレルポートが姿を消してしまいましたが、需要のあるところに供給ありで、Future Technology Device International Ltd. (FTDI)社から、USBポートに接続して、パソコンと周辺機器の間で通信を行なうためのインターフェースICが発売されました。有名なチップとしては、
の3種類が知られています。チップ単体でも入手が可能ですが、実装の具合で動かなかったりすることが多いので、必要な部品と集積化され、24ピン0.6インチ幅の変換基板に実装されたチップを利用するのが便利です。日本では、おなじみ秋葉原の秋月電子通商が、
を販売しています。手頃な価格(1000円〜2000円)で入手できるので、こちらを利用するのがお勧めです。
3種揃っている理由はそれなりにあるわけですが、「とりあえず試すために新たに購入する」場合はAE-UM232がお勧めです。この点、AE-FT245Rを使った応用物理2015年12月号の記事と若干ずれているのですが、これは筆者の試した順番のせいで(すみません)、
秋月電子通商のFTDIシリーズは、幅0.6インチの標準Dual-Inline-Package(DIP)ICですので、購入したボードをブレッドボードにさしこめばすぐに実験ができます。しかしながら、講義で15年にわたり学生に電子情報機器を試作発表させている身として
ブレッドボードで組んだ回路は、いざ発表する段になって、動作不良を起こす |
を実装しています。
参考文献[2]ドキュメントにあるように、FT232と245とのどちらのICを利用しても、BitBang Mode で8ビットパラレル出力を取り扱うことができます。ピン配置を表1にまとめたとおり、AE-FT245RLボードでは、1,2,3,4,5,6,7番ピンが素直にBitBang ModeのD0〜D7番に対応しているので、配線をすっきりまとめることができます。対してAE-UM232Rボード方は、データの出力ピン番号が1,5,3,10,2,8,9,6番なので、すっきりとした配置になりません。試作ではボード上の配線で端子の並べ替えをしていますが、どうしても2ピンだけ他のピンをまたいで入れ替えをする必要がありました(アートワーク上、赤で示された配線(TopLayer))。
FT245BM端子名 | AE-FT245RL端子番号 | FT232BM端子名 | AE-UM232R端子番号 | Bit-Bang端子名 |
Data0 | 1 | TXD | 1 | Data0 |
Data1 | 2 | RXD | 5 | Data1 |
Data2 | 3 | RTS | 3 | Data2 |
Data3 | 4 | CTS | 10 | Data3 |
Data4 | 5 | DTR | 2 | Data4 |
Data5 | 6 | DSR | 8 | Data5 |
Data6 | 7 | DCD | 9 | Data6 |
Data7 | 8 | RI | 6 | Data7 |
FT232やFT245Rは、Virtual COM Port ドライバをインストールしたPCに接続をして、シリアルポート(COMポート)として認識されるのが通常の利用方法ですが、今回の実験のように、端子から直接ディジタルデータを入出力するには、FTDI社が出しているFTD2XXドライバまたは、オープンソースのlibftdiドライバを利用します。
実験には、Cプログラミング環境が利用できるOperating Systemを必要とします。PCで動作するUNIX環境が一番の候補となるでしょう。筆者は長年FreeBSDを利用していますので、実験はそちらの例をまず報告しますが、ユーザランドがFreeBSDをベースに構成されている「MacOS X」や、Linus Torvalds氏が独自にコーディングを行なったPC-UNIX「Linux」の方がより広く使われています。libftdiドライバは、これら全てのメジャーなOperating System上で当然動作します。Windowsでも動くわけですが、「いちいちプログラミング環境を用意しなければならない煩雑さ」から、筆者個人は避けて通っています[3]。libftdiは、ユーザーランドからUSB機器に簡単にアクセスするための枠組みであるlibusbを利用しているので、libusbが動作する多数のメジャーなOSで、全く同じソースコードを用いて動作させることができます。
FTDI経由でLEDを点滅させるためのサンプルコードを用意しました。
筆者の環境は
ftdi.h
ならびにlibftdiライブラリのインストール一を指定します。
% cc -I/usr/local/include -L/usr/local/lib -lftdi -o 02setBitBang 02setBitBang
# ./02setBitBang