Forum: Mikrocontroller und Digitale Elektronik TLC5940 C-Funktion o. Funktion


von Patrick S. (patrick22285)


Angehängte Dateien:

Lesenswert?

Guten Abend zusammen

vielleicht kann mir ja eine/r von Euch ein wenig helfen, versuche eine 
Funktion zu schreiben um Daten an den TLC5940 zu senden und über ein 
Atmega8515 habe den TLC wie im quelltext angeschlossen an IRef hab ich 
einen 2,2KOhm widerstand gelötet und den 200nF kondensator hab ich auch 
nicht vergessen mit einem Logikanalysator habe ich das datenmuster 
ausgelesen und sie mit dem Datenblatt verglichen (was auch passen 
müsste) aber leider passiert gar nichts.

Wenn ich den Blank brücke mit GND zeigt er mir welches muster im TLC 
ist.
Wäre super nett von Euch wenn sich jemannd meinen Quelltext anschauen 
könnte und mir einen Tip gibt woran es liegen könnte.

von Karl H. (kbuchegg)


Lesenswert?

1
         if (!gsData [Daten_Zaehler])
2
          {
3
        
4
            SCLK_PORT |= (1 << SCLK_PIN);
5
            warte(1);
6
            S_IN_PORT |= (1 << S_IN_PIN);
7
            warte(1);
8
            S_IN_PORT &= ~(1 << S_IN_PIN);
9
            warte(1);
10
            SCLK_PORT &= ~(1 << SCLK_PIN);
11
        
12
          }

Da ist ein Fehler.
Die generelle Strategie ist:
Du legst am Sin Pin das gewünschte Datenbit an, und danach toggelst du 
einmal SCLK nach High und wieder auf Low. Aber während du mit SCLK 
wackelst, lässt du das Datenbit am SIN in Ruhe! Im else Fall hast du es 
richtig.

Das kann man auch zusammmen fassen
1
         if (!gsData [Daten_Zaehler])
2
           S_IN_PORT |= (1 << S_IN_PIN);
3
         elde
4
           S_IN_PORT &= ~(1 << S_IN_PIN);
5
6
         SCLK_PORT |= (1 << SCLK_PIN);
7
         SCLK_PORT &= ~(1 << SCLK_PIN);

taktet je nach gsData[Datenzähler] eine 1 bzw. eine 0 an den TLC. Was du 
da jetzt noch an Wartezeiten brauchst, hab ich mir aus dem Datenblatt 
nicht rausgesucht. Ich kann mir allerdings nicht vorstellen, dass du mit 
dem ACR den TLC an die Grenzen bringst, wenn du full-Speed drauf gehst.


Abegsehen davon: Programm abspecken. Nicht gleich aufs ganze gehen!
Erst mal eine Funktion, die 1 Byte an den TLC raustaktet. Darauf 
aufbauend Funktion um Funktion drüber legen, die jeweils ein neues 
Konzept abstrahiert.

von Karl H. (kbuchegg)


Lesenswert?

Und ähm.

Was soll das sein?
1
        if (BLANK_PIN)

von Karl H. (kbuchegg)


Lesenswert?

Und GSCLK. Den willst du laufend toggeln haben!
So schnell wies dein AVR mitmacht.
Das ist die PWM Frequenz. Bei 12 Bit PWM kann die gar nicht hoch genug 
sein.

von Patrick S. (patrick22285)


Lesenswert?

Dank dir für die Antworten ich habe mein Programm jetzt ein bisschen 
reduziert und ein paar sinnlose Bedingungen geändert

ich hab gedacht da ich nach dem Datenblatt gegangen bin wenn die ganzen 
Operationen nicht ausgeführt werden kann dort sowieso nichts Passieren 
da das ganze ja eine Ereignisse ist das er ensteht wenn alle Ereignisse 
abgearbeitet sind.

was verstehst man unter Toggeln?? vielleicht einen impulse geben ??
ich hab das so Verstanden das ich jedesmal wenn ich ein bit am S_IN 
anlege es mit der sCLK in den Speicher lade  (wenn Blank auf High ist) 
und Xlat gibt den Impulse die daten zu laden.

