mikrocontroller.net

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


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zeig mal nen schaltplan und den Code

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sind bei diesem Baustein nicht einfach 2 Möglichkeiten.

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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 .

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.