mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED-Matrix - Problem mit "Nachleuchten"


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

Bewertung
0 lesenswert
nicht 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?

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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?

Autor: Tippgeber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Anderer Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guest schrieb:
> Zumindest wenn man aufrecht vor dem Monitor sitzt und nicht noch im
> Bett liegt.
Hast du den Schaltplan im Liegen im Bett gezeichnet?

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

Bewertung
0 lesenswert
nicht 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.

Autor: Achim S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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),

Autor: Linüx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Basti M. (counterfeiter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wärs mit schlechtem Sourcepotential, dass dir bei Last (im 
Schaltvorgang) davon läuft und die anderen Mosfets leicht aufzieht?

ZB. durch R8

Autor: Tippgeber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
Auch solltest Du immer auf das Latchregister schreiben.

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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):
Loop:
    bsf     LATC, 2    ; Zeile 0 an
    bcf     LATB, 4    ; Spalte 0 an

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

    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.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
    bsf     LATC, 2    ; Zeile 0 an
    bcf     LATB, 4    ; Spalte 0 an

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

irgendwas stimmt da zwischen Kommentar und code nicht.

Wenn der andere code genau so falsch ist...

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
Loop:
   bsf     LATC, 2    ; Zeile 0 an
   bcf     LATB, 4    ; Spalte 0 an

   bcf     LATC, 2    ; Zeile 0 aus
   bsf     LATB, 4    ; Spalte 0 aus
   goto Loop

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

Bewertung
0 lesenswert
nicht 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...

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.