JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Arduino 8X8LED MAX7219テスト その1

2022-08-08 13:30:15 | Arduino
 前回Arduinoで4連8X8 Dot Matrix LEDを点灯させるテストをしました。記事はこちら
 この時は、MD_MAX72xx というライブラリを使いました。今回は、コントローラMAX7219の働きを勉強するために、ライブラリを使わないで8X8 Dot Matrix LEDを動作させてみます。Web上で参考になるサイトを探したら、TronicsBench.comというサイトを見つけ、プログラムを参照させていただきました。

 まず、MAX7219の日本語マニュアルをダウンロードして、読み込むことにしました。が、全てを読むことはできないので、とりあえず、簡単なテストからやってみようと思います。

 MAX7219のファンクションダイアグラムです。(マニュアルからコピーしました)



 ArduinoからMAX7219にSPI通信でコマンドやデータを送ります。(MSBFIRSTでD15から順に送ります)コマンド、データは16bitで次の表のように、D8~D11の値で次のようにコマンドレジスタかDIG0~DIG7が指定されます。


 今回は、Lチカ(LED点滅)に相当するDisplay Test(レジスタアドレス0x0F)を指定して、8X8LEDの点灯テストをします。
 送信データのD8~D11=0x0Fとし、D0~D7は、下の表に従って、Normal Operationの時0X00、Display Test Modeの時0x01とします。Test ModeでLEDが全点灯し、Normalで全消灯します。

Arduinoと8X8LEDとの接続は次のとおりです。
Arduino    8X8LED
5V       VCC
GND      GND
D11(MOSI)   DIN
D13(SCK)    CLK
D10(CS)    CS

Arduinoのスケッチです。
--------------------------------------------------------------------------------
/* Arduino 8X8DotMatrix max7219 test
 *   Example1
 *   2022.08.07
 *   JH7UBC Keiji Hata
*/

#include <SPI.h>
#define CS_PIN 10

#define MAX7219_TEST 0x0f

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.
}

void setup() {
   pinMode(CS_PIN, OUTPUT);
   SPI.setBitOrder(MSBFIRST);   // Reverse the SPI Data o/p.
   SPI.begin();                 // Start SPI
}

void loop() {
   maxTransferCMD(MAX7219_TEST, 0x01);//全点灯
   delay(1000);
   maxTransferCMD(MAX7219_TEST, 0x00);//全消灯
   delay(1000);
}
--------------------------------------------------------------------------------
 最初の8X8LEDユニットに送られたデータは、DOUTから出力され、次のユニットのDINに送られます。従って、右端から順に全点灯、前消灯を1秒ごとに繰り返します。