Forum: Mikrocontroller und Digitale Elektronik tlc5942, Ausgänge schalten nicht


von Frank (Gast)


Lesenswert?

Ich habe einen TLC5942 Treiber welchen mittels eines uP's angesteuert 
wird.
16 mal 7 Bit schreibe ich raus und setze den XDCLAT kurz auf high. 
(1/18.42MHz) = 54 ns des Signal muss ja mindestens 30 ns lang sein. Dass 
sollte klappen.

OUT 0-11 habe ich LED's angehängt.
DCSCLK clk von uP
DCSIN  signal von uP
IREF = 1KOhm

GSSIN = 0V
GSSCLK = 0V
XGSLAT = 0V
BLANK = 0V

VCC = 5V

Das Signal habe ich mittels KO überprüft.

Habe ich etwa vergessen oder fehlerhaft angeschlossen? Da gal was ich 
für ein Code in den Treiber schreibe keiner der Ausgänge schaltet.

von Vlad T. (vlad_tepesch)


Lesenswert?

zeig mal nen schaltplan und den Code

von Frank (Gast)


Lesenswert?

ich kommuniziere über die SPI dort gebe ich das Signal raus und der 
Clock ist ja somit automatisch. Wie oben erwähnt habe ich es mit dem ko 
geprüft und die Bits stimmen mit dem Clock überein. Einen Schaltplan 
habe ich nicht da es ja nur ein clk das signal und den XDCLAT setze. 3 
drähte di anderen eingänge auf 0 gezogen und den iref mittels 1kOhm auf 
o gezogen. LED's direkt auf 5V da ja der Strom begrenzt wird und somit 
die max. Spanung irrelevant wird.

von Vlad T. (vlad_tepesch)


Lesenswert?

Frank schrieb:
> Einen Schaltplan
> habe ich nicht da es ja nur ein clk das signal und den XDCLAT setze. 3
> drähte di anderen eingänge auf 0 gezogen und den iref mittels 1kOhm auf
> o gezogen. LED's direkt auf 5V da ja der Strom begrenzt wird und somit
> die max. Spanung irrelevant wird.

du füllst also nur die Korrekturwerte, aber hast keine PWM-Daten 
geladen?

dann ist doch klar, dass nix passiert.
null mal korrekturwert ist doch immer noch null

von Frank (Gast)


Angehängte Dateien:

Lesenswert?

Sind bei diesem Baustein nicht einfach 2 Möglichkeiten.

1. über PMW die LED steuern
2. über Konstantstrom

von Vlad T. (vlad_tepesch)


Lesenswert?

Frank schrieb:
> Sind bei diesem Baustein nicht einfach 2 Möglichkeiten.
>
> 1. über PMW die LED steuern
> 2. über Konstantstrom

naja indirekt.

bei Nr zwei zweckentfremdest du ein Feature.
Das ding heißt dot correction und ist dazu da, dass man 
fertigungsbedingte Helligkeitsschwankungen korrigieren kann.
Man stellt hier einen Korrekturwert ein, dass eine LED anstatt mit 20mA 
nur mit 18mA betrieben wird.

Damitt die LED aber überhaupt angeht, muss sie ja aber einen PWM-Wert != 
0 haben.

sprich, damit du die Helligkeit über die dc steuern kannst, solltest du 
alle Kanäle einmal auf Maximum setzen.
Warum willst du überhaupt die dc (7bit anstatt 12bit) benutzen?
Bandbreitenprobleme?


edit:
ich finde den TLC5940/TLC5941 besser, da gibts einen seperaten Eingang 
für den PWM-Takt, so dass man Daten befüllen und PWM-Takterzeugung mit 
unterschiedlichen Frequenzen erledigen kann.

von Frank (Gast)


Lesenswert?

Aha ja dann geht das so nicht wie ich mir das erhofft habe.
Nun habe ich das so abgeändert wie sie es mir empfohlen haben. Aber die 
LED's brennen noch nicht al zu hell :D. Besser gesagt gar nicht.

