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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.