数字を表示する7セグメントLED。PICなどを使わずに表示する実験です。
7セグメントLEDは、その名の通り、数字を構成する七つの長方形のLEDを組み合わせたものですが、実は、小数点が追加されているので、本当は、8セグメント。大抵の7セグLEDでは、ほとんど同様の構成ですが、追加された小数点部分に関しては、回路がちょっと異なっていることもあります。
7セグLEDのセグメント(それぞれのLED)は、一番上を a として、時計回りに b、c…と名づけ、最後(左の上側)が f 。そして真ん中の横線が gとされます。付録の小数点は、大抵、dotと書かれています。
それぞれのLEDには、アノード(+端子)とカソード(−端子)があるので、小数点を含めて8つのLEDなので、都合、16本の端子が必要になります。たぶん、これでは端子が多すぎると言う理由で、アノード端子を全部まとめて一つにしたのが、アノードコモン(左の上の図)。カソード端子をまとめて一つにしたのがカソードコモン(左の下の図))。当然、使用する回路も違うので、この区分は大切です。
a セグメントを点灯させる場合には、端子aと端子commonの間に電流を流せばよいことになります。
今回は、7セグLEDドライバーの74LS47というICで回路を組みます。これは、アノードコモンのLED用のIC。4ビットBCDの入力を解釈して、内蔵フォント(?)に従って、LEDのA-G端子に対応する端子(A-Z)に信号を出力します。LED点灯の場合には、出力電圧がLOWレベル。これがオープンコレクタ端子になっているのでうまい具合に電流を引き込むことが出来ます。オープンコレクタなので吊り抵抗が必要ですが、15V24mAまで駆動可能です。
74LS47では数字は左のように表示されます。数字の6と9が違うバリエーションのICがあります。
これがそのIC、74LS247の数字。74LS47と差し替えるだけで字形が変わるので、今回は、このICでもOK。
同様に、TTLのセグメントドライバーに書きましたが、型番が46/47/246/247ならば、LSだけでなく、相当する標準TTL(7447など)が使えます。
右の上がピン配置。下が機能図。簡単に端子機能を説明します。
端子 | 機能 |
---|---|
A,B,C,D | 入力データ。A:b0 B:b1 C:b2 D:b3 |
a,b,c,d,e,f,g | 7セグへの出力。LEDのA-Fに対応。 |
LT | テスト端子。L で全セグメント点灯。通常、Hにしておく。 |
RBI | この端子がLになると、入力が「0」のとき、表示が全消灯に。数字の上位桁の不要の「0」を消すゼロサプレス機能実現のための端子です。マニュアルにはripple blankingと書いてありました。 不要の場合はHにしてます。 |
BI / RBO | 入出力兼用の端子です。 ここにLを入力すると、全セグメント消灯できます(BI)。輝度変調したり、ダイナミック表示で桁を切り替える場合に使用すると便利です。 また、出力としては、RBOとして働きます。入力が「0」かつ、RBIがLのとき、出力がLになります。下位桁のRBIに接続して、ゼロサプレスを伝播します。 使わない場合はオープンにしておきます。 |
ゼロサプレスの仕組みがちょっと面白い機能です。例えば4桁ならば、下図のようにRBI→RBOと接続します。最上位桁は常にLを入力、最下位桁はゼロサプレスしないのでRBIをオープンにしています。
この接続で値が表示される例が下の表です。うまく考えられていますね。
|
|
|
この場合、問題になるのは、桁の数だけ74LS47を使用しなければならないこと。要するにコストの問題です。PICなどを接続してダイナミック点灯する場合には、RBI/RBOをPICに繋げば無理矢理出来ないことはありませんが、ソフトで処理した方が端子が少なくなるので楽だと思います。
さて、実験回路ですが、3桁以上用意しないとRBI/RBOの伝播を試せません。しかし、手持ちの 74LS47 が二つしかないので、やむなく、二桁で回路を作成しました。使用したLEDは、手持ちのもので、秋月で入手した二桁のアノードコモンのもので、SL-9263-22です。秋月のページでは、もう、販売されていないようです。たぶん、アノードコモンの二桁の7セグLEDならどれでも、使えると思いますが、ピン端子が違っている可能性があるので、注意が必要です。
回路図の上のほうのLS47が上位桁担当で、ゼロサプレスのためにRBIをLに落としています。下側のLS47は下位担当で、ゼロサプレスしないのでオープンにしておきます。
図面の緑の線のように上のLS47のRBOから下のLS47のRBIに結線するとゼロサプレス伝播の様子を見ることが出来ます。(値が「00」のとき、上下桁とも消えるが、「10」ならば下位桁は消えない)。
入力値は、74LS47の(A,B,C,D)端子をグランドに落とすと該当ビットが0、オープンのままならば、1となります。実験用に組んだブレッドボード上の回路では、DIPSWを使うのが面倒で、配線を直接グランドへ接続しています。
ここに書いた回路では、部品の省略でプルアップ抵抗を使用していません。TTLは入力オープンでHなのでこれでも動作しますが、安定して動作させる際には、図面上で赤丸のついた、74LS47のLT端子は10kΩ程度でプルアップします。また、スイッチも、図面上の赤の長方形の辺りで5-10kにプルアップします。
スイッチ部分にDIPSWやロータリーDIPSWを付けるとスマートなのですが、オン(ショート)が値0なので、このままでは、ビット反転になって使いにくくなります。これを解消するには、スイッチの右の部分を4.7kから1kぐらいでプルダウンしてください。当然スイッチの左側はグランドでなく電源に接続します。
TTL入力のプルダウンなど、余り使ったことがなかったのですが、プルアップに比べて余裕が少なく、余り大きなプルダウン抵抗は使えません。といって、小さな抵抗にすると、電流消費が多くてもったいないのですが…。
ブレッドボードに組んだ回路は、思ったとおり、動作しました。ゼロサプレスも、OK。ゼロサプレスの伝播の実験もOKです。桁数分だけ74LS47が必要だという豪勢な回路ですが、プログラムなどせずにも、ゼロサプレス機能付きで、簡単に動くところがいいかな。。
ついでながら、74シリーズの7セグドライバーを見てみました。
型名 | output Logic | Output Config | Sink Current | Volt |
---|---|---|---|---|
SN7446A/SN74246 | low | open-collector | 40mA | 30V |
SN7447A/SN74247 | low | open-collector | 40mA | 15V |
SN7448 | high | 2k-pullup | 6.4mA | 5.5V |
SN74LS47/SN74LS247 | low | open-collector | 24mA | 15V |
SN74LS48/SN74LS248 | high | 2k-pullup | 6mA | 5.5V |
SN74LS49/SN74LS249 | high | open-collector | 8mA | 5.5V |
アノードコモンLED用が、45、46、47、246、247です。46/246が耐圧30Vで、47/247が耐圧15V。47と247はフォントの違い。同様に、46と246もフォントの違い。(46と47は同じフォント、246と247は同じフォント)
カソードコモンLED用が、48、49、248、249。48と248はフォント違い。49の出力はオープンコレクタ。48/248は、49の出力に内部で2.2kのプルアップが入っていて、外付けの負荷抵抗を省略できる形になっています。どちらも、出力自体はNPNのオープンコレクタとなっているので、回路構成上、LEDに余り大きな電流が流せないのが、使いにくいところかもしれません。たぶん、4511BPなどのCMOSを使った方が楽でしょう。
このシリーズのICは、内部にラッチを持っていないので、表示する値は、外部に保持する必要があります。
最近、やっと、カソードコモンの7セグLEDを入手しました。秋月の店頭で見当たらなかったので、鈴商で購入したものです。ピン配置など、データシートをこれから調べ無ければなりません。
CMOSの4511BPは入手していたので、やっと、実験回路を組めるようになったわけです。
4511BPでは、74LS47でついていたリップルブランキング機能がありません。また、0−9以外の値では何も表示しません。その代り、内部にラッチを持っていて、LOAD信号でセットできるようになっています。表示値を4511BPが覚えてくれるので、PICなどに並列でずらっと接続しても、ダイナミック点灯を行わなくても表示できるようになります。
動作速度が遅いので、プログラムで使用する場合は、その辺の考慮が必要になりそうです。
PICを使った7セグLEDの表示は、こちらにあります。