mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 64x32 RGB LED Panel (p3-6432-2121-16s-d1.0)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Info (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi, leider bekomme ich das 64x32 RGB Panel "p3-6432-2121-16s-d1.0" nicht 
zum Laufen.

So sieht die Rückseite aus:
https://ae01.alicdn.com/kf/HTB1M92ThZnI8KJjSsziq6z8QpXag/192-96mm-64-32pixels-1-16-Scan-Indoor-SMD2121-RGB-full-color-P3-LED-module-for.jpg

Das Panel hat offenbar einen "Hub75"(-ähnlichen) Anschluss mit 2x8 Pins.
Infos dazu:

https://learn.adafruit.com/32x16-32x32-rgb-led-matrix?view=all
https://web.archive.org/web/20121201205905/http://www.hobbypcb.com/blog/item/3-16x32-rgb-led-matrix-technical-details.html
http://fw.hardijzer.nl/?p=223
http://bikerglen.com/projects/lighting/led-panel-1up/
https://github.com/hzeller/rpi-rgb-led-matrix/blob/master/wiring.md


Ich gehe bislang von dieser Belegung aus (in Aufsicht, Pin 1 links 
oben):
 1:R1   2:G1
 3:B1   4:GND
 5:R2   6:G2
 7:B2   8:? (kein GND, unbelegt, aber auch LOW hat keinen Einfluss)
 9:A   10:B
11:C   12:D
13:CLK 14:STB
15:#OE 16:GND


Die beiden GNDs sind auf dem PCB verbunden.


ICs:

 3x DP74HC245
 4x TC7258E
24x ICN2028BP

Ich benutze ein STM32F103C "blue pill" board via stm32duino und Arduino 
IDE.

Dieses Programm
#define R1  PB3
#define G1  PB4
#define B1  PB5
#define R2  PB6
#define G2  PB7
#define B2  PB8

#define A   PA15
#define B   PA10
#define C   PA9
#define D   PA8

#define LAT PB14
#define CLK PB15
#define OE  PB13


void shift(uint32_t data){

   digitalWrite(LAT,LOW);

   for (uint8_t n=0; n<8; n++) {  // s.u.
      digitalWrite(CLK,LOW);
      if( 1L<<n & data )
        digitalWrite(R1,HIGH);
      else
        digitalWrite(R1,LOW);
      digitalWrite(CLK,HIGH);
    }

    digitalWrite(OE,HIGH);
    digitalWrite(LAT,HIGH);
    //ROW
    digitalWrite(OE,LOW);
}


void setup() {
    
    pinMode(PC13, OUTPUT);

    Serial.begin(115200);
    while( !Serial );
    Serial.println("Hello World!");
    
    pinMode(R1 , OUTPUT);
    pinMode(G1 , OUTPUT);
    pinMode(B1 , OUTPUT);

    pinMode(B2 , OUTPUT);
    pinMode(R2 , OUTPUT);
    pinMode(G2 , OUTPUT);
    
    pinMode(A  , OUTPUT);
    pinMode(B  , OUTPUT);
    pinMode(C  , OUTPUT);
    pinMode(D  , OUTPUT);
    
    pinMode(LAT, OUTPUT);
    pinMode(CLK, OUTPUT);
    pinMode(OE , OUTPUT);

    
    digitalWrite(CLK,LOW);
    digitalWrite(LAT,LOW);
    digitalWrite(OE,LOW);

    digitalWrite(A,LOW);
    digitalWrite(B,LOW);
    digitalWrite(C,LOW);
    digitalWrite(D,LOW);
    
    digitalWrite(R1,LOW);
    digitalWrite(G1,LOW);
    digitalWrite(B1,LOW);
    digitalWrite(R2,LOW);
    digitalWrite(G2,LOW);
    digitalWrite(B2,LOW);
        
}

void loop() {
    digitalWrite(PC13,!digitalRead(PC13));
    

    shift(0x0F);
    delay(100);
    
    shift(0xF0);
    delay(100);
    
}


Erzeugt z.B. die Signale im Anhang. Alles anderen sind LOW.
Die "Aufnahme" erfolgte über eine zusätzliche Schneid-Klemm-Leiste am 
beigelegten Flachbandkabel, 1:1 neben dem Leiterplattenverbinder.

Ja, ich schiebe hier nur 8 Bits, und eigentlich müsste das ein 
16-Kanal-Treiber sein, der laut dem unbrauchbaren "Datenblatt" sogar 
zwei Schieberegister enthält(?). Aber auch 16 oder 32 Bits haben keine 
Anzeige gebracht. Ich mache also etwas falsch - nur was?

Das Panel geht grundsätzlich, beim Flashen des Prozessors zucken einige 
LEDs (ziemlich hell, das Ding).

Autor: Info (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal durchgeklingelt:
PUT_IN
 1: R1  -> U1.2 A0 -> B0 -> UR1.2 (UR1.22 -> UR2.2, UR2.22 -> UR5.2, UR5.22 -> UR6.2)
 2: G1  -> U1.3 A1 -> B1 -> UG1.2
 3: B1  -> U1.4 A2 -> B2 -> UB1.2
 4: GND
 5: R2  -> U3.2 A0 -> B0 -> UR3.2
 6: G2  -> U3.3 A1 -> B1 -> UG3.2
 7: B2  -> U3.4 A2 -> B2 -> UB3.2
 8: ?   -> U3.9 A7 -> B7 -> PUT_OUT.8
 9: A   -> U2.5 A3 -> B3 -> T1/2/3/4.15
           U2.6 A4 -> B4 -> PUT_OUT.9 
10: B   -> U2.4 A2 -> B2 -> T1/2/3/4.16
           U2.7 A5 -> B5 -> PUT_OUT.10
11: C   -> U2.3 A1 -> B1 -> T1/2/3/4.2
           U2.8 A6 -> B6 -> PUT_OUT.11
12: D   -> U2.2 A0 -> B0 -> T2/4.7
           U2.9 A7 -> B7 -> PUT_OUT.12
13: CLK -> U1.5 A3 -> B3 -> UR/G/B/1/2/5/6.3
           U1.6 A4 -> B4 -> PUT_OUT.13 
           U3.8 A6 -> B6 -> UR/G/B/3/4/7/8.3
14: STB -> U1.9 A7 -> B7 -> UR/G/B/1/2/5/6.4
           U3.5 A3 -> B3 -> PUT_OUT.14
           U3.6 A4 -> B4 -> UR/G/B/3/4/7/8.4 
15: #OE -> U1.7 A5 -> B5 -> UR/G/B/1/2/5/6.21 
           U1.8 A6 -> B6 -> PUT_OUT.15
           U3.7 A5 -> B5 -> UR/G/B/3/4/7/8.21 
16: GND

Autor: Info (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TC7258E
Dieses Datenblatt stimmt überein:
http://www.superchip. 
cn/Private/ProductFiles/6364584403048069321406626239.pdf
Damit ist eine Ergänzung erforderlich:
12: D   -> U2.2 A0 -> B0 -> T2/4.7 & T1/3.10

D schaltet also zwischen den Zeilentreiber-Paaren um.

Autor: Info (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Einen chinesischen Artikel zum IC gibt es hier

http://www.21ic.com/np/ce/201604/672866.htm bzw. hier 
https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Fwww.21ic.com%2Fnp%2Fce%2F201604%2F672866.htm&edit-text=&act=url

Gibt aber außer Timing-Diagrammen zur Darstellung der Vorzüge der zwei 
Latches/Register ggü. "herkömmlichen" ICs auch nicht viel her.

Ich habe es nun aber zufällig zum Laufen gebracht: es geht aus mir 
unbekannten Gründen nur, wenn die Zeilen gewechselt werden.
Und das Umschalten der Zeilen muss man auf jeden Fall bei deaktivierter 
Ausgabe machen, sonst gibt es Ghosting.

Bildaufbau ist von links nach rechts (das erste Bit ist links).
#define R1  PB3
#define G1  PB4
#define B1  PB5
#define R2  PB6
#define G2  PB7
#define B2  PB8

#define A   PA15
#define B   PA10
#define C   PA9
#define D   PA8

#define LAT PB14
#define CLK PB15
#define OE  PB13


uint8_t line = 0;

void shift(uint64_t data){

   for (uint8_t n=0; n<64; n++) {
      
      if( ((uint64_t)1<<n) & data ){
        digitalWrite(R1,HIGH);
        digitalWrite(G2,HIGH);
      }
      else {
        digitalWrite(R1,LOW);
        digitalWrite(G2,LOW);
      }

      #if 1
      if(n==63){
        digitalWrite(B1,HIGH);
        digitalWrite(B2,HIGH);
      }
      else {
        digitalWrite(B1,LOW);
        digitalWrite(B2,LOW);
      }
      #endif

      digitalWrite(CLK,LOW);
      digitalWrite(CLK,HIGH);
    }

    digitalWrite(LAT,LOW);
    digitalWrite(LAT,HIGH);

    digitalWrite(OE,HIGH);

    #if 1

    if(line & 1)
      digitalWrite(A,HIGH);
    else
      digitalWrite(A,LOW);

    if(line & 2)
      digitalWrite(B,HIGH);
    else
      digitalWrite(B,LOW);

    if(line & 4)
      digitalWrite(C,HIGH);
    else
      digitalWrite(C,LOW);

    if(line & 8)
      digitalWrite(D,HIGH);
    else
      digitalWrite(D,LOW);
    
    #endif
    
    digitalWrite(OE,LOW);
    
}


void setup() {
    
    pinMode(PC13, OUTPUT);

    Serial.begin(115200);
    while( !Serial );
    Serial.println("Hello World!");
    
    pinMode(R1 , OUTPUT);
    pinMode(G1 , OUTPUT);
    pinMode(B1 , OUTPUT);

    pinMode(B2 , OUTPUT);
    pinMode(R2 , OUTPUT);
    pinMode(G2 , OUTPUT);
    
    pinMode(A  , OUTPUT);
    pinMode(B  , OUTPUT);
    pinMode(C  , OUTPUT);
    pinMode(D  , OUTPUT);
    
    pinMode(LAT, OUTPUT);
    pinMode(CLK, OUTPUT);
    pinMode(OE , OUTPUT);

    
    digitalWrite(CLK,LOW);
    digitalWrite(LAT,LOW);
    digitalWrite(OE,LOW);

    digitalWrite(A,LOW);
    digitalWrite(B,LOW);
    digitalWrite(C,LOW);
    digitalWrite(D,LOW);
    
    digitalWrite(R1,LOW);
    digitalWrite(G1,LOW);
    digitalWrite(B1,LOW);
    digitalWrite(R2,LOW);
    digitalWrite(G2,LOW);
    digitalWrite(B2,LOW);
        
}



void loop() {
    digitalWrite(PC13,!digitalRead(PC13));

    shift( line | (uint64_t)1<<31 );
    if(++line > 15)
      line = 0;
    
    delay(10);    
}
-> Public Domain.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

läuft es bei Dir jetzt stabil? Habe auch eine Weile romprobiert, und 
festgestellt, dass der 2. GND Anschluss (der unter der G1, welchen du 
nicht genau spezifizieren konntest) der E-Pin ist. Entsprechende 
Verbindung hergestellt, und es funktioniert.

Gruß Jan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.