はじめに
前回は、PICマイコンを使って2色マトリックスLEDに複数色を表示する基本を紹介しました。今回は、文字パターンの色を変えながらスクロールさせます。
概要
実験環境は、実験(その1)と同じです。今回は、PICマイコン内蔵のEEPROMに予め書き込んだデータを読み出してマトリックスLEDに表示します。EEPROMは、電源を切っても内容が消えない不揮発性フラッシュメモリーで、PIC16F18857は256 byteのEEPROMを内蔵しています。EEPROMの初期化は、次のコマンドで行います。
__EEPROM_DATA(0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01);
()内は初期化するデータで、8 byte単位で記述する必要があります。
EEPROMから1 byteを読み出すには、次のコマンドで行います。(Adrs:読み出す場所のアドレス)
eeprom_read(Adrs);
内容
ここでは、”Red Green Orange “という文字パターンをそれぞれ赤 緑 橙(赤+緑)の各色で右から左に繰り返しスクロールさせる例で説明します。なお、スクロールの基本的なシーケンスは、過去記事の「温湿度計(+メッセージ表示)の作製」と同じです。同記事のフローチャートを参照して下さい。
以下は、本例のプログラムです。(MCCを使用)
冒頭で、EEPROMを文字パターンで初期化しています。1文字8 byteです。また、EEPROMの内容は、XIDEメニューバーの「Windows」→「Target Memory View」→「EE Data Memory」から確認できます。
プログラムの続きです。
表示用バッファとして、配列変数Table[8]を用意しています。EEPROMから読み出した8 byteを一時的に格納して、マトリックスLEDに出力するためのものです。
RedStartとRedEndは、赤色表示の開始と終了のEEPROMアドレス指定。GreenStartとGreenEndは、緑色表示の開始と終了のアドレス指定。それ以外のアドレスは、橙色表示です。(上記「EE Data Memory」の色分け)
スクロール表示は、Shift関数とDisp関数で制御しています。Shift関数は、EEPROMから読み出した8 byteをTableに格納し、Disp関数でマトリックスLEDに出力した後、読み出しアドレスをカウントアップし、1 byteシフトした8 byteをTableに格納して出力を繰り返します。読み出しアドレスがEndAdrsで指定したアドレスに達すると、StartAdrsで指定したアドレスに戻ります。
Disp関数は、EEPROMアドレスに対する表示色でマトリックスLEDに出力します。また、for(j=0; j<15; j++)文は、8 byte出力の繰り返し回数、すなわち一つのパターンの表示時間を意味し、条件式でスクロール速度が変わります。
結果
本例の動画はこちら。
まとめ
ここまで、PICマイコンで直接マトリックスLEDを制御しました。回路やプログラムはストレートで分かりやすい一方、マイコンのI/O数も限りがあり、複数のモジュールを扱う場合、マイコンと直のパラレル接続は有用とはいえません。そこで次回は、マイコンのシリアル信号をシフトレジスタでパラレル出力する方法をトライします。
– 以上 –