この Howto では、Armadillo-IoT G4 に SPI 接続の ADC を接続し、電圧を取得する方法をご紹介します。
Armadillo-IoT G4をベースにした内容になっていますが、Armadillo-X2でも動作確認しています。 Armadillo-X2はArmadillo-IoT G4の機能を一部減らして小型にした製品で、基本的には同じソフトウェアで動作します。 また、拡張インターフェース(CON11)の仕様も同じですので、CON11用に作った拡張ボードは両方の製品で動作します。
使用する ADC
この HowTo で使用した SPI 接続の ADC を以下に示します。
- Microchip MCP3204
この ADC は 4 入力 12 ビットの逐次比較式 ADC です。
出力される値は 0 から 4095 までで、 4096 × VIN / VREF です。
疑似差動モードを使用する場合、 -100mV < VIN- < 100mVとなるようにしなければいけないなど、入力電圧範囲に注意が必要です。
接続方法
Armadillo-IoT ゲートウェイ G4 で SPI バスを使用する方法
を参照ください。
この ADC では、SPI はモード 0 か 3 、周波数は 50kHz から 1MHz まで( 5V では 2MHz まで)にしてください。
また、この ADC は 2.7 ~ 5.5V で動作するデバイスなので、レベル変換回路が必要です。
この後のサンプルプログラムでは /dev/spidev0.0
にセンサーを接続しています。
サンプルプログラム
約 1 秒周期で ADC の値を取得して表示する、 C 言語のサンプルプログラムを用意しました
(こちら)。
サンプルプログラムの動かし方を以下に示します。
コンテナの起動
Debian の場合
[armadillo ~]# podman run -it --rm --device=/dev/spidev0.0 docker.io/debian /bin/bash
(省略)
Alpine の場合
[armadillo ~]# podman run -it --rm --device=/dev/spidev0.0 docker.io/alpine /bin/sh
(省略)
必要なパッケージのインストール
Debian の場合
[container /]# apt update && apt upgrade -y && apt install -y gcc wget spi-tools
(省略)
done.
Alpine の場合
[container /]# apk update && apk upgrade && apk add gcc wget spi-tools musl-dev linux-headers
(省略)
OK: 125 MiB in 31 packages
デバイスとの接続確認
MCP3204 は レジスタなどを持たないため、確認できません。
後述のサンプルプログラムの表示値と、実際の入力電圧が一致しているかどうかで確認してください。
サンプルプログラムのダウンロード・解凍
[container /]# cd
[container ~]# wget https://armadillo.atmark-techno.com/system/files/blog/howto_g4_spi_adc_mcp3204.tar.gz
(省略)
2022-05-06 02:01:56 (7.67 MB/s) - 'howto_g4_spi_adc_mcp3204.tar.gz' saved [1057/1057]
[container ~]# tar zxvf howto_g4_spi_adc_mcp3204.tar.gz
howto_g4_spi_adc_mcp3204/
howto_g4_spi_adc_mcp3204/spi_mcp3204.c
howto_g4_spi_adc_mcp3204/test.c
howto_g4_spi_adc_mcp3204/spi_mcp3204.h
[container ~]# cd howto_g4_spi_adc_mcp3204/
サンプルプログラムのコンパイル・実行
[container ~/howto_g4_spi_adc_mcp3204]# gcc test.c spi_mcp3204.c -o test
[container ~/howto_g4_spi_adc_mcp3204]# ./test
ch0: 761 ch1: 103 ch2: 2108 ch3: 2107 diff(ch0-ch1): 659
ch0: 760 ch1: 102 ch2: 2107 ch3: 2108 diff(ch0-ch1): 659
ch0: 761 ch1: 102 ch2: 2107 ch3: 2108 diff(ch0-ch1): 660
ch0: 761 ch1: 103 ch2: 2107 ch3: 2106 diff(ch0-ch1): 659
ch0: 761 ch1: 102 ch2: 2107 ch3: 2105 diff(ch0-ch1): 659
(無限ループ)
サンプルプログラムについて
サンプルプログラムは test.c
に main
関数があります。
同様に spi_mcp3204.h
をインクルードすることで、ADC を使用したプログラムを作成できます。
MCP3204 のデータシートも参考にしてください。