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.
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.
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.
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.
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... ;-)
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.
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 ?
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.
Dann müsste ich einen 8 MHz Takt per Output Compare erzeugen den dan an GLSK anlegen um generell etwas zu sehen, oder?
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.
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.
nach reichen Studium der Datenblätter müsste ich jetzt das realisiert haben oder hab ich etwas übersehen ?
der Code macht nichts... ich bin hier echt noch am verzweifeln :-(
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 :)
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
@ 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"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.