MAX7219の使い方 8×8LCD 無ライブラリー (3)

あれこれやっていましたが,やっとまた1つ理解が進みました。これも,分かってる方からすればな
んでもないことなのでしょうが,改めて理解できたというところです。
単体(1つだけ)の書き込みをしてる分にはいいのですが,for等で繰り返し処理をすると2回目以降
の書き込みで,1番目にLED書き込んたデータが2番目,3番目,4番目と順次表示されます。書き込
みは1番目のLEDなのに2番目以降のLEDに表示されるが理解できませんでした。これもやっと理解でき
ました。

 一度書き込まれたデータの後に書き込みを行うと,
 先に書き込まれたデータに上書きされるのではなく,
 先に書き込まれたデータは,次以降のLEDに順送りにされる。

このことが分からなくて,思った動作をさせられず,もがきました。

 for(int i=1;i<9;i++){
    maxTransfer(i,1);
    digitalWrite(CS_PIN, HIGH);
    delay(500);
  }

この繰り返しのスケッチは,一番左に1つドットを描き,それを一番下まで繰り返すスケッチです。このまま
だと動画のようになります。

それと, digitalWrite(CS_PIN, HIGH); の命令は,本来 maxTransfer( ,); のサブ関数内で一括処理して
た、ものです,データをかきこんだらそれをレジスタにその都度アップロード・ラッチを行う処理でした。
データの書き込み--アップロード(ラッチ)と一連の流れで処理してしまうと,別な命令の書き込み
ができないので,諸兄スケッチから変更しました。こうすることで、下記のスケッチのように、何もしない
命令( maxTransfer(0,0))を2番目、3番目、4番目のLEDに先送りにし、一度にデータをアップロード
ラッチすることで、余分な表示を防げます。

for(int i=1;i<9;i++){
    maxTransfer(0,0);
    maxTransfer(0,0);
    maxTransfer(0,0);
    maxTransfer(i,1);
    digitalWrite(CS_PIN, HIGH);
    delay(500);
  }

2番目,3番目,4番目に先に送られたno-opコードのため余分な表示がされなくなります。

一度表示されると,消去するまで,表示されますので,次のように一度表示したものを消去すると移動するよ
うに見えます。

For(int i=1;i<9;i++){
    maxTransfer(0,0);
    maxTransfer(0,0);
    maxTransfer(0,0);
    maxTransfer(i,1);
    digitalWrite(CS_PIN, HIGH);
    delay(500);
    maxTransfer(0,0);
    maxTransfer(0,0);
    maxTransfer(0,0);
    maxTransfer(i,0);
    digitalWrite(CS_PIN, HIGH);
  }

ここまでたどり着くのに結構時間がかかりました。ライブラリーを作成している先達は,いち早くこういうこ
とが理解できたのでしょうね。凡人はとてつもなく時間がかかります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA