hallo, Ich habe mir eine kleine LED-Steuerung mit dem tlc5940 (+atmega16) zusammengebastelt und eine fertige lib dazu verwendet. Es funktioniert alles tadellos. Doch wenn ich schon eine vorgefertigte Lib verwende, schau ich mir den code natürlich an möchte auch verstehen was da alles gemacht wird und was für ein sinn dahinter steckt. In diesem Programming-Flow-Chart zum TLC5940 bei "Grayscale Data Input Cycle": http://www.ti.com/lit/sw/slvc106/slvc106.pdf Es sind 16 Channels á 12Bit Grayscale Data also = 192 Bits, nur wird aber GSCLK immer bis 4096 Gepulsed bzw. gezählt. Wieso? Hängt das mit dem vernetzten mehrere tlc's zusammen? gruß timo91
@ timo91 (Gast) >Es sind 16 Channels á 12Bit Grayscale Data also = 192 Bits, nur wird >aber GSCLK immer bis 4096 Gepulsed bzw. gezählt. Wieso? 12 Bit = 4096 = PWM-Zähler. Der zählt von 0-4095 und bleibt dann stehen. > Hängt das mit >dem vernetzten mehrere tlc's zusammen? nein. MfG Falk
Guten Tag, Danke für die Antwort. In einen Dokument über "TLC5940's Grayscale PWM dimming". http://www.ti.com/lit/an/slyt238/slyt238.pdf Dort wird geschrieben ". Each LED stays on until the PWM grayscale counter goes above the LED’s programmed PWM value." Da heißt aber auch das ich an den TLC5940 zwangsmäßig die GS-Daten immer in einem bestimmten Zeitabstand zu senden damit die leds nach dem einlesen der daten nicht einfach ausgehen. Oder wie muss ich das verstehen?
Hallo nochmal, (Sorry für doppelpost. Hab mich schon angemeldet, nur warte ich noch auf die email). Zu meinem letzten Beitrag: Reicht es, wenn ich die grayscale-Daten einmal sende und dann den GSCLK über einen timer-interrupt 4095 Pulse?
@ timo91 (Gast) >Reicht es, wenn ich die grayscale-Daten einmal sende Ja, >und dann den GSCLK über einen timer-interrupt 4095 Pulse? Besser ist es, den GCLK per Output Compare Funktion zu erzeugen, damit ist die CPU nicht sinnlos beschäftigt. Man muss dann nur per Timer nach einiger Zeit einen Interrupt erzeugen, wo man mal kurz BLANK auf HIGH setzen muss, dann geht ein neuer PWM-Zyklus los. Steht alles direkt im Datenblatt unter "GRAYSCALE PWM OPERATION" MfG Falk
Guten Morgen, Danke bis hierhin schonmal. Sehr hilfreiches Forum muss ich sagen :). Im Datenblatt hab ich jetzt noch etwas hierzu entdeckt:
1 | When the counter reaches a count of FFFh, the counter |
2 | stops counting and all outputs turn off. Pulling BLANK high before the counter reaches FFFh immediately resets |
3 | the counter to zero. |
(Rede ist vom Grayscale PWM Counter bzw. GSCLK) Sobald der Counter 4095 erreicht hat, muss Blank kurzzeitig auf high gesetzt werden was über eine ISR gemacht wird. Also - CTC-Timer ohne Interrupt für die GSCLK Takterzeugung am OC1A ausgang - CTC-Timer mit Interrupt um nach (~?)4095 GSCLK-Takten Blank zu Pulsen. Wie genau muss das passieren? Muss der Blank-Puls genau gegeben werden wenn der Counter 4095 erreicht hat oder macht es nichts aus wenn er z.b. bis 4400 zählt und dann erst den Blank-Puls bekommt? Laut datenblatt kann er bis 0xFFF zählen doch hat es auswirkungen das das PWM ja nur 12bit lang ist. gruß Timo91
Hallo Frank, Ich verwende die Lib von Matthew T. Pandina. https://sites.google.com/site/artcfox/demystifying-the-tlc5940 (Es gibt ein Nettes eBook dazu) Die Lib an sich funktioniert gut. Nur möchte ich diese ein wenig abändern. Die Lib verwendet einen CTC-Timer der nach 4096 Takten einen Interrupt auslöst indem der Blank-Pin getoggelt wird und wenn das update-Flag gesetzt ist sendet er die GS daten auch noch mit. Der GSCLK-Pin ist dann einfach am Takt des µC angeschlossen. Ich hab mir gedacht dies mit 2 CTC-Timern zu realisieren um den Takt am GSCLK zu halbieren (F_CPU/2) oder gar zu vierteln (wenn möglich) um die CPU-Belastung zu reduzieren.
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.