TLC 5940 anschließen

Hallo currymuetze

Wir reden hier von den Ausgängen des TLC5940, nicht von den Ausgängen des ATmega.

Stromsenke an Ausgängen des TLC auf 5,8mA begrenzen ist besser. (bei Stromquelle kommt Strom heraus und fließt gegen Masse ab, Stromsenke nimmt Strom auf und kommt von der Versorgungspannung). Das Datenblatt des TLC5940 sagt, daß der Strom der Ausgängen zwischen 5 und 120 mA sein muß. ( höher geht der Ausgang kaputt, weniger ist die Stromsenke instabil).
Grüße Uwe

Hallo,
so langsam wirds mir auch klar:
Im Normalbetrieb wird der Strom vom Arduino (+5v) ausgehen und fließt in den TLC, daher also Senke :wink:
(Versteh ich das denn richtig, dass der Ausgang des TLC Strom aufnimmt?)
Da dieser Strom begrenzt werden muss (um den TLC nicht duchzufackeln) pack ich nen Widerstand davor? Damit begrenze ich dann aber auch den Strom, der in meinen Arduino fliesst, korrekt? (Da ich ja (siehe Zeichnung) den +Pol des Arduino erst hinter den Widerstand verschalte.)

Schaut euch mal das Schaubild an
Gruß
Thorsten

tlc.pdf (244 KB)

Ach, da hat sich wohl was überschnitten...

currymuetze:
Warum muss ich denn den Strom auf ca 5.8 mA oder wie Uwe sagt 1mA begrenzen?
Soweit ich weiss schalte ich doch sonst auch mit dem DigitalOut des Arduino 20mA oder nicht?

Hallo currymuetze,
ich glaube, dass es hier möglichwerweise ein paar Missverstände gibt, die ich mal versuche, aufzuklären:

  • Der Arduino erzeugt bei der Lösung mit dem TLC das PWM-Signal nicht mehr selbst. Also kein PWM am Arduino-Pin.
  • Du kannst daher auch nicht die Funktion analogWrite() verwenden, um das PWM-Signal auszugeben.
  • Du musst einige Ausgänge des Arduino mit einigen Eingängen des TLC verbinden (siehe Tutorials/Playground und Links in deinem ersten Beitrag des Threads).
  • Du musst ein Programm schreiben, mit dem du dem TLC sagst, dass er auf einem der 16 Ausgänge einen Strom mit einem bestimmten PWM-Verhältnis ausgeben soll. Dazu darf man natürlich abschreiben, was andere zu diesem Thema schon der Arduino-Gemeinschaft zur Verfügung gestellt haben. :wink:
  • Du wandelst diesen Strom über den von Uwe und mir beschriebenen Widerstand am Ausgang des TLC in eine Spannung um.
  • Du leitest diese Spannung an den Eingang deiner Power-LED-Konstantstromquelle.

Aber wenn ich das richtig verstehe mach ich folgendes:
Die 2 Widerstände anlegen und dann durch Rumspielerei versuchen, eine max 5V Spannung zu erreichen?

Ich denke, der Wert von 6,8 kOhm ist schon Anfangswert für den Widerstand an IRef. Da würde ich erstmal nicht "spielen".
Dann mit dem oben erwähnten Programm den Ausgang des TLC so ansteuern, dass ein PWM-Verhältnis von 100% eingestellt wird. Dann sollte die Spannung am Ausgangspin des TLC ungefähr 5V sein (oder ungefähr 0V). Nun das ganze umgekehrt: über das Programm ein PWM-Verhältnis von 0% einstellen. Jetzt sollte die Spannung ungefähr 0V sein (oder ungefähr 5V). Und bei 50% PWM sollten es etwa 2,5V sein.
Das ist natürlich nur eine ganz grobe Überschlagsmethode. Mir einen Oszilloskop könnte man viel besser erkennen, ob es funktioniert.

Das ganze wäre wahrscheinlich mit einem kleinen Schaltplan etwas besser verständlich, aber ich bin momentan "zeichentechnisch" etwas eingeschränkt.

