LED-Matrix - Problem mit "Nachleuchten"

Gast #3144474
Lesenswert?

Ich habe eine 6x6-LED-Matrix mit MOSFETs aufgebaut und möchte diese
im Zeilenmultiplexverfahren von einem PIC ansteuern. Das Problem: ich
sehe ein deutliches "Nachleuchten", d.h. sobald eine LED aktiv ist,
leuchten auch alle übrigen LED in dieser Spalte -- sehr schwach, aber
gut sichtbar.

Um dem Problem auf die Spur zu kommen, habe ich eine Ansteuerung
programmiert, die nur eine Spalte benutzt und bei der eigentlich
alle LEDs dunkel sein sollten:

1. Anfangszustand: C0...C0 low (alle Spalten aus)
                   B4..B7, A4..A5 high (alle Zeilen aus)
2. B4 low, B4 high  (Spalte 0 kurz ein- und sofort wieder ausschalten)
3. C0 high, 100µs warten, C0 low (Zeile 0)
4. C1 high, 100µs warten, C1 low (Zeile 1)
5. C2 high, 100µs warten, C2 low (Zeile 2)
6. C3 high, 100µs warten, C3 low (Zeile 3)
7. C4 high, 100µs warten, C4 low (Zeile 4)
8. C5 high, 100µs warten, C5 low (Zeile 5)
9. goto 2

Alle LEDs der Spalte 0 leuchten schwach, sogar noch die in Zeile 5.
Im Oszilloskop sehe ich, daß in Schritt 2 die Gate-Spanung von QC0
für etwa 500ns auf 0V und dann wieder auf 5V geht. JP2 ist 
kurzgeschlossen

Wie kommt es, daß noch 500µs später die LED in Zeile 5 leuchtet?
Hat jemand eine Erklärung dafür?
Angehängte Dateien:
Gast #3144511
Lesenswert?

> 1. Anfangszustand: C0...C0 low (alle Spalten aus)
>                    B4..B7, A4..A5 high (alle Zeilen aus)

Du hast ein merkwürdiges Verständnis von Spalten und Zeilen.
Du schreibst auch in der Schule vermutlich chinesisch hochkant.
Manchmal 47 statt 33 Ohm, alles recht merkwürdig.

Aber prinzipell ist deine Schaltung richrig,
die MOSGFETs geeignet,
das Programm sinnvoll.

Der Fehler liegt also woanders, beispielsweise vergessen die
Ports auf Ausgang zu schalten, oder doch nicht das zusammengelötet,
was dein Schaltplan sagt.
Gast #3144610
Lesenswert?

MaWin schrieb:
>> 1. Anfangszustand: C0...C0 low (alle Spalten aus)
>>                    B4..B7, A4..A5 high (alle Zeilen aus)
>
> Du hast ein merkwürdiges Verständnis von Spalten und Zeilen.
> Du schreibst auch in der Schule vermutlich chinesisch hochkant.

Spalten sind (bei mir) vertikal, Zeilen horizontal. Zumindest wenn man 
aufrecht vor dem Monitor sitzt und nicht noch im Bett liegt. Was ist 
daran merkürdig?

> Manchmal 47 statt 33 Ohm, alles recht merkwürdig.

Die LEDs in Spalte 1 und 5 sind rot, die anderen blau bzw grün. Du hast 
aber recht, die Widerstände sind "empirisch ermittelt" und mit 6x47Ω 
würde es wohl genauso funktionieren. Hat aber mit meinem Problem nichts 
zu tun.


>
> Aber prinzipell ist deine Schaltung richrig,
> die MOSGFETs geeignet,
> das Programm sinnvoll.
>
> Der Fehler liegt also woanders, beispielsweise vergessen die
> Ports auf Ausgang zu schalten, oder doch nicht das zusammengelötet,
> was dein Schaltplan sagt.

Die Schaltung ist komplett aufgebaut. Ich kann (mit der richtigen 
Multiplexansteuerung) jede LED einzeln ein- und ausschalten, das ist 
nicht das Problem.

