最近お盆前進行か知りませんが、仕事が忙しくなかなか趣味の電子工作に時間が充てられません。かなり欲求不満気味です。
先日入手したドットマトリクス表示のLEDですが、ちょっとドライブするソフトも含めて遊んでみました。
組み立て全景
上のブレッドボードは左から74HC595×2、TD62083AP、LEDアレイ
下のブレッドボードはPIC16F648Aのみで内蔵クロック発振モードなので外付け発振子はない
COL側をシンクタイプのトランジスタアレイで受けて行を選択させればLED1つあたり10mAでドライブした場合、最大電流80mAを楽に受ける事ができます。この使い方は多分メーカーが想定しているピン配置とROL/COLが逆の使い方でしょう。
列方向(ROW側)に全部で8本の出力が必要となるのですが、18pinのPICを使うと他の信号を入力に割り当てたりした場合に確実にピン数が足りなくなります。そこでラッチ付きシフトレジスタの74HC595を使ってドライブさせます。最大定格は500mWですので、8点×10mA×5V=400mWと定格ぎりぎりの使い方で感心しませんが、常時最大定格近くで動作している訳ではないので、良い事にしてしまいます(データシート上では65℃までは500mWでOKとされている)。
さらにピン数を稼ぐために列方向(COL側)をドライブするトランジスタアレイをオンさせるのにも74HC595を使用すると行・列の組を8ビット×2で16bitのシリアル出力をすることで1行の表示をできます。この方法だと3本のデータ線で8×8のドットマトリックスに表示出来ます。
74HC595はデータラッチを行う事でシフトレジスタ出力を固定出来ますので、1行分のデータを送出した後にラッチをかけて表示完了、次の行のデータ送出を・・といった感じで全行・全列にダイナミック表示を行い、8×8の中に任意の文字・記号等を表示する事ができます。
実際に周辺回路を組んで、PICでドライブしてみました。
(概念的回路図)
+5と表示してみました
普通は列方向にフォントデータを設定するが、これは行方向でフォントデータを設定している。
数字の左側のエリアは他の記号を表示させたいので、左側だけデータを変更したい時はこの方が便利そうである
ユニットと周辺回路が大きくなったので手持ちのブレッドボードに収まらず、PICは別のブレッドボードになってしまいました。これだけの結線をすると1つのブレッドボードで組むにしても、けっこう大規模な感じで配線が大変です。そのまま半田付けして試作兼治具基板を作りたくなりましたが、後で変更したり試したりすることを考えると「うぐぐっ!」と、めげそうになったのでそのままブレッドボードで組んでしまいました。実際に8×2系統で出力するつもりで組んでいましたが、以外と16bit一本の方がすんなりだったので配線の変更が生じ、ブレットボード組で助かりました。
配線量が多いので、配線用のジャンパだらけです。
ワークに表示データ8バイトのメモリを割り当てて、表示ルーチンは定期的に呼び出し、操作側で表示用のデータを書き換える事で表示を変更させます。プログラムは単純に表示用のデータを順次、対応する各行のデータとして出力する表示ルーチンをメインループ内で呼び出しているだけです。
CCS-Cで書いたテスト用のプログラムでデバイスの初期設定やメモリの初期設定も含めてたった60Hワード程度ですので、表示以外にまだまだプログラムを割り当て可能です。
ダイナミック表示を定期的に呼び出すのではなく、TMR0の割り込み等で表示操作をすると、表示ルーチンを明示的に呼び出す必要がなくなります。この場合は表示のちらつきを抑えるためにTMR0は内部クロック動作はプリスケーラ無しで最短周期で処理させます。従って表示処理そのものはかなり短く行う必要があります。
意外と狭い8×8ドットの表示で何ができることやら・・。表示フォントも5×7ドットとすると左3列分が右側部分と隣接し、全部使えないので、4×7ぐらいで作らなければなりません。そもそも何のために使うかまだまったく考えていません(笑)。NOx規制のおかげで自家用車の買い換えを迫られているので、次の車に載せる何かに使用するつもりです。しかし、無理に18pinのPICで操作せずに28pinの16F876や40pinの16F877などでROL/COLともにI/Oを8本ずつ使用して処理させた方が絶対に楽です。実装面積やコスト的にはその方が有利かも・・。
いやいや、趣味ですからそこはテクニカルな所を追求したり、自分のやりたいようにやれる所を生かして好きなようにさせて頂きましょう。今回は74HC595のドライブを勉強させて頂きました。
コメントする