設計
前回に引き続き、ICL7139をラズパイWから制御してみます。
こんな感じの構成になります。
ラズパイ側とICL7139側は電源電圧も異なることや、デジタルとアナログを分離する観点からも、絶縁された状態で信号をやり取りするために、リレーとフォトカプラを利用して結合します。
この図には入っていませんが、ラズパイWにはI2C接続のOLED LCD(128x64)とプッシュスイッチも接続しています。
ソースコード
今回ははやりのPythonを利用して作ってみます。MicroPythonのFWをラズパイWにインストールして、Thonnyで開発です。
こちらの書籍で勉強中です。Arduinoに比較して、敷居が低く簡単に開発ができますね。
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
動作確認
実際にブレッドボード上で組み上げて動作の確認をしました。
プッシュスイッチを押すたびに、モードが切り替わっています。
次回はICL7139の7セグメント出力を読み取って、逆デコードすることで、数値化を行う為の実験をやりたいと思います。
投稿者の人気記事
-
keitanak
さんが
2023/05/02
に
編集
をしました。
(メッセージ: 初版)
-
keitanak
さんが
2023/05/02
に
編集
をしました。
-
keitanak
さんが
2023/05/06
に
編集
をしました。
ログインしてコメントを投稿する