Die GSCLK soll Speziell für den Counter im IC sein den nach 4096 würde 
er keine Daten mehr reinladen.

von dummy (Gast)


Lesenswert?

Die "uralte" Referenz für die erfolgreiche Ansteuerung der TLC5940/5941:

https://sites.google.com/site/artcfox/demystifying-the-tlc5940

https://sites.google.com/site/artcfox/demystifying-the-tlc5940/DemystifyingtheTLC5940.pdf?attredirects=0&d=1

Und: fehlender ständiger "Takt und Rhytmus" am GSCLK dürfte einer der 
häufigsten und sichersten STOPPER für die Funktion dieser Bausteine sein 
- und ein "todsicheres" Zeichen für Defizite beim Lesen oder Verstehen 
des Datenblattes... ;-)

von Karl H. (kbuchegg)


Lesenswert?

Patrick S. schrieb:

> Die GSCLK soll Speziell für den Counter im IC sein den nach 4096 würde
> er keine Daten mehr reinladen.

Ich weiß nicht was dieser Satz bedeuten soll.
GSCLK hat mit dem 'reinladen' von Daten in den IC nix zu tun.
Wenn an GSCLK kein Takt anliegt, dann arbeitet die Ausgabe im GreyScale 
Modus ganz einfach nicht. So simpel und einfach ist das und so simpel 
und einfach stehts auch im Datenblatt.

An GSCLK gehört also einfach nur ein Takt angelegt. Wo immer du den auch 
herkriegst.

von Patrick S. (patrick22285)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Patrick S. schrieb:
>
>> Die GSCLK soll Speziell für den Counter im IC sein den nach 4096 würde
>> er keine Daten mehr reinladen.
>
> Ich weiß nicht was dieser Satz bedeuten soll.
> GSCLK hat mit dem 'reinladen' von Daten in den IC nix zu tun.
> Wenn an GSCLK kein Takt anliegt, dann arbeitet die Ausgabe im GreyScale
> Modus ganz einfach nicht. So simpel und einfach ist das und so simpel
> und einfach stehts auch im Datenblatt.
>
> An GSCLK gehört also einfach nur ein Takt angelegt. Wo immer du den auch
> herkriegst.

So hab ich das aufgefasst wenn da einfach nur ein takt angelegt werden 
muss kann dort dann nicht der sCLK und GSCLK zusammen auf den Takt des 
spi ausgang geklemmt werden ?

von Karl H. (kbuchegg)


Lesenswert?

Patrick S. schrieb:

> So hab ich das aufgefasst wenn da einfach nur ein takt angelegt werden
> muss kann dort dann nicht der sCLK und GSCLK zusammen auf den Takt des
> spi ausgang geklemmt werden ?

Der GSCLK muss dauernd anliegen!
Nicht nur, wenn du Daten an den IC überträgst!

SCLK wird nur benutzt, wenn Daten übertragen werden sollen. Er ist der 
Schrittgeber für das Eintakten von neuen Daten.
Aber GSCLK ist dafür zuständig, im IC die PWM zu erzeugen. Kein GSCLK - 
keine PWM - kein Leuchten der LED.

Im TLC 5947 ist zb die ganze Baugruppe rund um GSCLK bereits komplett in 
den IC integriert worden. Da muss man also den Takt nicht mehr extern 
erzeugen, sondern der IC erzeugt sich den selber. Im 5940 ist das noch 
nicht so, da muss man selber rann.

von Falk B. (falk)


Lesenswert?


von Patrick S. (patrick22285)


Lesenswert?

Dann müsste ich einen 8 MHz Takt per Output Compare
erzeugen den dan an GLSK anlegen um generell etwas zu sehen, oder?

von Karl H. (kbuchegg)


Lesenswert?

Ja.
Die Sache ist allerdings noch ein wenig komplizierter.
Denn zwischen GSCLK und BLANK besteht ein Zusammenhang. Nach jeweils 
4096 Pulsen an GSCLK kommt dann ein Puls an BLANK.

