Forum: Mikrocontroller und Digitale Elektronik AVR: RGB-LEDs an TLC5945


von Marco B. (bauermar)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin bisher hier noch nicht schreibend in Erscheinung getreten,
habe aber aus dem Forum schon viele Anregungen entnommen.
Seit drei Tagen trete ich aber bei einem Problem auf der Stelle.
Wahrscheinlich ist es nur eine Kleinigkeit, die ich aber übersehe,
deshalb hoffe ich, daß mir hier vielleicht jemand weiterhelfen
kann.

Ich experimentiere gerade mit RGB-LEDs von Samsung herum
(Typ SLSRGBW815TSCSSP). Diese möchte ich gerne mit LED-
Treiber-ICs von TI des Typs TLC5945 ansteuern (gibt es
bei Farnell).

Zum TLC5945 gibt es ja eine ganze Familie von Treibern (z. B.
auch der TLC5940), die alle ähnlich aufgebaut sind und auch
ähnlich angesteuert werden. Wie vielleicht bekannt, kann das
IC auf jeden seiner 16 Ausgangskanäle eine 12-Bit-PWM anwenden
und zusätzlich kann noch für jeden Kanal separat eine Konstant-
stromquelle mit 6 Bit-Auflösung eingestellt werden (nennt sich 
Dotcorrection).

Ich habe einen Versuchsaufbau mit fünf RGB-LEDs (+ eine weiße
als 16. LED) gemacht und diese an einen TLC5945 angeschlossen.
Angesteuert wird dieser durch einen Atmega8. Da ich bisher
mit Mikrocontrollern noch nicht arg viel gemacht habe und ich
meine Hauptenergie auf die RGB-LEDs konzentrieren will, habe ich
den Atmega mit BASCOM in Basic programmiert. In der ZIP-Datei
befindet sich das auf das eigentliche Problem eingedampfte
Programm (der Rest funktioniert wie gewollt).

Für die Ansteuerung des TLC habe ich mich von einerm Beispiel-
Code "inspirieren" lassen, den ich bei 
http://www.ledstyles.de/ftopic3773.html gefunden habe.
(Wenn hier was bei rauskommt, dann würde ich das dann auch
in den dortigen Thread reinposten; wollte jetzt aber nicht
zweigleisig anfangen).
D. h., ich zähle die 4095 PWM-Zyklen nicht per Software mit, um
dann den PWM-Counter im TLC5945 zu resetten, sondern verwende
wie dort vorgeschlagen einen externen 13-Bit-Zähler (aufgebaut aus
zwei kaskadierten 74HC4040), wie man auf dem ebenfalls angehängten
Schaltplan erkennen kann.

Das angehängte Beispielprogramm soll folgendes machen:

Alle PWM-Register des TLC5945 auf 4095 setzen (= 100 % Duty Cycle,
keine PWM), alle Dotcorrection (DC)-Register auf 63 setzen (voller
Strom, nur durch Rref begrenzt auf 20 mA/Kanal).
In einer Schleife soll dann die Dotcorrection für den zweiten
Ausgang von 0 bis 63 durchgefahren werden, die zugehörige LED
also gedimmt werden.

Warum per DC ? Nun, die PWM-Ansteuerung funktioniert einwandfrei,
alle anderen Teile meines eigentlich noch größeren Programmes auch,
nur eben die DC-Ansteuerung bekomme ich leider nicht gebacken...

Entgegen dem Wunsch, macht das Programm nun folgendes:

der zweite Ausgang wird zwar gedimmt, was man an der LED auch
sieht, leider ändert sich aber auch der Strom vom 5. Ausgang mit.
Wenn ich einen anderen Ausgang auswähle, wird jeweils auch wieder
eine andere LED mitgedimmt, wobei mir aber dabei noch kein zu-
gehöriges Muster aufgefallen ist. Alle anderen LEDs leuchten
wie gewollt mit voller Stärke.

Die LEDs sind alle richtig angeschlossen (auf dem Schaltplan leider
nicht eingezeichnet, sie hängen an den beiden Buchsen X2 und X4 dran),
das habe ich überprüft. Das Programm habe ich soweit zusammengestrichen,
daß es nur noch diese eine Funktion ausführt. Auch habe ich schon den
TLC5945 ausgetauscht, in der Annahme, daß dieser ev. defekt sei, leider
ohne Besserung.

Hat vielleicht jemand eine Idee, woran es noch liegen könnte, daß
nicht nur die jeweils ausgewählte LED gedimmt wird ?

Der DC-Wert für eine LED wird in einer Byte-Variablen DC(x) gespeichert
und mit dem Shiftout-Befehl ausgetaktet, nachdem er um zwei Bits mit
Rotate verschoben wurde (es werden nur 6 Bits ab dem MSB benötigt).
Das ganze wird 16 mal hintereinander gemacht, um auf auf die insgesamt
96 Bit Breite des DC-Registers zu kommen.
Geht ev. hier schon beim Auslesen der einzelnen Bits aus der Byte-
Variable was schief ?

Oder handelt es sich um ein generelles Timing-Problem ? Wenn ich das
Datenblatt richtig verstanden habe, dann sollte aber das Eintakten
der DC-Werte unabhängig von der PWM-Clock und dem Zustand der Eingänge
BLANK und XLAT sein.
Ev. ist es auch ganz was anderes, vielleicht irgendwelche Störungen
auf den Eingangsleitungen ?

Also, wäre super, wenn jemand ne weiterführende Idee hätte.
Vielen Dank schon mal.

Gruß

Marco

von Marco B. (bauermar)


Lesenswert?

Da die o. a. Frage mittlerweile in der zeitlichen Versenkung
verschwunden zu sein scheint, wollte ich sie noch einmal kurz
aufwärmen.
Leider habe ich es bisher noch nicht rausbekommen, was die
Ursache für das Nichtfunktionieren der Dotcorrection ist.
Der TLC5945 müßte doch bis auf das nicht vorhandene interne
EEPROM zum Abspeichern der DC-Werte so ziemlich gleich auf-
gebaut sein, wie der TLC5940, mit dem hier doch schon einige
Leute gearbeitet zu haben scheinen. Hat von denen beim TLC5940
schon mal jemand den DC-Mode benutzt (mit DC-Werte direkt in
jedem Zyklus reinschreiben, ohne das EEPROM zu benutzen) ?

Gruß

Marco

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.