Kann es am ungünstigen Layout liegen? Die Leiterbahnen zu den Anoden der 
LEDs sind schon etwas kompliziert, siehe Bild. Bei Frequenzen im 
10kHz-Bereich sollte das aber alles kein Problem sein, oder?
Angehängte Dateien:
Gast #3144628
Lesenswert?

Ohne Dein Programm oder Deine Schaltung genau angesehen zu haben sind 
mir bislang mindestens 4 Problemursachen beim LED-Multiplex begegnet:

1) Lawinendurchbrüche in den LEDs. Das tritt bei relativ hoher 
Betriebsspannung für die Matrix auf, und läst sich durch serielle 
Entkoppeldioden verhindern

2) Restladungen in den Leitungen, welche erst beim nächsten MUX-Zyklus 
entladen werden und zu unerwünschtem Mitglimmen führen. Abhilfe durch 
Entladeschaltungen, Entladewiderstände, Austastlücken zwischen den 
Mux-Zyklen, ggf. Kondensatoren parallel zu den LEDs (kapazitive 
Spannungsteiler)

3) Überlappungen in den Ansteuerpulsen. Längere Austastlücken einbauen.

4) Restströme bei den Treibern. Kommt normalerweise nur vor bei extrem 
überdimensionierten Bauelementen oder bei hohen Temperaturen.
Gast #3144639
Lesenswert?

> Kann es am ungünstigen Layout liegen?

Nein. (zuerst habe ich die Hälfte der MOSFETs vermisst).

Eigentlich wird so ein kleiner MOSFET vom Ausgang eines uC rasant 
umgeladen. Es kann also nur passieren, wenn der uC-Ausgang offen oder 
sonstwie falsch angesteuert ist.
Gast #3144670
Lesenswert?

Tippgeber schrieb:
> Ohne Dein Programm oder Deine Schaltung genau angesehen zu haben sind
> mir bislang mindestens 4 Problemursachen beim LED-Multiplex begegnet:
>
> 1) Lawinendurchbrüche in den LEDs. Das tritt bei relativ hoher
> Betriebsspannung für die Matrix auf, und läst sich durch serielle
> Entkoppeldioden verhindern

Die Schaltung läuft mit 5V

>
> 2) Restladungen in den Leitungen, welche erst beim nächsten MUX-Zyklus
> entladen werden und zu unerwünschtem Mitglimmen führen. Abhilfe durch
> Entladeschaltungen, Entladewiderstände, Austastlücken zwischen den
> Mux-Zyklen, ggf. Kondensatoren parallel zu den LEDs (kapazitive
> Spannungsteiler)

Das war auch meine erste Vermutung. Ich würde ja noch verstehen, wenn 
die LED in Zeile 0 leicht glimmt. Dann sollten aber doch alle Ladungen 
abgeflossen sein. Trotzdem leuchten auch die LEDS in Zeile 2-5, und zwar 
genauso stark (bzw schwach) wie Zeile 0.

>
> 3) Überlappungen in den Ansteuerpulsen. Längere Austastlücken einbauen.

Das kann ich definitv ausschließen, siehe Bild. Oben ist Spalte 0 (Gate 
QC0), unten Zeile 1 (Gate QR1). Zwichen Ausschalten von Spalte 0 und 
Einschalten von Zeile 1 liegen 100µs.

>
> 4) Restströme bei den Treibern. Kommt normalerweise nur vor bei extrem
> überdimensionierten Bauelementen oder bei hohen Temperaturen.
Angehängte Dateien:
Gast #3144685
Lesenswert?

ich sehe auch keine Fehler, die das Nachleuchten erklären würden. Aber 
vielleicht können dir folgenden Fragen bei der weiteren Analyse neue 
Ideen geben:

1) ist die Stärke des Nachleuchtens in jeder Column gleich stark, oder 
hängt es vom einzelnen Column-Transistor ab?
2) bleibt das Nachleuchten gleich hell, wenn du den Column-Transistor 
mit Kältespray bearbeitest?
3) siehst du über die 500µs (also über Zeile 1-5 der Matrix) schon eine 
Abnahme der Helligkeit? Wie siehts aus, wenn du die 100µs in Zeile 3-8 
deines Pseudo-Codes durch 1ms oder 10ms ersetzt? (also: wie ist die 
Zeitkonstante des Nachleuchtens)
4) siehst du mit dem Oszi an den Drains der Transistoren beim Abschalten 
irgendwelche Überschwinger?
Gast #3144689
Lesenswert?