Mittels GSCLK wird 1 PWM Zyklus einmalig durchgetaktet. Danach stoppt 
der IC interne PWM-Zähler und mit einem Puls an BLANK wird der dann 
wieder neu gestartet, für den nächsten PWM Zyklus.

In diesen BLANK Pulse legt man dann auch die Neurpogrammierung des IC 
bzw. das Latchen der Daten aus dem Schieberegister in die Ausgangsstufe 
rein.
In den meisten Projekten die ich gesehen habe, werden für das 
Zusammenspiel aus GSCLK und BLANK 2 Timer vom AVR benutzt. Beide sind 
auf Compare Match. Der eine erzeugt die GSCLK Pulse, während der andere 
den 4096-fachen Compare Match realisiert und in seiner ISR ...

* den anderen Timer stoppt
* BLANK auf high
* gegebenenfalls (falls die neuen Daten eingetaktet sind) diese
  mit einem XLAT Puls aktiviert
* BLANK auf Low
* den anderen Timer weiterlaufen lassen

... durchführt


Hast du denn nicht mal den Code von anderen Projekten studiert? Bei uns 
in der Codesammlung gibt es da ein paar Projekte und auch mit Google 
findet sich da vieles zu diesem Thema. Das ganze ist sicherlich kein 
Anfängerprojekt. Aber so kompliziert ist es auch wieder nicht. Mit dem 
Datenblatt, dem Lesen einiger Beschreibungen im Web und nicht zuletzt 
dem Studium des Codes anderer Leute kriegt man schnell raus, wie das 
funktioniert. Raketentechnik ist das keine.

von Patrick S. (patrick22285)


Lesenswert?

Danke :), für die vielen Antworten, ist echt nett von dir.

Karl Heinz Buchegger schrieb:
> Ja.
> Die Sache ist allerdings noch ein wenig komplizierter.
> Denn zwischen GSCLK und BLANK besteht ein Zusammenhang. Nach jeweils
> 4096 Pulsen an GSCLK kommt dann ein Puls an BLANK.


Achso ich dachte die ganze Zeit das der Blank nur dafür da ist LED aus 
oder anzuschalten und das nur im ausgeschalteten zustand die Daten 
reingeladen werden können

> Mittels GSCLK wird 1 PWM Zyklus einmalig durchgetaktet. Danach stoppt
> der IC interne PWM-Zähler und mit einem Puls an BLANK wird der dann
> wieder neu gestartet, für den nächsten PWM Zyklus.
>
> In diesen BLANK Pulse legt man dann auch die Neurpogrammierung des IC
> bzw. das Latchen der Daten aus dem Schieberegister in die Ausgangsstufe
> rein.
> In den meisten Projekten die ich gesehen habe, werden für das
> Zusammenspiel aus GSCLK und BLANK 2 Timer vom AVR benutzt. Beide sind
> auf Compare Match. Der eine erzeugt die GSCLK Pulse, während der andere
> den 4096-fachen Compare Match realisiert und in seiner ISR ...
>
> * den anderen Timer stoppt
> * BLANK auf high
> * gegebenenfalls (falls die neuen Daten eingetaktet sind) diese
>   mit einem XLAT Puls aktiviert
> * BLANK auf Low
> * den anderen Timer weiterlaufen lassen
>
> ... durchführt


> Hast du denn nicht mal den Code von anderen Projekten studiert? Bei uns
> in der Codesammlung gibt es da ein paar Projekte und auch mit Google
> findet sich da vieles zu diesem Thema. Das ganze ist sicherlich kein
> Anfängerprojekt. Aber so kompliziert ist es auch wieder nicht. Mit dem
> Datenblatt, dem Lesen einiger Beschreibungen im Web und nicht zuletzt
> dem Studium des Codes anderer Leute kriegt man schnell raus, wie das
> funktioniert. Raketentechnik ist das keine.

Ich hab mir einige Codes angeschaut das Problem dabei war meistens, das 
ich die Code durch gelesen hab und dachte den aufbau zu verstehen und 
schrieb mir dann meinen eigenen Code der anscheind nicht alles mit 
eingebunden hat.