Stimmt meine überlegung.

  PAOUT |= ~0x05;

  for(n=0; n < 192; n++)
  {
  PAOUT |= 0x02;
  PAOUT |= 0x03;
  PAOUT &= ~0x03;
  PAOUT &= ~0x02;
  }

  PAOUT |= ~0x04;
  PAOUT &= ~0x04;
  PAOUT &= ~0x05;

zum ausprobieren damit ich die Spi nicht neu setzen muss.  blank auf 
high dann die verschiedene Bits alle auf high  paout2 ist mein 
gebastelter counter. dann mit xgslat die daten in das latchs schreiben 
und blank auf low
  for(n = 0; n < 16; n++)
  {
  SPIDATA = 0x7F<<1}

  PAOUT |= 0x01;
  PAOUT &= ~0x01;

nun noch den strom aller auf high .

von Frank (Gast)


Lesenswert?

Nun leuchten die LED's aber das Steuern geht noch nicht ganz.
Verstehe ich das richtig.

  PAOUT |= 0x05;  // Blank
  for(n=0; n < 112; n++)
  {

  PAOUT |= 0x03;  // DCSIN
  PAOUT |= 0x02;  // DCSCLK
  PAOUT &= ~0x03;
  PAOUT &= ~0x02;
  }

  PAOUT |= 0x01; //XDCLAT
  PAOUT &= ~0x01;



  PAOUT |= 0x05;

  for(n = 0; n < 4; n++)
  {
  SPIDATA = 0xFF;
  SPIDATA = 0x0F;
  SPIDATA = 0x00;
  SPIDATA = 0x00;
  SPIDATA = 0x00;
  SPIDATA = 0x00;
  }

  PAOUT |= 0x04;      // GS XLAT
  PAOUT &= ~0x04;

  PAOUT &= ~0x05;  Blank low



Kurz gesagt

blank high
dc setzen
gs setzen
blank low

und eine ständige Frequenz auf gssclk  geben.

Habe ich das richtig verstanden?

Falls das jemand schon gemacht hat wie realisiere ich das am besten mit 
der Frequenz? Ein Bauteil auf welches die Frequenz und den SPIClock 
draufgebe und mit einem Ausgang vom uP das Bauteil schalte, entweder SPI 
Clock oder Frequenz?

von Falk B. (falk)


Lesenswert?

@  Frank (Gast)

>Falls das jemand schon gemacht hat wie realisiere ich das am besten mit
>der Frequenz? Ein Bauteil auf welches die Frequenz und den SPIClock
>draufgebe und mit einem Ausgang vom uP das Bauteil schalte, entweder SPI
>Clock oder Frequenz?

Viel zukompliziert. Nutzt die Output Compare Funktion um einen Takt der 
gewünschten Frequenz zu erzeugen. Das entlastet die CPU massgeblich.

MFG
Falk

von Vlad T. (vlad_tepesch)


Lesenswert?

Frank schrieb:
> Aha ja dann geht das so nicht wie ich mir das erhofft habe.
> Nun habe ich das so abgeändert wie sie es mir empfohlen haben. Aber die
> LED's brennen noch nicht al zu hell :D. Besser gesagt gar nicht.

meiner meinung nach müsste es trotzdem fast so gehen.
du musst nur auf alle kanäle einen PWM-Wert ungleich 0 geben (am besten 
maximum) und dafür sorgen, dass er mit seinem PWM-Zyklus beginnt, also 
eins, zwei Takte geben, damit die Ausgänge eingeschaltet werden. Dann 
kannst du die GS_Clock in ruhe lassen.
Dann müssten die LEDs ja entsprechend des im Dot-Corroection-Register 
eingestellten Wertes, unterschiedlich hell leuchten.

Ist aber nur Vermutung.
getestet habe ich das nicht.

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.