Gruß
Wolfgang

currymuetze:
Im Normalbetrieb wird der Strom vom Arduino (+5v) ausgehen und fließt in den TLC, daher also Senke :wink:
(Versteh ich das denn richtig, dass der Ausgang des TLC Strom aufnimmt?)
Da dieser Strom begrenzt werden muss (um den TLC nicht duchzufackeln) pack ich nen Widerstand davor? Damit begrenze ich dann aber auch den Strom, der in meinen Arduino fliesst, korrekt? (Da ich ja (siehe Zeichnung) den +Pol des Arduino erst hinter den Widerstand verschalte.)

Nein. Du steuerst den TLC ganz normal digital an und dieser hat (leider)Stromausgänge und keine Spannungausgänge. Mit dem Trick des niederen Konstantstroms und des Widerstands am Ausgang bekommst Du einen Spannungsausgang mit dem Du Deine Konstantstromquelle (KSQ) für die LEDs ansteuern kannst.

Versteh ich das denn richtig, dass der Ausgang des TLC Strom aufnimmt?

Ja, ist richtig, aber den Strom, der an den Ausgängen angeschlossenen LEDs.
Das Schaltbild ist aber richtig (wenn man annimmt daß, die LEDs am TLC nicht angeschlossen werden).
Grüße Uwe

currymuetze:
Im Normalbetrieb wird der Strom vom Arduino (+5v) ausgehen und fließt in den TLC, daher also Senke :wink:

ja

(Versteh ich das denn richtig, dass der Ausgang des TLC Strom aufnimmt?)

ja

Da dieser Strom begrenzt werden muss (um den TLC nicht duchzufackeln) pack ich nen Widerstand davor?

nein. Der TLC ist eine Konstantstromquelle (besser gesagt Senke). Der Strom der in den TLC hineinfließt, wir durch den Widerstand an IRef festgelegt. Ich würde gefühlsmäßig sagen, auch wenn du den Widerstand durch ein Stück Draht ersetzt, fließt kein größerer, als der mit IRef eingestellte Strom.
Durch die PWM-Modulation dieses Stromes wird der Strom ja für eine bestimmte Zeit eingeschaltet und für eine bestimmte Zeit ausgeschaltet.
Wenn der Strom ausgeschaltet ist, fällt an dem Widerstand keine Spannung ab. damit liegen am Ausgangspin 5Volt. Wenn der Strom eingeschaltet ist, fällt an dem Widerstand nach dem Ohmschen Gesetz eine Spannung UR=R*I ab. Die Spannung am Ausgangspin ist dann 5V-UR und sollte nahe 0V sein.

Ergänzung: wenn der Spannungsabfall an R genau 5Volt betragen soll (damit die Ausgangsspannung 0V ist), muss bei bei einem Strom von 5,8 mA der Widerstand 862 Ohm betragen. Soviel die Theorie. Wie die Konstantstromquelle des TLC das sieht, ist ein anderes Thema. Daher die früheren Worte mit Verifizieren, Versuch usw. :wink:

voithian:

currymuetze:
Im Normalbetrieb wird der Strom vom Arduino (+5v) ausgehen und fließt in den TLC, daher also Senke :wink:

ja

Bei Der Spannungsversorgung (+5V und Masse) würde ich aber diese Betrachtung nicht machen. ( außer, daß wenn Strom herausfließt eine Quelle ist und hineinfließt eine Senke ist, also laut Deine Betrachtung sind die +5V eine Quelle und die Masse ist eine Senke).

Die +5V sind einfach die Spannungsversorgung und damit basta. Ob Du sie vom Arduino hernimmst oder von einem 5V Netzteil mit dem Du Deine Schaltung mit dem TLC und den Arduino versorgst ist unerheblich für die Funktion.

Grüße Uwe

Hi,
hört sich zunächst kompliziert an, aber so langsam komme ich glaub ich dahinter.
Werd ich auf jeden fall mal bauen und dann testen.

Eine Sache noch:

