Arduino IDE でATtiny1604 のタイマー割り込みのマルチタスクを試してみて,動くことが確認できました。
Arduino IDE でATtiny1604 のタイマー割り込みのマルチタスクを試してみた

そこで,特価で手に入れたジャンク?のダイナミック駆動の32x16LEDマトリックスの表示にタイマー割り込みを試してみました。


LEDマトリックスと後ろに隠れたATtiny1604です。




シンプルですが表示を動かしてみました。






プログラムの割り込み関連の一部です。

setup()にタイマーの初期設定を入れ込んでいます(39-42行)。
表示部は割り込みで動かしているので,loop()ではバッファに書き込んだ後はdelay()で表示時間を調整しています。






タイマー割り込みで呼び出すルーチン部です。

あまり整っていないルーチンですが(^^;;;,
できるだけ速い方が良いかとdigitalWriteFast()を多用しています。




ただ,digitalWriteFast()を使った副作用でLEDの点灯時間が短く,表示が暗くなったので,少し表示時間を調整しています(124-127行)。

この設定のルーチンで1画面の表示にかかる時間は0.82msぐらいです。

下図はこのルーチンの入口でHIGH,出口でLOWのパルスをDIO 0に表示しています。呼び出し間隔は今のところ1.6msぐらいに設定しています。





表示の明るさをルーチン内で調整するか,ルーチンを呼び出す回数で調整するかはよく分からず迷っていて検討課題です。

というのも,割り込み呼び出しルーチンが重くなるとdelay()の設定時間がとても不正確になりましたので,,,考えどころです。



こういうダイナミック点灯のLED表示を扱う時に表示部をマルチタスク風に分けられると,表示データを編集・加工などするのは時間に急かされずにできて楽ですね。

その代わり,時間(クロック)がからむシリアル通信などとの併用がどうなるかなど,考えておくべき課題も出てきますが(^^;;;。