2025年5月18日日曜日

2色 8×8 マトリクスLEDを使う(その2)

 ソフトを組むうえで改めて構成を考えてみた。色々数値を試算してみて、CPUクロック(Fosc)を4MHz(インストラクションサイクル(Fosc/4)は1MHz)、SPIクロックを500KHzとした(その後、場合によっては処理が間に合わない事が分かったのでCPUクロックを4倍の16MHzにした。以下のトレースはCPUクロックが4MHzの時点の写真である)。

LEDは8行(row)で構成されるが、各行を同じ明るさで表示するため、タイマーを使って行毎の表示時間を一定にする。タイマーの割込み間隔を2msにすると1秒間の表示回数は約62回(=1/(0.002*8))となる。行データは1桁に3バイトなのでLEDを5桁並べると15バイト、つまり120ビットである。これを500Kbpsで転送すると240μsかかり2msより充分短いのでソフトのオーバーヘッドを考慮しても問題ないだろう。次トレースは上が行ラッチのストローブ(2ms周期)、下がSPIクロックである。

これを拡大すると15個のSPIクロックの塊が見え1行15バイトのデータを(240μsではなく)800μsかかって転送していることが分かる。この処理を割り込み処理ルーチンの中で実行しているのでその間割込み禁止となっており、残り1200μsの中でアプリケーションを動かす事になる。
これをさらに拡大すると次の様に2μs周期(500KHz)のSPIクロックが見える。

ホストとの通信レートは9600bpsとするので最短でも1ms/バイト程度であり十分表示の合間に処理できるだろう。

ソフトもテストパターンを出せる所まで作った。


行表示タイマーの割込み間隔を色々設定できるようにしているが、2msより大きくするとチラつきが目立つようになる。さらに200ms程度に大きくするとスキャンの動作が見えてデバッグに役立った(配線の誤りを発見できた)。

その後CPUクロックを16MHzに上げた。その状態を表す次のトレースで上が2ms毎のラッチ信号、下がHで割込み処理中を表しており、割込み(表示)に500μsかかり、その他の処理に1.5msの余裕が出来たことがわかる。



 マトリクスに表示させる文字パターンはAscii文字を対象にし、著作権フリーのフォントデータを使い、そのほか任意のパターンを設定できるようにする予定である。

その前に誤っていたPCBのパターンを修正する必要がある(コネクタを裏面に取り付けた事でピン番号の偶奇が逆になっていた。今はソフト的にビットを入れ替える事で修正している)。

 (続く)

 

0 件のコメント:

コメントを投稿