Nachtrag: für das obige Oszillogramm habe ich die Ansteuerung 
modifiziert, so daß Spalte 0 nicht nur ganz kurz, sondern 100µs lang 
eingeschaltet ist (damit das Spaltensignal besser sichtbar ist),
Gast #3144692
Lesenswert?

Guest schrieb:
> Wie kommt es, daß noch 500µs später die LED in Zeile 5 leuchtet?
> Hat jemand eine Erklärung dafür?

Dein PIC hat nicht die Power das Gate ständig umzuladen.

Tippgeber schrieb:
> 2) Restladungen in den Leitungen, welche erst beim nächsten MUX-Zyklus
> entladen werden und zu unerwünschtem Mitglimmen führen. Abhilfe durch
> Entladeschaltungen, Entladewiderstände, Austastlücken zwischen den
> Mux-Zyklen, ggf. Kondensatoren parallel zu den LEDs (kapazitive
> Spannungsteiler)

Halt nen Tastkopf hin dann weißt es. Werden sie dnan dunkel hast so ein 
Problem.



Du misst an der falschen Stelle. Miss mal auf den getriebenen Leitungen 
nicht auf der Ansteuerungsseite
Gast #3144701
Lesenswert?

Achim S. schrieb:
> ich sehe auch keine Fehler, die das Nachleuchten erklären würden. Aber
> vielleicht können dir folgenden Fragen bei der weiteren Analyse neue
> Ideen geben:
>
> 1) ist die Stärke des Nachleuchtens in jeder Column gleich stark, oder
> hängt es vom einzelnen Column-Transistor ab?

Der Effekt tritt in allen Spalten gleich stark auf.

> 2) bleibt das Nachleuchten gleich hell, wenn du den Column-Transistor
> mit Kältespray bearbeitest?

Kältespray habe ich momentan nicht zur Hand. Werde ich aber morgen 'mal 
ausprobieren, falls mir nichts besseres einfällt.

> 3) siehst du über die 500µs (also über Zeile 1-5 der Matrix) schon eine
> Abnahme der Helligkeit? Wie siehts aus, wenn du die 100µs in Zeile 3-8
> deines Pseudo-Codes durch 1ms oder 10ms ersetzt? (also: wie ist die
> Zeitkonstante des Nachleuchtens)

Die Zeitkonstante ist ziemlich hoch. Wenn ich den Delay auf 500s 
verlängere, glimmt es immer noch gut sichtbar, erst ab ab 1.5ms hört es 
auf.


> 4) siehst du mit dem Oszi an den Drains der Transistoren beim Abschalten
> irgendwelche Überschwinger?

Ja, aber nur schwach (<500mV).
Gast #3144933
Lesenswert?

Ich denke, dass es sich um kapazitive Effekte handelt. Bedenke, dass die 
LEDs ebenfalls relativ große Kapazitäten sind, und dass die Gateströme 
nicht nur über die Sources abfließen, sondern auch in die Drains 
gelangen. Durch die floatenden Spaltentreibern könnten sich dadurch 
entsprechende Ladungsansammlungen bilden.
Leider habe ich keine konkrete Lösung, sondern nur einige Vorschläge:

Die Drains der Zeilentransistoren über Pullups mit Vcc verbinden und die 
Drains der Spaltentransistoren über Pulldowns mit GND verbinden. Dadurch 
sind die LEDs im Ruhezustand definiert gesperrt und ihre Kapazitäten 
werden klein gehalten. Die Widerstände sollten möglichst niederohmig 
sein (220R..1k ?). Die Austastlücken müssen groß genug sein, um 
vollständige Entladungen der Leitungen zu ermöglichen (Scope).

