格子蛍石プロジェクト


LastUpdate 2006/03/10

2006/03/10 デジット写真追加
2005/12/30 PC側サンプルソース公開
2005/12/29 本格的に公開

駅とかに設置されてる行き先案内用のLEDマトリクスユニットをUSBで遊んでしまうプロジェクトです

■材料
肝心のブツ(LEDユニット)はコレ


GEB-2294V-0 / SLX-5015-1 
デジットで1個1000円
チマチマと買い続けた結果、合計20個購入

2006/03/09 店内で撮影(協力デジットさん)
ご覧のとおりアキバの某通商よりメチャ安です。

■解析
電源側(CN3)の4線は下記の通り
制御電源+5V
LED電源+5V
LED電源GND
制御電源GND
※ LED電源だけに供給すると制御電源側にも若干流入するので
LED電源を制御する場合はダイオードを入れるなどの処置が必要 ※ 5〜6ユニットごとにLED電源へ2200〜3300μFの電解コンデンサを入れること

制御側(CN1)は下記の通り
1SE
2A/BB
3A4
4A3
5A2
6A1
7A0
8Vss(GND)
9DG
10CLK
11WE
12DR
13ALE
なお(CN2)は次ユニットにカスケード接続できるように配置が逆になっている

■LEDマトリクスユニットの基本動作

1.[A0]-[A4]に書き込みラインの位置(0〜23)をセットする。
普通にインクリメントした方が無難である

2.DG/DRにデータをセットしてCLKを[L→H→L]にすると1ドット分のデータが
シフトレジスタにセットされ24回繰り返すと1ライン分のデータがセットされる。

24を越えた場合は(…というより常に)FIFOでCN2からデータが吐き出されて次段のユニットにシフトされる仕組みとなっている
(例)4ユニットをカスケード接続した場合は96回繰り返せばよい

3.24xユニット分の転送が完了したら
 ALEを[H]にして1CLK
 WEを[H]にして2CLK
 WEを[L]にして1CLK
 ALE[L]にして1CLKすると[A0]-[A4]にセットされてるアドレスにセットしたデータが実際に書き込まれて1ライン分が終了
 シーケンスはデータシートのタイミングチャートをそのままパクッた

4.[A0]-[A4]をインクリメントする。

5.上記1〜4を24回繰り返すと1画面の転送が終り、SEがLowであれば23→0にアドレスが切り替わった時にA-RAM/B-RAMがSWAPされる。 その後タイミングは不定だが実際の表示となる。 (24ライン分書き換えないと表示されないと考えておいた方がよい)


以上で表示までの基本動作はおしまい

■各信号概要
[SE][A/BB]
LEDユニットにはA-RAM/B-RAMというバッファがあり交互に書換え/表示を繰り返す
仕組みになっている。24本目(A=23)のラインを書き終えて1本目(A=0)に戻った時に
自動で切り替えるか手動で切り替えるかの指定をする。
今回は自動でするのでSEとA/BBはLowでかまわない

[A0]-[A4]
書換えラインの指定(0〜23)

[DG][DR]
LEDの緑と赤のデータ。Highで点灯

[CLK]
ドットクロック

[WE]
ALEがHighのときにHighになると書き込まれる

[ALE]
アドレスラッチHighの時に有効

■上記を踏まえた上で実験してみました
旧モルフィのUSB-IOを繋いでチマチマと[H][L]を繰り返した結果

ご覧のような表示が出来ましたが…

10〜20秒/1文字というとんでもない遅さで表示されました
12ユニット付けたら表示するまでに2分もかかる。つかえねぇーなぁ

※「大阪」についてヘ(゚◇、゚)ノ~
…あまりに表示がトロいので「あずまんが大王」の春日歩のニックネームにちなんで表示させました(笑)

なおUSB-IOは便利なのですがUSB1.0のメチャメチャ遅いデバイスです

そこで12ユニットを高速にスクロールをさせる事を想定してUSB1.1以上の接続とし

A.速いデバイスを繋ぎ高速転送させる

B.漢字ROMを組み込んだ上でPCからは文字コードだけ転送させマイコンに制御させる

の2通りの方法を考えました

今回はA.の方法で製作
当初PIC16F877/20MHzを使いシリアル(115.2Kbps)やUSB(USBN9604)でやってたのですが
満足の行く速度が達成できなかったので

AVRmega8515/16MHzとUSB(FT8U245BM)に切り替えました

※USB部分はFT8U245BMのデータシート記載の回路で動作してましたが
コストとスペース的な問題により回路図の通り西日本常盤商興のユニットに変更してます
このUSBユニットは「イイモノだー(マ・クベ)」と宣伝しておきます(笑)

