あれこれやってますが,どのHPを見ても,二個目,三個目,四個目のMAX7219に指令を出す方々が書いてあ
りませんでした。これまでかと思い,取説を確認してみるとありました。ありました。きちんと表記があるじゃないですか。
===二つ目以降のチップを操作する===
4つのMAX7219をカスケード接続する場合,4番目のチップに書き込みを行うには,希望する
16ビットワードの後に,3つのno-noコード(16進の0xXX0X表2)送信します。
LOAD/CSがハイになった時点で,すべてのデバイスにデータがラッチられます。最初の3つのチップ
は,no-noコマンドを受け取り,4番目のチップが目的のデータを受け取ります。
とありました。これで,もうちょっと先に進めそうです。
また,諸兄のHPを参考にarduino風に書き換えていた,SPIのデータ書き込みのスケッチも動きました。
#define CLK 13
#define DIN 11
#define CS 10
void setup(){
Serial.begin( 9600 ); // シリアル通信を初期化する。通信速度は9600bps
pinMode(CLK, OUTPUT );
pinMode(DIN, OUTPUT );
pinMode(CS, OUTPUT );
}
void wait(int i){
volatile int j,k;
for(j=0;j<i;j++){
for(k=0;k<55;k++);
}
}
//****************************************************************
//arduino自作関数
//データ書き込み
//****************************************************************
void LED_MAT_SEND(unsigned char SELECT, unsigned char DATA){
digitalWrite( CS, HIGH );// Load ON
wait(2);void
digitalWrite( CS, LOW );// Load OF
for(int i=0;i<8;i++){ // Send Register data
digitalWrite( CLK, LOW );//CLK OFF
if(((SELECT << i) & 0b10000000)==0){
digitalWrite( DIN, LOW );
Serial.print( '-' );
}
else{
digitalWrite( DIN, HIGH );
Serial.print( '+' );
}
wait(1);
digitalWrite( CLK, HIGH );//CLK ON
wait(1);
}
for(int i=0;i<8;i++){ // Send LED DATA
digitalWrite( CLK, LOW );//CLK OFF
if(((DATA << i) & 0b10000000)==0){
digitalWrite( DIN, LOW );
Serial.print( '-' );
}
else{
digitalWrite( DIN, HIGH );
Serial.print( '+' );
}
wait(1);
digitalWrite( CLK, HIGH );//CLK ON
wait(1);
}
digitalWrite( CS, HIGH );// Load ON
wait(2);
digitalWrite( CS, LOW );// Load OFF
Serial.print( "******" );
}
デバッグ用のSerial.printは残してあります。また,この, digitalWrite( CLK, HIGH );は結構クロックをつかうようなので,一括処理のものに後で変更しようと思います。このスケッチもSPIライブラリーを使うと,別な諸兄の書かれた下記のように6行程度ですんでしまいます。
void maxTransferCMD(uint8_t address, uint8_t value) {
digitalWrite(CS_PIN, LOW);
SPI.transfer(address); // Send address.
SPI.transfer(value); // Send the value.
digitalWrite(CS_PIN, HIGH); // Finish transfer.
}
今日,取説で見つけた記述をもとに,2個目3個目のMAX7219に書き込めるスケッチも考えてみたいと思います。