keitanak が 2023年05月02日12時13分08秒 に編集
初版
タイトルの変更
デジタルマルチメータIC(ICL7139)とラズパイPICO Wをつないでみる(実験編2)
タグの変更
RaspberryPiPicoW
テスター
micropython
記事種類の変更
セットアップや使用方法
ライセンスの変更
(MIT) The MIT License
本文の変更
# 設計 [前回](https://elchika.com/article/507f0c1d-3dd4-4296-89b4-bb250797509b/)に引き続き、ICL7139をラズパイWから制御してみます。 こんな感じの構成になります。 ラズパイ側とICL7139側は電源電圧も異なることや、デジタルとアナログを分離する観点からも、絶縁された状態で信号をやり取りするために、リレーとフォトカプラを利用して結合します。 この図には入っていませんが、ラズパイWにはI2C接続のOLED LCD(128x64)とプッシュスイッチも接続しています。 ![キャプションを入力できます](https://camo.elchika.com/eab978c3977c905c66f765ef484782ce0ca2bda6/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f33323062363032362d623538612d343430612d626163612d323431323333663138346634/) # ソースコード 今回ははやりのPythonを利用して作ってみます。MicroPythonのFWをラズパイWにインストールして、Thonnyで開発です。 [こちら](https://interface.cqpub.co.jp/magazine/202303/)の書籍で勉強中です。Arduinoに比較して、敷居が低く簡単に開発ができますね。 ```ICL7139モード変更の例 from machine import Pin, I2C import sh1106 import time # ICL 7319 mode controll function def setmode(a): if (a == 0): # DC V relyreset.on() time.sleep_ms(100) relyreset.off() photor.off() amper.off() hilo.on() elif (a == 1): # AC V relyreset.on() time.sleep_ms(100) relyreset.off() photor.off() amper.off() hilo.off() elif (a == 2 ): # Ω LO relyset.on() time.sleep_ms(100) relyset.off() photor.off() hilo.off() elif ( a == 3 ): # Ω HI relyset.on() time.sleep_ms(100) relyset.off() photor.off() hilo.on() elif ( a == 4 ): # micro A photor.on() relyreset.on() time.sleep_ms(100) relyreset.off() amper.off() elif ( a == 5 ): # m A photor.on() relyreset.on() time.sleep_ms(100) relyreset.off() amper.on() display.fill(0) display.text(dispstr[mode], 0, 0, 1) display.show() return # Initialize display i2c = machine.SoftI2C(scl=machine.Pin(5), sda=machine.Pin(4), freq=400000) display = sh1106.SH1106_I2C(128, 64, i2c, Pin(16), 0x3c, 180) display.sleep(False) dispstr = ["DC Voltage","AC Voltage","LO Register","HI Register","Micro Ampere","Milli Ampere"] # Initialize ICL7139 control pin # default = DC V pin0=off, pin3=off, pin6=on Relay reset # phtor is used to controll DVM mode to Ampere. You need to reset rely. photor = Pin(0, Pin.OUT) photor.off() # relyset is used to set relay mode = Ω relyset = Pin(1, Pin.OUT) relyset.off() # relyreset is used to reset relay mode = V or A relyreset = Pin(2, Pin.OUT) relyreset.on() time.sleep_ms(100) relyreset.off() # apmer is used to swtich microA/mA off = microA on = mA amper = Pin(3, Pin.OUT) amper.off() # hilo is used to swtich HI-DC/LO-AC off = LO-AC = HI-DC hilo = Pin(6, Pin.OUT) hilo.on() # Initialize Push button pin pushb = Pin(7, Pin.IN,Pin.PULL_UP) # set mode = 0 (DCV) mode = 0 setmode(mode) # Wait push Button and increment mode value while True: if pushb.value() == 0: time.sleep_ms(20) mode +=1 mode = mode % 6 display.fill(0) display.text(str(mode), 0, 0, 1) display.show() setmode(mode) while (pushb.value() == 0): time.sleep_ms(100) continue continue ``` # 動作確認 実際にブレッドボード上で組み上げて動作の確認をしました。 プッシュスイッチを押すたびに、モードが切り替わっています。 ![キャプションを入力できます](https://camo.elchika.com/755bc5db91cdec23c23151b95bab0d60000a1aeb/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f32303535363834332d336461342d343037612d613730362d616466636463663161353730/) ![キャプションを入力できます](https://camo.elchika.com/acf3c30ea028452b2e38f4c810e6a5e9aed4f3bb/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f34336631336339392d643532332d346639392d623831392d356535616332373936393433/) ![キャプションを入力できます](https://camo.elchika.com/ddfdf7eb683a5aec8245349a7849a90016a5c002/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62376366383337612d373938622d343866612d393832652d6534383166313931653836312f64313631323336392d313964332d346135322d393163632d326465323639653864643061/) 次回はICL7139の7セグメント出力を読み取って、逆デコードすることで、数値化を行う為の実験をやりたいと思います。