von Patrick S. (patrick22285)


Angehängte Dateien:

Lesenswert?

nach reichen Studium der Datenblätter müsste ich jetzt das realisiert 
haben oder hab ich etwas übersehen ?

von Patrick S. (patrick22285)


Lesenswert?

der Code macht nichts...

ich bin hier echt noch am verzweifeln :-(

von Patrick S. (patrick22285)


Angehängte Dateien:

Lesenswert?

Sooo der Code klappt mit dem Atmega32 16PU

die Platine hab ich neu gelötet

PD5 GSCLK

der Rest steht im Code Vielen Dank an euch für die hilfe :)

von Pepe (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Der eine erzeugt die GSCLK Pulse, während der andere
> den 4096-fachen Compare Match realisiert und in seiner ISR ...
>
> * den anderen Timer stoppt

DAS ist der ALLERWICHTIGSTE Punkt von allen, dem aber so gut wie nie 
jemand Bedeutung zukommen lässt.

Selbst Profis wie Falk Brunner behaupten immer wieder mann könne als 
GSCLK auch den CPU-Takt an einem der Pins ausgeben. Das ist aber nicht 
richtig! Denn der AVR macht alle I/O-Operationen takt-synchron! Und da 
passiert es dann das man BLANK und GSCKL GLEICHZEITIG setzt!

Das ist aber laut DB nicht zulässig weil da mindesten 10ns (oder in der 
Drehe) dazwischen sein müssen. Das Resultat ist Flackern.

Was lustig ist: Wenn man es wie oben beschrieben falsch macht kann man 
das Ganze beheben indem man in die GSCKL Leitung (oder die 
BLANK-Leitung) 'nen 20p Kondensator hängt (und damit die Flanke 
verschiebt und so das timing plötzlich wieder einhält). Nur ist man dann 
schnell damit zu behaupten man hätte 'Reflexionen' gehabt und diese nun 
'behoben' :-) So erging es mir übrigens seinerzeit selbst. Aber man lern 
ja nie aus.

Beste Grüße,

Pepe

von Falk B. (falk)


Lesenswert?

@  Pepe (Gast)

>> Der eine erzeugt die GSCLK Pulse, während der andere
>> den 4096-fachen Compare Match realisiert und in seiner ISR ...
>
>> * den anderen Timer stoppt

>DAS ist der ALLERWICHTIGSTE Punkt von allen, dem aber so gut wie nie
>jemand Bedeutung zukommen lässt.

Verzerrte Wahrnehmung?

>Selbst Profis wie Falk Brunner behaupten immer wieder mann könne als
>GSCLK auch den CPU-Takt an einem der Pins ausgeben.

Sinnerfassendes Lesen gehört wohl nicht zu deinen Stärken, was?

Beitrag "Re: Taktquelle für TLC5940"

Hier wollte der OP den TLC5940 al PWM-Generator zur Motoransteuerung 
missbrauchen, und das mit möglichst hoher PWM-Frequenz. Ausserdem hab 
ich auch dort vorgeschlagen, das per Output Compare Funktion zu machen, 
wodurch eben die Steuermöglichkeit über Timer anhalten oder Output 
COmpare abschalten erhalten bleibt.

Beitrag "Re: tlc5940 GSCLK frage"

von Pepe (Gast)


Lesenswert?

Hey Falk,

das war nicht böse gemeint!

Eigentlich wollte ich damit nur zum Ausdruck bringen, das diese Sache 
mit dem Timig zwischen GSCLK und BLANK ein echter Fallstrick sein kann 
den man auch gern als Profi übersieht. Und der erste Profi der mit in 
den Sinn kam warst Du :-) Denn in dem von Dir geposteten link las ich 
gleich als erstes:

"Einige AVRs können auch ihren Takt an einem Pin nach aussen geben, dort
kann man ihn abgreifen und weiter nutzen."

Was in Bezug auf die GSCLK-Quelle nicht ganz richtig ist.

Also sorry wenn meine Formulierung etwas ungünstig war!

LG,

Pepe

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.