7セグLEDシリアルドライバキットを使いたい


赤色7セグメントLEDシリアルドライバキット(DIP化キット) をラズパイから使いたい。
SPIで接続するので、rspi-config で SPIマスタードライバを有効にしておく必要がある。
組立説明書を見ると表のような結線になると思う。

最初に gpio load spi を実行しておく必要がある。
後は LATCH をオンにして、SDI へ書き込み、LATCH をオフにすれば値を保持してくれる。
SDIへの出力は /dev/spidev0.0 というデバイスを通じて行う。

ラズパイ側(フィジカル)基板側コメント

チャンネル 番号 名称 機能 ラズパイ側 機能 コメント
CN1 1 VDD 電源入力 2 or 4 5V CN2-4とどっちかつなげばいい
2 GND GND 6 or 9 or 14 or 20 or 25 Ground CN2-5とどっちかつなげばいい
3 SCK クロック入力 23 SCLK
4 SDI シリアルデータ入力 19 MOSI MasterOuteSlaveInらしい
5 SDO シリアルデータ出力 複数使うとき必要
チャンネル 番号 名称 機能 ラズパイ側 機能 コメント
CN2 1 MR# マスターリセット
2 LATCH 記憶レジスタクロック入力 29とか GPIO デジタルOUT出来ればどこでもいい
gpio -g mode 5 out
とかでOUTモードにして使う
3 OE 出力イネーブル
4 VDD 電源入力 5V CN1-1参照
5 GND GND Ground CN1-2参照

Arduino のスケッチを見ると SDI に送るデータは以下で良いと思う。
-n 改行を出力しない
-e 文字列中のエスケープ文字を有効にする

ビット列 コマンド 機能 ビット列 コマンド 機能
10000000 echo -ne "\x80" > /dev/spidev0.0 . 01000000 echo -ne "\x40" > /dev/spidev0.0
00100000 echo -ne "\x20" > /dev/spidev0.0 上の左の縦 00010000 echo -ne "\x10" > /dev/spidev0.0 下の左の縦
00001000 echo -ne "\x8" > /dev/spidev0.0 一番下の横 00000100 echo -ne "\x4" > /dev/spidev0.0 下の右の縦
00000010 echo -ne "\x2" > /dev/spidev0.0 上の右の縦 00000001 echo -ne "\x1" > /dev/spidev0.0 一番上の横
00000110 echo -ne "\x6" > /dev/spidev0.0 1 01011011 echo -ne "\x5b" > /dev/spidev0.0 2
01001111 echo -ne "\x4f" > /dev/spidev0.0 3 01100110 echo -ne "\x66" > /dev/spidev0.0 4
01101101 echo -ne "\x6d" > /dev/spidev0.0 5 01111101 echo -ne "\x7d" > /dev/spidev0.0 6
00000111 echo -ne "\x7" > /dev/spidev0.0 7 01111111 echo -ne "\x7f" > /dev/spidev0.0 8
01101111 echo -ne "\x6f" > /dev/spidev0.0 9 00111111 echo -ne "\x3f" > /dev/spidev0.0 0
01110111 echo -ne "\x77" > /dev/spidev0.0 A 00111001 echo -ne "\x39" > /dev/spidev0.0 C
01111001 echo -ne "\x79" > /dev/spidev0.0 E 01110001 echo -ne "\x71" > /dev/spidev0.0 F
00111101 echo -ne "\x3d" > /dev/spidev0.0 G 01110110 echo -ne "\x76" > /dev/spidev0.0 H
00011110 echo -ne "\x1e" > /dev/spidev0.0 J 00111000 echo -ne "\x38" > /dev/spidev0.0 L
01110011 echo -ne "\x73" > /dev/spidev0.0 P 00111110 echo -ne "\x3e" > /dev/spidev0.0 U
01111100 echo -ne "\x7c" > /dev/spidev0.0 b 01011000 echo -ne "\x58" > /dev/spidev0.0 c
01011110 echo -ne "\x5e" > /dev/spidev0.0 d 01110100 echo -ne "\x74" > /dev/spidev0.0 h
01010100 echo -ne "\x54" > /dev/spidev0.0 n 01011100 echo -ne "\x5c" > /dev/spidev0.0 o
01100111 echo -ne "\x67" > /dev/spidev0.0 q 01111000 echo -ne "\x78" > /dev/spidev0.0 t
00011100 echo -ne "\x1c" > /dev/spidev0.0 u 01101110 echo -ne "\x6e" > /dev/spidev0.0 y

書込んだ後ラッチを一度、オン・オフすると表示が切り替わって固定される。
gpio -g write 5 1
gpio -g write 5 0
# Arudino のスケッチでは、ラッチをオフにして、書込んだ後、オンにしている。
# でもラズパイでは上でも動いている。オンにして固定されて、オフにして書込み待ちのまま、入力されないから表示変わらないという感じかな?
# 電源供給しないだけ省電力?

クロックの周波数変更方法とかはわからない。
SPI README

SPIを有効にするには

raspi-config で Interfacing Options → SPI を有効にする。

というエラーが出る場合は、デバイスツリーの動的な部分のリンクが正しくないので、reboot すれば /dev/spidev0.0 が見えるハズ

やってみたらかなり強力で、シャットダウンしても7セグは表示されっぱなし、(多分5Vの給電はシャットダウンしてもオフにならない。)
瞬断程度の電源オンオフでも表示は消えなかった。(コンデンサのせい?)
(どうやら電源が切れても、設定された内容はドライバキット側で保持しているっぽい。)

シャットダウンスクリプトで7セグLED点灯をオフにするようにしておかないと落ちたのわからないなあ。

次は複数にチャレンジかな。SDOをSDIに入れれば複数接続できるらしいけれど、
2個目3個目にどうやってデータを設定するかわからない。
・ラッチオンにして
・10の位にデータ書き込み
・1の位にデータ書き込み
・ラッチオフ
みたいな感じでいいのかな?

ラズパイ2、3のピンアサイン pinassign


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です