Forum: Mikrocontroller und Digitale Elektronik tlc5940 GSCLK frage


von timo91 (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von timo91 (Gast)


Lesenswert?

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?

von timo91 (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@  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

von timo91 (Gast)


Lesenswert?

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

von timo91 (Gast)


Lesenswert?

Ups, Post erklärt sich von selbst. Was übersehen.

von Frank G. (frank_g53)


Lesenswert?

Hallo timo91,
Welche Lib. verwendest du?

Gruß
Frank

von timo91 (Gast)


Lesenswert?

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