見出し画像

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に接続されたデバイス(例:温度センサー)に応じて出力値を換算(例:温度[℃])するプログラムが必要になるだろうと思います。


以上、何等かお役に立てれば幸いです。




出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。