Forum: Projekte & Code TLC5922, TLC5923, TLC5924 Ansteuerung für zB Mood Light


von Kai F. (kai-) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich habe mich endlich dazu durchringen können eine Ansteuerung für den 
TLC5922 zu schreiben. Dafür musste heute morgen zwar die Mathe 
Übungsklausur ausfallen (war spät gestern), aber ich denke es hat sich 
gelohnt.


Ganz kurz zum TLC selbst:

Es handelt sich um einen Konstantstrom LED Treiber mit 16 seperat 
modifizierbaren Ausgängen und 7 Bit Farbtiefe (über 2 Mio Farben)
Der größte Vorteil im Gegensatz zu anderen Treibern wie zB dem MAX6957 
ist, dass er eigentlich keine Adressierung hat und dadurch um einiges 
schneller anzusteuern ist. Wo ich gerade bei Ansterung bin muss ich noch 
erwähnen, dass er SPI Signal vorgesetzt bekommt und dieses auch an 
weitere Treiber übergeben kann. Dazu ist es nötig alle Treiber 
daisy-chained anzuschließen.

Genau diese daisy-chained Eigenschaft habe ich bei meinem Code 
ausgenutzt, so ist es möglich beliebig viele Treiber "in Reihe" 
anzusteuern. Die Anzahl der angeschlossenen Treiber muss nur noch bei 
den defines eingestellt werden


Jetzt zum Programm:

Ich habe mir Mühe gegeben so viel wie möglich zu kommentieren, damit es 
recht einfach nachzuvollziehen ist, hoffe ihr kommt damit klar.
Es stehen viele Funktionen wie zB ein Moodlight Effekt oder ein 
Lauflicht zur Verfügung, das sogar über alle angeschlossenen Treiber 
"rüber läuft".
Zur einfacheren Veränderung der Helligkeit bzw des AN/AUS Status habe 
ich zusätzlich Arrays eingeführt in die der Benutzer seine Daten 
reinschreiben kann und dieses dann mit einer Funktion in ein SPI 
geeignetes Array zu transferieren.
Alle Funktionen sind allerdings auch noch im Code erklärt und 
aufgelistet.

Für die schnellen unter euch habe ich ein Testprogramm hinzugefügt in 
dem alle wichtigen Funktionen aufgerufen werden, sodass man sieht was 
welche Funktion bewirkt und nicht im Source wühlen muss.


So, jetzt muss ich noch was beichten... ich habe den Code mit Codevision 
geschrieben, weshalb er auch nur dort compiliert. Wer sich mit dem GNU 
auskennt kann gerne auch noch eine Alternativversion posten.
Alle die darauf nicht warten wollen können sich auch einfach die 
Trialversion herunterladen, die reicht aus vorrausgesetzt man compiliert 
nach Speed und nicht nach Größe (kleiner Tip am Rande, ist wohl ein Bug 
beim Programm ;)


Wer sich die Treiber mal anschauen will, dem kann ich gerne mal einen 
vorbeischicken, Adapter für Lochraster hab ich auch machen lassen.
Wenn sich hier noch ein paar finden, die den TLC5922 auch gerne verbauen 
würden, gebt mir bitte Bescheid, dann organisier ich eine digikey 
Bestellung sobald wir 100 Treiber zusammen haben (dann werden die sehr 
billig)


Das war jetzt erstmal alles, was mir dazu einfällt, macht mit dem Code 
was ihr wollt, ist alles Freeware, ihr müsst ihn ja nicht aufs 
Toilettenpapier drucken :(


Grüße an den Rest der Elektroniker oder die, die es werden wollen

Kai

von Florian (Gast)


Lesenswert?

Hallo Kai,

ich hätte Interesse an 2 oder 4 Stück von den TLC5922.
Hast du welche über die du, auch gegen Bezahlung, entbehren könntest?

Viele Grüße
Flo

von Kai (Gast)


Lesenswert?

Hallo,
kann welche entbehren, schreib mir am besten eine Mail

von Florian W. (mechatroniker82)


Lesenswert?

wenn du mir deine email adresse hinterlässt gerne :)
somit hast du jemanden gefunden den du für den tlc5922 begeistert hast.
auch mit dem as1110 möchte ich erfahrungen sammeln.

danke
flo

von Falk B. (falk)


Lesenswert?

@ Florian Wiesenbacher (mechatroniker82)

>wenn du mir deine email adresse hinterlässt gerne :)

Augen auf! Das erste Posting ganz oben, der Name ist blau, also ein 
Link. Draufclicken und Mitteilung abschicken.

MfG
Falk

von Kai (Gast)


Lesenswert?

>> auch mit dem as1110 möchte ich erfahrungen sammeln.