Dann sollte die Spannung am Ausgangspin des TLC ungefähr 5V sein (oder ungefähr 0V). Nun das ganze umgekehrt: über das Programm ein PWM-Verhältnis von 0% einstellen. Jetzt sollte die Spannung ungefähr 0V sein (oder ungefähr 5V). Und bei 50% PWM sollten es etwa 2,5V sein.

Welche Spannung sollte denn, wenn ichs richtig mache vorhanden sein? Die Werte in den Klammern oder die davor?
Rein Logisch hätte ich jetzt gesagt, PWM=4095 => 5v & PWM=0 => 0V (es verwirren mich nur grad die Klammerwerte)

Seh ich das richtig, dass je genauer ich den Widerstand setze und dadurch recht nah an genau 0V komme, desto weniger hell wird die LED leuchten bei PWM=1? Ausgangsziel warum ich diese ganze FUmmelei mache war ja, dass ich mit 12 BIT einfach "dezenter" und weniger "treppenstufenähnlich" dimmen kann als mit 8 BIT. Trotzdem sollte die LED bei PWM=0 nicht mehr leuchten .Wie ist das eigentlich mit HIGH und LOW?

Gruß

currymuetze:
Eine Sache noch:

Dann sollte die Spannung am Ausgangspin des TLC ungefähr 5V sein (oder ungefähr 0V). Nun das ganze umgekehrt: über das Programm ein PWM-Verhältnis von 0% einstellen. Jetzt sollte die Spannung ungefähr 0V sein (oder ungefähr 5V). Und bei 50% PWM sollten es etwa 2,5V sein.

Welche Spannung sollte denn, wenn ichs richtig mache vorhanden sein? Die Werte in den Klammern oder die davor?
Rein Logisch hätte ich jetzt gesagt, PWM=4095 => 5v & PWM=0 => 0V (es verwirren mich nur grad die Klammerwerte)

Ich wollte dich nicht verwirren.
Du musst bedenken, dass bei PWM das Ausgangssignal immer zwischen 0V und 5 V umgeschaltet wird. Zwischenwerte gibt es nicht. Nur ist es bei 4095 innerhalb einer Periode ganz lang auf High und nur ganz winzig kurz auf Low. Daraus resultiert in diesem Fall eine auf dem Voltmeter angezeigte Spannung von 5Volt (weil das Ding ein wenig langsam ist). Und bei 0 ist das Ausgangssignal nur ganz kurz (man könnte auch sagen: garnicht) auf High und es wird 0V angezeigt. Und bei 50% ist das Ausgangssignal die Hälfte der Zeit auf 5Volt und die Hälfte der Zeit auf 0V. Und das Voltmeter bügelt das auf 2,5V aus.

Die Aussage mit den Werten in Klammern rührt daher, dass ich vorhin keine Lust zum Nachdenken hatte. Beim TLC bedeutet 4095 ja, dass die LED den größten Teil der Zeit innerhalb einer Periode eingeschaltet ist (Strom fließt) und die LED am hellsten leuchtet. Bei deiner Schaltung (mit Widerstand statt LED) fließt bei 4095 auch den größten Teil der Zeit ein Strom, der aber in diesem Fall am Widerstand abfällt. Somit bleibt am Ausgangspin des TLC die größte Zeit keine Spannung übrig (5V-UR) und der gemittelte Wert ist 0V. Die Logik ist also invertiert. Es gelten also die Angaben in Klammern.

Seh ich das richtig, dass je genauer ich den Widerstand setze und dadurch recht nah an genau 0V komme, desto weniger hell wird die LED leuchten bei PWM=1? Ausgangsziel warum ich diese ganze FUmmelei mache war ja, dass ich mit 12 BIT einfach "dezenter" und weniger "treppenstufenähnlich" dimmen kann als mit 8 BIT. Trotzdem sollte die LED bei PWM=0 nicht mehr leuchten .Wie ist das eigentlich mit HIGH und LOW?

Nein. Je genauer du den Widerstand setzt, desto genauer erhältst du die Spannung für LOW am Ausgang des TLC. Die sollte theoretisch bei 0 liegen, darf aber ruhig auch einige hundert mV betragen.

