ファームウェア:LED表示機能
概要
ファームウェアはLEDマトリックスへの表示のために 2つのバッファを有している。 1つは 表示用のバッファlmbufで、 LEDマトリックスの各LEDの情報を保持している。 そのビット数は最大4モジュール分のLEDの数 16×32×4= 2,048bitに等しい。 もう1つは、シリアルポートから送られて来たビットデータを そのままスクロール表示する際のバッファとなる スクロールバッファ scbufである。 このバッファの内容を一度にlmbufに転送し、 表示を一度に切り替えるというような使い方もあるので、 scbufの容量はlmbufと同じにしてある。
ファームウェアでは 512μ秒毎に割り込みをタイマーで発生させ、 lmbufの内容を読出し、 LEDマトリックスに1ライン分の表示をさせている。 LEDマトリックスは16ラインで構成されるので、 512μ×16≒8m秒毎にLEDマトリックス全体の表示が行なわれることになる。
LEDマトリックス全体の表示が scmode_div回行なわれる毎に、 lmbufの内容の更新が行なわれる。 状態によって、scbufあるいはeepromから読出されたビットデータが lmbufにシフトインされる。
スクロールが停止しているときは、 lmbufを操作するコマンドによって、 表示を操作することができる。 lm_clear, lm_puts, lm_puts2などの コマンドによって、文字等を表示することができる。
sc_dataと sc_showコマンドを使って 任意のビットイメージを表示することもできる。
スクロール表示を行なうには、 sc_dataと sc_scroll, sc_endコマンドを使用する。
コマンド:lm_bright
用例:lm_bright 値
LEDの点灯時間を制御することで、明るさの設定を行なう。 値の0〜10の整数。 0が消灯で10が全点灯。 人の明るさの感覚に比例するように、 点灯時間は値の3乗に比例して変化する。
コマンド:lm_bright0
用例:lm_bright0 値LEDの点灯時間を制御することで、明るさの設定を行なう。 値の0〜255の整数。 0が消灯で255が全点灯。 値に比例した時間だけ、LEDを点灯させる。
コマンド:lm_clear
用例:lm_clear
lmbufをクリアする。
コマンド:lm_off
用例:lm_off
LEDの表示を行なう512μS毎の割り込みを停止する。
コマンド:lm_on
用例:lm_on
LEDの表示を行なう512μS毎の割り込みを有効にする。
コマンド:lm_pget
用例:lm_pget {x座標 y座標 ...}
lmbufの指定された座標のドットがonかoffかを返す。 座標は複数指定可能。
対話例: lm_pget 0 0 0 1 D 0 1 Ok.
ファームウェア v0.08以降
コマンド:lm_pexor
用例:lm_exor {x座標 y座標 ...}
lmbufの指定された座標のドットを反転する。 座標は複数指定可能。
コマンド例: lm_pexor 0 0 0 1
ファームウェア v0.08以降
コマンド:lm_preset
用例:lm_reset {x座標 y座標 ...}
lmbufの指定された座標のドットをリセットする。 座標は複数指定可能。
コマンド例: lm_preset 0 0 1 1 2 2 2 4
ファームウェア v0.08以降
コマンド:lm_pset
用例:lm_set {x座標 y座標 ...}
lmbufの指定された座標のドットをセットする。 座標は複数指定可能。
コマンド例: lm_pset 0 0 1 1 2 2 2 4
ファームウェア v0.08以降
コマンド:lm_puts
用例:lm_puts 文字列...
LEDマトリックスの上半分に 5×8ドットのフォントで文字列を表示する。 英数字のみ表示可能
コマンド例: lm_clear lm_puts "Hello"
コマンド:lm_puts2
用例:lm_puts2 文字列...
LEDマトリックスの下半分に 5×8ドットのフォントで文字列を表示する。 英数字のみ表示可能
コマンド:sc_clear
用例:sc_clear [0|1]
lmbufとscbufのクリアおよびスクロールの停止を行なう。
引数で1が指定された場合 scbufのクリアのみ行なわれる
(Ver1.04以降)
コマンド:sc_data
用例:sc_data data ....
scbufに引数で指定された値を格納する。 scbufの書きこみ可能な残りのデータ数を返す。 dataは最大4桁の16進数で、コマンドの最大長80文字を超えない限り いくつでも指定可能。
コマンド例: sc_clear sc_data 1 3 7 f 1f 3f 7f ff 1ff 3ff 7ff fff 1fff 3fff 7fff ffff sc_data 5555 aaaa 5555 aaaa sc_show
コマンド:sc_end
用例:sc_end {[0|1]}
スクロール表示の終了を指示する。 引数は、表示をスクロールアウト(スクロールさせて画面クリア)するか どうかで、1で行ない、0では行なわない。指定しなければスクロールアウトする。 sc_data,sc_scrollと組み合わせて使用する。
コマンド:sc_loop
用例:sc_loop
scbufの内容を繰り返し表示する。
sc_data 1 2 4 8 sc_data 8 4 2 1 sc_loop
コマンド:sc_mode
用例:sc_mode
現在のスクロールモードを返す。 ホストがスクロールの完了を待ったりするのに使用する。
値 | モード | 説明 |
---|---|---|
0 | SCMODE_NULL | 初期値、スクロール停止 |
1 | SCMODE_STOP | スクロール停止 |
2 | SCMODE_CLEAR | lmbufクリア |
3 | SCMODE_WAIT1 | スクロール開始前の待ち |
4 | SCMODE_SCROLL | スクロール中 |
5 | SCMODE_SCROLLOUT | スクロールアウト中 |
6 | SCMODE_WAIT2 | スクロール終了後の待ち |
対話例: sc_mode D 1 Ok.
コマンド:sc_scroll
用例:sc_scroll
scbufの内容をスクロール表示する。 表示されたデータはscbufから削除されていくので、 スクロールをつづけるには、sc_dataコマンドで データを送りつづける必要がある。 データが間に合わない場合、スクロールは停止し、データを待つ。 sc_endコマンドでスクロール表示を終了する。
コマンド例: sc_scroll sc_data 0550 0aa0 sc_data 0550 0aa0 sc_end
eepromに書きこまれたメッセージを表示するには rom_scrollコマンドを使用する。
コマンド:sc_show
用例:sc_show
scbufの内容をlmbufに転送し、表示する。 転送されたデータはscbufから削除される。
コマンド例: sc_clear sc_data 0ff0 1008 2004 2004 sc_data 1008 0ff0 sc_show
コマンド:sc_stop
用例:sc_stop
スクロールを停止する。 バッファのクリア等は行なわない。
変数:cmodule
値は 1〜4。 接続されているLEDモジュールの数を設定する。
変数:led_reverse
値は0または1。 値が1の時、LEDモジュールヘの表示を180度回転させる。
変数:scmode_div
値は1〜10程度。 表示を何回おこなうごとに1dotのスクロールを行なうかという値を 保持する。 H8/3664Fを使用した場合、約8mSに1回表示が行なわれるので、 scmode_div = 1 だとスクロール速度は 1dot/8mS となり、 1文字が16dot幅であれば 7.8文字/秒となる。 scmode_div = 10にすると、この速度を1/10にできる。
変数:scmode_wait1
スクロール開始時に、表示を始めるまでに 何dot分待つかという値。
変数:scmode_wait2
スクロール終了後に、次の表示を始めるまでに 何dot分待つかという値。
変数:scmode_verbose
スクロール関連コマンドでの デバッグ用メッセージ出力の制御。