Forum: Mikrocontroller und Digitale Elektronik LED-Matrix Modul - Ghosts bekaempfen


von Christian K. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe einen uC (PSoC 5LP) so programmiert, das er ein LED Matrix 
Modul (32x64) ansteuert. Das macht der PSoC vollständig mit seiner 
programmierbaren Hardware und ist daher recht schnell.

Jetzt gibt es Ghosts, wie man auf dem Foto sehen kann. Das Foto ist im 
Dunkeln gemacht, damit man das besser sieht. Bei Tageslicht fallen die 
Ghosts kaum auf.

Meine Therorie wie diese Ghosts entstehen ist, das es Übersprechen gibt, 
wenn die Matrix Adresse gewechselt wird. Für eine kurze Zeit stehen die 
alten Daten noch bei der neuen Addresse an oder umgekehrt. Bzw. wenn die 
Addresse wechselt sind kurzzeitig mehrere Addressen gültig - deswegen 
auch mehrfaches Übersprechen.

Wärend des Zeilenwechselns werden die LED's ja mit dem OE Signal 
ausgeschaltet (blanking). Das OE Signal schaltet dafür die 
Zeilenschalter (P-MOS) aller Zeilen aus. Wärend das OE Signal aktiv ist, 
wird die Zeilenaddresse gewechselt und neue Daten in das Ausgangslatch 
des Schieberegisters kopiert (Latch-Signal). Theoretisch dürfte es also 
praktisch kein Übersprechen geben. Bei langsamer Clock passiert das auch 
nicht, aber ab > 1MHz dann doch. Ich wollte das Panel eigentlich mit 
10MHz clock betreiben.

Das zweite Bild zeigt das OE Signal (hellblau) und das Address LSB 
(dunkelblau). (Gelb ist das Pixel-Signal für G1)

Ich habe jetzt schon ziemlich viel mit verschieben der Timings zwischen 
OE, Latch und Address-Wechsel probiert, aber ich bekomme das Ghosting 
bei schnelleren Clocks nicht weg.

Irgend jemand hier mit Erfahrungen? Stimmt meine Theorie oder gibt es 
eine andere Ursache?

Freue mich über jede Hilfe...

von Peter D. (peda)


Lesenswert?

Christian K. schrieb:
> Bzw. wenn die
> Addresse wechselt sind kurzzeitig mehrere Addressen gültig - deswegen
> auch mehrfaches Übersprechen.

Da sollte man besser ein Schieberegister nehmen, dann gibt es keine 
Spikes.
FETs können teilweise recht hohe Kapazitäten haben, die umgeladen werden 
müssen. Besser sind da normale BJTs in Kollektorschaltung, die schalten 
sauschnell.

von Martin S. (led_martin)


Lesenswert?

Hallo,

Werden die Ausgänge das Ansteuer-ICs für die Zeilen-P-MOS vielleicht nur 
hochohmig wenn das OE Signal weggeht? Die Gates müssen richtig entladen 
werden. Sind diese Zeilen-P-MOS in dem Matrix-Modul verbaut, oder kommst 
Du da dran? Wenn ja, mach da mal Pulldowns an die Drain-Anschlüsse, 
können meist recht hochohmig sein (Erst 10k .. 47k probieren, wenns 
besser wird, aber nicht weggeht, bis 1k runtergehen). Da ich auch schon 
öfter soetwas gehabt habe, baue ich meine Zeilen-Ansteuerungen immer 
Push-Pull. Sonst hängen die Zeilen-Leitungen so in der Nähe der 
LED-Flußspannung rum, und Einkopplungen erledigen den Rest. Aktuelle 
LEDs glimmen schon bei wenigen uA sichtbar! Etwas seltsam ist, daß das 
Ghosting, an manchen Stellen, in beide Richtungen auftritt. Grün scheint 
besonders anfällig zu sein.

Mit freundlichen Grüßen - Martin

von Falk B. (falk)


Lesenswert?

@Christian K. (Gast)

>Meine Therorie wie diese Ghosts entstehen ist, das es Übersprechen gibt,
>wenn die Matrix Adresse gewechselt wird.

Meistens.

> Für eine kurze Zeit stehen die
>alten Daten noch bei der neuen Addresse an oder umgekehrt. Bzw. wenn die
>Addresse wechselt sind kurzzeitig mehrere Addressen gültig

Das sollte schon mal nicht passieren.

>Ich habe jetzt schon ziemlich viel mit verschieben der Timings zwischen
>OE, Latch und Address-Wechsel probiert, aber ich bekomme das Ghosting
>bei schnelleren Clocks nicht weg.

Man muss die Verzögerung an der richtigen Stelle machen. Die Hardware 
muss aber auch halbwegs passen.

>Freue mich über jede Hilfe...

Dann zeig uns deinen Schaltplan.

von Georg (Gast)


Lesenswert?

Christian K. schrieb:
> Jetzt gibt es Ghosts

Beim Multiplexen muss man die Zeilendaten auf Null (Aus) setzen, DANN 
die neue Spalte adressieren, DANN neue Zeilendaten ausgeben. Dann heisst 
ein paar µs Verzögerung.

Hilft das nicht muss man halt die Ghostbusters rufen.

Georg

von Falk B. (falk)


Lesenswert?

@Georg (Gast)

>Beim Multiplexen muss man die Zeilendaten auf Null (Aus) setzen, DANN
>die neue Spalte adressieren, DANN neue Zeilendaten ausgeben.

Nicht zwangsweise.

>Dann heisst ein paar µs Verzögerung.

Das ist der Workaround, wenn deine Schaltstufen nichts taugen.

>Hilft das nicht muss man halt die Ghostbusters rufen.

Ein paar Grundlagen der E-Technik jenseits des ohmschen Gesetzes sind 
auch ganz hilfreich.

von Falk B. (falk)


Lesenswert?


von Christian K. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

danke schon mal für die Tips, ich habe einen Schaltplan für so ein LED 
Matrix modul gefunden, ist zwar nicht die gleiche Größe, verwendet aber 
exakt die gleichen Bauteile. Ich gehe daher davon aus, dass die 
Schaltung ziemlich ähnlich ist, aber statt 8:1 macht mein Modul ein 16:1 
multiplexing und hat die doppelte Anzahl von Schieberegistern.

Wie man sieht werden die P-MOS Switches vom Addressdekoder (74HC138) 
angesteuert, der auch das OE (output enable) Signal verwaltet. (In 
meinem Modul gibt es zwei 74HC138 wegen 16:1 muximg).

Leider wird der bei den LED Drivern ebenfalls vorhandene OE pin nicht 
benutzt.

Der 16-fach LED Konstantstrom Treiber sind die SM16126, die haben ein 
Schieberegister, ein Ausgangsregister und constant current-sinks für die 
LED's.

Der Ablauf der Ansteuerung ist folgendermassen:
1. Takte die RGB1/RGB2 Daten in das Schieberegister der LED Treiber
2. Disable den output (EN)
3. Latch das Schieberegisterdaten in die Ausgangsregister der LED 
Treiber (ST)
4. Wechsel die Addresse
5. Enable den output
goto 1

3. und 4. kann auch gleichzeitig oder vertauscht werden, aber die Ghosts 
bleiben... Zwischen 2. und 3. habe ich auch schon Delays bis 1µs 
eingebaut aber hat nichts sichtbar geändert.

Vmtl. bleibt mir nichts anderes übrig als mal an den PMOS zu messen, das 
würde ich aber gerne vermeiden, weil dazu auf dem Panel gelötet werden 
muss...

von Falk B. (falk)


Lesenswert?

@ Christian K. (Gast)

>Wie man sieht werden die P-MOS Switches vom Addressdekoder (74HC138)
>angesteuert, der auch das OE (output enable) Signal verwaltet. (In
>meinem Modul gibt es zwei 74HC138 wegen 16:1 muximg).

Das passt soweit, der 138er kann die P-MOSFETs kräftig genug ansteuern.

>Leider wird der bei den LED Drivern ebenfalls vorhandene OE pin nicht
>benutzt.

???
Welche meinst du? Die SM16126? Dort braucht man das nicht. Nur am 
Spaltendekoder 74HC138, dort braucht man das, um alle Spalten inaktiv zu 
schalten.

>Der 16-fach LED Konstantstrom Treiber sind die SM16126, die haben ein
>Schieberegister, ein Ausgangsregister und constant current-sinks für die
>LED's.

http://www.deppenapostroph.info/

>Der Ablauf der Ansteuerung ist folgendermassen:

Erspar uns die Lyrik, zeig und deinen Originalcode ala Anhang.

>1. Takte die RGB1/RGB2 Daten in das Schieberegister der LED Treiber
>2. Disable den output (EN)

Welchen denn?

>3. und 4. kann auch gleichzeitig oder vertauscht werden, aber die Ghosts
>bleiben... Zwischen 2. und 3. habe ich auch schon Delays bis 1µs
>eingebaut aber hat nichts sichtbar geändert.

dann mach mal 10us rein, nur zum Testen. Wenn das nix bringt, liegt der 
Fehler woanders.

>Vmtl. bleibt mir nichts anderes übrig als mal an den PMOS zu messen, das
>würde ich aber gerne vermeiden, weil dazu auf dem Panel gelötet werden
>muss...

