JH7UBCブログ

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

Arduino 8X8LED MAX7219テスト その2

2022-08-17 12:20:09 | Arduino
 前回に続き、8X8 DotMatrix LEDを使い、MAX7219のコマンドとデータのテストをします。

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

 MAX7219と8X8 DotMatrix LEDの接続の様子です。


 簡単なスケッチで、データ転送のテストをします。
 maxTransfer(DIGIT,DATA); //DIGIT0~7,DATA 0~255(0x00~0xff)
 でデータを転送すると、上の図の指定DIGITにDATAが表示されます。例えばDIGIT=1,DATA=0x0fとするとDIGIT0の1,2,3,4のLEDが点灯します。

 最初に、MAX7219をイニシャライズします。
 Decode ModeはNodecodeにします。
 LEDの明るさは、最小にします。(Intensity=0x00)
 SCAN LIMITは、7にします。(DIGIT0~7を表示)
 SHUTDOWN Modeは、0x01とし、Normal Operationで使用します。
 Didplay Testは、0とし、Normal Operationで使用します。

 次に、8X8SRAMの内容をクリアします。
 つまり、DIGIT0~7に0X00を書き込みます。これを4回繰り返して、4個のモジュールをクリアします。

 テストとして、DIGIT0から3に0X0Fを4回書き込んでみます。

-------------------------------------------------------------------------------
/* Arduino 8X8DotMatrix max7219 test
 *   Example2
 *   2022.08.17
 *   JH7UBC Keiji Hata
*/

#include <SPI.h>
#define CS_PIN 10

// MAX7219 Command address
#define MAX7219_TEST 0x0f
#define MAX7219_BRIGHTNESS 0x0a
#define MAX7219_SCAN_LIMIT 0x0b
#define MAX7219_DECODE_MODE 0x09
#define MAX7219_SHUTDOWN 0x0C

void maxTransfer(uint8_t address, uint8_t value) {
   digitalWrite(CS_PIN, LOW);  // Start transfer.
   SPI.transfer(address);      // Send address.
   SPI.transfer(value);        // Send the value.
   digitalWrite(CS_PIN, HIGH); // Finish transfer.
}

void MAX7219_INI(){
   maxTransfer(MAX7219_DECODE_MODE, 0x00);// Disable BCD mode.
   maxTransfer(MAX7219_BRIGHTNESS, 0x00); // Use lowest intensity.
   maxTransfer(MAX7219_SCAN_LIMIT, 0x07); // Display digits 01234567
   maxTransfer(MAX7219_SHUTDOWN, 0x01);    // Normal Operation
   maxTransfer(MAX7219_TEST, 0x00);        // Normal Operation
}

void Clear_Matrix(){
   for(uint8_t i=0;i<4;i++){
     for(uint8_t x=1;x<9;x++){
       maxTransfer(x, 0x00);
    }
  }
}

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

uint8_t DATA=0x0f;

void loop() {
  for (int i=1;i<5;i++){
   maxTransfer(i,DATA);
  }
   while(1){
  }
}
-------------------------------------------------------------------------------
 このスケッチでは、次の図のように表示されます。
 8X8SRAMの内容は保持されますので、前に書かれたデータが残っているので、こういう形になります。データは、右のモジュールから左のモジュールに送られていきます。
 

 MAX7219と8X8LEDの動きが分かりましたので、次は文字を表示してみましょう。