COM-14718 - RGB LED Matrix Panel - 32x64 - 75% Not Working

I purchased four COM-14718 - RGB LED Matrix Panel - 32x64 4mm pitch. Received 3 identical boards and one that was different. Only the one that was different works as expected. I’ve had some experience with these over the past couple of years and am planning to buy 15 or 20 more if I can be sure that I will receive boards that work correctly.

See video documentation of the issue here - https://youtu.be/yzMR9Wd5VW4

Strange; does it only happen while chained together or same behavior if only 1 is hooked up at a time?

I tested it both ways. I disconnected them from the chain for the video. I spent a few more minutes with them yesterday, swapping the ABCD lines around to see if it was just a couple lines swapped on the board, no luck. It seems like there are as many as 4! (24) unique permutations, maybe I’ll try them all. Either way, I’m going to have to RMA these 3, the project I’m working on will require 18 of them and I don’t particularly want to have to customize the code for bad panels mixed with good panels. I just want to make sure that sparkfun will be able to guarantee that I get 18 properly configured boards, if not, I’ll order from somewhere else.

It isn’t simply a matter of two of the data lines being swapped as I tested every combination of A, B, C, D. The panels are clearly wired incorrectly. How did these make it through quality control? :frowning:

/* Simple test sketch to evaluate RGB LED Matrix Panels with an ESP32. 
 * This sketch was developed because I received several 32x64 panels that
 * are miswired and I was curious if some of the A, B, C, D lines were
 * swapped and could potentially still be used with wiring and/or code changes.
 * written by dcamp 2023JAN10
*/
#include <RGBmatrixPanel.h>

// default pin mapping the ESP32_HUB75_LED_MATRIX_PANEL_DMA_Display

//#define R1  25
//#define G1  26
//#define B1  27
//#define R2  14
//#define G2  12
//#define B2  13

//#define A   23
//#define B   19
//#define C   5
//#define D   17
//#define E  -1

//#define CLK 16
//#define OE  15
//#define LAT 4

//some variables
int red=0;
int green=0;
int blue=0;
int start=0;

/* There are a total of 4! (24) permutations of A, B, C, D.  We're going
 * to test every one of them in this sketch.  Doesn't that sound like fun? 
*/
int ABCD[24][4] = {
// {A, B, C, D}
{23, 19,  5, 17},
{23, 19, 17,  5},
{23,  5, 19, 17},
{23,  5, 17, 19},
{23, 17, 19,  5},
{23, 17,  5, 19},
{19, 23,  5, 17},
{19, 23, 17,  5},
{19,  5, 23, 17},
{19,  5, 17, 23},
{19, 17, 23,  5},
{19, 17,  5, 23},
{ 5, 23, 19, 17},
{ 5, 23, 17, 19},
{ 5, 19, 23, 17},
{ 5, 19, 17, 23},
{ 5, 17, 23, 19},
{ 5, 17, 19, 23},
{17, 23, 19,  5},
{17, 23,  5, 19},
{17, 19, 23,  5},
{17, 19,  5, 23},
{17,  5, 23, 19},
{17,  5, 19, 23}
};

/* each row of pixels in an 8 row block will be the same color so we
 * will define 8 colors to use */
int myColors[8][3] = {
// {red, green, blue}
{7, 0, 0},
{0, 7, 0},
{0, 0, 7},
{3, 3, 3},
{7, 7, 0},
{7, 0, 7},
{0, 7, 7},
{7, 7, 7}
};

void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("Starting Test...");

  for (int i=0; i<24; i++) { //for each permutation, configure RGBMatrixPanel
    start = millis();
    RGBmatrixPanel matrix(ABCD[i][0], ABCD[i][1], ABCD[i][2], ABCD[i][3], CLK, LAT, OE, true, 64);
    matrix.begin();
    Serial.println();
    Serial.print("Permutation(");
    Serial.print(i);    
    Serial.print("): A=");    
    Serial.print(ABCD[i][0]);
    Serial.print(", B=");    
    Serial.print(ABCD[i][1]);
    Serial.print(", C=");    
    Serial.print(ABCD[i][2]);
    Serial.print(", D=");    
    Serial.println(ABCD[i][3]);
      
    /* Draw one pixel at a time across the width of the panel starting in the
     * top left at pixel 0,0. Work horizontally across the panel to pixel 0,63
     * then move down one row to pixel 1,0 -> 1,63. Repeat until we get to 31,63. */  
    for (int y=0; y<32; y++) {
      int rowidx=y%8;
      red = myColors[rowidx][0];
      green = myColors[rowidx][1];
      blue = myColors[rowidx][2];
      Serial.print("Row ");
      Serial.print(y);
      Serial.print(", Color ");
      Serial.println(rowidx);
            
      for (int x=0; x<64; x++) {
        matrix.drawPixel(x, y, matrix.Color333(red, green, blue));
        delay(1);        
      } // end for x
    } // end for y
    Serial.print("Completed in ");
    Serial.print(millis() - start);
    Serial.println(" mS");
  } // end for i
}

void loop() {
//nothing to see here 
}

Go to www.sparkfun.com/returns/ if purchased from us and file an RMA for a refund; if purchased elsewhere contact them for similar

Based on the video, it seems that the D input is inverted. Not sure if this helps in anyway, but just what I observed. If you wanted to, you could try and invert that input between the Arduino and the RGB panel to confirm the issue. As I said, might not help with what you want to do, but at least would help fully understand the problem.

I try this tonight, it will not work for my application even if it ends up resolving the problem because I need 18 correctly wired panels but as you suggested, it would be nice to know what the failure is.

TS-Russell:
Go to www.sparkfun.com/returns/ if purchased from us and file an RMA for a refund; if purchased elsewhere contact them for similar

Filed an RMA request on Tuesday but haven’t heard back yet. Is this typical? i just resubmitted so hopefully someone responds to one of them.

Sorry for the delay on processing your RMA ticket. 1-3 business days is typical for processing return tickets.

I have your ticket in my inbox. I will get you taken care of today.

Cheers!

This is exactly what the problem is, the D input is inverted on the panel. By adding an inverter inline with the D data line the panel works as expected. As you suggested, it is good to know what the issue is but it doesn’t really help with what I want to do. It’s not really practical to have to rework the panels so they work correctly.

mdancer:
Based on the video, it seems that the D input is inverted. Not sure if this helps in anyway, but just what I observed. If you wanted to, you could try and invert that input between the Arduino and the RGB panel to confirm the issue. As I said, might not help with what you want to do, but at least would help fully understand the problem.

When I rewatched the video it also appeared that in addition to the D Row Select line being inverted, the RGB lines were incorrect. These 3 panels were BRG. I just received the RMA info today so I verified that this as well. These panels are now on their way back.

Thank you for providing these additional details.

We will get you a refund once the units arrive.