豊四季 Tiny BASIC for Arduino STM32の動作テスト(3) - LEDドットマトリックス
現在取り組んでいる「豊四季 Tiny BASIC for Arduino STM32」の動作確認の続きです。
LEDドライバ、MAX7219を使った8x8LEDドットマトリックスの制御をやってみました。

利用したモジュールはAliexpressで以前入手したものです。
1個150円程度で購入できます。amazonでも1個200円くらい入手出来るようです。
Free shipping! 1PCS MAX7219 dot matrix module

実際の動作
思っていたより、スムーズに表示出来ました。
以前IchigoJamでやった時は、1文字1秒かかりスクロール表示なんて無理な状況でした。
さすが、IchigoJamの100倍近い性能、難なく動かせました。
プログラムソース
1 'MAX7219(PB13: CLOCK, PB12: CS, PB14: DAT) 100 GOSUB "INIT" 110 M="ネコニコンバンワ!" 115 T=100 120 L=LEN(M) 130 FOR S=1 TO L 140 C=ASC(M,S) 150 GOSUB "SCROLLIN(C,T)" 160 NEXT S 170 END 200 "SCROLLIN(C,T)" 210 FOR J=0 TO 5 220 FOR K=0 TO 7 230 @(K)=(@(K)<<1)|(PEEK(C*8+FNT+K)>>(7-J)) 250 NEXT K 255 GOSUB "DISP(@)" 260 WAIT T 270 NEXT J 280 RETURN 300 "DISP(@)" 310 FOR I=0 TO 7 320 R=I+1 330 V=@(I)&$FF 340 GOSUB "WRITE(R,V)" 350 NEXT I 360 RETURN 400 "INIT" 410 GPIO PB12,OUTPUT 420 GPIO PB13,OUTPUT 430 GPIO PB14,OUTPUT 440 @(0)=$0B,7,$0A,0,$0C,1,9,0,$0F,0 450 FOR I=0 TO 8 STEP 2 460 R=@(I):V=@(I+1) 470 GOSUB "WRITE(R,V)" 480 NEXT I 485 FOR I=0 TO 7:@(I)=0:NEXT I 490 RETURN 500 "WRITE(R,V)" 510 OUT PB12,LOW 520 SHIFTOUT PB14,PB13,MSB,R 530 SHIFTOUT PB14,PB13,MSB,V 540 OUT PB12,HIGH:OUT PB12,LOW 550 RETURN
プログラムの構造的には次のような感じになっています。
ボトムアップ的(下位から上位)に解説します。
・510~550行:ラベル "WRITE(R,V)"
MAX7219へのコマンド送信を行うサブルーチン
変数Rがレジスタ、変数Vがレジスタに設定する値です。
変数Rがレジスタ、変数Vがレジスタに設定する値です。
ボード上の端子PB12がCS、PB14がデータ、PB13がCLKへの出力です。
シフト操作によってR、Vの16ビットを送信しています。
ちなみに、ラベル名の"WRITE(R,V)"は単なるラベル名で、(R,V)は引数として
渡していることを分かり易くするためラベルに付けているだけです。
シフト操作によってR、Vの16ビットを送信しています。
ちなみに、ラベル名の"WRITE(R,V)"は単なるラベル名で、(R,V)は引数として
渡していることを分かり易くするためラベルに付けているだけです。
・400~490行:ラベル "INIT"
MAX7219の初期化処理
PB12,PB13,PB14を出力設定にしたのち、
"WRITE(R,V)"を呼び出して、440行のレジスタその設定値の内容を送信しています。
また、485行で8x8ドットの表示用バッファ(配列@(0)~@(7)を初期化しています。
レジスタ設定では輝度等の設定を行っています。
・300~360行:ラベル "DISP(@)"
8x8ドットパターンの表示処理
8x8ドットの表示用バッファ(配列@(0)~@(7))の内容をMAX7219に送信しています。
送信には"WRITE(R,V)"を呼び出しています。
・200~280行:ラベル "SCROLLIN(C,T)"
1文字単位のスクロール挿入処理
変数Cで指定した文字をスルロールしながら挿入します。
スクロールする際の1ドット毎のウェイトを変数Tで指定します。
8x8ドットの表示用バッファ(配列@(0)~@(7))に1ドットスクロールしたデータを書き込み
"DISP(@)"を呼び出して実際の表示を行っています。
文字のドットデータは、フォントデータを利用しています。
フォントデータの格納アドレスは定数FNTにて参照できます。
・100~170行:メイン処理
下位のモジュールを使って文字列表示を行っています。
変数Mに文字列、変数Tにスクロール速度を指定します。
このレイアでは、MAX7219の使い方は意識しないで表示したい文字を指定して
表示するだけです。
処理的に余裕がありそうなので、手持ちの四連結もMAX7219も制御出来そうです。
そのうちチャレンジ試してみよう..
MAX7219の初期化処理
PB12,PB13,PB14を出力設定にしたのち、
"WRITE(R,V)"を呼び出して、440行のレジスタその設定値の内容を送信しています。
また、485行で8x8ドットの表示用バッファ(配列@(0)~@(7)を初期化しています。
レジスタ設定では輝度等の設定を行っています。
・300~360行:ラベル "DISP(@)"
8x8ドットパターンの表示処理
8x8ドットの表示用バッファ(配列@(0)~@(7))の内容をMAX7219に送信しています。
送信には"WRITE(R,V)"を呼び出しています。
・200~280行:ラベル "SCROLLIN(C,T)"
1文字単位のスクロール挿入処理
変数Cで指定した文字をスルロールしながら挿入します。
スクロールする際の1ドット毎のウェイトを変数Tで指定します。
8x8ドットの表示用バッファ(配列@(0)~@(7))に1ドットスクロールしたデータを書き込み
"DISP(@)"を呼び出して実際の表示を行っています。
文字のドットデータは、フォントデータを利用しています。
フォントデータの格納アドレスは定数FNTにて参照できます。
・100~170行:メイン処理
下位のモジュールを使って文字列表示を行っています。
変数Mに文字列、変数Tにスクロール速度を指定します。
このレイアでは、MAX7219の使い方は意識しないで表示したい文字を指定して
表示するだけです。
処理的に余裕がありそうなので、手持ちの四連結もMAX7219も制御出来そうです。
そのうちチャレンジ試してみよう..
« Arduinoで半角カタカナのローマ字入力 | トップページ | 豊四季 Tiny BASIC for Arduino STM32の動作テスト(4) - 文字の拡大表示 »
「arduino」カテゴリの記事
- Freenove Mecanum ホイール カー キットを購入しました(2025.05.28)
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
「ARM」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- PocketGoで遊んでみる(1)(2020.03.24)
- Arduino用 MML文演奏ライブラリの作成 その1(2019.04.01)
- BluePillボードで4桁7セグLEDの制御(2019.03.21)
「STM32」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- 「Arduino STM32 リファレンス 日本語版」が2万アクセス突破!(2021.03.26)
- SPI接続フラッシュメモリモジュールを入手しました(2020.05.13)
- Arduino STM32でキャラクタ液晶ディスプレイを使う(2019.06.01)
« Arduinoで半角カタカナのローマ字入力 | トップページ | 豊四季 Tiny BASIC for Arduino STM32の動作テスト(4) - 文字の拡大表示 »

コメント