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 を有効にする。
1 |
/usr/bin/raspi-config: 597: /usr/bin/raspi-config: dtparam: not found |
というエラーが出る場合は、デバイスツリーの動的な部分のリンクが正しくないので、reboot すれば /dev/spidev0.0 が見えるハズ
やってみたらかなり強力で、シャットダウンしても7セグは表示されっぱなし、(多分5Vの給電はシャットダウンしてもオフにならない。)
瞬断程度の電源オンオフでも表示は消えなかった。(コンデンサのせい?)
(どうやら電源が切れても、設定された内容はドライバキット側で保持しているっぽい。)
シャットダウンスクリプトで7セグLED点灯をオフにするようにしておかないと落ちたのわからないなあ。
次は複数にチャレンジかな。SDOをSDIに入れれば複数接続できるらしいけれど、
2個目3個目にどうやってデータを設定するかわからない。
・ラッチオンにして
・10の位にデータ書き込み
・1の位にデータ書き込み
・ラッチオフ
みたいな感じでいいのかな?