前回に続き、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の動きが分かりましたので、次は文字を表示してみましょう。