一応、FT8U245BMのデータシート記載の回路でも動作しますので手元に部品のある方はチャレンジしてみてはいかがかな?
http://www.ftdichip.com/Documents/DataSheets/ds245b17.pdf
データシート記載のEEPROMは無くてもOKです

最終的に後述の回路で12ユニット:70fps(クロック18.432MHz)が出ました。
ちなみにPC側でデータを前もって生成しておき一気に転送すると140fpsになります

2ユニット(48x24dot)構成でのパフォーマンス実験結果
USB-IOUSB1.0/LowSpeed0.005fps以下実験用なので使い物にならず
PIC16F877/20MHzUSB(USBN9604)0fpsUSB部分で挫折(笑)
PIC16F877/20MHzCOM/115Kbps27fps↑のシリアル転送化
PIC16F877/20MHzUSB(FT8U245BM)204fps↑を再びUSB転送化
AVRmega8515/8MHzUSB(FT8U245BM)180fps転送データ量を約30%縮小化/ただし8MHz
AVRmega8515/18MHzUSB(FT8U245BM)420fps↑の高クロック化

っつーわけで
AVRmega8515/16MHzとUSB(FT8U245BM)に決定!!

【重要】クロックについて
なおこのコントロールユニットのAVRクロックですが当初16MHzのセラロックを使用しておりましたが
FT8U245BMを接続した所、なぜか不安定になりました。そこでセラロックを止めて安定出力のEXO3を使用しております。

【重要】電源について
電圧5Vで制御側は0.05A程度ですがLED側は最大2.8Aです。1個当たり14W。
当然ですがUSBバスパワー(0.5A)なんて使えません
まして12ユニット分を供給するとなると軽く100Wを超えます。
手近にそのような大容量電源は無かったのですが、PCのATX電源を使う事で解決できました
ついでにATX側のPS-ON端子を使ってLED側電源のON/OFF制御もしてます
※3.3Vと12Vが無負荷となるので何らかの処置が必要かもしれません。(私は何もやってないです)

ATX電源側の20Pin端子は下記の通りで

PinColor Signal
1Orange3.3V
2Orange3.3V
3Black GND
4Red 5V
5Black GND
6Red 5V
7Black GND
8Gray PWR-OK
9Purple+5VSB
10Yellow12V
11Orange
Brown
3.3V
3.3Vsence
12Blue -12V
13Black GND
14Green PS-ON
15Black GND
16Black GND
17Black GND
18White -5V
19Red 5V
20Red 5V


このうち使用している端子は
9Pin +5VSBコントロールユニットの+5V(この端子は電源のメインスイッチ(省略されてる場合も多い)がONだと常に+5Vが供給されています)
7Pin GNDコントロールユニットのGND
14Pin PS-ONLEDユニットへの電源供給信号(この端子をGNDに落とすと全ての電源端子等に電力供給されます)
です。
またコントロールユニットを経由してLEDマトリクスユニットのLED電源の5V(CN3-桃)GND(CN3-黒)へも電源を供給しています


ATX電源側のドライブ用の4Pin端子は下記の通りで

PinColor Signal
1Yellow12V
2Black GND
3Black GND
4Red 5V


このうち使用している端子は
3Pin 5VLEDマトリクスユニットのLED電源  5V(CN3-赤)
4PinGNDLEDマトリクスユニットのLED電源 GND(CN3-緑)
です。

■回路図


■装置

2組198円のスノコを使用(笑)
右下の青/白/燈の配線は+5V電源とPS-ON信号でしてATX電源につながっています

■AVRソース
AVR-MEGA8515用コントロールソース/matrixusb.asm
※データラッチ部分のALE/WE/CLKシーケンスが一部間違えてます。でも動いてるからいいか。

■PC側制御ソース(VC++)※動作チェック用ですので期待しないでね。
PC側制御ソース/host.zip
USB-IO版とかシリアル版とか色々なバージョンのソースが混じってます。
※USB-IO版は動作シーケンスがわかりやすいので参考になると思います。
最終バージョンはServiceThread_FT8U245関数で処理してます。コンパイルにはFT8U245BMの*.DLL/*.LIB/*.Hなどが必要かと思います(本ソースには添付してません)
また、前回公開時から反転処理など改造をチマチマと加えてます(笑)が相変わらず動作チェック用なので
無限ループするなど極悪プログラムです。デバッガで止めてください

■動画
解像度が低いのはカンベン。2.1MBです。(再生されない場合は右クリックで保存してメディアプレイヤーなどで再生してね)

■今後の予定
速度的には問題がなくなりましたのでB.の漢字EEPROMを搭載して転送処理の軽量化を図ろうかと思います

以上