Ich hatte auch schon mal den merkwürdigen Effekt, daß die LEDs eine Art 
Speichereffekt zeigten, wenn das Anodenpotential nicht aktiv auf GND 
gezogen wurde. Abhilfe brachten jeweils 1k Ohm von den Spaltentreibern 
(DRAIN der MOSFETs) nach GND. Vielleicht waren es auch 100 Ohm, weiß 
nicht mehr genau.

von Harry L. (mysth)


Lesenswert?

Ich hab auch so ein Display hier rumfliegen, aber ein richtiges 
Datenblatt inkl. Beschreibung der Ansteuerung hab ich noch nicht 
gefunden. (Vermutlich nicht intensiv genug gesucht)
Kannst du mir da weiter helfen?

Gruss

Harry

von Christian K. (Gast)


Lesenswert?

Falk B. schrieb:
> ???
> Welche meinst du? Die SM16126? Dort braucht man das nicht. Nur am
> Spaltendekoder 74HC138, dort braucht man das, um alle Spalten inaktiv zu
> schalten.

Ja genau, denn wenn die current sinks zusätzlich aus wären während des 
Umschaltens, wäre die Cross-Talk Gefahr geringer. (ist aber eh nur 
philosophisch da nicht änderbar)

Falk B. schrieb:
> dann mach mal 10us rein, nur zum Testen. Wenn das nix bringt, liegt der
> Fehler woanders.

Ich habe den Clock der Schaltung um den Faktor 10 reduziert, dann ist 
das ghosting weg. Es hat also schon was mit dem Timing zu tun. 
Allerdings sind 10µs nicht akzeptabel weil das stark auf die Helligkeit 
des Panels gehen würde und auch nicht ins timing budget passt.

Ein paar technische Daten:
Frame Wiederholfrequenz fw soll >100 Hz sein
PWM ist 5bit (32 Stufen)
Mux-Rate ist 1:16
Shift-Bits sind 128 (es sollen zwei Panels in Reihe werden)
System Clock ist fc

Das ist die Gleichung für das Timing Budget:

(128+x)*32*16=fc/fw

x ist die Anzahl der Clocks während der output disabled ist. fc kann 
max. 7MHz sein weil der DMA Controller die Daten nicht schneller liefern 
kann. Dann kann man mit

x=fc/(fw*32*16)-128

leicht ausrechnen das x kleiner als 9 sein muss um 100Hz refresh rate zu 
schaffen. D.h. die blanking Zeit muss kleiner als 9 Takte also 1.3µs 
sein...

Diese Schaltgeschwindigkeit ist jetzt auch für die P-MOS nicht wirklich 
ein Problem.

Falk B. schrieb:
> Ich hatte auch schon mal den merkwürdigen Effekt, daß die LEDs eine Art
> Speichereffekt zeigten, wenn das Anodenpotential nicht aktiv auf GND
> gezogen wurde. Abhilfe brachten jeweils 1k Ohm von den Spaltentreibern
> (DRAIN der MOSFETs) nach GND. Vielleicht waren es auch 100 Ohm, weiß
> nicht mehr genau.

Das ist interessant... Dann muss ich wohl doch mal am Panel löten. Die 
grünen LEDs scheinen übrigens besonders empfindlich zu sein

von Christian K. (Gast)


Lesenswert?

Harry L. schrieb:
> Ich hab auch so ein Display hier rumfliegen, aber ein richtiges
> Datenblatt inkl. Beschreibung der Ansteuerung hab ich noch nicht
> gefunden. (Vermutlich nicht intensiv genug gesucht)
> Kannst du mir da weiter helfen?

Das beste was ich finden konnte war die Schaltung die ich oben verlinkt 
habe. Ein Datenblatt mit Timings usw. habe ich auch nicht gefunden. Aber 
zumindest für die normalen Timings kann man ja die 
Komponenten-Datenblätter hernehmen.

https://www.mikrocontroller.net/attachment/303029/Schematic_for_16x32_RGB_LED_matrix_panel.pdf

von Harry L. (mysth)


Lesenswert?

Danke!
Das sollte in jedem Fall helfen.

Harry

von Christian K (Gast)


Lesenswert?

So Ursache ist gefunden. Ehemals eingeschaltete PMOS Transistoren haben 
noch soviel Ladung gespeichert, das die nachfolgenden LED's noch 
nachleuchten.

Abhilfe schaft ein Widerstand von dem Drain des PMOS zu Ground (pull 
down).

Interessanterweise sind für solche pull-downs schon unbestückte 
Lötstellen vorhanden. Ich habe auf drei Zeilen 1.8k und auf den anderen 
180 Ohm bestückt und es ist viel besser. 1.8k ist noch zu viel, 180Ohm 
ist besser.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.