PIC16F84電子遊戯(43-47)
最終更新日:2001年11月4日

仮面ライダーシステム・その2(マルチマトリックス)を作ろう
いよいよ仮面ライダーシステム・その2の製作に取り掛かります。
今回はちょっと趣向を変えて(というより、昔のまんま?)LEDの表示装置を作りましょう。
今年の夏に名古屋方面に出張に行ったときに、ジャンク屋で2色表示の16x16ドットマトリックスLEDモジュールを密かに購入しておりました。今回はこれを使って、マルチ(3色表示が出来るという意味)マトリックス256を製作しましょう。
さて、2色表示のLEDはジャンク品なので、品番などはわかりません。
試行錯誤でLED表示の足をチェックしていたら、なんとかアノードコモンの2色LEDが組み込まれていることがわかりました。
それが16行16列あるわけです。
これをPIC16F84のポート数で駆動する方法を考えなければいけないのです。
色々考えた結果、ラッチ付きのシフトレジスタを使うことにしました。
まずは回路図を見て下さい。
(仮面ライダーシステム・その2・マルチマトリックスの回路図)
シフトレジスタは74HC4094を使います。8ビットシリアル入力/パラレル出力シフトレジスタ(出力ラッチ付き)を2個直列にして16ビットのシリアル/パラレル変換器として使います。ラッチ付きなので、制御が少しですが簡単になります。
これぞれの色ごと(赤色、緑色)に16ビットのデータをラッチします。
スキャン側は今までのマトリックスの製作と同様に74HC154を使用して、一列ごとに駆動していきます。詳しくは後ほど説明いたします。
仮面ライダーシステム・その2(マルチマトリックス)の完成姿
(完成姿と内部回路とジャックの写真)
仮面ライダーシステム・その2(マルチマトリックス)の概要
16x16ドットマトリックスLEDに3色を駆使して文字を表示させましょう。
もちろん文字は右から左にスクロールします。
今回も外部から制御するコネクタを設けています。
せっかく3色の色が表示可能なのですから、ソフトをちょっと工夫して簡単な制御でいろんなバリエーションの文字表示をしましょう。
仮面ライダーシステム・その2(マルチマトリックス)の基本仕様
基本的に今まで製作したマトリックスと同様なのですが、基本仕様の説明をします。
1)2色LEDを駆使しながら3色表示による文字表示を行います。
文字は右から左にスクロールします。
2)SW1を押すと文字表示を始めます。一連の表示は約20秒で自動的に終了します。
「IN」端子からSW1を押す操作をリモート操作することが出来ます。
文字表示中にSW1を押せばスクロールは停止します。(そうです、写真撮影用ですね。)
もう一度押せばスクロールが再開されます。スクロール停止中は時間がカウントされないので決してスクロールを止めたままにしないようにしましょう。
3)SW2を押すと表示モードを変更することが出来ます。表示モードは8パターンあります。
今回は「IN」「OUT」を並列に設けていますので、他のライダーシステムに接続することを可能にしています。但し、V3の時のように動作終了後の「OUT2」の端子は設けておりません。
一応動作チャートを記します。
(動作チャート)
仮面ライダーシステム・その2(マルチマトリックス)のポート割り付け
ポート名 入出力 機能
RA0 OUT 74HC154駆動(A)
RA1 OUT 74HC154駆動(B)
RA2 OUT 74HC154駆動(C)
RA3 OUT 74HC154駆動(D)
RA4 OUT 74HC154制御
RB0 OUT シフトレジスタクロック
RB1 OUT シフトレジスタデータ
RB2 OUT 緑LEDデータラッチ
RB3 OUT 赤LEDデータラッチ
RB4 OUT N.C.
RB5 IN SW2(表示モード変更)
RB6 IN SW1(アクションスタート)
RB7 IN 「IN」
仮面ライダーシステム・その2(マルチマトリックス)のシフトレジスタへの動作
表示データはシフトレジスタに順次データを送り込むことにより実現しています。
その動作を簡単に示します。
緑色LEDのデータを16ビット分順次シフトレジスタに送り込む
緑色LED用のシフトレジスタをラッチする
赤色LEDのデータを16ビット分順次シフトレジスタに送り込む
赤色LED用のシフトレジスタをラッチする
この動作を列ごとに行うことにより、面での表示を行っています。
このシフトレジスタはラッチ機能があるため、クロック出力とデータ出力端子は緑色LED用、赤色LED用のそれぞれのシフトレジスタに対して個別に行う必要がなく、入出力ポートの少ないPIC16F84で駆動するにはベストではないでしょうか。
仮面ライダーシステム・その2(マルチマトリックス)の表示文字データ
今回は2色LEDを使用しますので、LEDに対する表示データを作成するのに大変苦労しました。いつもはグラフ用紙などの格子状のものに手書きで書き込んでデータ値を計算していたのですが、今回は膨大な(?)量になるため、エクセルで自動計算させる表を作ってしまいました。まずはその一部をごらん下さい。
私の製作では「仮面ライダー登場」と表示させる予定でいます。
上図のように緑色LEDを点灯させたいときは「1」を、赤色LEDを点灯させたいときは「2」とエクセルのマスに記入すると自動的にPICに指定すべきデータを文字の下部に表示するようにしました。一応処理を簡単にするためにデータ上では「緑色」と「赤色」の重なった「橙色」は指定出来ません。しなしながらこれらのデータのみで8パターンもの表示をしてしまう表示モード切り換え機能も考えていますので、データ的にはこれで充分です。
私の使ったエクセルのソフトもここで公開しておきます。圧縮していますので、展開してお使いください。皆さんもこのソフトで自分の好きな文字を定義しましょう。
データ作成ソフト(エクセル)のダウンロード:kamen.lzh(21kB)
仮面ライダーシステム・その2(マルチマトリックス)の表示モード切り換え
表示のバリエーションを増やすために、少ないデータで工夫しています。
LEDへの表示データとして、上図からもわかるように緑色LED用、赤色LED用のデータがそれぞれあります。
それぞれのデータをどのシフトレジスタに送り込むかによって表示バリエーションを変えています。
表示モード 緑色シフトレジスタ 赤色シフトレジスタ 表示内容
モード1 緑色データ 赤色データ 緑縁取りの赤文字
モード2 赤色データ 赤色データ 橙文字
モード3 緑色データ 無し 緑縁取り
モード4 無し 赤色データ 赤文字
モード5 赤色データ 無し 赤縁取り
モード6 無し 緑色データ 緑文字
モード7 赤色データ 緑色データ 赤縁取りの緑文字
モード8 緑色データ 緑色データ 橙縁取り
(表示バリエーション)
ここで実際の表示がどのようなものか見ていただきましょう。
(赤色と橙色が判別しにくくて申し訳ございません)
仮面ライダーシステム・その2(マルチマトリックス)の割り込み処理
今回のマルチマトリックスの割り込みでは大きく二つの処理を行っています。
まず一つ目は割り込みが入るごとにカウンタをインクリメントしてトータルの動作時間をカウントする部分です。
int_count2 int_count1
タイマー割り込み時間カウント2 タイマー割り込み時間カウント1
「int_count1,int_count2」を約20msecの割り込みが入るごとにインクリメントします。
トータル16ビットのカウンタですが、メインルーチンで10ビット目をチェックすることにより、約20秒の時間を得ることが出来ます。
二つ目はスクロールを移動する時間をカウントする部分です。
acount2 acount1
スクロール時間カウント2 スクロール時間カウント1
一応16ビットは用意しましたが、スクロールする時間が速いので、実際には2ビット目をチェックして約80msecの時間を得ることが出来ます。
このタイミングで左に文字を1行スクロールします。
仮面ライダーシステム・その2(マルチマトリックス)のスクロール処理
実際の処理はLEDの左表示スタートのデータ位置を変えることによって、文字がスクロールしているように見せています。
文字データ上のデータの並びは左データから順に並んでいます。
スクロール時間(約80msec)ごとに、表示スタートオフセットを「0から15」に変化させています。オフセット「15」の次は文字位置をインクリメントしてオフセットは「0」にしています。
zurasu moji_count
LED左の表示オフセット 表示文字位置
表示文字位置は8文字表示後「0」にクリアします。私はたまたま8文字表示させているだけなので、このあたりは皆さんの好みで改造して下さい。
仮面ライダーシステム・その2(マルチマトリックス)のSW2の動作
SW2は表示モードを切り換えています。「disp_mode」のビットの立つ位置を変えることによって8種類の表示モードを切り換えています。
disp_mode
7 6 5 4 3 2 1 0
モード8 モード7 モード6 モード5 モード4 モード3 モード2 モード1
ビットの立つ位置はデータを左シフトすることにより変化させます。
仮面ライダーシステム・その2(マルチマトリックス)のSW1の動作
ソフト的にはストップモードからはSW2でもSW1でも立ち上がることが出来ます。
外部接続出来るのはSW1と同等の処理が出来るポートにしていますので、とりあえずSW1をアクションスタートのスイッチとしておきます。
そこで、アクション動作中にはSW1は無用のスイッチとなってしまうので、写真撮影用の意味も含めてこのスイッチにアクション一時停止の機能を新たに設けることにします。
run_mode
7 6 5 4 3 2 1 0
- - - - - - - アクション一時停止
0ビット目が「0」の時アクション動作、「1」の時アクション一時停止とします。
アクション一時停止中は割り込みが入っても割り込み内での処理をしないようにすることによって文字のスクロールを止めています。
仮面ライダーシステム・その2(マルチマトリックス)の全ソースリスト公開
上記の内容と前回の説明を理解できればソースを読むことは簡単と思います。
いつもいっておりますがソースは私からのひとつの提案にすぎません。皆さんで自由に改造してみて下さい。今回も長くなるので別ページにしました。
ソースリストはこちらへ
仮面ライダーシステム・その2(マルチマトリックス)の全HEXコード
HEXコードです。メモ帳などのテキストエディタにコピー&ペーストしてファイルすればPICに書き込めるデータに出来ます。
:020000002A28AC
:080008008C0003088D000B11B0
:1000100063308100101825280130AD07031C122819
:100020000130AE07013093070318940A131D2528E9
:100030009A0AE7201A08103C031D2528F820960A82
:100040001608083C031D2528F2200D0883008C0E9D
:100050000C0E0900AA23FF308500C0308600B523AE
:10006000EB20E720F220F520F820003090008B13E1
:1000700000008B1200000B1100000B1000008B150C
:100080000000EE20C03086000000630000008B11ED
:1000900000008B1700008B160000F220061F4E2870
:1000A0002E193728861A5B28E120E120861A5B2862
:1000B000FB20861E5928061B6428E120E120061B30
:1000C00064280121061F62282003103885000615C8
:1000D00000008615000019187C289918872819191E
:1000E000922899199D28191AA828991AB328191B1A
:1000F000BE28991BC928C9282E210721CD210721F7
:10010000061100006C2207210B230721D4286C2242
:1001100007210B230721061100006C2207210B2366
:100120000721D4282E210721CD2107210611000007
:10013000FF300721FF300721D428FF300721FF308F
:100140000721061100006C2207210B230721D42868
:10015000FF300721FF300721061100002E21072163
:10016000CD210721D4286C2207210B23072106115A
:100170000000FF300721FF300721D4286C2207211F
:100180000B230721061100002E210721CD21072175
:10019000D4282E210721CD210721061100002E2170
:1001A0000721CD210721D428861100000512000067
:1001B000E12005160000A0030319DF286428EB20C6
:1001C0005028FF3095000000950BE3280800003010
:1001D0009300940008001030A00008000030AD002B
:1001E000AE000800003096000800013099000800B9
:1001F00000309A000800991FFE28F5280310990D79
:100200000800101C052910100800101408009800A0
:100210008610981B861429218610181B8614292104
:100220008610981A861429218610181A86142921F6
:1002300086109819861429218610181986142921E8
:1002400086109818861429218610181886142921DA
:10025000080006140000061000000800200897009F
:10026000160E97071A0897073C30970701308A0047
:1002700003188A0A170882000034FF34FE348034E1
:10028000BF34BF3498349F34A734B3349F34CC3454
:100290009F34B334A0348F34FF34FF348034BF3400
:1002A000BF34A034BF34BF34A534A534BF34BF3409
:1002B000A034BF34BF348034FF34FF34FF34FE3405
:1002C000FE348E34AE34AE34A634B6349034DC34DE
:1002D000CF34E334F834FF34FF34FF34FF34F834E0
:1002E000FA34FA34FB34F9348134BF34BF34803407
:1002F000FF34FF34FF34FF34FF34FF34FF348C34D9
:10030000AD34AD34A434B5349134DB34CE34EF3471
:10031000EB34E034FF34FF34FF34FF34FF34FE3479
:10032000FC34FD34FD34FD34FD34FD34FD34FD3446
:10033000FD34FD34FC34FF34FF34FF348E34AE34EE
:10034000A034A734AF34BD34B534B534BD34AF3484
:10035000A734A034AE348E34FF34FF34E334EB34AE
:10036000E834EF34C734D4349E34AF34B7349E34D9
:10037000AE34BE349E34C034FF34FF34FF34FF3417
:10038000FF34FF34FF34FF34FF34FF34FF34FF34D5
:10039000FF34FF34FF34FF34FF3420089700160E7B
:1003A00097071A089707DB30970701308A00031870
:1003B0008A0A170882000034FF343F348F34E33454
:1003C000FB341B34FB34FB34CB34CB344B34CB34D5
:1003D000CB340B34E334FF34FF340334CB34CB342D
:1003E0004B34CB34FB347B344B34CB34CB344B34B5
:1003F000CB34CB340334FF34FF34FF343F34873401
:100400009734973497349734973497349734973494
:1004100087343F34FF34FF34FF34FF34FF34FF347C
:100420007F347F343F349F34CF34E73433349B34CC
:10043000CB34E334FF34FF34FF34FF347F343F34B4
:100440008F34E3347B345B3443344334DB34DB3488
:100450001B34DB34C334FF34FF34FF343F34BF3448
:10046000BF343F347F347F347F347F347F347F34F4
:100470007F347F34FF34FF34FF343F348334AB3474
:10048000EB346B347B345B345B3473347734F73464
:10049000A7348F343F34FF34FF341F345F34433488
:1004A000FB34FB34C334FB34FB34AB34AB34FB34AC
:1004B000FB3483343F34FF34FF34FF34FF34FF34E4
:1004C000FF34FF34FF34FF34FF34FF34FF34FF3494
:1004D000FF34FF34FF34FF3420089700160E9707CF
:1004E0001A0897077A30970702308A0003188A0A99
:1004F000170882000034FF34FF34FF34C034C034A6
:10050000E734E034D834CC34E034F334E034CC3461
:10051000DF34FF34FF34FF34FF34C034C034DF3401
:10052000C034C034DA34DA34C034C034DF34C034D8
:10053000C034FF34FF34FF34FF34FF34FF34FF3462
:10054000DF34DF34DF34CF34EF34E334F034FC34E1
:10055000FF34FF34FF34FF34FF34FF34FD34FD3407
:10056000FC34FE34FE34C034C034FF34FF34FF3476
:10057000FF34FF34FF34FF34FF34FF34DE34DE3425
:10058000DF34CE34EE34E434F134F034F434FF3478
:10059000FF34FF34FF34FF34FF34FF34FF34FE34C4
:1005A000FE34FE34FE34FE34FE34FE34FE34FE34BB
:1005B000FF34FF34FF34FF34FF34DF34DF34D8340A
:1005C000D034C234CA34CA34C234D034D834DF341C
:1005D000DF34FF34FF34FF34FF34F734F734F034C2
:1005E000F834EB34E134D034C834E134D134C1349C
:1005F000E134FF34FF34FF34FF34FF34FF34FF3481
:10060000FF34FF34FF34FF34FF34FF34FF34FF3452
:10061000FF34FF34FF3420089700160E97071A089E
:1006200097071930970703308A0003188A0A1708BA
:1006300082000034FF34FF347F341F340734E73442
:100640000734073437343734B73437343734F73472
:10065000FF34FF34FF34FF3437343734B7343734A2
:1006600007348734B73437343734B7343734373412
:10067000FF34FF34FF34FF34FF347F346F346F3482
:100680006F346F346F346F346F346F347F34FF34B2
:10069000FF34FF34FF34FF34FF34FF34FF34FF34C2
:1006A000FF347F343F341F34CF34E734F734FF3422
:1006B000FF34FF34FF34FF34FF34FF347F341F3402
:1006C0008734A734BF34BF3427342734E734E734C2
:1006D000FF34FF34FF34FF34FF347F347F34FF3482
:1006E000FF34FF34FF34FF34FF34FF34FF34FF3472
:1006F000FF34FF34FF34FF347F34573417349734DA
:100700008734A734A7348F348F340F345F347F3469
:10071000FF34FF34FF34FF34BF34BF3407340734B1
:100720003F340734073457345734073407347F34A1
:10073000FF34FF34FF34FF34FF34FF34FF34FF3421
:10074000FF34FF34FF34FF34FF34FF34FF34FF3411
:10075000FF34FF34831685018601861700000617D3
:100760000000861600008312080083168630810080
:080770008312633081000800D0
:02400E00F13F80
:00000001FF
(V3mat.hex)
仮面ライダーシステム・その2(マルチマトリックス)とV3との連動
前回の製作の「V3システム」と連動させてみましょう。
動作のトリガは「V3」側が受け持つとして接続します。
接続にはモノラルのケーブルが必要です。私はモノラルジャックとシールド線を別々に購入して自作しました。長さは1m程度です。(自作のほうが断然安いです。)
では「V3」のOUT1と「マルチマトリックス」のINをケーブルで接続しましょう。
(コネクタ接続時に動いてしまうのはご愛嬌です。)
ここで「V3」のSW1を押せば同時にV3とマルチマトリックスが動作します。
なぜか動作終了時間が違いますが、これもご愛嬌ということで・・・・
ではその全貌をご覧下さい。
(ちなみにOUT2に接続すればV3のアクション終了後マルチマトリックスが動作を始めます。ふたつではバリエーションが少ないですが、もっとユニットが増えれば接続の仕方にも楽しみが出てきます。)
このようにして「仮面ライダーシステム」はどんどん広がって行きます。
すでにほかの仮面ライダーが準備済みで、トリガとなるセンサーユニットの企画もしております。さらに音声再生ユニットも追加して・・・・・
どうでしょうか、この「仮面ライダーシステム」は永遠に広がっていくのです。
ということで、今回はここまでとしましょう。
これからも益々面白くなる「PIC16F84電子遊戯」をよろしくお願いいたします。

不明点などあればメールお願いいたします。nonchansoft@nifty.com

Copyright(c)2000-2001 nonchansoft