
概要
RaspberryPiとADコンバータICのMCP3204を使って、AD変換をしてみました。
MCP3204は、端子1本1本が1つのビットを表すパラレル通信ではなく、1本の端子で複数のビットを受け取りするシリアル通信をするICなので、プログラムによる制御が必要です。
正直なかなかうまくいかずに苦労しましたが、多くのWEBサイトを参考にしてやっと成功しました。
使用機器
- RaspberryPi Type B+
- 12ビット4ch ADコンバータ MCP3204-B/P
MCP3204の接続
各端子を以下のように接続しました。
*1番ピン CH0 ... アナログ電圧入力
*2番ピン CH1 ... 開放
*3番ピン CH2 ... 開放
*4番ピン CH3 ... 開放
*5番ピン NC ... 開放
*6番ピン NC ... 開放
*7番ピン DGND ... RaspberryPiのGNDピン
*8番ピン VDD ... 駆動電圧 5[V]
*9番ピン VREF ... 基準電圧 5[V]
10番ピン AGND ... 電源のGND
11番ピン CLK ... RaspberryPiのSPI_SCLKピン
12番ピン DOUT ... RaspberryPiのSPI_MISOピン
13番ピン DIN ... RaspberryPiのSPI_MOSIピン
14番ピン CS/SHDN ... RaspberryPiのSPI_CE0ピン
アナログ電圧入力の回路は以下の形。
Cdsセルを光から遮断すると電圧値が上がります。
RaspberryPi側の準備
ハッキリ言って全部WEB上で調べたことをそのままやっただけなので、かなり簡略してメモという形で記します。
・/etc/modulesにspidevを追加
・/boot/config.txtにdtparam=spi=onを追加
・gpio load spiコマンドでSPI有効化
・プログラムを書く
一番重要なプログラムについてなんですが、以下のWEBサイトを参考に作成しました。wiringPiを使っています。
MCP3002/MC3204を使う(低水準IO編)
正直私は理解できていない部分が多いです。
動作の様子
プログラムをコンパイルして実行すると、ちゃんと動作しました。以下、その様子。
1秒ごとに値を出力させています。Cdsセルを遮断するとちゃんと電圧値が大きくなっています。
感想
プログラムのあたりが難しくてよく理解できていないです。
というか、別にこんな高精度なADコンバータを使う必要はなかった。別にまだ作りたいものがあるわけでもないのに。
参考にさせていただいたサイト・本
- MCP3002/MC3204を使う(wiringPiSPIDataRW編) | RaspBerry Piで遊んでみる
- RASPBERRY PIでSPI通信(3) | ソフトウェアエンジニアの素人電子工作
- はじめての電子工作ステップ50 | 日経Linux 2014年11月号