Versuchweise Kondensatoren (100n) parallel zu den LEDs legen. Die 
Kondensatoren können kleine Ladungspulse aufnehmen und von den LEDs 
fernhalten.

Die Ansteuergeschwindigkeit der MOSFETs durch Gatewiderstände etwas 
reduzieren (100R...1k ?).

Die Muxfrequenz reduzieren auf zB. 113 Hz, so niedrig dass gerade noch 
kein Flimmern auftritt und Oberwellen der Netzfrequenz vermieden werden.
Gast #3144961
Lesenswert?

Peter Dannegger schrieb:
> Ist mit Sicherheit ein Fehler in Deinem Programm.
>
> Bei manche PIC sind einige Pins nach dem Reset gar keine IOs, sondern
> analog Input, dann floaten Deine FETs.
Alle 12 Ports sind als output und digital (TRISx bzw ANSELx) 
konfiguriert. Andernfalls könnte ich die LEDs ja gar nicht kontrolliert 
ein- und ausschalten. Wie schon geschrieben, die Matrix funktioniert im 
Prinzip einwandfrei, bis auf das Nachleuchten.

> Auch solltest Du immer auf das Latchregister schreiben.

Mach ich doch.
Gast #3144997
Lesenswert?

Linüx schrieb:

> Dein PIC hat nicht die Power das Gate ständig umzuladen.
[...]
> Du misst an der falschen Stelle.

Nö. Er hat mit seiner Messung wahrscheinlich erst einmal deine Vermutung 
widerlegt.

Wenn der PIC wirklich nicht genug Power zum Umladen der Gatekapazität 
hätte, wäre das im Oszillogramm deutlich durch entsprechend 
verschliffene Flanken erkennbar.

Allerdings hat er nicht gesagt, wo genau er angetastet hat, am µC-Pin 
oder am Gatepin des FET. Das kann durchaus einen sehr relevanten 
Unterschied ausmachen.
Gast #3145215
Lesenswert?

c-hater schrieb:
> ...
> Wenn der PIC wirklich nicht genug Power zum Umladen der Gatekapazität
> hätte, wäre das im Oszillogramm deutlich durch entsprechend
> verschliffene Flanken erkennbar.
>
> Allerdings hat er nicht gesagt, wo genau er angetastet hat, am µC-Pin
> oder am Gatepin des FET. Das kann durchaus einen sehr relevanten
> Unterschied ausmachen.

Die Messung habe ich direkt an den Gates gemacht.
Wie MaWin schon geschrieben hat, die Ausgänge des Controllers sollten 
genug Strom liefern, um den FET innerhalb einer µs umzuladen.

Ich denke, ich habe eine Kapazität in meiner Schaltung und sehe sie 
nicht. Irgendwo muß die Ladung ja herkommen, die durch LEDs fließt, und 
der Spaltentransistor ist definitiv gesperrt, siehe Bild.
Gast #3145317
Lesenswert?

Guest schrieb:

> Ich denke, ich habe eine Kapazität in meiner Schaltung und sehe sie
> nicht. Irgendwo muß die Ladung ja herkommen, die durch LEDs fließt, und
> der Spaltentransistor ist definitiv gesperrt, siehe Bild.

Ich glaube nicht an hinreichende Kapazitäten auf der LED-Seite der FETs.

Aber ich würde mich angesichts der wunderhübsch steilen Flanken des 
Oszilligramms aber keineswegs über hinreichende Kapazitäten auf der 
Gate-Seite der FETs wundern.

Interessant wäre also, mal einfach nur eine einzige LED getaktet zu 
betreiben, also sie blinken zu lassen, indem die zuständigen Zeilen- und 
Spaltentreiber gleichzeitig an und aus geschaltet werden.

Damit ist erstmal aller Schmutz aus möglicherweise fehlenderhaftem 
Programm ausgeschlossen, denn so ein Blinkprogramm ist ja nun wirklich 
sehr überschaubar.

Außerdem sind irgendwelche Effekte durch Zeitkonstanten beim Wechsel 
zwischen Zeilen/Spalten ebenfalls ausgeschlossen.

