Forum: Mikrocontroller und Digitale Elektronik Bytes an TLC5940 senden


von Highii H. (highii)


Lesenswert?

Hallo,

ich habe ein weiteres Problem, auf dessen Lösung ich leider nicht im 
Forum gekommen bin.

Für die dot correction und grayscale muss ich 96 bzw. 192 bit an den den 
TLC5940 senden. (Von einem Atmega8). Leider weiß ich nicht genau wie ich 
das anstelle. Ist es "ein Befehl" in AVR-GCC mit dem ich senden kann, 
also ähnlich dem Setzen eines Ports? Oder muss ich erst eine 
Schnittstelle zu dem TLC5940 einrichten?
Könnt ihr mir weiterhelfen bzw. gibt es ein gutes 
Beispielprogramm/Tutorial dazu?

Danke und Gruß

von Karl H. (kbuchegg)


Lesenswert?

highii H. schrieb:

> Für die dot correction und grayscale muss ich 96 bzw. 192 bit an den den
> TLC5940 senden. (Von einem Atmega8). Leider weiß ich nicht genau wie ich
> das anstelle. Ist es "ein Befehl" in AVR-GCC mit dem ich senden kann,

Nein.

Du musst eine SPI implemetieren.
Entweder als Software-SPI oder die SPI Einheit des µC benutzen.

Im Grunde ist der 5940 auch nur ein Schieberegister. D.h. die Technik 
ist mehr oder weniger genau gleich, wie die Ansteuerung derselben.

Zb. wie hier
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister

oder wie in anderen unzähligen Threads im Forum, in denen 
Schieberegister angesteuert werden.

Oder aber, wie in anderen unzähligen Codebeispielen hier im Forum, in 
denen man sich den Code für einen 5940 ansehen  kann.

: Bearbeitet durch User
von Highii H. (highii)


Lesenswert?

74HC595 habe ich schonmal erfolgreich angesteuert. :-)

So wie ich es dann verstehe, müsste ich - wenn ich z.B. 96 bit sende 
möchte - 0 oder 1 an den entsprechenden Port vom TLC5940 anlegen (SIN) 
und über z.B. eine steigende Flanke an einem anderen Port (SCLK) vom 
TLC5940 bestätigen. Oder?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

highii H. schrieb:
> 74HC595 habe ich schonmal erfolgreich angesteuert. :-)

Na, dann kennst du ja die entsprechende Ansteuerung.

>
> So wie ich es dann verstehe, müsste ich - wenn ich z.B. 96 bit sende
> möchte - 0 oder 1 an den entsprechenden Port vom TLC5940 anlegen und
> über z.B. eine steigende Flanke an einem anderen Port vom TLC5940
> bestätigen. Weißt du was ich meine?

Ja. Genau so wirds gemacht.
Eine Daten-Leitung, eine Clock-Leitung und eintakten der entsprechenden 
Bits.

: Bearbeitet durch User
von Highii H. (highii)


Lesenswert?

Karl Heinz schrieb:
> Ja. Genau so wirds gemacht.

Na dann ist es ja leichter als gedacht. ;-)

von Karl H. (kbuchegg)


Lesenswert?

highii H. schrieb:
> Karl Heinz schrieb:
>> Ja. Genau so wirds gemacht.
>
> Na dann ist es ja leichter als gedacht. ;-)

Steht doch alles im Datenblatt
http://www.ti.com/lit/ds/symlink/tlc5940.pdf

Kapitel "Serial Interface", Seite 12

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Angehängte Dateien:

Lesenswert?

Ganz so einfach ist es dann leider doch ned :/

Da kommen dann noch die ominöse Grayscale Clock dazu sowie XLAT und 
BLANK.

Jetzt muss das so gemacht werden:
Die ganzen Bits mit SCLK und SIN reintakten.
Wenn alle Bits eingetaktet sind muss XLAT gesetzt werden damit die Daten 
übernommern werden.
Paralel dazu müssen immer 4096 Impulse an GSCLK gegeben werden und dann 
ein BLANK Impuls.
Jetzt kommt das schwierige:
XLAT darf nur HIGH werden wenn BLANK HIGH ist.
Sonst gibts nur Flackern.

Mit VPRG schaltet man ja zwischen Dotcorrection und Greyscale um.

Mit 3 Transistoren und paar Widerständen lässt sich der TLC allerdings 
SPI konform machen, dann geht das auch mit /CS, MOSI, CLK.
Im Bild lasse ich GSCLK und BLANK von nem kleinen Attiny erzeugen, kann 
ja auch sonstewo herkommen.

von Marcel (Gast)


Lesenswert?

Martin Wende schrieb:
> Mit 3 Transistoren und paar Widerständen lässt sich der TLC allerdings
> SPI konform machen, dann geht das auch mit /CS, MOSI, CLK.
> Im Bild lasse ich GSCLK und BLANK von nem kleinen Attiny erzeugen, kann
> ja auch sonstewo herkommen.

Verstehe ich das richtig, dass du 2 Controller verwendest? Ist ein 
schlechte Idee. Der TLC lässt sich (hab ich selber schon gemacht) ohne 
Extras per SPI ansteuern. Generelles vorgehen:
1. Daten senden
2. BLANK high
3. Ein paar ns warten (siehe Datenblatt)
4. Pulse auf XLATCH
5. BLANK low

GSCLK erzeugst du per Timer oder noch besser, falls es dein Controller 
unterstützt, kannst du den CPU Takt auf einem Pin ausgeben lassen 
(CLKOUT).

BLANK muss alle 4096 GSCLK Zyklen betätigt werden (siehe Datenblatt), 
damit der interne PWM Zähler wieder auf 0 geht. Daher sollte alles über 
einen Controller laufen damit es synchron bleibt. Wenn du den CLKOUT 
deines Controllers verwendest geht das sehr einfach per Timer und lässt 
sich mit der Ausgabe der Daten verbinden.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Hab ich ja geschrieben, dass ich das so mache.
Hintergrund: Alle Timer und Pins vom Hauptprozessor benutzt.
Daher sollte sich der TLC nicht anders verhalten als jedes andere SPI 
Gerät.

von Highii H. (highii)


Lesenswert?

Martin Wende schrieb:
> Ganz so einfach ist es dann leider doch ned :/
>
> Da kommen dann noch die ominöse Grayscale Clock dazu sowie XLAT und
> BLANK.


Warum schaltest du nicht die Anoden der LEDs an den TLC5940 sondern die 
Kathode? Muss man es so machen?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

> Warum schaltest du nicht die Anoden der LEDs an den TLC5940 sondern die
> Kathode? Muss man es so machen?

Les doch einfach mal das Datenblatt...

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.