Nochmal zur Klarstellung: bei PWM hängt die erzielte Helligkeit bespielsweise einer LED nur vom Verhältnis der An- und Auszeit ab. Das PWM-Signal pendelt immer zwischen LOW und HIGH (nur halt unterschiedlich lang).

Wolfgang

[Edit]
@currymuetze
Könnte es sein, dass doch der von uns vor ein paar Wochen diskutierte Ansatz mit der Softwarelösung (16-Bit Timer und FAST PWM) weniger aufwändig gewesen wäre?

currymuetze:
Eine Sache noch:

Dann sollte die Spannung am Ausgangspin des TLC ungefähr 5V sein (oder ungefähr 0V).

Welche Spannung sollte denn, wenn ichs richtig mache vorhanden sein? Die Werte in den Klammern oder die davor?
Rein Logisch hätte ich jetzt gesagt, PWM=4095 => 5v & PWM=0 => 0V (es verwirren mich nur grad die Klammerwerte)

Die Werte in Klammern ist Wert für LOW-Pegel.

currymuetze:
Seh ich das richtig, dass je genauer ich den Widerstand setze und dadurch recht nah an genau 0V komme, desto weniger hell wird die LED leuchten bei PWM=1? Ausgangsziel warum ich diese ganze FUmmelei mache war ja, dass ich mit 12 BIT einfach "dezenter" und weniger "treppenstufenähnlich" dimmen kann als mit 8 BIT. Trotzdem sollte die LED bei PWM=0 nicht mehr leuchten .Wie ist das eigentlich mit HIGH und LOW?

Ich setzte verdächtig oft das Wort "NEIN" ein.

Also: Nein. PWM-Signal ist ein Rechtecksignel mit konstanter Frequenz. Was sich ändert ist das Verhältnis von HIGH-Zeit zu LOW-Zeit. Bei PWM-Wert von 0 ist die HIGH-Zeit 0% der Periodendauer. Bei PWM-Wert von 4095 ist die HIGH-Zeit 100% der Periodendauer. Bei PWM-Wert von 2047 ist die HIGH-Zeit 50% der Periodendauer.

Die KSQ hat als Eingang ein PWM-Signal. Das PWM-Signal ist ein digitales Signal. Ein bestimmter Spannungsbereich wird als LOW interpretiert und ein anderer als HIGH. Mit der Ausgangsspannung des TLD mußt Du in diesen beiden Bereichen drin sein ansonsten erkennt die KSQ das PWM-Signal nicht. Aus dem Datenblatt: http://www.micro-bridge.com/data/CRpowtech/PT4115E.pdf
VDIM_H DIM input voltage High min: 2.5 V (Mindestspannung HIGH-Level Eingangsspannung Dim-PWM-Eingang)
VDIM_L DIM input voltage Low max: 0.3 V (Höchstspannung LOW-Level Eingangsspannung Dim-PWM-Eingang)

Die ganze Sinn der Herumfummelei ist, daß die KSQ die Logiklevel des PWM-Signals richtig versteht.

Das PWM Signal geglättet ergibt eine Gleichspannung zwischen 0V und 5V, die Du mit dem Multimeter messen kannst.

Viele Grüße Uwe

Hallo Uwe,

warum antworten wir eigentlich immer mehr oder weniger gleichzeitig? :wink: :wink: :wink:
Da machen wir uns doch nur doppelte Arbeit.

Ich bin vorerst mal raus und mache meine Umsatzsteuer-Voranmeldung für das abgelaufene Quartal. Ist zwar langweiliger als Arduino, muss aber leider sein.

Gruß
Wolfgang

Hallo voithian
Ich sehe das so, daß wir uns ergänzen.
Gute Umsatzsteuer-dingsda.
Grüße Uwe

Ich finde es perfekt dass ihr beide antwortet, wie heisst es so schön: Doppelt hält besser XD
Ich fühle mich perfekt aufgeklärt und kann schön ans Werk gehen am WE.

