2色ドットマトリックスLEDの実験(その3)

はじめに

これまでは、PICマイコンとマトリックスLEDを直接パラレル接続しましたが、マイコンのI/Oに空きがなくなり、拡張性がなく有用と言えません。そこで今回は、マイコンのシリアル信号をシフトレジスタでパラレル変換してマトリックスLEDを制御します。

TC74HC595について

実験に使用したTC74HC595は、8ビットのシフトレジスタとストレージレジスタおよび3ステートバッファで構成され、シリアル入力をパラレル出力します。(下図)

使い方は、SI、SCK、RCK、Ġを制御すればいいので、マトリックスLEDのような多くの入力を必要とするデバイスに使用されています。以下は、信号入力から出力までの概要です。
SCKで8ビットシフトレジスタに取り込まれたシリアル信号は、RCKで8ビットストレージレジスタに転送され、3ステートバッファを介してQA~QHの端子からパラレル出力されます。更に、QH’を次の74HC595のSIにカスケード接続することで、8ビット以上のパラレル出力も可能です。

具体的に、8ビットのシリアルデータがどのようにシフトレジスタに送られるか下図で説明します。
SCK(Lo→Hi)でシリアルデータ1ビットがレジスタQAに取り込まれます。これを最上位ビットとします。次のSCKで一つ下位のビットがQAに取り込まれ、先のQAの内容はQBに移動します。これを8回繰り返すと、QA→QB,QB→QC, ・・ QG→QHのようにトコロテン式にレジスタの内容がシフトしていき、結果としてQAが最下位ビット、QHが最上位ビットの状態になります。

なお、マイコンからのシリアル送信は、ビットシフトとAND演算で行います。過去記事の「ロータリーエンコーダと7セグメントLEDの実験」を参照下さい。シフトレジスタにデータが格納された後、RCK(Lo→Hi)でQA~QHまとめてストレージレジスタに転送されます。

3ステートバッファは、0と1の他にハイインピーダンスの3通りを出力できるバッファで、トライステートバッファとも呼ばれます。Ġ(Hi)でハイインピーダンスになり、バッファ出力は切り離され信号は出力されません。Ġ(Lo)でストレージレジスタの8ビットが出力されます。実験では、3ステートバッファを表示色の制御に使用しています。下図のように、LED(Green)側の3ステートバッファがハイインピーダンスの場合、LED(Green)には電流が流れないので点灯しません。

内容

下は、回路図とブレッドボードでの実験の様子です。2色マトリックスLEDのアノード、カソード(Red)、カソード(Green)それぞれに74HC595を使用しています。PICマイコンが使うI/Oピンは8本だけです。そこで、マイコンの空いたピンに可変抵抗をつないで内蔵ADCを制御し、スクロール速度を変更できるようにしました。

前回同様、”Red Green Orange “の文字パターンをそれぞれ赤 緑 橙(赤+緑)の各色で右から左に繰り返しスクロールさせます。以下は、本例プログラムの表示関数 Disp()の内容です。なお、74HC595の制御を分かりやすくするため、#defineで次のようにPICピンを定義付けしています。

冒頭のfor(k=0; k<p; k++)文の変数pは、一つのパターンの表示繰り返し回数(時間)で、スクロール速度はpの値、すなわちAD変換値で決まります。
for(i=0; i<8; i++)のくくりで、1表示パターン 8 byteの処理を実行します。
for(j=0; j<8; j++)のくくりは、74HC595の制御文です。制御文では最初に、それぞれのシフトレジスタに8ビット格納後、EEPROMアドレスに対する表示色を、3ステートバッファのハイインピーダンス有効/無効で割り当てています。次に、シフトレジスタの8ビットをストレージレジスタに転送します。3ステートバッファがハイインピーダンスでなければ、転送と同時に出力されます。

結果

本例の動画はこちら。スクロールが徐々に速くなります。

まとめ

74HC595をカスケード接続していけば、少ない信号線でも8ビット以上のパラレル出力が可能で、マトリックスLEDを拡張できます。8×8ドットで物足りなければ、挑戦してみて下さい。次回は、温湿度センサーの測定値のスクロール表示にトライします。

– 以上 –

Appendix

この実験でもMCC(MPLAB Code Configurator)を利用しています。MCCは、PIC内蔵モジュールの条件を画面を使って設定できる便利なツールで、モジュールの制御関数や初期化関数を自動生成し、インクルードします。その中で、今回使用したADCモジュールのMCC設定内容*について、以下吹き出しで補足します。(*内容はPICモデルで多少異なります)