Bytes an TLC5940 senden

OP #3459013
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ß
#3459018
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.
#3459030
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.
(Firma: fritzler-avr.de) #3459048
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.
Angehängte Dateien:
Gast #3459091
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren