マイコン・プログラミング・メモ
LEDのダイナミック点灯
ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
マイコンでよく使用するLEDのダイナミック点灯、その機能と作成方法について、これまで製作したものを元に紹介します。
1.ダイナミック点灯とは

LEDのダイナミック点灯とは、すべてのLEDを同時に点灯させるのではなく、LEDをいくつかのグループに分けてグループごとに順番に点灯させる方法です。ある一瞬では一つのグループしか点灯していなくても、点灯するグループを高速に切り換えれば、見た目にはすべてのLEDが点灯しているように見えます。
ダイナミック点灯の利点は、LEDを駆動するドライバ(トランジスタや専用IC)やその配線が少なくてすむという点です。
次の図は、7セグメントLEDでよく行われる、1桁分のLEDを1つのグループとする方法で、4桁のLEDのダイナミック点灯で "123.4" を点灯する例です。
7セグメントLEDに限らずいろいろなLEDでダイナミック点灯は行われますが、ここでは、このように7セグメントLEDを1桁ずつ点灯するダイナミック点灯について説明します。

ダイナミック点灯の仕組み

2.アノードコモンとカソードコモン

一般的な7セグメントLEDは、数字を表す7つのセグメントa~gと、小数点を表すセグメントd.p(デシマル・ポイント)で構成されていて、その配置は下図のようになっています。LEDのアノードまたはカソードはあらかじめ共通に接続されていて、アノードが共通のものをアノードコモン、カソードが共通のものをカソードコモンといいます。実際の7セグメントLEDが、どのような形状をしていてピン配置はどうなっているのかは、メーカーや桁数によっても異なるのでカタログやデータシートを探して見てみてください。
通常、アノードコモンかカソードコモンのどちらか1種類を使い、ひとつの表示回路の中で混在して使うことはありません。
ダイナミック点灯ではコモン側を桁制御として使うので、アノードコモンとカソードコモンではドライバの構成が変わってきます。
7セグメントLEDの回路図

2.スタティック点灯回路

アノードコモンで4桁の7セグメントLEDを点灯する回路といった場合、各LEDにドライバを設けた次のような回路※1が思い浮かびます。
このような回路をスタティック点灯回路といい、点灯中の全てのLEDに電流が常に流れていて、セグメント・ドライバ※2とコントローラの出力端子が桁数×セグメント数だけ必要になります。
ただし、コントローラの処理としては、目的の桁に相当する出力端子に、表示したいセグメントのパターンを表すデータを出力すればいいので簡単です。
スタティック点灯回路の例
4桁スタティック点灯の回路例(アノードコモン)

3.ダイナミック点灯回路

次の図に示すのは、前記と同様にアノードコモンで4桁の7セグメントLEDをダイナミック点灯する回路※1の例です。 その下の図は、仕組みがわかるように書き変えた図です。
このようにダイナミック点灯は、LEDを格子状配線の交点に配置して、横と縦の信号の操作によって点灯させる方法です。この基本的な仕組みは7セグメントLEDでなくても変わりません。
図でわかるように、点灯するグループ(桁)を切り換えるデジット・ドライバ(桁ドライバ)※2が必要なものの、セグメント・ドライバ※2が1桁分で済み、そのコントローラの出力端子も1桁分で済むという特長があります。ダイナミック点灯は1桁の表示では意味がないので、表示桁数が2桁以上のときに使用します。
コントローラの動作としては、デジット・ドライバで点灯する桁D0~D3を順次選択することと、セグメント・ドライバでその桁の表示パターン(a~g,d.p)を出力するという、2つの処理を一定周期で繰り返すことが必要になります。

ダイナミック点灯回路例1
4桁ダイナミック点灯の回路例(アノードコモン)

格子状に書き変えたダイナミック点灯の回路
格子状に書き変えた図
※1.7セグメントデコーダは使用せず、コントローラが表示パターン(a~g,d.p)を直接出力する例です。
※2.ドライバはスイッチの役目をするもので、図では一例としてトランジスタを1つ使ったものを示しています。
参考:上図のデジット・ドライバのように電流を外に出力する側を "ソース・ドライバ"、他方セグメント・ドライバのように電流が中に流れl込む側を "シンク・ドライバ" とも呼びます。
注意:複数桁のデジット・ドライバを同時にONしてはいけません、点灯する桁の選択なので1桁だけONさせます。

4.電流制限抵抗

アノードコモンのダイナミック点灯回路で、電流制限抵抗を計算してみます。
1つのLEDに着目すると、ダイナミック点灯回路は下図のようになります。
ダイナミック点灯回路の電流計算図
電流制限抵抗Rは、
R = (VCC - (VCE1 + VCE2 + VF)) / IF
  VCC = 電源電圧
   VF = LEDの順方向電圧
   IF = LEDに流したい電流
  VCE1 = デジット・ドライバ(桁ドライバ)のコレクタ~エミッタ電圧
  VCE2 = セグメント・ドライバのコレクタ~エミッタ電圧
なので、
  VCC = 12V
   VF = 3V
   IF = 30mA
  VCE1 = 0.1V
  VCE2 = 0.1V
だとすると、
R = (12 - (0.1 + 0.1 + 3)) / 0.03
   = 293Ω
   = E24系列の抵抗で300Ωとなります.
