努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


documents:os:linux:debian:bbb-doc007

文書の過去の版を表示しています。


007.7セグメントLEDを使ってみる

2026-08-20 書きかけ

概要

  • 7セグメントのLEDをBeagleBoneBlack(BBB)で制御してみる。
  • 配線厳しい。
  • ユニバーサル基板にピンヘッダ立ててみるかぁ、ってなる。はんだ付けやらないって決めたのに…

始まり

7セグメントLED4桁を制御してみようと考えた。BBBに直接つないでやろうとしたんだ…

BBB本体のコネクタにジャンパー飛ばそうとしたんだけど、刺す個数が増えると段々狭くてジャンパー線が刺せなくなっていく……

7セグメントLED

先の写真に写っている、よく見かけてそうな四角形の部品は 5641AS の名前を持つ7セグメントLED。
1桁が7個+1個のLEDで構成されていて、点灯するLEDの組み合わせで数字や英字の一部を表示できる。
LEDのカソードはすべて共通のPINに纏まっている。※コモンカソード

LEDにはa~gとpの名前が付いていて各LEDのアノードに接続されたPINがある。カソードのPINをLowにして、LEDのアノードPINをHighにするとそのLEDが点灯する。
アノードに接続された各PINには直接信号を入力しない。電流制限抵抗を配置して過電流が流れる事を防ぐ。

この図で “p” と表示している名称は、他の説明だと“DP”や“D.P”、“dp”や“dot”だったりもする。
※AIさんが注記しろというので書いておく

今回のパーツでは4桁分のLED群が付いていて、ピンアサインは以下のようになる。

PIN LED/Digit
1 e
2 d
3 p
4 c
5 g
6 Dig4
7 b
8 Dig3
9 Dig2
10 f
11 a
12 Dig1

PINの12番・9番・8番・6番はそれぞれ左から1~4桁目のLED群のカソードに接続されているPIN。PINをLowにするとその桁のLED群がPINの1~5番,7番,10番および11番の設定に従って点灯する。
PINの1~5番,7番,10番および11番はLED a~gおよびpの制御用。各桁の各LEDのアノードに接続されていて、各PINのHigh/Lowの組み合わせで数字を点灯する。

そして、結線図から一度に1つの数字の指定しかできないと分かる。例えば12番・9番をLowにすると1桁目と2桁目のLED群に同じ数字が表示される。つまり同時に各桁へ異なる数字を指定できない。

制御方法

ではどうやって各桁のLEDに個別の数字を表示するかというと……

人間の視覚には残像効果があり、光が消えても像がしばらく消えずに残り続ける。
一般的なLEDの光であれば、個人差はあるが数十ミリ秒間像が残る。

言い換えると、充分に短い間隔で各桁に異なる数字を表示・消灯を繰り返すと、人間の眼には各桁のLED群に異なる数字が連続して表示されているように見えてしまう。

例えば

  1. 1桁目のLED群に“1”を表示後、消灯
  2. 2桁目のLED群に“2”を表示後、消灯
  3. 3桁目のLED群に“3”を表示後、消灯
  4. 4桁目のLED群に“4”を表示後、消灯

を十分に短い間隔で繰り返すとあら不思議、“1234”の4桁が表示されているように見える。という力技で実現している。

このように各桁を高速に切り替えて表示する方法を「ダイナミック点灯」と呼ぶ。ダイナミック過ぎ。

工作

コネクタ付きのジャンパーで飛ばせば楽になるんじゃないかな?と素人ながら考えて、ユニバーサル基板とコネクタ付きジャンパー線、半田と半田ごてをAmazonさんでポチり、5641AS専用基板を作る事にした。
ピンヘッダを付ける。桁選択のPIN、LEDのPINをユニバーサル基板上で整理してピンヘッダと繋ぐ。

総電流はデカかった

図を書いてて最後になって「あれそういや電流ナンボ流れるんだ?」と計算させたら… むちゃくちゃデカイやんけ!!!

手持ちの5641ASのデータシートが無いけど、とりあえず1個のLEDに流れる電流を計算する。適当に検索すると1.8Vfと2.0Vfで計算するようなので

(3.3V - 1.8V) ÷ 330Ω ≒ 4.6mA
(3.3V - 2.0V) ÷ 330Ω ≒ 4.0mA

1桁のLEDが全部で7+1個だから8個。1桁のLED全部を光らせたとすると

4.6mA × 8 ≒ 37mA
4.0mA × 8 ≒ 32mA

こんな大電流入れたら物理的に炎上するじゃん……もう駄目だー

トランジスタでGPIO保護

ChatGPTさんに相談したところ、トランジスタ S8050 を使ってみようと提案される。ただ、手元のものは別用途で使うので 2SC1815 を利用する事に。

この構成はトランジスタをスイッチ的に使いかつBBBのGPIOに流れる電流を制限するためのもの。LEDへの電流制限用途ではない。
最初の基板だと DigNのPINがLowの時にN桁目のセグメントLEDが点灯する予定だったが、この基板はPINがHighになった時にLEDが点灯する仕様になる。※まぁ分かり易くていいんじゃない?

このトランジスタはNPN接合のバイポーラトランジスタと呼ばれる奴で、ベースに電流を流すとコレクタ‐エミッタ間に電流が流れ出す。
信号の増幅に使うこの動作を、今回はスイッチとして利用している。

エミッタをGND、コレクタをLEDのカソードに接続して、ベースから電流を流すとコレクタはエミッタを通してGNDに繋がった状態になる。つまりLow状態になる。
コレクタ‐ベース間には電流が流れないので、BBBのGPIOに先の基板で計算した大電流が流れることも無い。ハズだ…

GPIOのPINに接続されるDigNには1.5kΩの抵抗を接続してある。

(3.3V - 0.6V) ÷ 1.5kΩ ≒ 1.8mA
(3.3V - 0.7V) ÷ 1.5kΩ ≒ 1.7mA

なので、GPIOのPINに過大な電流が流れる事も無い。
0.6V~0.7Vはトランジスタが正常稼働している時にベース‐エミッタ間にかかる電圧。3.3Vからこの電圧を引いたものと流す予定の電流から抵抗を逆算した結果に近いパーツをチョイスしよう。

基板現物

パーツ到着待ち。しばし待て

documents/os/linux/debian/bbb-doc007.1787354689.txt.gz · 最終更新: by k896951

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki