大阪のデジットの閉店セールで32x16ドットマトリックスLEDを手に入れたので,ATtiny1604をArduino IDEでプログラムして動かしてみました。
1台200円と安価で,PICAXEでも使えるかなと思って購入したのですが,よく見るとダイナミック点灯タイプで,,PICAXEでの直のコントロールは無理でした
(^^;;;;;;;;。
ということで,モジュール化も目指してまずはATtiny1604での試作です。
試作にあたって,とても参考になったikkeiさんのサイトをメモしておきます。
・デジットの32x16ドットマトリクスLEDモジュールの回路図を起こしてみた
・デジットの32x16ドットマトリクスLEDモジュールをArduinoにつないでみた
なんとか動かして,下手な手作りキャラクタを表示したところです。
![](https://stat.ameba.jp/user_images/20210521/13/pta55/b2/76/j/o1200068414945192103.jpg?caw=800)
裏面には16bitのLEDドライバBD7851FPが3個並んでいて,電源やコントロール線はPHR10コネクタで出しています。LEDは600mA使うので別電源が必要です。
![](https://stat.ameba.jp/user_images/20210521/13/pta55/9d/ae/j/o1178077314945192771.jpg?caw=800)
なお,セール品ではケーブルが付属していません。別売りのPHR10コード付きコネクタを2組購入し,真ん中で切って4台分のコネクタにしています(^^)。
![](https://stat.ameba.jp/user_images/20210521/13/pta55/3e/11/j/o1179085714945196372.jpg?caw=800)
1.ハードウェアの概要
以下はATtiny1604とBD7851FPのデータシートからの一部改編を含みます。
1) ATtiny1604
LEDと接続する信号線は6本でPA1-PA6を使っています。14Pinのうち将来の組み込みモジュール化に必要そうなI2CとUARTのピンは温存できています。
![](https://stat.ameba.jp/user_images/20210521/14/pta55/50/45/j/o0800032314945205760.jpg?caw=800)
2) 16bitLEDドライバBD7851FPのコントロール
32x16のLEDマトリックスを3個のドライバで点灯させています。イメージ的には下図です。
sin1,sin2,sin3は個別にデータを送り,clock,latch,enable信号線は共有して矢印方向に同時に動作します。
![](https://stat.ameba.jp/user_images/20210521/14/pta55/27/cc/j/o1411079414945212195.jpg?caw=800)
カラムA,Bの横方向のデータの向きは悩んだのですが,ドットの座標には少々計算が必要でも,キャラクタが直感的に2進法で考え易い方向にしてみました。
BD7851FPのブロックダイアグラムは思ったよりシンプルです。
クロックごとに最下段のシフトレジスタにデータを順次送っていき,16bit送ったところでラッチをかけて2段目に保存します。
![](https://stat.ameba.jp/user_images/20210521/14/pta55/04/8b/j/o1411079414945219169.jpg?caw=800)
ENABLEは反転出力でAND回路に入り,データの変化時のちらつきを止めるぐらいの感じでしょうか。特にデータの保持などには役立ってはいないので,ENABLE ON(LOW)の状態でずっと置いていても良いかもしれません。
BD7851FPのタイミングチャートです。
![](https://stat.ameba.jp/user_images/20210521/14/pta55/b9/56/j/o0800038114945224157.jpg?caw=800)
別表によると,クロックは最大10MHzで遅い方のスピードは特に指定なく,各反応はナノ秒の範囲です。ATtiny1604のdigitalWrite()のパルスは5us程度なので,ポートコントロールを使わない限りwaitなどは不要のようです。
2.ソフトウェアの概要
つたない「広島」のキャラクタの正表示と反転表示を繰り返し点滅させるだけのソフトです(^^;;;;
![](https://stat.ameba.jp/user_images/20210521/15/pta55/a9/d9/j/o1200058214945239544.jpg?caw=800)
![](https://stat.ameba.jp/user_images/20210521/15/pta55/b7/94/j/o1200054614945239680.jpg?caw=800)
1) 使用ピンの宣言,表示バッファとキャラクタデータのセット
バッファやデータは16bitのunsigned int 型で扱いました。
なお,ATtiny1604などのシリーズからはconst 定数で指定すると,自動的にプログラム領域にデータが書き込まれ,また普通に読み出せるようになりました。データがSRAMを圧迫しなくなっていますね(^^)。
![](https://stat.ameba.jp/user_images/20220530/17/pta55/5f/11/j/o0747088715125621743.jpg?caw=800)
2) メインループ部
表示バッファにデータをセットして表示ルーチンを呼び出しているだけです。
ダイナミック点灯なので,表示時間の調整にdelayなどを使うと消灯してしまいます(^^;;;;;;;;。
あくまで表示を繰り返して時間経過をコントロールしています,,,,。
![](https://stat.ameba.jp/user_images/20210521/17/pta55/a5/ee/j/o0745075114945299224.jpg?caw=800)
3) 1行表示部
ここが1番のキモですね(^^)。
指定された1行だけrow(s1)のビットを1にして,その行のカラムデータだけを点灯させます。指定されなかった行はrow(s1)が0なのですべて消灯して,ヒトの残像だけが頼りです。
![](https://stat.ameba.jp/user_images/20210521/17/pta55/35/72/j/o0751071714945299223.jpg?caw=800)
こういうシフトレジスタを使ったダイナミック点灯の仕組みなので,1ドットを表示するだけでも全ての行の全てのドットを触り続ける事になります。
ですから,実行速度が速いほど良いというか,ヒトの残像が期待できる60Hzで最低1画面を描くスピードは求められるわけです,,,。
4) 表計算ソフトでのキャラクタ作り
急拵えの表計算でのキャラクタ作りの例です。
以前から小さいLEDマトリックスのデータ作りは表計算ソフトで行っていたのですが,横並びの16bit整数を扱うので急遽作りました(^^;;;。
![](https://stat.ameba.jp/user_images/20210521/16/pta55/8c/64/j/o0967038114945264631.jpg?caw=800)
以上,何とかかんとか動いたのですが,ダイナミック点灯は何やら気ぜわしいですねぇ(^^;;;。
ATtiny1604はまだまだ余裕がありますから,画面表示のタイマー割り込みなんかも勉強して,これを組み込んでPICAXEのような遅いホストからも使えるようにしたいですねぇ。
まだ3台残っているので,やってみる価値はありますか,,,。
1台200円と安価で,PICAXEでも使えるかなと思って購入したのですが,よく見るとダイナミック点灯タイプで,,PICAXEでの直のコントロールは無理でした
(^^;;;;;;;;。
ということで,モジュール化も目指してまずはATtiny1604での試作です。
試作にあたって,とても参考になったikkeiさんのサイトをメモしておきます。
・デジットの32x16ドットマトリクスLEDモジュールの回路図を起こしてみた
・デジットの32x16ドットマトリクスLEDモジュールをArduinoにつないでみた
なんとか動かして,下手な手作りキャラクタを表示したところです。
![](https://stat.ameba.jp/user_images/20210521/13/pta55/b2/76/j/o1200068414945192103.jpg?caw=800)
裏面には16bitのLEDドライバBD7851FPが3個並んでいて,電源やコントロール線はPHR10コネクタで出しています。LEDは600mA使うので別電源が必要です。
![](https://stat.ameba.jp/user_images/20210521/13/pta55/9d/ae/j/o1178077314945192771.jpg?caw=800)
なお,セール品ではケーブルが付属していません。別売りのPHR10コード付きコネクタを2組購入し,真ん中で切って4台分のコネクタにしています(^^)。
![](https://stat.ameba.jp/user_images/20210521/13/pta55/3e/11/j/o1179085714945196372.jpg?caw=800)
1.ハードウェアの概要
以下はATtiny1604とBD7851FPのデータシートからの一部改編を含みます。
1) ATtiny1604
LEDと接続する信号線は6本でPA1-PA6を使っています。14Pinのうち将来の組み込みモジュール化に必要そうなI2CとUARTのピンは温存できています。
![](https://stat.ameba.jp/user_images/20210521/14/pta55/50/45/j/o0800032314945205760.jpg?caw=800)
2) 16bitLEDドライバBD7851FPのコントロール
32x16のLEDマトリックスを3個のドライバで点灯させています。イメージ的には下図です。
sin1,sin2,sin3は個別にデータを送り,clock,latch,enable信号線は共有して矢印方向に同時に動作します。
![](https://stat.ameba.jp/user_images/20210521/14/pta55/27/cc/j/o1411079414945212195.jpg?caw=800)
カラムA,Bの横方向のデータの向きは悩んだのですが,ドットの座標には少々計算が必要でも,キャラクタが直感的に2進法で考え易い方向にしてみました。
BD7851FPのブロックダイアグラムは思ったよりシンプルです。
クロックごとに最下段のシフトレジスタにデータを順次送っていき,16bit送ったところでラッチをかけて2段目に保存します。
![](https://stat.ameba.jp/user_images/20210521/14/pta55/04/8b/j/o1411079414945219169.jpg?caw=800)
ENABLEは反転出力でAND回路に入り,データの変化時のちらつきを止めるぐらいの感じでしょうか。特にデータの保持などには役立ってはいないので,ENABLE ON(LOW)の状態でずっと置いていても良いかもしれません。
BD7851FPのタイミングチャートです。
![](https://stat.ameba.jp/user_images/20210521/14/pta55/b9/56/j/o0800038114945224157.jpg?caw=800)
別表によると,クロックは最大10MHzで遅い方のスピードは特に指定なく,各反応はナノ秒の範囲です。ATtiny1604のdigitalWrite()のパルスは5us程度なので,ポートコントロールを使わない限りwaitなどは不要のようです。
2.ソフトウェアの概要
つたない「広島」のキャラクタの正表示と反転表示を繰り返し点滅させるだけのソフトです(^^;;;;
![](https://stat.ameba.jp/user_images/20210521/15/pta55/a9/d9/j/o1200058214945239544.jpg?caw=800)
![](https://stat.ameba.jp/user_images/20210521/15/pta55/b7/94/j/o1200054614945239680.jpg?caw=800)
1) 使用ピンの宣言,表示バッファとキャラクタデータのセット
バッファやデータは16bitのunsigned int 型で扱いました。
なお,ATtiny1604などのシリーズからはconst 定数で指定すると,自動的にプログラム領域にデータが書き込まれ,また普通に読み出せるようになりました。データがSRAMを圧迫しなくなっていますね(^^)。
![](https://stat.ameba.jp/user_images/20220530/17/pta55/5f/11/j/o0747088715125621743.jpg?caw=800)
2) メインループ部
表示バッファにデータをセットして表示ルーチンを呼び出しているだけです。
ダイナミック点灯なので,表示時間の調整にdelayなどを使うと消灯してしまいます(^^;;;;;;;;。
あくまで表示を繰り返して時間経過をコントロールしています,,,,。
![](https://stat.ameba.jp/user_images/20210521/17/pta55/a5/ee/j/o0745075114945299224.jpg?caw=800)
3) 1行表示部
ここが1番のキモですね(^^)。
指定された1行だけrow(s1)のビットを1にして,その行のカラムデータだけを点灯させます。指定されなかった行はrow(s1)が0なのですべて消灯して,ヒトの残像だけが頼りです。
![](https://stat.ameba.jp/user_images/20210521/17/pta55/35/72/j/o0751071714945299223.jpg?caw=800)
こういうシフトレジスタを使ったダイナミック点灯の仕組みなので,1ドットを表示するだけでも全ての行の全てのドットを触り続ける事になります。
ですから,実行速度が速いほど良いというか,ヒトの残像が期待できる60Hzで最低1画面を描くスピードは求められるわけです,,,。
4) 表計算ソフトでのキャラクタ作り
急拵えの表計算でのキャラクタ作りの例です。
以前から小さいLEDマトリックスのデータ作りは表計算ソフトで行っていたのですが,横並びの16bit整数を扱うので急遽作りました(^^;;;。
![](https://stat.ameba.jp/user_images/20210521/16/pta55/8c/64/j/o0967038114945264631.jpg?caw=800)
以上,何とかかんとか動いたのですが,ダイナミック点灯は何やら気ぜわしいですねぇ(^^;;;。
ATtiny1604はまだまだ余裕がありますから,画面表示のタイマー割り込みなんかも勉強して,これを組み込んでPICAXEのような遅いホストからも使えるようにしたいですねぇ。
まだ3台残っているので,やってみる価値はありますか,,,。