ダイナミック点灯は、桁数が増えると1桁当たりの点灯時間が減るため、同じ電流では桁数が多いほど表示が暗くなります。例えば4桁の場合、同じ電流での1桁の時に比べて約1/4の明るさになってしまいます。
従って、必要な明るさを得るためにLEDにそれなりの電流を流す必要がありますが、LEDには電流の上限があるため、いくらでも電流を増やせるわけではありません。つまり、何桁でもダイナミック点灯できるわけではありません。
LEDには、スタティック点灯時の最大電流値IFmaxと、ダイナミック点灯時(パルス状の電流)の最大電流値IFRMmaxとがあり、IFRMmaxの方が大きくなっています。これにより、ダイナミック点灯ではスタティック点灯時よりも電流を流して明るくできる可能性があります。ただし、デューティー比(ONとOFFの比率)などの条件もあるので、LEDのデータを調べてから使用してください。
また、ダイナミック点灯をマイコンのプログラムで行う場合、デバッグ中にブレークなどでスキャンを止めるということがよくあるので、完成するまではIFmaxを超えた電流を流さないようにすることをお勧めします。
注意:このような抵抗による電流制限は、LEDのVFによって電流が変わってしまうので、VFが異なる7セグメントLEDを混在して使うような場合には注意が必要です。

5.桁の選択(スキャン)

デジット・ドライバをひとつずつ一定周期で順次ONにして、点灯する桁を選択し電流を流します。これをスキャンといいます。
次の図は、4桁ダイナミック点灯のデジット・ドライバをON/OFFしてスキャンするタイミングを示したものです。図のように、桁D0~D3を順にONして、一巡したらD0に戻るということを繰り返します。
全桁点灯周期は、文字通り全桁を一巡する時間で、この時間が長い(20mS以上といわれます)と表示がちらついて見えます。4桁の場合は、全点灯周期の約1/4が1桁の点灯時間ですが、桁数が多いとそれだけ点灯時間が短くなり暗くなります。
ブランク期間は、ゴーストをなくすために全桁をOFFにするものですが、この時間に次の桁の表示準備も行います。マイコンでダイナミック点灯を行うとき、桁側出力をブランク期間なしで切り換えると、隣の桁の消灯すべきセグメントが薄く点灯してしまうことがあります。この現象を筆者はゴーストと呼んでいます。
ゴーストの原因として、点灯桁と異なるセグメント出力の組み合わせになる瞬間があるプログラム、あるいはドライバの動作速度や配線容量などが原因でドライバ出力の切れが悪い(エッジがなまっている)ハードウェアが考えられます。

ダイナミック点灯のタイミング例1
4桁ダイナミック点灯のデジット・ドライバのタイミング

6.マイコンによるダイナミック点灯

一定周期でスキャンを繰り返すために、タイマによる定周期割り込みを使ってダイナミック点灯を行うのが一般的です。次は、その処理内容を簡単に箇条書きしたものです。

  1. 定周期割り込み用のタイマを、カウンタをクリアしてから起動します。
  2. クリアからTon時間(=ブランク期間)経過後に、桁カウンタを+1して該当する桁の表示パターンをセグメント・ドライバに出力し、該当する桁のデジット・ドライバにONを出力します。
  3. クリアからToff時間(=1桁ごとの周期)経過後に、全桁のデジット・ドライバにOFFを出力し、さらにセグメント・ドライバに全セグメントOFFを出力します。
  4. タイマのカウンタをクリアします。この後は(2)からの繰り返しになります。

下記に、H8/3694Fの場合の、LEDダイナミック点灯のプログラム例を示します。
このプログラム例は、タイマVを使って1桁当たり1mSの周期でダイナミック点灯する例です。

   ・4桁7セグメントLEDダイナミック点灯フロー図例

   ・4桁7セグメントLEDダイナミック点灯プログラム例

これによるデジット・ドライバのタイムチャートは下図のようになります。
図のように、コンペアマッチAで約100μSの時間を作成し、ブランク期間としています。また、コンペアマッチBで約1mSの時間を作成し、1桁の周期としています。なお、コンペマッチBでタイマカウンタをクリアする設定なので、コンペマッチレジスタは最初設定したまま変更しません。
タイマVでは難しいですが、もし1つのタイマでダイナミック点灯以外の異なるタイミングの処理も同時に行いたいような場合は、コンペアマッチレジスタが3本以上あるタイマWを使えば可能です。デジタル時計の製作でタイマWを使ったダイナミック点灯を紹介していますので、興味がある人は見てください。なお、デジタル時計の製作では、ブランク期間を可変にしてLEDの明るさを調整できるようにしています。
ダイナミック点灯のタイミング例2
上記の例はH8/3694Fですが、コンペアマッチ割り込みが使えるインターバルタイマをもつマイコンであれば、ほとんどのマイコンで同様のプログラムを作ることができます。興味がある人は参考にしてください。

■参考資料■
(1)H8/3694 グループ ハードウェアマニュアル :ルネサス エレクトロニクス
(2)H8/300H シリーズ プログラミングマニュアル :ルネサス エレクトロニクス
ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
■■■ 注 意 ■■■
1.ここに掲載された内容(写真,図,表などを含む)の、全てまたは一部を無断で使用しないでください。
2.ここで紹介した手法(構造や仕組み,回路,プログラムなどを含む)を使用したことにより、問題や不利益が発生したとしても一切関知しません。
3.ここで紹介したプログラム例は、正常なコンパイルおよび正常な動作を保証するものではありません。