07: 詳説 Intel Edison Arduinoボードの入出力端子【Arduino規格のDIGITAL I/O編】
よく訓練されたアップル信者、都元です。アドベントカレンダーかもしれない7日目! なんとか1週間続きました。昨日のエントリーはこちらです。
さて、昨日はArduino規格の電源関連端子及びアナログ入力端子について追いかけました。本日は引き続き、デジタル入力端子について追いかけます。
J1B1 及び J2B1 (DIGITAL)
アナログ入力端子の反対側にあるこれらの端子のうち、まずは、0〜13のピンについて。これらはデジタル入出力端子です。
前回解説した通り、アナログ入力端子は、入力電圧を10bitの分解能で数値化しました。一方デジタル入出力端子は、入力電圧が3V以上だった場合にHIGHという値が、3V以下だった場合はLOWという値 *1が取れます。
また、デジタル入出力端子はその名の通り出力も可能です。各ピンについてINPUTまたはOUTPUTのモードを設定することにより、役割を切り替えられます。ピンを出力に設定し、LOWを出力すると0Vとなり、HIGHを出力すると5V *2になります。
ちなみに、ピンモードにはINPUT_PULLUPというものもあり、これは入力端子として機能しつつ、内部でプルアップ抵抗の回路を有効化する、というオプションです。外側にプルアップ抵抗を用意する必要がなくなり、便利ですね。そう、スイッチのようなON/OFFしかないものは、昨日のようにアナログ入力端子を使うのではなく、デジタル入力端子に繋ぐべきものです。
以上がデジタル入出力端子の概要ですが、それぞれのピンに少々の特徴があります。
UARTシリアル
0, 1の横にはRX←, TX→という表記があります。これらの端子は、UART (Universal Asynchronous Receiver Transmitter) という規格でデバイスとシリアル通信をするためのものです。
ここまでデバイスとの通信手段は、その時その時のピンの電圧を読み取り、その値1つが意味を成すデータでした。シリアル通信は、連続する値の変化の仕方にルールと意味を与えて、もっと複雑なデータをやり取りするためのものです。ちなみにRXは受信、TXは送信の端子です。相手機器のRXには自分のTXを、相手のTXには自分のRXを繋ぐ形になります。
ただし、これらのシリアル端子は、USBとPCを繋いだ際に利用される経路と共通なので、PCとシリアル通信をしている時は、0及び1を使うことはできないようです。
PWM
さて、ここまでアナログ入力やデジタル入出力を見てきましたが、アナログ出力はどうすればいいでしょうか。例えばLEDの明るさをコントロールしたい場合は、アナログ出力を使えればいいですよね。しかし、アナログ端子は入力だけで出力の機能が有りません。そこで利用するのが、デジタル入出力端子のPWM出力機能です。
PWMとはPulse Width Modulationの略です。基本的に、デジタル出力端子はLOW(0V)かHIGH(5V)の電圧を出す機能しか持っていません。その状況で、擬似的にアナログな電圧を出力する仕組みがPWMです。
このように、1周期(Arduinoでは490Hz)のうち25%の期間をHIGH、75%の期間をLOWで出力すれば、擬似的に1.25Vを表現できますね。
このように、HIGHの期間 (pulse width) を周期的に変化させることによって、アナログ値を表現します。このような出力にLEDを繋いだりすれば、人間の目では捉えられないスピードでON/OFFを繰り返し、結果として様々な明るさを表現できることになります。
ちなみにPWM出力をサポートするピンは3, 5, 6, 9, 10, 11に限られています。基板上のピン番号の横に∿というマークがあるピンですね。
そして、PWMは、同時に4つしか使えません。どの4つを利用可能にするか、という設定はJ11及びJ12のジャンパーピンで設定します。工場出荷時には、3, 5, 6, 9が有効になっています。
GND
グラウンドですね。
AREF
は、前回説明しましたね。スキップします。
I2Cインターフェイス
SDAとSDCは、I2C (Inter-Integrated Circuit *3)と言われるシリアル通信規格のためのピンです。細かいことは私も分かっていないので、当分出番は無いかもしれません。
J4 (ICSP)
続いてJ4ですが、これはICSP (In Circuit Serial Programming)という機能をサポートする端子です。ROMを回路上の置いたまま、ROMに書き込みをする *4ための端子です。しかしまぁ、当分の間この端子を意識することは無さそうです。
まとめ
ここまでで、電源端子、アナログ信号の入出力、デジタル信号の入出力、シリアルデータの入出力について触れてきました。入出力の基本的な部分はだいたい押さえられたと思います。
明日のエントリーはこちらです。