KICAD.zip (66.5 KB)
I have an issue on a MAX 7219 Project I cant find (MAX7219EWG Chip)
I have used MAX chip for multiple project, however have recently switched to SMD Chip and am having the below issue
I have a “Leak” of voltage, that I cant find, if someone can run their eyes over the attached and below and tell me what I am doing wrong
The Issue
I have a PCB that controls a Caution Panel on my Simulator, this functions correctly.
The issue is on the PCB where I get a 3.5V leak to (or from) the MAX Chip
Symptom
I have 3 LEDS on the PCB to confirm correct voltage
1 = 5 V USB (Internal Arduino) INT
2 = 5 V External 5 V EXT
3 = 12 V DC Externals (for other functions)
When I connect each power source, the corresponding LED will light correctly
There is no connection between the 5V INT, 5V EXT and 12V (all grounds are connected)
The MAX Chip is supposed to be powered from the 5V EXT (PIN 19)
When I install the MAX 7219 Chip the same is correct, BUT when the CODE is loaded
The 5V USB LED will light, AND the 5V EXT LED will light “Dim” measured voltage is 3.5 V
I suspect this is coming from the LOAD PIN, the MAX will function, however it will not function from the 5V EXT at all, it fails to work
I suspect there is a leak (back feed)
Now the checks, I have belled out the PCB, also a blank PCB with 100v MEGA test, there is no fault on the PCB, I have changed chips, I have changed ARDUINO, I have changed Power supplies, I have changed the PINS
What have I missed, what’s wrong, never seen this before
All the chips can’t be faulty
to further Isolate this, I have only installed the MAX7219EWG its power Circuit, and Status LEDS
I only have a conection via the Shield to arduino PINS 46, 47, 48, also 5V and GND
// Test Harness for Max7219
#include "LedControl.h"
// NEED TO SWAP COLS and ROWs to match PCB
/*
Now we need a LedControl to work with.
***** These pin numbers will probably not work with your hardware *****
pin 12 is connected to the DataIn
pin 11 is connected to the CLK
pin 10 is connected to LOAD
We have only a single MAX72XX.
*/
// Single Max7219
//LedControl lc=LedControl(9,8,7,1);
//Two Max7219
//LedControl lc=LedControl(9,8,7,4); //
// A10 Right Output
LedControl lc=LedControl(48, 47, 46, 0);
char receivedChar;
boolean newData = false;
/* we always wait a bit between updates of the display */
unsigned long delaytime=100;
int devices = 1;
void setup() {
Serial.begin(115200);
Serial.setTimeout(30000);
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
devices=lc.getDeviceCount();
for(int address=0;address<devices;address++) {
/*The MAX72XX is in power-saving mode on startup*/
lc.shutdown(address,false);
/* Set the brightness to a medium values */
lc.setIntensity(address,15);
/* and clear the display */
lc.clearDisplay(address);
}
}
void recvOneChar() {
if (Serial.available() > 0) {
receivedChar = Serial.read();
newData = true;
}
}
void showNewData() {
if (newData == true) {
Serial.print("This just in ... ");
Serial.println(receivedChar);
newData = false;
}
}
void single() {
for(int address=0;address<devices;address++) {
for(int row=0;row<8;row++) {
for(int col=0;col<8;col++) {
delay(delaytime);
Serial.println("Press Enter to Continue");
newData = false;
while (newData == false) {
recvOneChar();
delay(10);
}
lc.clearDisplay(address);
Serial.println("Device:" + String(address));
Serial.println("Col :" + String(col));
Serial.println("Row :" + String(row));
lc.setLed(address,col,row,true);
// delay(delaytime);
// for(int i=0;i<col;i++) {
// lc.setLed(0,row,col,false);
// delay(delaytime);
// lc.setLed(0,row,col,true);
// delay(delaytime);
// }
}
}
}
}
void AllOn() {
for(int address=0;address<devices;address++) {
for(int row=0;row<8;row++) {
for(int col=0;col<8;col++) {
lc.setLed(address,col,row,true);
}
}
}
}
void AllOff() {
for(int address=0;address<devices;address++) {
for(int row=0;row<8;row++) {
for(int col=0;col<8;col++) {
lc.setLed(address,col,row,false);
}
}
}
}
void loop() {
Serial.println("There are " + String(devices) + " devices");
Serial.println("All Leds on");
AllOn();
Serial.println("Press Enter to Continue");
delay(3000);
newData = false;
while (newData == false) {
recvOneChar();
delay(1000);
}
AllOff();
single();
}


