# MAX7219 display help

I have an Arduino driving 6 separate MAX7219 displays. My data will display very quickly for a split second, but then disappear. Each one can be driven fine when only one is running. What is happening? More info can be provided if needed.

## Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

I mean, the first response was, "Yes, please give us more info". Then you provided the info....

Doing some simple math here, I come up with one reply wasted (that could have helped you right-off-the-bat), more time until you can get your project going, and in the end, you had to provide it anyway. Sheesh.

GIGO

/* matrix[3] = {data, load, clock} */

int TL[3] = {0, 1, 2};

int TM[3] = {3, 4, 5};

int TR[3] = {6, 7, 8};

int BL[3] = {A1, A2, A3};

int BM[3] = {A0, A4, A5};

int BR[3] = {9, 10, 11};

int matrixList[3][5] = {TL[3], TM[3], TR[3], BL[3], BM[3], BR[3]};

byte A[8] = {0, B11111100, B00010010, B00010001, B00010001, B00010010, B11111100, 0};

byte happy[24] = {B00000000,B11111111,B00001000,B00001000,B11111111,B00000000,B11111110,B00001001,

B11111110,B00000000,B11111110,B00001001,B00001001,B00000110,B00000000,B11111110,

B00001001,B00001001,B00000110,B00000000,B00000111,B11111000,B11111000,B00000111};

byte jess[48] = {B00000000,B00000011,B00000011,B00000011,B11111111,B00000011,B00000011,B00000000,

B11111111,B01000001,B01000001,B01000001,B01000001,B00000000,B01111110,B10000001,

B00000010,B00000100,B00000000,B00000000,B01111110,B10000001,B00000010,B00000100,

B00000000,B01110000,B10000000,B01000000,B00111111,B00000000,B00000000,B00000000,

B11111111,B10000000,B10000000,B10000000,B10000000,B00000000,B01000000,B10000000,

B01000001,B00111110,B00000000,B00000000,B01000000,B10000000,B01000001,B00111110};

byte max7219_reg_noop        = 0x00;

byte max7219_reg_digit0      = 0x01;

byte max7219_reg_digit1      = 0x02;

byte max7219_reg_digit2      = 0x03;

byte max7219_reg_digit3      = 0x04;

byte max7219_reg_digit4      = 0x05;

byte max7219_reg_digit5      = 0x06;

byte max7219_reg_digit6      = 0x07;

byte max7219_reg_digit7      = 0x08;

byte max7219_reg_decodeMode  = 0x09;

byte max7219_reg_intensity   = 0x0a;

byte max7219_reg_scanLimit   = 0x0b;

byte max7219_reg_shutdown    = 0x0c;

byte max7219_reg_displayTest = 0x0f;

void putByte(int matrixNum[], byte data) {

byte i = 8;

while(i > 0) {

mask = 0x01 << (i - 1);      // get bitmask

digitalWrite(matrixNum[2], LOW);   // tick

if (data & mask){            // choose bit

digitalWrite(matrixNum[0], HIGH);// send 1

}else{

digitalWrite(matrixNum[0], LOW); // send 0

}

digitalWrite(matrixNum[2], HIGH);   // tock

--i;                         // move to lesser bit

}

delay(10);

}

void matrixWrite(int matrix[], byte reg, byte col) {

digitalWrite(matrix[1], LOW);       // begin

putByte(matrix, reg);                  // specify register

putByte(matrix, col);//((data & 0x01) * 256) + data >> 1); // put data

digitalWrite(matrix[1], LOW);       // and load da shit

digitalWrite(matrix[1],HIGH);

}

void initMatrix(int matrix[3]) {

for(int i = 0; i < 3; i++) {

pinMode(matrix[i], OUTPUT);

}

matrixWrite(matrix, max7219_reg_scanLimit, 0x07);

matrixWrite(matrix, max7219_reg_decodeMode, 0x00);

matrixWrite(matrix, max7219_reg_shutdown, 0x01);

matrixWrite(matrix, max7219_reg_displayTest, 0x00);

for (int e=1; e<=8; e++) {

matrixWrite(matrix, e,0);

}

matrixWrite(matrix, max7219_reg_intensity, 0x0f & 0x0f);

}

void clearMatrix(int matrix[]) {

for (int e = 1; e <= 8; e++) {

matrixWrite(matrix, e, 0);

}

}

void setup () {

}

void loop () {

initMatrix(TL);

matrixWrite(TL, 1, jess[0]);

matrixWrite(TL, 2, jess[1]);

matrixWrite(TL, 3, jess[2]);

matrixWrite(TL, 4, jess[3]);

matrixWrite(TL, 5, jess[4]);

matrixWrite(TL, 6, jess[5]);

matrixWrite(TL, 7, jess[6]);

matrixWrite(TL, 8, jess[7]);

initMatrix(TM);

matrixWrite(TM, 1, jess[8]);

matrixWrite(TM, 2, jess[9]);

matrixWrite(TM, 3, jess[10]);

matrixWrite(TM, 4, jess[11]);

matrixWrite(TM, 5, jess[12]);

matrixWrite(TM, 6, jess[13]);

matrixWrite(TM, 7, jess[14]);

matrixWrite(TM, 8, jess[15]);

initMatrix(TR);

matrixWrite(TR, 1, jess[16]);

matrixWrite(TR, 2, jess[17]);

matrixWrite(TR, 3, jess[18]);

matrixWrite(TR, 4, jess[19]);

matrixWrite(TR, 5, jess[20]);

matrixWrite(TR, 6, jess[21]);

matrixWrite(TR, 7, jess[22]);

matrixWrite(TR, 8, jess[23]);

initMatrix(BL);

matrixWrite(BL, 1, jess[24]);

matrixWrite(BL, 2, jess[25]);

matrixWrite(BL, 3, jess[26]);

matrixWrite(BL, 4, jess[27]);

matrixWrite(BL, 5, jess[28]);

matrixWrite(BL, 6, jess[29]);

matrixWrite(BL, 7, jess[30]);

matrixWrite(BL, 8, jess[31]);

initMatrix(BM);

matrixWrite(BM, 1, jess[32]);

matrixWrite(BM, 2, jess[33]);

matrixWrite(BM, 3, jess[34]);

matrixWrite(BM, 4, jess[35]);

matrixWrite(BM, 5, jess[36]);

matrixWrite(BM, 6, jess[37]);

matrixWrite(BM, 7, jess[38]);

matrixWrite(BM, 8, jess[39]);

initMatrix(BR);

matrixWrite(BR, 1, jess[40]);

matrixWrite(BR, 2, jess[41]);

matrixWrite(BR, 3, jess[42]);

matrixWrite(BR, 4, jess[43]);

matrixWrite(BR, 5, jess[44]);

matrixWrite(BR, 6, jess[45]);

matrixWrite(BR, 7, jess[46]);

matrixWrite(BR, 8, jess[47]);

while(1);

}

That's the code. As for the schematic,I don't have an documented one. It's basically connected like this: The leds are connected like here: http://wiring.org.co/learning/libraries/hellomatrix.html. Each matrix has its own 3 data pins, as shown above. each matrix has its own 5V power supply.

My crystal ball doesn't work on a sunday. So can you post the code and a schematic how everything is connected?