3664F,3694Fで始めるH8 | 500円で始めるPIC | 始めるAVR |
7セグLEDを使った数値の表示
7セグLEDを使うワンセグというのが流行(はやり)ですが、こちらは7セグです(^^ 一般の、あのワンセグとは何の関係もありません) 棒状のLEDが7コ、 8の数字に配置された、数値を表示するための表示器 です。 この7本の棒状LEDの、どれかを点灯させ、どれかは点灯させない ことで 数値の形を作り出す表示器です。 (このタイプの表示を街中で見かけはじめた初期の頃は、数値に違和感がありましたが、慣れるとこの角ばった数値はもう当たり前に受け入れられていますネ) 今やLCDの液晶表示器が安価になったので、数値だけの表示でもこれが使われるここが多いです。できるなら配線が少ないのでLCDを使いたいところです^^ それでも7セグLEDを使う理由として やはりLEDで作り出す文字は、なんとなくイイ!LCD液晶 も 7セグLEDも同じ、数値が表示できる表示器ですが、マイコンなどで表示器として利用を考えると一長一短です
ネットでもあちこちに解説記事があり、今更という感じですがH8を使い7セグで数値表示をしました。 基本はLEDを点灯、消灯させる操作なので、いままでで実験済みですが、配線やピンを減らす工夫などの方法を使っています。 7セグLED7セグLEDは 単に棒状のLEDが7本(ついでに小数点の .(DF) が付いていたりもする)を点灯、消灯させるだけです。 共通端子が電源部かGND部かで アノードコモン、カソードコモンといわれるタイプがあります。 図のA〜G 7本全部を点灯させれば、8 の数値になる、 各ピンと各部LEDをつなぎ、いくつかを点灯させれば数値に見えるので、LEDの点灯操作と同じです。 ただ、そのままやると 1桁で7本の I/Oピンが必要。。。2桁になると14本 、 3桁で・・・・・・ H8/3664F、3694F などはマイコンとしてはPICなどよりIOピン数が多い方ですが、数値の表示だけにこれだけのピンを取られるとキビシいです。 1桁ぐらいなら7本なのでなんとか、、、でも 数値3桁ぐらいの表示は通常必要なので 7本×3桁= 21本ちかくのピンが。。。 こんなピン数を使った配線でやることは実際はそうないです、そこで以下の方法でマイコンからのピン数を減らす工夫をします。 * こちらのHPに7セグLEDの楽しいスクリプト(HP上で実行できる)7セグLEDをいろいろ点灯させられるテスト表示のスクリプトがありました。 ★ ピンを減らす工夫 ★ ●7本を4本に減らす デコーダIC 1桁は9までなので、それを2進数で表すと、4桁の2進数になります つまり 4桁 → 4ビット → 4本のIOピン使用 4ビットで0〜9までの数値が表せるので、マイコンでは4本のIOピンを使いH,Lの出力をだし、途中で、デコーダICを使い0〜9までの数値用に変換して、7セグを光らせる各ピンの信号にするという方法です。 2進数→10進数に変換することをデコード(その逆がエンコード)と呼ばれるので、デコーダICを使用します。 74LS47を使用しました。 (デコードと難しそうですが、、実際はピン節約するだけなので 4ビットのH,Lの組み合わせで表示に必要な7本のLEDのどれかを光らせるH,L信号になったらいいんです。PICとかでも、4ビットの入力を受けて足から7ビットH,L出力するだけなので出来ます) アノードコモンの7セグでは 74LS47、247のようなIC74LS47は 入力の4ピン以外に、RBI、RBO端子などがあります。頭の不要なゼロを非表示にする機能で、論理を考えるとよくわからなくなってたんですが、こちらのHPに詳しい内容が書かれていました。 これ使うには桁数の個数ぶんのICが必要なんですね。(あたりまえなのかな) └ 電子工作 − 7セグLED (ここの”ブレッドボードブルース” なかなか楽しいブルースです^^) ★ 桁数での工夫 ★ ICを間に使うと、1つの7セグで4本(4ビット)のピンで数値が出来るようになりました。 でも、桁数が増えると 4×桁数で なかなかの数のピン数が必要になります。 そこで 桁数が増えても、IOピンを減らす工夫として ダイナミック点灯 といわれる方法がよく使われています。 これは全部の桁表示器をつないでしまい、いっぺんに同じ数値を表示させる方法です。 (下の回路図参照) 既にいろんなHPに解説されていると思うので、調べてみてください。 【簡単に説明】 表示器を全部横につないでしまうと、全桁 同じ数値が表示されます。 全部の桁 同じ数値を表示してどうするんだ? と思いますが、 例えば 21 という2桁の数値なら それぞれ、 2 1 と 各桁違う表示でなく、表示器を全部つなげているので まず1を表示させると 全桁 同じ数値 1,1 と全部の桁が表示になる。 そこで、通電で 最初の桁しか表示しないように、1桁目だけ表示されるようにします。 次に 2を表示させると 全桁 同じ数値 2,2 と全部の桁が表示になるが、2桁目だけを表示させる。 すると
これを瞬時に高速で切り替えて表示すると 連続した数値に見える という残像の表示方法です。 これだと、全桁つながっているので、数値の表示には デコーダICで節約して4本 そして、各桁を表示させられるように、各桁の通電のON、OFF制御に 1本 ×桁数 4本+桁数 だけのI/Oピン数だけで7セグでの数値ができます。(3桁だと 4+3で7本) このダイナミック点灯などは、桁数が増えるとピン数がドンと増えてくるので、必要度が高い方法です。 でも、途中のデコーダICで 7本→4本にへりましたが、3本減ってる(節約できた)だけですね。 (デコーダIC使わなくても 7本+桁数 だけのI/Oピン数でいける) この 途中のデコーダIC回路を作るコト と 3本のピンが減らせるコト 天秤にかける必要があります^^; (もちろん、このICにも ちょっとした7セグ表示用の付加機能はありますが) IOピンに余裕があるなら、デコーダICで数本だけ減らす回路は無くてもいいかもしれません 回路LCD表示は、一度作れば多桁の数値なんて簡単に表示できるのに較べ、さすがに配線作業がとても大変でした。 アノードコモンの7セグ デコーダICに 74LS47 各桁通電ON,OFFに Tr 1085 を使用した回路 Trの通電切り替えは作ったテストボードで使用できるIOポートの関係から、とびとびの違うポートになってしまってます。 本来 入力の A0〜A3 などは5k〜10kΩ程度でプルアップすべきです。(お行儀よく、しておきましょう) プログラムまず、テストに簡単に数値を流すプログラム
ソースファイル 同じ数値を各桁ごとにタイマーAの割り込みを使い、0.5秒ごとに流れる表示 (タイマーAの設定については 以前のタイマーALED点灯記事を参照してください) 単純ですが、数字が順に流れる・・・これだけでなんか楽しい! 数値表示というより、光りモノ工作なところが楽しめます。LCD液晶表示でこんなことをしてもおもしろいと感じませんが、これがLEDなところかもしれません。 わかりやすくcase分岐を使って0〜2で、各桁の7セグの通電ON、OFFを切り替え、表示と非表示にしました。 【改良実験】 ・切り替え速度を早め タイマAの時間設定を 0.5s → 0.3125S TA.TMA.BYTE=0x0B; /* 時計用クロック 時間0.3125s 0000 1011 */ にすると表示がチラつきますが、ほぼ連続した数値になって見えるのがわかります。 ・さらにもっと高速に 高速クロック使用 φ/8 にすると TA.TMA.BYTE=0x07; /* 高速クロック 時間φ/8 0000 0111 */ ちらつき無く表示されているのがわかります。 少しずつ切り替え速度を上げると、ダイナミック点灯がよくわかります。 3桁数値の表示3桁の任意の数値を表示してみます。
ソースファイル _7seg_out(719) の部分に表示する数値を入れます。 各桁に分解して配列に入れ、通電on,off の操作をしています。 num[0] = 0x00; //数値データ は16進数にしていますが、普通に10進数でも大丈夫 頭に不要なゼロがある 003 030 のような場合 003 → 3 030 → 30 のように 頭のゼロを非表示にする処理を加えてあります。 実行はテスト用に _7seg_out(719); for(testI=0; testI<800000; testI++); //しばらく待つ _7seg_out(3); ・ ・ と、違う数値をしばらく表示して、いくつかの数値が切り替わって表示されるようになってます。 |
3664F,3694Fで始めるH8 | 500円で始めるPIC | 始めるAVR |
メインページへ |