Hallo,
ich versuche aus LED-Matrix die Variante "Multiplexansteuerung mit
Special-ICs" nachzubauen: 2 Zeilen x 55 Spalten, die Zeilen werden per
IRF7401 geschaltet, die Spalten per TLC5940, Zeilenfrequenz: 1kHz.
Ansteuerung über einen ATMega 168, der mit 16MHz läuft.
Prinzipiell funktioniert auch alles (incl. Grayscale PWM des TLC5940),
allerdings glimmen bei mir inaktive LEDs einer Zeile, wenn die
zugehörige LED in der anderen Zeile aktiv ist. Zur Fehlersuche habe ich
meine Schaltung auf den angehängten Schaltplan reduziert. LED_ROW0_COL0
soll leuchten und LED_ROW1_COL0 soll aus bleiben. LED_ROW0_COL0 leuchtet
auch wie gewünscht, allerdings ist LED_ROW1_COL0 nicht komplett aus,
sondern glimmt leicht.
Ich hab schon an dem Timing herumgespielt (bis zu 1024 nops nach dem
Abschalten der Zeilentreiber), aber LED_ROW1_COL0 glimmt munter weiter
vor sich hin.
Mir gehen jetzt die guten Ideen aus, woher das Glimmen kommen kann :-(
Habt ihr noch Tipps, was ich untersuchen kann? Leider beschränkt sich
mein Messgeräte-Equipment auf ein Multimeter und einen simplen
Parallelport-Logic-Analyzer.
Nun noch ein paar erklärende Worte zu Schaltung und Programm:
Die Schaltung folgt dem LED-Matrix Artikel, verwendet statt dem TLC5921
aber einen TLC5940. Das zusätzliche GSCLK-Signal für die PWM der
Konstantstromsenken erzeuge ich mit dem timer/counter 2 des AVR. Die IRF
7401 Mosfets zum Schalten der Zeilen steuere ich über einen ICL 7667 an.
Die ganze Schaltung läuft mit 5V. Wenn ich mich mit den Datenblättern
nicht vertan habe, müssten sowohl der ICL7667, als auch der IRF7401 mit
5V ordentlich laufen. Zum Testen ist der Strom, den der TLC5940 aufnimmt
durch den 2kOhm Widerstand an IREF auf 20mA beschränkt. Als LEDs
verwende ich weiße Osram LUW-T6SG, die verkraften dauerhaft 20mA. Wenn
die Matrix sauber läuft, will ich den Strom auf 60mA erhöhen, dann
brauchen sie aber zwischenzeitlich eine Pause. Bei 60mA passen
Spannungsabfall am TLC5940 (1V) und Spannungsabfall an der LED (4V) so
gerade zur Versorgungsspannung von 5V.
Der Code wird durch die Dokumentation hoffentlich gut erklärt, spannend
ist hier nur die Funktion ISR(TIMER2_OVF_vect) ab Zeile 127. Der Rest
ist Initialisierung. Der TLC5940 erwartet pro Ausgang 12 Bit, diese
stehen für Zeile 0 in dem Array gsdata_row0 (Zeile 65) und für Zeile 1
in dem Array gsdata_row1 (Zeile 72). Momentan soll in Zeile 0 die an
OUT0 angeschlossene LED mit der niedrigsten PWM-Intensität des TLC5940
leuchten. D.h. nach einem Puls an GSCLK soll sie wieder verlöschen. Das
heißt, der Ausgang OUT0 müsste schon durch den TLC5940 lange
abgeschaltet worden sein, bevor ISR(TIMER2_OVF_vect) das nächste Mal die
Zeilen umschaltet.
Ich hoffe auf wertvolle Tipps, wie ich dem Glimmen auf den Grund gehen
kann (bzw. woher es kommt) und es der Schaltung austreiben kann. Oder
darauf, dass ich blind bin und einen offensichtlichen Fehler nicht
erkenne ;-)
Danke für Eure Hilfe im Voraus!
P.S.:
Die LED-Matrix soll in einer Word Clock zum Einsatz kommen. Hinter
der Diffusor-Schicht sollte das Glimmen nicht mehr auffallen. Ich habe
aber Bedenken, dass die LEDs durch das Glimmen nie ganz aus sind. Bei
den geplanten 60mA pro LED vertragen sie aber nur noch einen Duty Cycle
von 0.5 laut Datenblatt. Und ich wollte nicht nach ein paar Monaten die
vorschnell gealterten LEDs der Uhr austauschen :-/