Hallo,
ich bin neuling auf dem Gebiet der FPGAs, jedoch sehr begeistert von den
Möglichkeiten die sie einem bieten. Ich versuche nun schon seit wochen
eine RGB-LED die an den TLC5970 angeschlossen ist per SPI anzusteuern
jedoch schaffe ich es ums verrecken nicht.
Laut Datenblatt schreibt man per SPI 40-Bit hintereinander in ein Latch.
Nach der letzten steigenden Flanke des SPI-Clocks wartet der TLC5970
eine Latch-Time ab bis er die Daten in sein internes Latch
weiterschiebt. Mein Problem ist jetzt, dass ich mir nicht sicher bin ob
ich überhaupt die ganzen 40-Bit hintereinander an das TLc senden muss
und wie lange ich warten muss nach der letzten steigende Flanke .Ich
arbeite mit dem Digilent Spartan-3A Bord mit einem Spartan-3 XC3S200.
Mein Code ist sehr gewöhnungsbdürftig, ich hoffe ihr versteht dennoch
was ich vorhabe.
SPI-Master-Top
Michael schrieb:> Mein Problem ist jetzt, dass ich mir nicht sicher bin ob> ich überhaupt die ganzen 40-Bit hintereinander an das TLc senden muss
Ja klar, denn da sind immer 4 Adressbits und 36 Datenbits dabei. Sieh
dir einfach mal die Seite 32 an...
> und wie lange ich warten muss nach der letzten steigende Flanke
Seite 41 "Internal Latch Pulse Delay Time"
Sihe dir einfach mal das Datenblatt des Bausteins noch ein wenig genauer
an. Als Tipp: PDFs lassen sich super toll durchsuchen...
Danke für sie schnelle Antwort !
Ich muss zugeben, ich hab die Frage gestellt weil ich das schon die
ganze zeit mache, es aber trotzdem nicht funktioniert.
Ich habe das so verstanden, dass ich die FC/BC sende (Adresse 1111) und
dann die LATTIM abwarte damit der TLC die Daten in das FC/BC Register
schiebt. Daraufhin sende ich wieder 40-Bit, diemal jedoch für das
DC-Register (Adresse 1110). Dann warte ich wieder und sende nochmal die
40-Bit für das GC-Register. Wenn DSPRPT nun aktiviert ist, sollte die
erste LED nun leuchten oder?
Der TLC den ich verwende, sitzt auf einer LED-Leiste. Der Hersteller von
dem ich die habe, hat die LATTIM auf 1111 gesetzt. Also muss ich 10-16
ms warten.
MfG
Michael
Etwas schwer zu lesen, aber es sieht so aus als ob du pos bei jeder SPI
Clockflanke erhöhst, sozusagen DDR.
Was sagt die Simulation? Was sagt das Osci?
Lattice User schrieb:> Etwas schwer zu lesen
Richtig, weil der Takt-Vorteiler in den Code mit reingemantscht ist...
> Was sagt die Simulation?
Das wäre allerdings interessant.
Wie gesagt, ich programmiere erst seit ca. 2 Monaten in Verilog, daher
entschuldigt meinen sehr unprofessionellen Code. DIe Simulation habe ich
mal angehängt. Das Oszi sagt dasselbe, wenn die LATTIM am Ende der
Übertragung ganz kurz ist (10 Takte). Ist Sie jedoch so lang wie im
Datenblatt gefordert (10-16 ms), sieht man auf dem Oszi nichts
erkennbares mehr.
MfG
Michael
Den Taktteiler habe ich übrigens mit reingemischt, weil ich es leider
nicht hinbekommen habe die MOSI Leitung einen Takt bevor SCLK anfängt
mit dem ersten Bit zu setzen. Nur zur Erklärung...
Ich habe mir das Datenblatt des TLC5970 jetzt mal angeschaut. SPI würde
ich das Interface nicht nennen. Wenn du später mal einen richtigen SPI
Master daraus ableiten möchtest bekommst du graue Haare.
Wenn ich es richtig verstanden habe braucht der TLC5970 alle 40 bit eine
Pause in der Clock um den internal Latch zu erzeugen. Und diese Pause
fehlt bei dir.
Das ist mir auch bewusst... Der TLC benötigt ja auch keinen CS, demnach
ist das eine sehr schlechte SPI-Umsetzung. Zu der Pause: Richtig, so
habe ich das auch verstanden. Und die Pause ist auch vorhanden, jedoch
nicht nach 40 Bit sondern nach 200 Bit. Das liegt daran das auf der
LED-Leiste insgesamt 5 TLCs miteinander kaskadiert sind. Damit alle TLCs
mit daten gefüttert werden übertrage ich insgesamt 200 Bit und pausiere
dann erst. Ich kann aber auch dazu sagen das es nicht funktioniert hat,
als ich nur 40 Bit für die erste LED übertragen habe und die Pause
direkt danach eingelegt habe. Daher auch meine Frage ob noch jemand eine
Idee hat, woran es liegen kann... Sieht das Timing denn ansonsten
akzeptabel aus?!
MfG
Michael
Michael W. schrieb:> Das ist mir auch bewusst... Der TLC benötigt ja auch keinen CS, demnach> ist das eine sehr schlechte SPI-Umsetzung. Zu der Pause: Richtig, so> habe ich das auch verstanden. Und die Pause ist auch vorhanden, jedoch> nicht nach 40 Bit sondern nach 200 Bit. Das liegt daran das auf der> LED-Leiste insgesamt 5 TLCs miteinander kaskadiert sind. Damit alle TLCs> mit daten gefüttert werden übertrage ich insgesamt 200 Bit und pausiere> dann erst.
Im Datenblatt steht zwar etwas von unbergrenzter Kaskadierung, ist mir
aber nicht klar woher jeder TLC weiss welche 40 bit von den 200 für ihn
gedacht sind.
> Ich kann aber auch dazu sagen das es nicht funktioniert hat,> als ich nur 40 Bit für die erste LED übertragen habe und die Pause> direkt danach eingelegt habe. Daher auch meine Frage ob noch jemand eine> Idee hat, woran es liegen kann...
Wie sind die B Eingänge der TLC angeschlossen?
> Sieht das Timing denn ansonsten> akzeptabel aus?!>
Eigentlich schon.
Also den Timings entnehme ich das die Daten direkt weitergeshiftet
werden. Übertrage ich die ersten 40 Bit, stehen die komplett im Register
des 1. TLCs. Übertrage ich das 41 Bit, steht das 1.Bit nun im Register
des 2. TLCs. Und dann immer so weiter. Die ersten 40 Bit von den 200 die
ich übertrage steen demnach am Ende im letzten TLC.
Mit dem B-Eingängen meinst du denke ich die invertierten Pins. Diese
habe ich garnicht beschaltet. Ich verwende für die Eingabe SCKA und SDTA
und Kaskadiert werden die TLCs mit SCKY und SDTY. Quasi genauso wie auf
dem Titelblatt des Datenblatts.
MfG
Michael
Michael W. schrieb:> Mit dem B-Eingängen meinst du denke ich die invertierten Pins. Diese> habe ich garnicht beschaltet. Ich verwende für die Eingabe SCKA und SDTA> und Kaskadiert werden die TLCs mit SCKY und SDTY. Quasi genauso wie auf> dem Titelblatt des Datenblatts.
Welches Datenblatt liegt dir vor?
Bei dem das ich mir vorhin von TI geladen habe, sind die B Eingänge in
allen Applikations Beispielen angeschlossen, auch auf der ersten Seite.
Ich vermute stark, dass da das Problem liegt.
Dasselbe das du auch vor dir haben wirst. Ich habe nur eins gefunden,
das es direkt auf der TI-Seite gibt. Das ist eine Interessante
These...Jedoch ist der Sinn für mich nicht ersichtlich alle 4 Leitungen
zu beschalten. Sind die Leitungen dann auch mit den entsprechenden
Signalen zu betreiben, also wirklich der invertierte Takt und die
invertierten Daten? Ich werde das gleich mal ausprobieren und werde dann
entweder heute Nacht oder morgen früh mal berichten was sich getan hat.
Ich bin mir nur momentan auch nicht mehr sicher ob die kaskadierung auf
der LED-Leiste auch alle 4 Leitungen verwendet, ich meine nämlich dass
da nur zwei leitungen verwendeten werden, müssten da nicht dann
theoretisch auch alle 4 Leitungen verwendet werden? Ich werde mal
nachsehen wenn ich zu Hause bin und auch das nochmal bescheid geben ;)
Danke schon einmal für deine Hilfe und Zeit !! :)
Wenn es wirklich daran liegt, würde mir ein Stein vom Herzen fallen.
MfG
Michael
Michael W. schrieb:> Jedoch ist der Sinn für mich nicht ersichtlich alle 4 Leitungen> zu beschalten
Störsicherheit, EMC/EMI ......, und damit auch Kabellänge.
Nennt sich differentielle Datenübertragung.
Ahh okay, habe ich wieder was gelernt. Dafür ist dann wohl auch das DSI
(Differential Signal Interface) zuständig oder? Ist der denn jetzt auch
"theoretisc" notwendig, dass die kaskadierung ebenfalls alle 4
Signalleitungen verwendet oder ist das egal, weil die leitungen ja auf
der Platine liegen und nicht über "Kabel" verbunden sind?
MfG
Michael
Michael W. schrieb:> Ist der denn jetzt auch> "theoretisc" notwendig, dass die kaskadierung ebenfalls alle 4> Signalleitungen verwendet oder ist das egal, weil die leitungen ja auf> der Platine liegen und nicht über "Kabel" verbunden sind?
Ja ist notwendig, da beide Inputs auf gleichem Pegel die Schaltschwelle
darstellen.
Michael W. schrieb:> Ist der denn jetzt auch "theoretisc" notwendig, dass die> kaskadierung ebenfalls alle 4 Signalleitungen verwendet
Ähm, wie meinst du sollte es denn sonst funktionieren?
Das ist ein differentielles Signal. Das braucht beide Polaritäten. Für
Takt und Daten zusammen also 4: T+, T-, D+ und D-. Du könntest
versuchen, einen der Eingänge auf Ub/2 zu legen, aber das ist dann eher
ein akademische Spielerei.
@ Lothar Miller
Tut mir leid, aber wie bereits erwähnt befasse ich mich erst seit
einigen Monaten mit diesem Thema und habe von einem Differentiellen
Signal bisher noch nichts gehört... Daher war mir auch nicht klar dass
ich bei Pegel benötige.
@Lattice User
Ich habe es nun mit allen vier Leitungen programmiert, es funktioniert
jedoch leider immer noch nicht. Ich habe nocheinmal die Timings
hochgeladen und es auf 40-Bit Daten umgestellt, sende also nicht mehr
sofort alle 200 Bit. Ich habe auch bereits mehrfach die Leitungen
überprüft, ob alles korrekt angeschlossen ist. Langsam bin ich mit
meinem Latein am Ende...
MfG
Michael
Warum ist bei 01 - 04.png der Pegel von SDTB zu niedrig?
Ansonsten sieht das ok aus.
Ich fürchte du msst dich nochmal eingehend mit dem TLC5970
auseinandersetzen,
vielleicht braucht er einen Resetbefehl, oder eine Einstellung falsch?
Um HW Probleme auf den seriellen endgültig auszuschliessen kannst du dir
noch die Ausgänge am Osci anschauen.
Mehr kann ich leider nicht mehr helfen.
Lattice User schrieb:> Ansonsten sieht das ok aus.
Kommen die Überschwinger im Takt wirklich nur von Messaufbau?
Ich würde mal gerne das Differenzsignal SCKA-SCKB sehen.
Lattice User schrieb:> Warum ist bei 01 - 04.png der Pegel von SDTB zu niedrig?> Ansonsten sieht das ok aus.
Das weis ich auch nicht. Auf den späteren Bildern sind diese
verschwunden, dabei habe ich lediglich ein neues Bild erstellt.
Lothar Miller schrieb:> Kommen die Überschwinger im Takt wirklich nur von Messaufbau?> Ich würde mal gerne das Differenzsignal SCKA-SCKB sehen.
Könnten die Überschwinger das Problem sein? Der Versuchsaufbau sieht so
aus, dass die Leitungen alle über ca. 5 cm kurze Steckbrücken verbunden
werden. Vielleicht sollte ich einen SPI-Stecker auf eine kleine Platine
löten und die Pins dann darüber verbinden...
Bei einem Takt von 4,5 MHz kann ich mir gut vorstellen, dass das Signal
da nicht so optimal durchläuft. Ich kann das Differenzsignal gerne
nocheinmal darstellen, jedoch bin ich erst am Montag wieder in der Uni
sodass ich ein Oszi zur Verfügung habe...
Ich habe den Code zudem nochmal "rundum erneuert". Vielleicht ist es
jetzt etwas einfacher zu lesen und zu verstehen...
Michael W. schrieb:> Lattice User schrieb:>> Warum ist bei 01 - 04.png der Pegel von SDTB zu niedrig?>> Ansonsten sieht das ok aus.> Das weis ich auch nicht. Auf den späteren Bildern sind diese> verschwunden, dabei habe ich lediglich ein neues Bild erstellt.
Also gibt es irgendwo einen HW Defekt.
Das sollte man als allererstes suchen und beheben.