Armadillo-460のPC/104バスにAD変換ボードMPC104-ISOADC12(エンベデッドテクノロジー製)を接続して使用する方法を紹介します。
MPC104-ISOADC12は、アナログ入力8チャンネル(増設チャンネル搭載の MPC104-ISOADC12-16CHは16チャンネル)をもった、PC/104接続のAD変換ボードです。 分解能は12ビットで、変換範囲は、MPC104-ISOADC12のレジスタ設定により以下の4種類から選択可能です。
- 0~+5V
- -5~+5V
- 0~+10V
- -10~+10V
AD変換制御信号はフォトカプラで絶縁されています。MPC104-ISOADC12の詳細 な仕様等は、エンベデッドテクノロジーホームページでご確認くださ い。 以下はサンプルアプリケーションの主な仕様です。
- アナログ入力値をV単位で表示
- I/Oベースアドレスは0x380固定(出荷デフォルト)
- AD入力値の変換範囲をオプションで指定可能
- アイソレートパラレル入力ポートの値を表示
- アイソレートパラレル出力ポートに値を設定
- MPC104-ISOADC12, MPC104-ISOADC12-16CHの両方に対応
- 割り込みは未使用
本Howtoでのおおまかな手順は以下のようになります。
動作確認に使用したソフトウェアは以下の通りです。
- ユーザーランドイメージ: romfs-a460-1.00.img.gz
- Linux カーネルイメージ: linux-a460-1.00.bin.gz
- MPC104-ISOADC12サンプルアプリケーション: isoadc12.tar.gz
Armadillo-460に関連するマニュアルの最新版は、製品マニュアルからダウンロードすることができます。
1. 事前準備
1.1. MPC104-ISOADC12のディップスイッチ設定を確認する
MPC104-ISOADC12ではPC/104のI/Oアドレス空間のどこを使用するか、ディップスイッチで設定できるようになっています。今回のサンプルアプリケーションでは0x380から0x383を使いますので、ディップスイッチ(S1, S2)が以下のように設定されていることを確認してください。ディップスイッチに印字してある"ON"側に設定するとONに、反対側に設定するとOFFになります。
-
S1:
ピン 信号 設定 1 SA15 ON 2 SA14 ON 3 SA13 ON 4 SA12 ON 5 SA11 ON 6 SA10 ON 7 SA09 OFF 8 SA08 OFF -
S2
ピン 信号 設定 1 SA07 OFF 2 SA06 ON 3 SA05 ON 4 SA04 ON 5 SA03 ON 6 SA02 ON 7 - OFF 8 16BITADR ON
その他の設定をする場合は、サンプルアプリケーションのソースファイルの以下の行に定義されているI/Oベースアドレスを編集する必要があります。
isoadc12/isoadc12.h
#define ISOADC12_BASE (0x380)
1.2. Armadillo-460にスペーサを取り付ける
MPC104-ISOADC12を接続する前に、Armadillo-460の四隅に付属のスペーサ (15mm)を取り付けてください。PC/104用のピンは比較的長いため、スペーサを 取り付けていないとボードの重みでピンが曲がってしまうことがあります。
1.3. MPC104-ISOADC12をArmadillo-460に接続する
最後に、Armadillo-460に電源が入っていないことを確認してから、MPC104-ISOADC12をArmadillo-460に接続してください。
以上で事前準備は完了です。
2. サンプルアプリケーションのビルド
サンプルアプリケーションのソースコードアーカイブは、http://download.atmark-techno.com/armadillo-460/sample/isoadc12.tar.gz から取得できます。wgetコマンドで開発PC上にダウンロードし、tarコマンドで展開してください。
[atde3 ~]$ wget http://download.atmark-techno.com/armadillo-460/sample/isoadc12.tar.gz
[atde3 ~]$ tar zxvf isoadc12.tar.gz
[atde3 ~]$ cd isoadc12
[atde3 ~/isoadc12]$ ls
Makefile isoadc12.c isoadc12.h
isoadc12.cがソースコード、isoadc12.hがヘッダファイルです。isoadc12.cの 中身を見てみると、コマンドライン引数のパース処理や、レジスタ値の計算以 外の処理は以下に示すように単純な処理しか行っていません。これだけで、 PC/104ボードのレジスタを読み書きすることができます。
- /dev/memをopen()
- Armadillo-460のPC/104 I/O空間(8bitアクセス用)をmemmap()
- memmap()した空間のうち、ISOADC12のI/Oベースアドレス分移動した空間へアクセス
サンプルアプリケーションをビルドするには、makeコマンドを実行してください。ファイル"isoadc12"が、ビルドによって生成されたサンプルアプリケーションの実行可能ファイルです。
[atde3 ~/isoadc12]$ make
arm-linux-gnueabi-gcc -Wall -Wextra -O2 -march=armv5te -c -o isoadc12.0 isoadc12.c
arm-linux-gnueabi-gcc isoadc12.o -o isoadc12
[atde3 ~/isoadc12]$ ls
Makefile isoadc12 isoadc12.c isoadc12.h isoadc12.o
3. サンプルアプリケーションの転送
[Howto: ftpでファイルを送受信する][5]を参照し、サンプルアプリケーションの実行可能ファイルを開発用PCからArmadillo-460に転送してください。 [5]:/howto/ftp
転送が完了したら、Armadilloの端末上で以下のように実行権限を付与し、パスの通ったディレクトリへ実行可能ファイルを移動してください。
[armadillo ~]$ cd /home/ftp/pub
[armadillo /home/ftp/pub]$ chmod +x isoadc12
[armadillo /home/ftp/pub]$ mv isoadc12 /usr/bin
※ もし、ビルド済みのatmark-distがある場合は、以下の手順で本サンプルアプリケーションを含んだユーザランドイメージファイルを作ることもできます。ユーザランドイメージファイルをフラッシュメモリに書き込む方法については、「Armadillo-400シリーズ ソフトウェアマニュアル」を参照してください。
[atde3]$ ls
atmark-dist-[version] isoadc12
[atde3]$ cd isoadc12
[atde3]$ make ROOTDIR=../atmark-dist-[version] romfs
[atde3]$ cd ../atmark-dist-[version]
[atde3]$ make image
4. サンプルアプリケーションの実行
サンプルアプリケーションの書式とオプションは以下に示す通りです。
書式: isoadc12 [オプション]...
-c, --channel=CHANNEL
AD入力値を表示するチャンネル番号を指定します。カンマ(',')で区
切って複数のチャンネルを指定することができます。指定できるチャ
ンネル番号はMPC104-ISOADC12の場合0~7、増設オプション付きの
MPC104-ISOADC12-16CHの場合0~15です。
-r, --range-10v
変換範囲の絶対値を10Vに設定します。このオプションを指定しない
場合の変換範囲の絶対値は5Vです。
-b, --bipolar-negative
変換範囲にマイナスの値を含めます。このオプションを指定しない
場合は0V以上の値を変換します。
-B, --board-id
ボードIDを16進数で表示します。MPC104-ISOADC12の場合は"0xa6"、
MPC104-ISOADC12-16の場合は"0xa7"が表示されます。
-1, --led1=STAT
LED1(D1)を制御します。STATに0を設定すると消灯し、0以外を設定
すると点灯します。
-2, --led2=STAT
LED2(D2)を制御します。STATに0を設定すると消灯し、0以外を設定
すると点灯します。
-i, --input
アイソレートパラレル入力ポートの値を16進数で表示します。
-o, --output=DATA
アイソレートパラレル出力ポートの値を設定します。8ビット長であ
るため、設定可能な値は0(0x00)~255(0xff) です。
-h, --help
使用方法メッセージを出力してプログラムを終了します。
チャンネル番号と、アナログ1入力コネクタ(J1)のピンの対応は以下の表を参照してください。
チャンネル番号 | ピン番号 |
---|---|
0 | 1,2 |
1 | 3,4 |
2 | 5,6 |
3 | 7,8 |
4 | 9,10 |
5 | 11,12 |
6 | 13,14 |
7 | 15,16 |
増設オプション付きのMPC104-ISOADC12-16CHを使用している場合は、アナログ 2入力コネクタ(J2)に対応する以下のチャンネル番号を使用可能です。
チャンネル番号 | ピン番号 |
---|---|
8 | 1,2 |
9 | 3,4 |
10 | 5,6 |
11 | 7,8 |
12 | 9,10 |
13 | 11,12 |
14 | 13,14 |
15 | 15,16 |
"-r"および"-b"オプション指定による変換範囲は以下の表を参照してください。
-rオプション | -bオプション | 変換範囲(V) |
---|---|---|
未指定 | 未指定 | 0~+5 |
未指定 | 指定 | -5~+5 |
指定 | 未指定 | 0~+10 |
指定 | 指定 | -10~+10 |
コマンドの実行例は次のようになります。
チャンネル番号1と3のAD入力値を、変換範囲"-5~+5"で表示する場合は以下のようにコマンドを実行します。
[a460]$ isoadc12 --channel=1,3 --bipolar-negative
ch01: 2.159257
ch03: -0.766976
チャンネル番号2のAD入力値を、変換範囲"-10~+10"で表示する場合は以下のようにコマンドを実行します。
[a460]$ isoadc12 --channel=2 --range-10v --bipolar-negative
ch02: 7.137274
LED1を点灯、LED2を消灯させる場合は以下のようにコマンドを実行します。
[a460]$ isoadc12 --led1=0 --led2=1
アイソレートパラレル入力ポートの値を表示する場合は以下のようにコマンドを実行します。
[a460]$ isoadc12 --input
Data: 0xfe
アイソレートパラレル出力ポートに値を設定する場合は以下のようにコマンドを実行します。
[a460]$ isoadc12 --output 0x01
なお、MPC104-ISOADC12のアイソレートパラレル入出力の論理レベルは入力ポー トと出力ポートで異なります。本サンプルアプリケーションでは、各入出力チャ ンネルの値として、レジスタの値をそのまま使用しています。
ポート | フォトカプラがオンの場合 | フォトカプラがオフの場合 |
---|---|---|
入力ポート | 0 | 1 |
出力ポート | 1 | 0 |