PxMatrix mit 64x64 Matrix an ESP32

Moin,

ich habe ein 64x64 LED Matrix mit der Bezeichnung S4-64x64-32S-V5.0

angeschlossen an ein nodeMCU ESP-32S V1.1

Stromversorgung 5V 10A direkt aufs Panel. (zieht aber nur 500mA im Durchschnitt)
Der ESP32 wird mit USB versorgt.

"PxMatrix" Library GitHub - 2dom/PxMatrix: Adafruit GFX compatible graphics driver for LED matrix panels installiert und "Aurora_Demo" aufgespielt.
Funktionieren tut es, aber nur zur Hälfte.

Ich habe das gleiche Problem wie hier beschrieben:

Die Pins sind nach Anleitung wie folgt definiert:
#define P_LAT 22
#define P_A 19
#define P_B 23
#define P_C 18
#define P_D 5
#define P_E 15
#define P_OE 16

Verbindungen:
ESP32 - Panel
GND - GND
P23 - B
P22 - LAT
GND -GND
P19 - A
P18 - C
P5 - D
P16 - OE
P15 - E
P14 - CLK
P13 - R1

Jin - Jout
R2 - R1
G1 - R2
G2 - G1
B1 - G2
B2 - B1

Der Knausus-Knacktus ist vermutlich folgende Zeile:
"display.begin(16);"

Eigentlich müsste "display.begin(32);" korrekt sein, aber dann leuchtet keine LED mehr.

Ich vermute, dass irgendwas nicht korrekt angeschlossen ist, kann aber den Fehler nicht finden. Meiner Meinung nach ist alles richtig?!

Hat jemand eine Idee?

Beste Grüße,
Chris

Mal im Ino weiter oben geschaut:
Vielleicht liegts ja hier...

PxMATRIX display(32,16,P_LAT, P_OE,P_A,P_B,P_C);

//PxMATRIX display(64,32,P_LAT, P_OE,P_A,P_B,P_C,P_D);

//PxMATRIX display(64,64,P_LAT, P_OE,P_A,P_B,P_C,P_D,P_E);

Nein, das ist es leider nicht.
Das hab ich schon richtig auskommentiert.
Weiterhin hab ich auch aus Verzweiflung nach der try&error Methode alle Varianten durchprobiert ...ohne Erfolg.

//https://github.com/2dom/PxMatrix
// This is how many color levels the display shows - the more the slower the update
//#define PxMATRIX_COLOR_DEPTH 8

// Defines the buffer height / the maximum height of the matrix
//#define PxMATRIX_MAX_HEIGHT 64

// Defines the buffer width / the maximum width of the matrix
//#define PxMATRIX_MAX_WIDTH 64

// Defines how long we display things by default
//#define PxMATRIX_DEFAULT_SHOWTIME 30

// Defines the speed of the SPI bus (reducing this may help if you experience noisy images)
//#define PxMATRIX_SPI_FREQUENCY 20000000

// Creates a second buffer for backround drawing (doubles the required RAM)
#define PxMATRIX_double_buffer true

#include <PxMatrix.h>


// Pins for LED MATRIX
#ifdef ESP32

#define P_LAT 22
#define P_A 19
#define P_B 23
#define P_C 18
#define P_D 5
#define P_E 15
#define P_OE 16
hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;

#endif

// ifdef ESP8266

//#include <Ticker.h>
//Ticker display_ticker;
//#define P_LAT 16
//#define P_A 5
//#define P_B 4
//#define P_C 15
//#define P_D 12
//#define P_E 0
//#define P_OE 2

//#endif

#define MATRIX_WIDTH 64
#define MATRIX_HEIGHT 64



unsigned long ms_current  = 0;
unsigned long ms_previous = 0;
unsigned long ms_animation_max_duration = 10000; // 10 seconds
unsigned long next_frame = 0;

// This defines the 'on' time of the display is us. The larger this number,
// the brighter the display. If too large the ESP will crash
uint8_t display_draw_time=30; //30-60 is usually fine

//PxMATRIX display(32,16,P_LAT, P_OE,P_A,P_B,P_C);
//PxMATRIX display(64,32,P_LAT, P_OE,P_A,P_B,P_C,P_D);
PxMATRIX display(64,64,P_LAT, P_OE,P_A,P_B,P_C,P_D,P_E);

#include <FastLED.h> // Aurora needs fastled

#include "Effects.h"
Effects effects;

#include "Drawable.h"
#include "Playlist.h"
//#include "Geometry.h"

#include "Patterns.h"
Patterns patterns;

// Some standard colors
uint16_t myRED = display.color565(255, 0, 0);
uint16_t myGREEN = display.color565(0, 255, 0);
uint16_t myBLUE = display.color565(0, 0, 255);
uint16_t myWHITE = display.color565(255, 255, 255);
uint16_t myYELLOW = display.color565(255, 255, 0);
uint16_t myCYAN = display.color565(0, 255, 255);
uint16_t myMAGENTA = display.color565(255, 0, 255);
uint16_t myBLACK = display.color565(0, 0, 0);

uint16_t myCOLORS[8]={myRED,myGREEN,myBLUE,myWHITE,myYELLOW,myCYAN,myMAGENTA,myBLACK};