Die Treiber sehen ganz nett aus, allerdings haben die keine Dot 
Correction, sind also für RGB LEDs unbrauchbar

von Armin (Gast)


Lesenswert?

@Kai:

Also ich versuche auch gerade deine Lib in betrieb zu nehmen.
Ich habe jetzt nochmal eine Frage zu den LEDs.

Soweit ich es deinem Code entnehmen kann, gehst du davon aus dass LED1 
an auch physikalisch an OUT0 des TLC5922 angeschlossen ist. Fall ich 
dann RGB-LEDs einsetzen möchte, dann ist im Code momentan hinterlegt, 
dass RGB-LED1 an OUT0 bis OUT2 , RGB-LED2 an OUT3 bis OUT5, ... 
angeschlossen sind.

Was mache ich aber jetzt, wenn ich auf Grund meiner Hardware eben nicht 
diese Reihenfolge habe. Wo und wie binde ich eine Zuordnungstabelle 
meiner LEDs in den Code ein?

Würde mich über ein Feedback freuen.

Bin aber schon echt begeistert von dem Code:) Danke

Gruß Armin

von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo,
du hast das alles richtig verstanden, leider muss ich dich 
enttäuschen...
Dieser Code ist nur für RGB LEDs gedacht, die so angeschlossen sind wie 
du es gesagt hast.
Dadurch, dass ich >> Befehle benutze wäre beispielsweise das Lauflicht 
außer Funkion.
Wieso kannst du die Hardware denn nicht ändern? eigentlich müsste meine 
Anschlussart die am Einfachsten zu realisierende sein.

Gruß
Kai

PS: Updates kommen bald

von Armin (Gast)


Lesenswert?

Hallo,

also was mir noch aufgefallen ist.

Du verwendest in deinem Code CS_ON und CS_OFF.
Aber der Pin des ATmega8 mit CS der SPI ist doch gar nicht mit den 
LED-Treibern verbunden oder?

wieso setzt du dann diesen Pin des Mega 8 auf 1 bzw. auf 0?


Ich werde mir für oben genanntes Problem wohl noch eine Lösung überlegen 
müssen, da auf Grund der Verlegung der Leiterbahnen diese Zuordnung 
nicht möglich war.

Gruß Armin

von Kai F. (kai-) Benutzerseite


Lesenswert?

CS_ON und CS_OFF machen nichts anderes als den PORTB.2 auf 1 bzw 0 zu 
schalten und genau dort müssen alle XLAT von den Treibern angeschlossen 
werden. Das stimmt schon so :)
Wie du was anschließen musst hab ich versucht in den Kommentar zu 
schreiben, wenn nötig kann ich auch noch einen Schaltplan hinzufügen

Gruß
Kai

von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo nochmal,
ich habe das ganze jetzt mal als Prototyp aufgebaut und mit meine 
Handykamera schäm gefilmt
Hier ein externer Link zu myvideo:
http://www.myvideo.de/watch/4258285/Moodlight_fuer_Wohnzimmer_Bar_Disco

Momentan sind es erst zwei Leisten, ich werde jetzt Platinen machen 
lassen, weil ich etwa 3 Stunden für das Verkabeln von einer Platine 
gebraucht habe. Da kommen dann auch Treiber drauf, damit ich keine 
Probleme mit der Terminierung habe und Längen von 20-30 Metern möglich 
werden.

von Juergen (Gast)


Lesenswert?

Hallo Kai,

könnte man auch den TLC5940 für Deine Bibliothek benutzen?

Den gibts nämlich als PDIP.

Gruß
Jürgen

von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo,
nein, meine Routinen funktionieren nur für die angegebenen Treiber. Der 
TLC5940 hat wenn ich mich nicht irre doch auch noch eine PWM zusätzlich 
und somit auch mehr Steuereingänge. Ich werde aber wohl in nächster Zeit 
eine Ansteuerung für den TLC5946 schreiben, vielleicht sind die beiden 
Typen besser verträglich.

Grüße
Kai

von interessierter (Gast)


Lesenswert?

Hallo Kai,

liegt die Compilerabhängigkeit nicht nur an den Variablentypen?
Ich arbeite lieber mit dem GCC...
Hast du noch Platinen übrig? Bzw. stellst du die Layouts zu Verfügung?
Ist zwar nicht so viel Arbeit das selber zumachen, aber auch nicht 
wirklich so spannend ;-) also wenn du es eh schon gemacht hast, wäre es 
nett, wenn du die Sachen posten könntest.
Danke.

von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo interessierter,
Bei CodevisionAVR kann ich beispielsweise schreiben: PORTB.0 = 1;
Das funktioniert bei GCC nicht, da müsste man mit << Operatoren das 
richtige Bit isolieren. Der Rest sollte ohne Probleme direkt per 
copy/paste portierbar sein.

