連休が終わり、季節は青葉若葉の季節になりました。
外に出ることが、多くなりましたが、合間にラズベリーパイとPythonの勉強をしています。
PIC Arduinoなどで表示器として定番の7セグメントLEDをラズパイで使うテストをしました。
7セグメントLEDには、アノードコモンとカソードコモンがありますが、今回は、カソードコモンを使います。
7セグメントLEDの各セグメントには、それぞれA~G(a~g)の記号が付けられています。小数点は、DP(ドットポイント)です。
0~9の数字を各セグメントを点灯して表現します。例えば、1は、BとCを点灯し、他のセグメントを消灯します。
点灯を1、消灯を0として、各セグメントの1,0(2進表現)を10進の数字で表現すると次のようになります。
A~Gの各セグメントは、330オームの電流制限抵抗を介して、GPIO20~GPIO26に接続します。
予備実験で、3Vを330Ωを通して7セグメントLEDの1つのセグメントを点灯させた場合の電流を測定したら、約4mAでした。(7セグメントLEDは、秋月電子で販売しているC-522SR 7セグメント×3)
ラズパイのGPIOは、1つ当たり最大16mAの電流を流すことができ、全GPIO合計で50mAまでです。
今回は、最大で、4×7=28mAですので、問題ありません。
さて、表示の方法です。
0~9までの、セグメントのデータ7seg_dataをリストにします。
7seg_data=[63,6,91,79,102,109,125,39,127,111]
数字の値に応じて、リストからデータを読み取ります。
そのデータをLSB(最下位ビット)から順にGPIO20~GPIO26にセットします。
これは、右へ1ビットシフトと1とのANDで行います。
今回は、1秒ごとに0から9までの数字を表示するスクリプトを組みました。
"""
7segment LED test
2017.5.9
JH7UBC Keiji Hata
"""
# -*- cording : utf-8 -*-
7segment LED test
2017.5.9
JH7UBC Keiji Hata
"""
# -*- cording : utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(20,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
GPIO.setup(25,GPIO.OUT)
GPIO.setup(26,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(20,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
GPIO.setup(25,GPIO.OUT)
GPIO.setup(26,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)
seg_data = [63,6,91,79,102,109,125,39,127,111]
disp_data = 0
disp_data = 0
def print_7seg(n):
disp_data = seg_data[n]
for i in range(8):
GPIO.output(20+i,disp_data & 1)
disp_data >>= 1
disp_data = seg_data[n]
for i in range(8):
GPIO.output(20+i,disp_data & 1)
disp_data >>= 1
try:
while True:
for j in range(10):
print_7seg(j)
sleep(1)
except KeyboardInterrupt:
pass
while True:
for j in range(10):
print_7seg(j)
sleep(1)
except KeyboardInterrupt:
pass
GPIO.cleanup()
ブレッドボードで、テストをしました。
輝度も十分で、問題なく表示されました。
次は、ダイナミック点灯で、3桁を表示してみます。