Howto

Armadillo-460でPC/104接続のAD変換ボード(エンベデッドテクノロジー MPC104-ISOADC12)を使用する

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でのおおまかな手順は以下のようになります。

  1. 事前準備
  2. サンプルアプリケーションの取得とビルド
  3. サンプルアプリケーションの転送
  4. サンプルアプリケーションの実行

動作確認に使用したソフトウェアは以下の通りです。

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ボードのレジスタを読み書きすることができます。

  1. /dev/memをopen()
  2. Armadillo-460のPC/104 I/O空間(8bitアクセス用)をmemmap()
  3. 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でファイルを送受信するを参照し、サンプルアプリケーションの実行可能ファイルを開発用PCからArmadillo-460に転送してください。 転送が完了したら、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