Das Thema 16-Bit Timer und FAST PWM hatte ich mir angeschaut, aber irgendwie nicht weitergekommen. Mag sein, dass ich das mit deiner Hilfe schneller hinbekommen hätte :wink: Andererseits, was wäre ein Leben ohne Herausforderungen
Das wird dann der nächste Step, wenn ich dies hier hinbekomme und merke, dass ich doch eigentlich viel viel lieber mit 16 Bit dimmen möchte ]:smiley:

Sei bescheiden; Bei 12 Bit siehst Du schon keine Stufen. 16 Bit braucht es wirklich nicht.
Grüße Uwe

uwefed:
Sei bescheiden; Bei 12 Bit siehst Du schon keine Stufen. 16 Bit braucht es wirklich nicht.

Hallo Uwe,

ich hatte mit currymuetze vor ca. 3 Wochen schon in einem anderen Thread über die Realisierung von PWM mit mehr als 8Bit diskutiert.

Dazu ist ja ein 16-Bit-Timer ganz nützlich/nötig , selbst wenn man nur mit 9 oder 10 Bit Auflösung arbeitet.

Ich persönlich bin ebenfalls der Meinung, dass man schon bei 512 Schritten keine Helligkeitsstufen mehr sieht.
Aber vielleicht liegts nur an meiner Brille. :wink:

Gruß
Wolfgang

Hallo,

ich habe ´jetzt zunächst mal den TLC standardmäßig (siehe meinen ersten Beitrag hier) verdrahtet.
Eine LED angeschlossen und dieses Programm hochgeladen:

#include "Tlc5940.h"

void setup()
{
  Tlc.init();
}

void loop()
{
  int i = 0;
  for (i; i < 4095; i++) {
     Tlc.clear();
     Tlc.set(1, i);
     Tlc.update();
     delay(10);
  }

}

Das sollte eigentlich die LED mal von o auf 4095 hochfaden, leider leuchtet die LED durchgängig, ohne das was passiert.
Ich vermute allerdings dass das nicht am Code liegt, könnt ihr das bestätigen?
Habe mal nen anderen Code (Blink withou delay hochgeladen) leuchtet trotzdem weiter

Gruß

müßte funktionieren. An welches Pin hast Du die LED angeschlossen?
Uwe

An PIN 1 (Der erste PIN auf der Seite wo alle 14 PINs liegen) 0 und 15 liegen ja auf der anderen Seite
Dann mss ich doch ncoh mal die Verkabelung checken.
Ich habe mich aber bei der Verkabelung nach der Anleitung für das MEGA Board gerichtet, der nutzt ja andere PINs am Ardino als das normale Board. Muss ich da dann den TLC COde anpassen?
Gruß

Pin 1 Stimmt.
Die Beschaltung hast Du ja in Deinem Beitrag Reply #21 angehängt
ansonsten nochmal:

von Arduino Playground - TLC5940
Grüße Uwe

sehr komisch, alles noch mal überprüft, finde den fehler nicht.
Gibt es unterschiedliche Versionen des TLC? Meine ist nicht die gleiche wie meistens abgebildet, siehe anhang mein tlc

eBay_047_001 (1).JPG

currymuetze:
sehr komisch, alles noch mal überprüft, finde den fehler nicht.
Gibt es unterschiedliche Versionen des TLC? Meine ist nicht die gleiche wie meistens abgebildet, siehe anhang mein tlc

Hallo,
das sieht ja schon ein wenig eigenartig aus. :~
Wenn du im Datenblatt auf Seite 6 nachsiehst, haben ja offensichtlich die SMD-Variante auf dem Platinchen und die DIP-Ausführung ganz unterschiedliche Pin-Belegungen. Und wenn ich das auf deinem Foto richtig erkenne, erfolgt da keine Umsetzung (d.h. Pin 1 vom Chip geht auf Pin 1 der Platine, Pin 2 auf Anschluss 2, usw.). Damit wären für deine Verdrahtung ja die Pins des SMD-Chips zutreffend.

Link zum Datenblatt:http://focus.ti.com/lit/ds/symlink/tlc5940.pdf
Das solltest du vielleicht noch mal überprüfen.

Gruß
Wolfgang