前回に続き、8X8 DotMatrix LEDを使い、MAX7219のコマンドとデータのテストをします。
Arduinoと8X8LEDとの接続は次のとおりです。
Arduino 8X8LED
5V VCC
GND GND
D11(MOSI) DIN
D13(SCK) CLK
D10(CS) CS
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の動きが分かりましたので、次は文字を表示してみましょう。