Ich habe auch noch ein paar Adapterplatinen oder was meinst du mit den 
Platinen?

Bei Interesse schreib mir eine PM

Den Eagle File habe ich leider nicht mehr, der ist bei einem 
Garantiefall drauf gegangen :(

von interessierter (Gast)


Lesenswert?

Was genau meinst du mit Adapterplatine? SMD auf Lochraster?
Ich suche mehr was, um die Verdrahtung zu umgehen...
Hast du evtl. noch nen Schaltplan? Irgendwas handschriftliches, was du 
auf nen Scanner werfen könntest?

von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo,
ich habe noch keine Platine geätzt, die diese Ansteuerung des TLCs 
benutzt, ich habe das bis jetzt auch erst alles auf Lochraster verbaut.
Wenn du mir sagst was du mit den Teilen vor hast und wieviele LEDs du 
ansteuern willst kann ich dir sagen ob das die richtige Art der 
Ansteuerung ist oder ob es vielleicht eine bessere gibt.
Ich weiß ja nicht wie eilig es bei dir ist, aber ich werde auch bald 
einen Artikel im Wiki veröffentlichen wo jede Möglichkeit der 
Ansteuerung aufgeführt wird.

Gruß
Kai, der gerade genervt versucht Windows zu installieren, weil die 
Installation die Festplatte nicht erkennt

von interessierter (Gast)


Lesenswert?

Also ich dachte an eine Beleuchtung im Sinne einer indirekten 
"Notbeleuchtung" mit Farbeffekt. Das Licht muss nicht zum Lesen reichen. 
Einfach nur ein klein wenig den Raum erhellen und schön aussehen ;-)
Wieviele LEDs braucht man dazu? Ein paar aufgereiht sollten es 
eigentlich tun.
Wollte halt nicht viel Basteln sondern eher schnell nachbauen, da ich 
gerade mit anderen Projekten beschäftigt bin.

von Kai (Gast)


Lesenswert?

Hallo, dafür sollte ein Treiber eigentlich reichen, wenn du dich noch 
ein wenig gedulden kannst, kann ich dir eine fertige Platine schicken, 
die du dann nur noch vestücken müsstest. Da wäre dann ein Treiber und 10 
RGBs drauf.

Gruß
Kai

von interessierter (Gast)


Lesenswert?

Wenn du das eh vorhast zu machen, wäre das super nett.
So eilig ist das bei mir nicht. Nur hat die Diplomarbeit momentan 
vorrang ;-)
Das Layout zum selber ätzen würde mir schon reichen.

Habe ich das richtig verstanden, das du auf der Platine dann "nur" den 
Treiber und die LEDs hast, also quasi ein LED-Modul. Der Controller 
sitzt dann auf einer eigenen Platine und kann mehrere dieser Module 
ansteuern?

Grüße

von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo,
ja genauso ist das geplant, da ich jetzt mehr Zeit habe (Windows und 
Linux vertragen sich endlich nachdem Linuxx Windows unterworfen hat) 
werde ich mal etwas genauer auf mein Vorhaben eingehen:

Es sind 50cm lange LED Leisten mit 10 oder 15 RGBs auf einer Platine mit 
einem Controller geplant. Da ein Controller nur 5 RGBs schafft, sind 2 
oder 3 LEDs immer in Reihe geschaltet (6 Pin RGBs erforderlich!)
Es soll jetzt möglich sein eine beliebig lange Leiste zu bauen indem man 
die Leisten einfach hintereinander steckt. Vor dem Betrieb teilt man dem 
Atmega nur mit wieviele Leisten angeschlossen sind und er kann diese mit 
den implementierten Funktionen (langsamer Farbwechsel, Lauflicht über 
alle Leisten oder einfach eine gemeinsame feste Farbe) alle ansteuern 
indem er die Daten seriell durchschiebt.
Das funktioniert auch schon alles, bis auf eine Sache:
Mein Problem ist die Länge der Leisten, da ich ab ein paar Metern 
Probleme mit der Terminierung bekomme. Da bin ich noch ein wenig am 
herumexperimentieren damit die Länge nur noch durch den SRAM Speicher 
des ATmegas begrenzt ist :)

Gruß
Kai

von Maxl (Gast)


Lesenswert?

Hallo,

das Thema ist ja schon eine Weile her, aber ich bin auch aktuell dran 
mit dem TLC zu arbeiten. Leider hat mein Steckboardversuch nicht 
funktioniert, warum auch immer.
Darum bin ich auf der Suche nach einen (sauberen) Schaltplan für den 
TLC5922 mit diesen Code. Es würde auch ein TLC5940 gehen, dafür habe ich 
aber keinen Code.

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.