Armadillo-X1の拡張インタフェース(CON8)のI2Cインタフェースで、I2C接続D/Aコンバータ(MCP4725)を使ってみました。
1.拡張インタフェース(CON8)のI2Cを使えるようにする
Armadillo-X1製品マニュアル
21.6.3. I2C
の手順を参考に
I2C1
20pin:SCL
21pin:SDA
を使えるようにします。
1.1.DTB(Device Tree Blob)の準備
標準のカーネルでビルドした際に生成されるI2Cインタフェースが設定されたDTB(Device Tree Blob) linux-3.14-x1-at[version]/arch/arm/boot/dts/armadillo_x1-i2c1_lm75b.dtb をArmadillo-X1に置きます。
1.2.armadillo_x1-i2c1_lm75b.dtb(I2C1を設定したDTB)を追加します。
(以下は、ホームディレクトリにarmadillo_x1-i2c1_lm75b.dtbを置いてある場合)
root@armadillo:~# mount -t vfat /dev/mmcblk2p1 /mnt root@armadillo:~# cp armadillo_x1-i2c1_lm75b.dtb /mnt/ root@armadillo:~# umount /mnt
2.DeviceTreeの選択
保守モードで、手順1のarmadillo_x1-i2c1_lm75b.dtb(I2C1を設定したDTB)を選択します。
2.1.電源を落とします。
root@armadillo:~# halt
を実行後、電源を落とします。
2.2.保守モードで起動します。
Armadillo-X1製品マニュアル 図4.8 スライドスイッチの設定 を参考に保守モードにスイッチを設定して、電源を入れます。
2.3.armadillo_x1-i2c1_lm75b.dtb(I2C1を設定したDTB)を選択します。
=> setenv fdt_file armadillo_x1-i2c1_lm75b.dtb => saveenv
2.4.通常モード(オートブートモード)で再起動します。
電源を落とします。
図4.8 スライドスイッチの設定 を参考にオートブートモード側にスイッチを設定して、電源を入れます。
以上で、拡張I/F(CON8)で、I2C1が使用できるようになります。
I2C1は、"dev/i2c-1"というデバイスファイルとして見えます。
3.I2C接続D/Aコンバータ(MCP4725)を使う
Armadillo実践開発ガイド 第3部 2.2. I2C接続A/Dコンバーター を参考に作成したサンプルプログラム i2c_mcp4725_20170507.tar.gz を添付します。
i2c_mcp4725.c
・デバイスアドレス:0x60
・実行時のオプション:
-d:デバイスファイル
-s:D/Aコンバータのステップ数(0-4095)
・mcp4725.c内の"mcp4725_write"の実行(-sオプションで指定されたステップ数(0-4095))
mcp4725.c
・mcp4725_write関数:MCP4725への設定
パワーダウンモード
ステップ数(0-4095)
3.1.サンプルプログラムのビルド
Armadillo-X1にi2c_mcp4725_20170507.tar.gzを展開すると、i2c_mcp4725ディレクトリが生成されます。
(以下は、i2c_mcp4725_20170507.tar.gzをATDE5のホームディレクトリに置いた場合)
i2c_mcp4725ディレクトリで、makeを実行すると、i2c_mcp4725という実行ファイルが生成されます。
[armadillo ~]# tar zxvf i2c_mcp4725_20170507.tar.gz [armadillo ~]# cd i2c_mcp4725 [armadillo ~/i2c_mcp4725]# make
3.2.サンプルプログラムの実行
下記オプションを指定して実行します。
-d:デバイスファイル(今回は"/dev/i2c-1")
-s:D/Aコンバータのステップ数(0-4095)
実行例
[armadillo ~/i2c_mcp4725]# ./i2c_mcp4725 -d /dev/i2c-1 -s 1000
MCP4725から、-sオプションの値に応じたアナログ電圧が出力されます。