#ifdef ESP8266
// ISR for display refresh
void display_updater()
{
  display.display(display_draw_time);
}
#endif

#ifdef ESP32
void IRAM_ATTR display_updater(){
  // Increment the counter and set the time of ISR
  portENTER_CRITICAL_ISR(&timerMux);
  display.display(display_draw_time);
  portEXIT_CRITICAL_ISR(&timerMux);
}
#endif


void display_update_enable(bool is_enable)
{

#ifdef ESP8266
  if (is_enable)
    display_ticker.attach(0.001, display_updater);
  else
    display_ticker.detach();
#endif

#ifdef ESP32
  if (is_enable)
  {
    timer = timerBegin(0, 80, true);
    timerAttachInterrupt(timer, &display_updater, true);
    timerAlarmWrite(timer, 2000, true);
    timerAlarmEnable(timer);
  }
  else
  {
    timerDetachInterrupt(timer);
    timerAlarmDisable(timer);
  }
#endif
}



void setup() {

 Serial.begin(9600);
  // Define your display layout here, e.g. 1/8 step, and optional SPI pins begin(row_pattern, CLK, MOSI, MISO, SS)
  display.begin(16);
  display.setFastUpdate(true);
  //display.begin(8, 14, 13, 12, 4);

  // Define multiplex implemention here {BINARY, STRAIGHT} (default is BINARY)
  //display.setMuxPattern(BINARY);

  // Set the multiplex pattern {LINE, ZIGZAG,ZZAGG, ZAGGIZ, WZAGZIG, VZAG, ZAGZIG} (default is LINE)
  //display.setScanPattern(LINE);

  // Rotate display
  //display.setRotate(true);

  // Flip display
  //display.setFlip(true);

  // Helps to reduce display update latency on larger displays
  //display.setFastUpdate(true);

  // Control the minimum color values that result in an active pixel
  //display.setColorOffset(5, 5,5);

  // Set the multiplex implemention {BINARY, STRAIGHT} (default is BINARY)
  //display.setMuxPattern(BINARY);

  // Set the color order {RRGGBB, RRBBGG, GGRRBB, GGBBRR, BBRRGG, BBGGRR} (default is RRGGBB)
  //display.setColorOrder(RRGGBB);

  // Set the time in microseconds that we pause after selecting each mux channel
  // (May help if some rows are missing / the mux chip is too slow)
  //display.setMuxDelay(0,1,0,0,0);

  // Set the number of panels that make up the display area width (default is 1)
  //display.setPanelsWidth(2);

  // Set the brightness of the panels (default is 255)
  //display.setBrightness(50);

  // Set driver chip type
  //display.setDriverChip(FM6124);


  //display.setFastUpdate(true);
  display.clearDisplay();
  display.setTextColor(myCYAN);
  display.setCursor(2,0);
  display.print("Pixel");
  display.setTextColor(myMAGENTA);
  display.setCursor(2,8);
  display.print("Time");
  display_update_enable(true);

  delay(3000);
  // setup the effects generator
  effects.Setup();
   delay(500);
  Serial.println("Effects being loaded: ");
  listPatterns();


  patterns.setPattern(0); //   // simple noise
  patterns.start();     

  Serial.print("Starting with pattern: ");
  Serial.println(patterns.getCurrentPatternName());

}

unsigned long last_draw=0;
void scroll_text(uint8_t ypos, unsigned long scroll_delay, String text, uint8_t colorR, uint8_t colorG, uint8_t colorB)
{
    uint16_t text_length = text.length();
    display.setTextWrap(false);  // we don't wrap text so it scrolls nicely
    display.setTextSize(1);
    display.setRotation(0);
    display.setTextColor(display.color565(colorR,colorG,colorB));

    // Asuming 5 pixel average character width
    for (int xpos=MATRIX_WIDTH; xpos>-(MATRIX_WIDTH+text_length*5); xpos--)
    {
      display.setTextColor(display.color565(colorR,colorG,colorB));
      display.clearDisplay();
      display.setCursor(xpos,ypos);
      display.println(text);
      delay(scroll_delay);
      yield();

      // This might smooth the transition a bit if we go slow
      // display.setTextColor(display.color565(colorR/4,colorG/4,colorB/4));
      // display.setCursor(xpos-1,ypos);
      // display.println(text);

      delay(scroll_delay/5);
      yield();

    }
}

void loop()
{
    // menu.run(mainMenuItems, mainMenuItemCount);  
    ms_current = millis();

  
    if ( (ms_current - ms_previous) > ms_animation_max_duration ) 
    {
     //  patterns.moveRandom(1);

       patterns.stop();      
       patterns.move(1);
       patterns.start();  
 
       
       Serial.print("Changing pattern to:  ");
       Serial.println(patterns.getCurrentPatternName());
        
       ms_previous = ms_current;

       // Select a random palette as well
       //effects.RandomPalette();
    }
 
    if ( next_frame < ms_current)
    {
      next_frame = patterns.drawFrame() + ms_current;   
      display.showBuffer();  
    }
}

void listPatterns() {
  patterns.listPatterns();
}