Ich schreibe das hier, weil ich erstaunlicherweise zu diesem Thema im
WWW praktisch keine hilfreichen Informationen bekommen habe. Etwas mehr
gab es allerdings hier, in meinem anderen Thread zu dem Thema. Ich nehme
an, dass ich nicht der Einzige auf der Welt bin, der Informationen dazu
gesucht hat, also hoffe ich, dass ich Anderen hiermit helfen kann. Und
dass die Suchmaschinen auf diesen Beitrag verweisen. Es ist auch als
Abschluss des Threads "Nochmal: Ansteuerung LED-Matrix 64 x 32 aus
China" (Beitrag "Re: Nochmal: Ansteuerung LED-Matrix 64 x 32 aus China") gedacht,
nur möchte ich das nicht auch dort noch hinten dran kleben, denn das
Thema hat sich doch stark verändert.
Es gibt in großen Mengen LED-Matrizen, vermutlich alle aus China. Ich
kenne unterschiedlichste LED-Größen von 2 mm ("P2") bis 10 mm ("P10"),
Außenabmessungen und Ausführungen zu - wen wundert es - erstaunlich
geringen Preisen. Ich wollte solche Dinger einfach mal kennenlernen,
damit spielen und sie zum Leben erwecken. Es gab und gibt auch immer
noch kein weiteres konkretes Ziel. (Was nicht ist, kann ja noch werden.)
Alle diese Matrizen werden mit einer Schnittstelle, genannt HUB75,
angesteuert. Ich setze die Grundlagen dieser Schnittstelle hier voraus,
denn es gibt reichlich Dokumentation dazu. Die ersten Matrizen, mit
denen ich gespielt hatte, waren 64 x 32 Pixel P4, also 1:16
gemultiplext. Dafür gibt es die statischen Zeilenadress-Eingänge A, B, C
und D. Mit einem einfachen Controller auf der Basis eines TI MSP430, den
ich speziell dafür gemacht habe, hat das alles wie erwartet
funktioniert. Der nächste Schritt sollten zwei 128 x 64 Pixel P2
Displays sein, also 1:32 gemultiplext. 16384 LEDs. Für solche Displays
wird bei statischer Ansteuerung statt einer der Masseleitungen auf der
HUB75-Stiftleiste ein weiterer Zeilenadress-Eingang E vorgesehen. Eine
simple Erweiterung für die Firmware, dachte ich, aber dann kam es ganz
dick:
Auf den HUB75-Anschlüssen meiner neuen Displays gab es nur die
Zeilenadress-Eingänge A, B und C! Wie sollte das gehen? Bild dazu:
https://www.mikrocontroller.net/attachment/526531/IMG_0002.JPG. Im
Angebot stand davon nichts, und den Verkäufer zu fragen, wäre wohl ein
absolut hoffnungsloses Unterfangen. Zurück schicken? Erst mal nicht. Die
Suche nach Informationen im WWW war sehr wenig ergiebig (danke für
hilfreiche Antworten hier). Was sich noch finden ließ und mir neu war,
war die Information, dass es sich um eine anscheinend eher seltene
serielle Eingabe der Zeilenadressen handelt. Aber bei diesen wenigen
Hinweisen dazu handelte es sich immer nur um AB-, aber niemals um
ABC-Adressierung. Auch wie das funktioniert, also Takt, Daten,
Datenformat etc., wurde nicht einmal für AB erwähnt. Bei allen
Informationen stieß ich immer wieder auf die Information von H. Zeller,
der sich scheinbar als Einziger überhaupt damit befasst und auch einen
(AB-)Treiber für einen Raspi geschrieben hat. Z. B.
https://github.com/hzeller/rpi-rgb-led-matrix, Stichwort "led-row-addr".
Das half wenig, nur dass ich nun sicher wusste, dass es auch serielle
Adressierung gibt. Immerhin etwas.
Die Zeilentreiber-ICs, bei denen des Rätsels Lösung zu finden sein
müsste, waren auf den Displays unter dem Rahmen versteckt. Ungern habe
ich den abgeschraubt, aber darunter fand ich ICs vom Typ D5958SSP.
Während Infos zu allen anderen ICs meiner Displays leicht zu finden
waren, fand ich zu diesem IC nur ein (schlechtes) Bild von dessen
Pinbelegung, aber nichts bezüglich seiner Funktion. Zumindest war zu
erkennen: DIN, LCK, DOUT, DIR und BK. Also ein 8-Bit Schieberegister mit
8 Leistungs-P-Channel-Ausgängen. Für die Anschlüsse A, B und C an meinem
Display kamen Data In, Clock und vermutlich Blank in Frage, und
tatsächlich:
A = Clock (nicht zu verwechseln mit dem Clock-Signal für die RGB-Daten)
B = Blank (bzw. wahrscheinlich = Data In bei AB-Adressierung)
C = Data In (bzw. = Masse bei AB-Adressierung)
4 der D5958SSP gibt es für jede Bildhälfte, das ergibt 2 x 32 Ausgänge.
Nicht zuletzt weil es weiter keine Adressdecodierung gibt, war
offensichtlich, dass nicht 5 Adressbits (5 Bit codiert) sondern für jede
Zeile ein Bit in ein 32 Bit-Schieberegister eingeschoben werden musste,
also die Zeilenadresse "one-hot" codiert ist. Die Schieberegister für
die obere und untere Bildhälfte sind natürlich parallel geschaltet.
Der Rest musste experimentell ermittelt werden:
Data In = high: Zeilentreiber enabled
Erstes Bit der Ausgabe: Oberste Zeile
Clock: Polarität unbekannt, aber weil zu jedem Bit ein Clock-Puls (= 2
Flanken) gehört, ist es zumindest bei mir egal, ob der negativ oder
positiv ist.
Blank: Es gibt offensichtlich ein Datenregister vor den parallelen
Ausgängen des Schieberegisters. Mit dem Signal Blank werden die Daten
übernommen, während gleichzeitig mit Blank = high die Ausgänge disabled
sind.
Datenregister an den Schieberegister-Ausgängen und eine Blank-Funktion
sind in dieser Applikation prinzipiell nicht erforderlich, deshalb hat
man offensichtlich bei AB-Adressierung darauf verzichtet. Ggf. kann für
diesen IC-Eingang auch nOE oder LAT der Schnittstelle genommen werden.
Daraus ergibt sich folgender Algorithmus zur Adressierung der Zeilen.
Das Schieberegister wird zu Beginn als leer (alle Bits low) angenommen:
Im Prinzip hat das dann so auch geklappt, aber dann gab es noch ein
anderes fieses Problem: Wechselnde Pixelfehler, abhängig von leichten
Änderungen der Betriebsspannung! Der Grund dafür ist meines Erachtens
nach ein böser Design-Fehler der Displays: Deren Eingangsbuffer (MW245)
sind HCMOS ICs, die mit 5 V betrieben werden. Das bedeutet, dass lt.
Spezifikation für eine einwandfreie Funktion ein High-Signal mindestens
eine Spannung von 0,7 * VCC, also 3,5 V haben soll. Moderne Logik
arbeitet aber mit nur 3,3 V Betriebsspannung, das ist schon weniger als
gefordert, und wenn dann noch die Signale nicht ganz sauber sind, sind
auch die Sicherheitsreserven schnell aufgebraucht. Mit einem 12
Bit-Pegelkonverter 3,3 V LV-CMOS auf 5 V HCMOS (2 x 74HCT541) für den
ABC-HUB75, war das Problem auch gelöst.
Wären die Eingangsbuffer-ICs der Displays nicht äquivalent zu den
74HC245, sondern zu den 74HCT245, würde dieses Problem gar nicht erst
entstehen. Genau aus diesem Grund gibt es schließlich die 'HCT-Serie -
aber das wusste der Designer offensichtlich nicht.
Es gibt noch einen Unterschied bei den beiden vorhandenen Displays:
Während die Spaltentreiber-ICs FM6124 meines ersten Displays für die
Funktion "LATCH" tatsächlich ein transparentes Latch haben, dass
dauerhaft mit high angesteuert werden kann, sind die Spaltentreiber-ICs
des zweiten Displays mit ICND2038S ausgerüstet, bei denen der Eingang,
der hier auch Latch genannt wird, aber ein flankengesteuertes Register
betreibt, das mit jeder Zeile getaktet werden muss.
DZDZ
Der Zahn der Zeit (🦷⏳) schrieb:> also 1:32 gemultiplext
Sicher nicht, solche Spitzenströme halten die LEDs nicht aus, schon 1:16
ist überzogen.
Der Zahn der Zeit (🦷⏳) schrieb:> Wie sollte das gehen
1:8 Muliplex, dafür 4 x längere Zeilen. Oder eben Schieberegister, wie
du sie vorgefunden hast.
Der Zahn der Zeit (🦷⏳) schrieb:> Moderne Logik arbeitet aber mit nur 3,3 V Betriebsspannung
Nö, HUB75 ist 5V. Selber schuld wer nur 3.3V Signale anlegt.
Der Zahn der Zeit (🦷⏳) schrieb:> Genau aus diesem Grund gibt es schließlich die 'HCT-Serie
Schlechtere Störimmunität.
Lass die Chinesen mal machen, die wissen schon, wie es geht.
Der Zahn der Zeit (🦷⏳) schrieb:> Der nächste Schritt sollten zwei 128 x 64 Pixel P2> Displays sein, also 1:32 gemultiplext.
Die Display-Größe (in Pixel) hat NICHTS mit dem Multiplex-Verhältnis
zu tun!
Jede Größe gibt es von 1:8 bis 1:32. (je nach gewünschter Helligkeit -
die 1:8 sind deutlich heller als die mit 1:32)
Der Zahn der Zeit (🦷⏳) schrieb:> neuen Displays gab es nur die> Zeilenadress-Eingänge A, B und C!
indem die SR einfach länger und auf mehr als eine Zeile verteilt sind.
Bei meinem 64x64-Display mit 1:8 gibt es 3 Adressleitungen (A,B und C)
Die SR sind 256 bit lang, und es werden 4 Zeilen zu 64 LEDs in einem
Durchgang gefüllt.
MaWin schrieb:> Der Zahn der Zeit (🦷⏳) schrieb:>> also 1:32 gemultiplext>> Sicher nicht, solche Spitzenströme halten die LEDs nicht aus, schon 1:16> ist überzogen.
Natürlich gibts die mit 1:32!
Diese "Spitzenströme" sind nicht gewollt, da diese Displays für
Indoor-Einsatz gedacht sind, und die mit 1:8 dafür deutlich zu hell
sind.
Harry L. schrieb:> da diese Displays für Indoor-Einsatz gedacht sind, und die mit 1:8 dafür> deutlich zu hell sind.
Niemand zwingt dich den Strom auch 1/8 der Zeit an zu lassen, du kannst
dimmen (wenn du programmieren kannst, sonst kannst du natürlich nicht).
MaWin schrieb:> Harry L. schrieb:>> da diese Displays für Indoor-Einsatz gedacht sind, und die mit 1:8 dafür>> deutlich zu hell sind.>> Niemand zwingt dich den Strom auch 1/8 der Zeit an zu lassen, du kannst> dimmen (wenn du programmieren kannst, sonst kannst du natürlich nicht).
Ja....könnte man, aber dann wirds schwieriger mit dem PWM, da dann die
kürzesten Pulse so kurz werden, daß man bei grösseren Installationen
sehr schnell Probleme mit dem Timing und der Signalqualität bekommt...
Ui, noch Antworten so spät am Abend... 😊
MaWin schrieb:> Der Zahn der Zeit (🦷⏳) schrieb:>> also 1:32 gemultiplext> Sicher nicht, solche Spitzenströme halten die LEDs nicht aus, schon 1:16> ist überzogen.
Na ja, wenn der Hersteller 1:32 schreibt, muss was Wahres dran sein. Es
ist ja letztendlich auch tatsächlich so. Zur Info: Ich habe die
Stromaufnahme gemessen. Aktueller Aufbau: 2 Displays. Insgesamt 256 x 64
(oder 128 x 128) Pixel, 50% der Pixel sind an (ähnlich einem
Farbbalken-Testbild). Stromaufnahme: 4,4 A. Also auch 4,4 A pro Zeile
Spitzenstrom, wobei eine Zeile aus 256 LEDs der oberen und 256 LEDs der
unteren Bildhälfte (bzw. 128 LEDs in jedem Bildviertel) besteht (aber
nur 50% an sind). 4,4 A / 256 LEDs = 17 mA Spitzenstrom pro RGB-LED,
also 6 mA pro LED-Chip. _Spitzenstrom, nicht Mittelwert!_ Der ist 0,2 mA
pro LED-Chip. Es sind ja nur ganz kleine LEDs, aber es kommt mir
trotzdem nicht sehr viel vor. Ohne besondere Luftzufuhr, auf dem Tisch
liegend, werden die hellen (weißen) Bereiche schon 30° wärmer, als die
Umgebung. Das sollte man nicht vernachlässigen.
> Der Zahn der Zeit (🦷⏳) schrieb:>> Wie sollte das gehen> 1:8 Muliplex, dafür 4 x längere Zeilen. Oder eben Schieberegister, wie> du sie vorgefunden hast.
1:8 hatte auch damals schon Harry L erwähnt. Aber 1. sind dafür 4-mal
so viele Spaltentreiber erforderlich, was bei großen Displays (P10) kein
Problem und sicherlich sinnvoll ist, aber hier nicht in Frage kam, weil
eben 1:32 spezifiziert war und auch nicht mehr Spaltentreiber vorhanden
waren.
Die Frage "Wie sollte das gehen" habe ich mir beim Empfang der Sendung
gestellt. Die Antwort "Schieberegister" kannte ich zu dem Zeitpunkt
nicht als offensichtliche Alternative. Deswegen hatte ich die Frage
gestellt. Manchmal weiß ich halt zu Anfang nicht gleich alles😞
> Der Zahn der Zeit (🦷⏳) schrieb:>> Moderne Logik arbeitet aber mit nur 3,3 V Betriebsspannung> Nö, HUB75 ist 5V. Selber schuld wer nur 3.3V Signale anlegt.
Kann gut sein. Hast du Specs? Oder ist das eine Erfahrung? Mein älteres
Display hat auch nur HC-Treiber, da hat es keine Fehler gegeben. Das ist
halt alles hart an der Grenze.
Und wie sind die üblichen Controller gebaut? Sicherlich nicht mit 5
V-Logik. Ich sehe auf Fotos FPGAs, die machen höchstens 3,3 V. Also
brauchen sie Pegelkonverter. Kann ja sein, dass es die grundsätzlich
gibt. Hast du da Erfahrung?
Aber viele Hobbyprojekte arbeiten mit Raspi. Der hat doch auch
sicherlich nur 3,3 V? Bei meinen Recherchen wurden die immer direkt
angeschlossen ("Selber schuld wer nur 3.3V Signale anlegt."). Oder ESP?
Zumindest habe ich noch nie einen Hinweis auf diese Inkompatibilität
gefunden. Arduino müsste mit 5 V laufen, meine ich - kenne mich in der
Welt aber nicht aus.
> Der Zahn der Zeit (🦷⏳) schrieb:>> Genau aus diesem Grund gibt es schließlich die 'HCT-Serie> Schlechtere Störimmunität.
Das wäre ein Argument. Die 5 V Betriebsspannung sind aber sicherlich
wegen der blauen LEDs zwingend erforderlich, die Störimmunität wäre
dagegen nur ein "nice to have".
Harry L. schrieb:> Die Display-Größe (in Pixel) hat NICHTS mit dem Multiplex-Verhältnis> zu tun!> Jede Größe gibt es von 1:8 bis 1:32. (je nach gewünschter Helligkeit -> die 1:8 sind deutlich heller als die mit 1:32)
Wie ich eben schrieb, danke für die Info - das hätte ich nicht erwartet,
ist aber naheliegend. Aber es konnte bei mir nicht sein, weil 1. 1:32
spezifiziert (ok, hätte ja gelogen sein können), und 2. auch nur für
1:32 Zeilentreiber vorhanden waren.
Harry L. schrieb:> Ja....könnte man, aber dann wirds schwieriger mit dem PWM, da dann die> kürzesten Pulse so kurz werden, daß man bei grösseren Installationen> sehr schnell Probleme mit dem Timing und der Signalqualität bekommt...
Es lässt sich leicht ausrechnen, wie viele LEDs maximal zu einem
Teildisplay bzw. einem HUB75-Anschluss gehören dürfen, um z. B. bei max.
20 bis 30 MHz Pixeltakt 256 Helligkeitsstufen mit 100 Hz Bildfrequenz zu
erreichen (~2000, wenn ich mich nicht irre). Für ein vollwertiges
Full-HD-Display (2 M Pixel) also ca. 1000 Controller-Ausgänge. (Habe ich
mich verrechnet???) Und für die Werbe-Wände in Fußballstadien... Die
haben 10 mm LEDs (P10) und sind vermutlich 128 Pixel hoch, habe ich mal
versucht zu zählen.