16セグメントLEDを使ってPCサインボードを作る

16セグメントLEDでUSB経由PCコントロールのサインボードを作る・ハード編

⇒16セグメントLEDに付いて。
数字を表示する素子として、7セグメント表示器があります。電卓でおなじみの日の字型表示素子です。
これを拡張して、アルファベットを表示出来るようにしたのが16セグメント表示器です。名前のごとく、表示素子が16個(小数点を入れると17個)集まっています。
16セグメントLEDは各エレメントがLEDでできています。液晶と比べて、消費電力の点では不利ですが、自ら発光する素子のため、表示にインパクトがあります。
また電流を流すと発光する単純な機構のため、制御が簡単な利点もあります。


[
ちなみに、左のLEDに乗っている小型のユニットが KBC-USBmini-Pです。

前おきが長くなりましたが、この16セグメントLEDを使って、メッセージを表示させるのが、今回の目的です。

で、肝心の16セグメントLEDですが、共立電子産業1個50円也のウルトラ(死語)安価で販売しています(在庫限りらしいので、販売していました、になっているかも知れませんが)
安く入手できなければ、こんな恐ろしい企画は思いつきません(昔は1K円くらいしました、もちろん一個の価格です)
ここは大人買で、どんと16文字が表示できる様に買い込みます。ついでにPCからUSB経由で表示したいので、KBC-USBminiなるモジュールも一緒に買い込みました。
表示器ですが、写真で見るのと、実物では、ボリューム感に差が...
でかい。
たかだか7cmの高さですが、横に並べると、相当なものです。一応16文字ともくろみましたが、最終的には8文字になってしまいました。
まあ、色々な意味で8文字で楽ができましたが。

⇒表示の明るさを決めます。
データシート(一枚きりです)に記載がないので、適当な抵抗を付けて、目視で決定しました。
共立のブログに商品紹介がありましが、これには20mA流していると書かれていました。しかし20mAではまぶしすぎます。
室内で使う分には、セグメントあたり5mAも流すと十分の様です。

⇒次はドライブ方法を決めます。
16文字とはいえ、正直にスタティック駆動すると16セグメント×16文字=256個のドライバが必要になります。
これでは、大変なので、ダイナミックドライブにします。
スキャン桁数が問題ですが、16桁一括スキャンはいくら何でも無茶な気がします。8桁スキャンにするとデューティーが1/8でこれくらいならまあ大丈夫思われますがダメだった場合、出来たものを変更するのも厄介です。
なので、安全策をとり4桁スキャンとします。
先の実験で1セグメント当たり5mAとしましたが、4桁分をドライブするので、セグメント当たり4倍の20mA流せば十分な事になります。
しかしながら、人間の目は変化のエッジで明るさを感じるらしいので、ダイナミックドライブにすると、効率が良くなります。
なので20mAは必要ありません。

ここは、逆発想で行きます。
コントロールをPCからUSB経由で行う予定でしたので、USBの最大電流である500mAを中心に考えます。
最初の予定は16文字表示でした。
16文字を4桁ダイナミックで点灯させるため、瞬間的に点灯しているのは、常に4文字分になります。
すべてのセグメントが点灯すると64セグメントになりますので500mA÷64≒7.8mAです。
セグメントドライバにはトランジスタを並べると厄介なので、ドライバアレーを使います。8素子が1パックに入ったTD62083が入手しやすいのでこれを使います。
ドライバとセグメント電流が決まりましたので、制限抵抗の値を計算します。
LEDの電圧降下を1.8V×2(素子内部はLEDが二個直列)で3.6Vの降下とTD62083の電圧降下を0.7Vとして4.3Vが降下分になります。
電源はUSBなので5V、残り電圧は0.7Vになります。
抵抗値は0.7V÷7.8mA=89Ωになります。91Ωが一番近い値ですが、手持ちのある100Ωを使います。
出来た回路図は次の様になります。


4桁ダイナミック表示回路

この回路図は1グループ分の4桁ダイナミックです。16桁分なら、この回路が4組必要になります。
セグメントデータはシリアル転送、パラレルラッチのシフトレジスタ、TC4094を使います。
このICなら、いくらでも順送りで増やす事ができ、データ、クロック、ストローブの3本だけで制御できます。

次は制御部ですが、とりあえず、この当たりでカタチに入る事に。
表示は、メモを貼り付けられるコルクボードの上部に一列に並べるつもりです。ここに16文字分のLEDを並べると、かなり大きめのコルクボードが必要になります。
近所のホームセンターには、相当大きなボードまで売られていましたが、大きいと場所が要ります。
8文字なら小さいコルクボードでOKなので、縮小決定。(実は、16文字分の配線が厄介になっただけ)
この時点で8文字表示に決定しましたので、USBから電源を取る制限抵抗計算は2倍流しても足りる事になります。
しかし、もしかして...やっぱ16文字って可能性もあるので、計算時点のままの抵抗値で作成します。

⇒次は制御部
CPUに共立電子から購入したKBC-USBminiを使うので、PICのCPUボードを作る手間は省けます。
制御部に必要な回路は、桁のドライバくらいです。
電源はUSB端子から供給します。KBC-USBminiのUSB端子に供給されるDC5Vをそのまま拝借します。
オフラインの場合は、USBミニ型のプラグを持ったACアダプタを使えばそのまま給電できます。
携帯機器に付属していて使わなくなったACアダプタでも、USBミニのプラグが付いていれば使用できます。


ここで桁ドライバに必要な電流を計算します。セグメント電流7mA×16セグメント×4桁(実際は2桁)で448mAになります。
手持ちに2SA950(IC=800mA)のトランジスタがあったのでこれでドライブします。
hfeを100として448mA÷100≒4.5mA、 5V電源なので、470Ωをつなぐと8mA程度のベース電流になりますので余裕を見てこの値とします。多分1KΩでもドライブできるとは思います。
データをシフトレジスタに送り出す方法として、ハードSPIが使えそうなので、4094のクロックとデータはPICのSCKとSDOに接続しておきます。
ダメなら、プログラムのビット制御で送れば良いでしょう。

ちなみにKBC-USBminiはPIC18F14K50を搭載したCPUモジュールです。
PIC18F14K50はmicrochip社のPIC18シリーズの石でUSBインタフェースを持っています。
今回のサインボードはPCからのUSBコントロールとしましたので、USBインタフェースは必須です。
FTDIのUSBシリアルコンバータ+適当なCPUでも良いのですが、16セグメントLED購入のついでにプチと。

回路図はKBC-USBminiに桁ドライバをちょいちょいと追加


制御部回路

あとは、コルクボードにLEDを取り付けて、配線をシコシコ。16セグメントLEDを4個一組として、全てのセグメントをパラレルに配線します。
基板として製作が必要なのは、4桁のダイナミックドライブ回路(この図の点線の中の部分で、上の回路図)が2組と、この制御回路を作ります。
根性があれば、4桁のダイナミックドライブ回路を4組作れば、当初の目標である16文字表示になります。
で、めげてしまったので8文字表示になったのですが、配線は制御部に書かれている点線のユニットの右側の二つを配線します。左側の2個への配線はいりません。

出来た写真です。
[写真、おもて] [写真、うら]

この時点では、まだソフトを作っていなくて、動いていませんが、おもての写真は完成した時点の写真の流用です。
点灯していない以外はこの写真と同じ状態になっていました。
うら側は、LEDの足を露出させるため、コルクボードに掘り込みを入れています。
LEDは前から押し込んだだけですが、配線を行うと以外としっかりしています。

⇒次にソフトをつくります。
必要なのは、PIC側の表示用のファームとPC側のコントロールです。
PICのUSBコントールソフトはmicrochip社から入手できます。
USB部分は使用するPICに合わせて変更が必要です。また16セグメントLED制御部分は追加で製作しなければなりません。
詳細は別ページ、「16セグメントLEDでUSB経由PCコントロールのサインボードを作る・ソフト編」です。

このままの仕様でよければ、HEXをダウンロードして書き込めばOKです。
コンパイル済みの、KBC-USBmini用16セグメントLEDコントロールファーム(16seg_ct.hex
実行形式のPC側コントロールプログラム(16seg_pc_ctrl.exe

** PICのHEXを書き込むにはICSP対応のプログラマーが必要です。microchip社のpickit2が比較的安価です。
** PC側のプログラムを実行させるにはwindows上に.NETフレームワークが必要です。入っていない環境でプログラムを実行させるとエラーを表示します。その場合はmicrosoftから.NETフレームワークを入手してインストールしてください。

サインボードの仕様は以下の様になっています。
・オフラインモード
PC(USB)に接続しないで、電源のみを加えると、PIC内部のEEPROMに記録されたメッセージを表示します。
電源はUSBコネクタに供給します。
昨今、携帯機器用でUSBミニのオスコネクタが付いたACアダプタが安価で売られていますので、これを電源に使います。

・USBコントロールモード
PCのUSBに接続した際のモードです。
表示的にはオフラインと同じですが、PCから表示文字を送り込んだり、EEPROMに保存する事ができます。
表示文字をサインボードに送り込むには、USBを経由するコントロールソフトを製作するか、16seg_pc_ctrl.exeで行う事ができます。

USB経由の表示文字列の制御内容はソフト編の後半をごらんください。

シフト表示の動画

動画が30fpsのため、ダイナミックスキャン+シフト表示とタイミングずれを起こして、ギクシャクした表示になっていますが、実際には滑らかにシフトしています。

16seg_pc_ctrl.exeを使った文字列の変更画面


(A)、ステータス:USBの接続、未接続の表示
(B)、文字列入力BOX:表示させたい文字を入力します(最大60文字)
(C)、シフト表示のチェックBOX:チェックを入れると、シフト表示。チェックしない場合は固定表示。
(D)、即時表示更新::シフト表示の終点を待ってから指定文字列を表示するか 即表示させるか
(E)、16桁のチェックBOX::チェックを入れると、シフト表示の場合に空白を16文字空ける。チェックしない場合は8文字。
(F)、表示更新ボタン:文字列入力BOXに入れた文字を表示ボードに転送して、表示させる。
(G)、EE書に記録ボタン:文字列入力BOXに入れた文字を表示ボードに転送して、EEPROMに保存すると共に表示させる。
(H)、シフト速度のスライドバー:シフト表示の移動速度を調整します。

使い方は、文字列入力BOXに表示させたい文字列を入力して、表示更新ボタンを押すと、メッセージが表示されます。
即時表示のチェックを入れていると、ボタンを押した瞬間に新しい文字を表示します。チェックを外している場合は、シフトが一巡した後で、新しい表示に入れ替わります。
シフト表示を外した場合は先頭の8文字か16文字を表示します。
表示更新ボタンの代わりにEE書に記録ボタンを押した場合は、表示文字列をサインボードのEEPROMに記録した後に表示されます。
EEPROMに記録された文字列はオフライン表示に利用されます。