Bei geringer Blinkfrequenz werden nun vermutlich die anderen LEDs dunkel 
bleiben.

Soweit die Vorbereitungen. Jetzt wird es spannend. Nun erhöhst du die 
Blinkfrequenz auf das mögliche Maximum im MHz-Bereich. Vermutlich werden 
die anderen LEDs jetzt sehr deutlich mitleuchten. Wenn nicht: Der Fehler 
liegt in der Software. Wenn ja, weiter so:

Jetzt oszillografierst du mal acht Sachen mit der immer gleichen 
Zeitauflösung, die so sein sollte, daß man gerade zwei Perioden der 
Waveform sieht:

1) zwischen GATE des aktiven Zeilen-FET und GND
2) zwischen GATE des aktiven Zeilen-FET und VCC
3) zwischen GATE des aktiven Spalten-FET und GND
4) zwischen GATE des aktiven Spalten-FET und VCC

Das dient erstmal nur als Referenz zum vergleichenden Betrachten der 
eigentlich interessanten Oszillogramme, nämlich genau dieselben 
Messungen, aber jeweils an einem der inaktiven FETs, am besten einem dem 
jeweils aktiven direkt benachbarten.

Es sollte mich sehr wundern, wenn da dann nicht die Ursache des Effektes 
deutlich zu erkennen sein sollte.

Übrigens: Allzu lange solltest du die Messungen besser nicht dauern 
lassen, wenn du nicht scharf drauf bist, einen neuen PIC kaufen zu 
müssen...
Gast #3145463
Lesenswert?

c-hater schrieb:
> Guest schrieb:
> ...
> Soweit die Vorbereitungen. Jetzt wird es spannend. Nun erhöhst du die
> Blinkfrequenz auf das mögliche Maximum im MHz-Bereich. Vermutlich werden
> die anderen LEDs jetzt sehr deutlich mitleuchten. Wenn nicht: Der Fehler
> liegt in der Software. Wenn ja, weiter so:

Mein Programm sieht nun so aus (Initialisierung weggelassen):
1
Loop:
2
    bsf     LATC, 2    ; Zeile 0 an
3
    bcf     LATB, 4    ; Spalte 0 an
4

5
    bcf     LATC, 2    ; Zeile 0 aus
6
    bcf     LATB, 4    ; Spalte 0 aus
7

8
    goto    Loop
Damit komme ich auf eine Blinkfrequenz von etwa 1,3MHz (6 Takte bei 
Fosc=32MHz). Die angesteuerte LED leuchtet, alle anderen sind dunkel.

Das Nachleuchten tritt erst dann auf, wenn ich die anderen Zeilen 
anschalte.
Gast #3145471
Lesenswert?

1
    bsf     LATC, 2    ; Zeile 0 an
2
    bcf     LATB, 4    ; Spalte 0 an
3

4
    bcf     LATC, 2    ; Zeile 0 aus
5
    bcf     LATB, 4    ; Spalte 0 aus

irgendwas stimmt da zwischen Kommentar und code nicht.

Wenn der andere code genau so falsch ist...
Gast #3145496
Lesenswert?

MaWin schrieb:

> irgendwas stimmt da zwischen Kommentar und code nicht.
>
> Wenn der andere code genau so falsch ist...


Sorry, hätte ich besser kopiert statt abgetippt. Es sollte natürlich 
heißen:
1
Loop:
2
   bsf     LATC, 2    ; Zeile 0 an
3
   bcf     LATB, 4    ; Spalte 0 an
4

5
   bcf     LATC, 2    ; Zeile 0 aus
6
   bsf     LATB, 4    ; Spalte 0 aus
7
   goto Loop
Gast #3145527
Lesenswert?

Nach einigem Herumprobieren habe ich einen Weg gefunden, das 
Nachleuchten zu unterbinden, und zwar je einen Pull-Up-Widerstand an den 
Drains der Zeilentransistoren.

Die Matrix arbeitet jetzt perfekt, so daß ich erst einmal weitermachen 
kann. Trotzem wüsste ich gerne, was da eigentlich passiert...
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren