RasPi Python で ADC(MCP3204)
Raspberry Pi Zero で ADC (MCP3204) を使う機会があったので、紹介します。
使ったのは面実装品のこちら
(DIPパッケージ品もありました。)
Raspberry Pi の GPIO とは以下のように配線しました。
カッコ内はピン番号です。
GPIO MCP3204
(17) 3V3 power (14) VDD , (13) VREF
(19) GPIO10(MOSI) (9) DIN
(21) GPIO9 (MISO) (10) DOUT
(23) GPIO11(SCLK) (11) CLK
(24) GPIO8 (CE0) (8) CS
(25) Ground (7) DGND , (12) AGND
SPI接続のADCなので、メインメニュー → 設定 → Raspberry Pi の設定のインタフェース・タブで、SPIを Enable (有効)に設定する必要があります。
また、前述のGPIOを他の用途(例:入力/出力ポート)に設定していると、うまく動作しないそうです。
例によって、ソースコードは class を記述した sub1.py と main.py に分かれています。
ソースコード
sub1.py
import spidev # RasPi のインタフェース設定で SPI enable にして使う
# SPI enable は /boot read write かつ overlay disable で設定する。
class adc(): # ADC (MCP3204)
def __init__(self):
self.d1tbl = [0x00, 0x40, 0x80, 0xC0] # send data 1
self.spi = spidev.SpiDev()
def rdadc(self, chn): # Read ADC chn=0,1,2,3 (INTEGER)
self.spi.open(0, 0) # bus0, CE0
self.spi.max_speed_hz = 1000000 # 1MHz
rd = self.spi.xfer2([0x06, self.d1tbl[chn], 0x00])
self.spi.close()
ret = rd[1] * 256 + rd[2]
return ret
main.py
import sub1
adc = sub1.adc() # クラス adc のインスタンスを作成
for i in range(4):
c = adc.rdadc(i) # CH i のADCサンプリング結果を取得
print(i,c)
sub1.py の rdadc() は、ADC (MCP3204) の出力値をそのまま返すだけのプログラムで、H/Wデバッグ目的のものです。
実際のアプリケーションでは、MCP3204に接続されたデバイス(例:温度センサー)に応じて出力値を換算(例:温度[℃])するプログラムが必要になるだろうと思います。
以上、何等かお役に立てれば幸いです。
出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。