ich habe das "4 Gewinnt" Spiel versucht auf einer Platine mit LEDs zu
realiseren. Dazu wurde ein LED-Raster aus 6x7 bicolor LEDs (Gelb und
rot) gewählt. Das ganze wird über ein Atmega328P angesteuert. Die LEDs
werden mithilfe von TLC5940 angesteuert. Es gibt 3 Taster, mit denen man
die Spalte quasi auswählt (also links oder rechts) und eine "OK" Taste
zum Bestätigen. Unter dem Raster ist noch eine LED Reihe, mit der man
die Spalte auswählt.
Ich habe die Schaltpläne anhehängt.
Aufbau:
Mikrocontroller: ATmega328P (16 MHz Quarz)
LED-Raster: 6x7 Bicolor LEDs (rot/gelb, gemeinsame Anode an 5V)
Ansteuerung: 6× TLC5940 (kaskadiert)
LED-Strom: ca. 18 mA (IREF = 2 kΩ)
Versorgung: 5V (USB)
Testaufbau:
Aktuell ist nur eine Bicolor-LED angelötet (OUT11/OUT12 des ersten TLC)
Rest der Schaltung vollständig bestückt
Nun zum Problem:
Ich habe die Platine bestellt und fast alle Bauteile aufgelötet. Zum
Testen habe ich nur eine bicolor LED angelötet und sonst sind alle
Bauteile angelötet.
Den Atmega habe ich via Arduino programmiert, dabei blitzt die eine LED
nur kurz auf beim Einschalten und blinkt nicht.
Bereits getestet:
Einzelner TLC auf Breakout + Arduino → funktioniert einwandfrei
GSCLK manuell getoggelt → LED reagiert
BLANK testweise LOW → keine Änderung
Spannung am OUT-Pin gemessen (~0.4V)
Verhalten beim Einschalten sporadisch (kein deterministisches Verhalten)
Hat jemand eine Idee, woran es liegen könnte?
Insbesondere ob es ein Problem mit GSCLK Signal (Signalqualität
/Verteilung) oder BLANK / XLAT Timing
oder der Kaskadierung der TLCs sein könnte?
Sorry, hatte es im falschen Forum hochgeladen und dort lässt es
sich irgendwie nicht löschen.
Hallo,
ok, du bist neu im Forum. Da muss kann man nicht alles wissen und kennen.
Einen eigenen Thread kannst du nur innerhalb einer Stunde nach dem Erstellen löschen. Das aber auch nur solange kein Kommentar abgegeben wurde. Ausnahme mit der einen Stunde ist nur das Unterforum „Markt“. Hier kannst du unbegrenzt lange löschen und editieren..aber auch hier nur dann solange kein Kommentar abgegeben wurde.
In deinem Fall hättest du einen Moderator per PN anschreiben sollen, mit der Bitte den falsch eingestellten Thread zu verschieben.
Falls hier jetzt ein Moderator mitliest kann er den falsch eingestellten Thread ja löschen, bevor in Beiden die Diskussion losgeht.
Ich weiss nicht ob "wild" die richtige Beleidung ist. :-D Aber ja, man schaut drauf und will am liebsten die Augen zu machen, obwohl ich garnicht so genau sagen kann wieso. Erinnert irgendwie an schlimme Jugenderlebnisse mit Schaltplaenen von grossen Schaltkaesten in der Industrie.
Bestimmt liegt es an Kikad. :-D
Hast du ein geeignetes Messgerät für diese Aufgabe? Ein digitales USB-Oszi wie zB von Picoscope oder alternativ ein Oszi und dazu ein 10€-Logicanalyzer sind die Mindestmessmittel, die man zur erfolgreichen Inbetriebnahme solcher seriellen Bussysteme benötigt, weil man nur damit sieht, ob die Signalintegrität und die Timinganforderungen eingehalten werden.
Alles andere ist wie "Autofahren nach Gehör": wenns scheppert dann ist irgendwas schief gelaufen.
Du könntest den SOUT des letzten TLC5940 zurückführen, dann könntest Du den Status zurücklesen (wenn ich beim Überfliegen das Datenblatt korrekt verstanden habe) oder auch einfach nur das resultierende 6x192 oder 6x96 bit Schieberegister per SW testen mit Testmustern testen. Dazu wäre noch kein Oszi erforderlich.
in Oszi habe ich leider nicht, aber ein Logic Analyzer (8 Ch, 24MHz)
und ein Multimeter hätte ich zur Verfügung
Das reicht. Die paar seriellen Signale anschließen und messen. Wichtig ist BLANK! Das muss LOW sein, damit die Ausgänge aktiv werden.
Es braucht für den PWM-Betrieb einen dauerhaften Takt an GSCLK und einen periodischen negativen Puls an BLANK. Vorher sollten die beiden Registerketten für Dot Correction und Grayscale mit 1 gefüllt werden. Das sollte deine Bibliothek machen. Hast du auch die richtigen Pins angeschlossen und auch in der Software eingestellt? Das kann und muss man mit dem Logicanalyzer messen.
Die Signale BLANK, GSCLK, SCLK, SIN, XLAT, IREF und VPROG sind wichtig. Alles anschauen und messen.
Zum einschalten der LEDs brauch es mindestens
Die beiden Schieberegister mit 1 laden, sprich
DCPRG = 1, SIN = 1, VPRG = 0V, 192 Takte an SCLK
DCPRG = 1, SIN = 1, VPRG = 5V, 96 Takte an SCLK
einen HIGH-LOW Puls an BLANK und dann 1 Takt an GSCLK.
Hauchdünne Versorgungs- und Masseleitungen, wildes unsystematisches
Verbinden dieser Leitungen ohne die geringste Tendenz zu einer
Stern- bzw. Baumstruktur. Soweit das aus dem niedrigst auflösenden
Layout-Bild zu entnehmen ist ..... Zwei Layout-Bilder die das
Gleiche zeigen, nur in anderen Farben, OMG.
Ich sage voraus dass dieses Layout nicht zuverlässig funktionieren
wird. Ich lasse mich aber gerne belehren. Man braucht sich bloss
mal anschauen wie gedankenlos oder unfachmännisch (oder beides)
der Quarz mit seinen Kondensatoren angeschlossen ist. Da braucht
es gar keine Hinweise auf irgendwelche Software-Probleme, völlig
für die Katz.
Wofür soll er denn stattdessen Pluspunkte bekommen? Weil er wieder! nicht korrekt zitiert? Weil sein Kommentar so super schlau ist? Weil er Kicad und Beleidigung falsch schreibt? Reicht dir das?
Da weiss man was für Knallköpfe hier am Werk sind.
Ich weiss nicht ob "wild" die richtige Beleidung ist. :-D
Keine Ahnung was du damit meinst, eine Beleidigung ist es keinesfalls.
„Wild“ ist einfach nur eine Feststellung.
Eine Beleidigung ist dein permanentes Verhalten wenn du Bezug auf andere Kommentare nimmst. Weshalb nennst du den Zitierten nicht? Ich finde das fast schon asozial.
Vanye
Lass doch einfach deinen Namen am Ende jeden Kommentars weg, denn das ist vollkommen sinnlos und überflüssig. Den Namen sieht man auch so.
Eine zweilagige Leiterplatte würde ausreichen bei ausreichend vermaschten Masseflächen und ausreichend dicken Versorgungsleitungen. Ich kann im Layout nicht erkennen wie die gerechneten Flächen aussehen würden, daher ist eine Bewertung nicht möglich.
Beim SCLK ist es ungünstig dass die 6 ICs so verteilt sitzen, schließlich ist jeder einzelne auf ein sauberes Taktsignal angewiesen (der Baustein kann immerhin bis 30 MHz). Wenn man ein Taktsignal an mehrere Senken anschließt dann sollten diese möglichst nah beisammen sein. Ob das Signal aber selbst dann bei 6 Lasten noch ausreichend sauber ist kann ich nicht sagen. Bei wirklich kritischen Taktsignalen würde man einen Taktverteiler verwenden, hier könnte es bei gutem Layout evtl. auch noch ohne gehen. Wenn das Signal zu unsauber ankommt kann es sein dass eine Flanke doppelt erfasst wird und damit doppelt geschoben wird was zu Datenverfälschungen führt
Wenn durch zu viele Lasten an einem Taktsignal die Flanke einfach nur zu flach wird könnte es passieren, dass durch leicht unterschiedliche Schaltschwellen oder zusätzlich durch Störungen mangels sauberer Masse nicht alle Bausteine gleichzeitig takten. Im ungünstigsten Fall wird dann an einem nachgeschalteten TLC5940 vielleicht schon das gerade erst ausgegebene SOUT des vorigen TLC noch in diesem Takt übernommen wodurch auch wieder alles durcheinander kommen könnte.
Jede einzelne Abweichung von einem guten Layout kann, muss aber nicht zu Problemen führen.
Wie schon geschrieben könnte man durch einen Test der Schieberegister per SW ganz leicht herausfinden ob diese zuverlässig, unzuverlässig oder überhaupt nicht funktionieren.
Die Signale BLANK, GSCLK, SCLK, SIN, XLAT, IREF und VPROG sind wichtig.
Alles anschauen und messen.
Also ich habe am BLANK Pin mit einem Logic Analyzer gemessen und der zeigt, dass es für 1s lang high ist und dann für ca 600us auf LOW.
GSCLK habe ich auch gemessen und da ist ein Takt vorhanden: ca. 997us LOW und ca. 345us auf HIGH.
SCLK unregelmäßiger Takt. ca. 60ms LOW und 250ns HIGH
SIN ganze Zeit auf HIGH
XLAT zuerst unregelmäßig, dann ca 1ms LOW und ca 250ns HIGH.
Ja es ist ein 2-lagiges Layout.
Ich habe gehofft/gedacht, dass man quasi die Bauteile platzieren kann und "einfach" verbinden kann oder groß nachzudenken. Es sollte ja kein professionelles Projekt werden, daher habe ich keine Gedanken zur Verteilung bzw. zum Layout gemacht. Noch dazu dachte ich, dass die Library im Code ausreicht, um das Projekt zu betreiben. Tja, dumm von mir, aber so lernt man irgendwie etwas dazu.
Die Versorgungsleitung ist halt 0,5mm dick ansonsten sind alle Leitungen 0,2mm dick.
Ich habe nun das Layout geplottet und als PDF Datei angehängt, hoffe dadurch eventuell, dass etwas zum Erkennen ist.
Ich sage voraus dass dieses Layout nicht zuverlässig funktionieren
wird. Ich lasse mich aber gerne belehren. Man braucht sich bloss
mal anschauen wie gedankenlos oder unfachmännisch (oder beides)
der Quarz mit seinen Kondensatoren angeschlossen ist. Da braucht
es gar keine Hinweise auf irgendwelche Software-Probleme, völlig
für die Katz.
Ich hätte gedacht, den Quarz mit seinen Kondensatoren so nah wie möglich und die Leitungen so kurz wie möglich, würde da ausreichen.
Also ich habe am BLANK Pin mit einem Logic Analyzer gemessen und der
zeigt, dass es für 1s lang high ist und dann für ca 600us auf LOW.
Das muss anders herum sein! Blank muss ein kurzer HIGH Puls sein, welcher den internen PWM-Zähler rücksetzt.
GSCLK habe ich auch gemessen und da ist ein Takt vorhanden: ca. 997us
LOW und ca. 345us auf HIGH.
Macht ca. 700 Hz. Das ist für PWM zu wenig. Bei 100Hz PWM-Frequenz und 12 Bit braucht man eher 410kHz!
SCLK unregelmäßiger Takt. ca. 60ms LOW und 250ns HIGH
SIN ganze Zeit auf HIGH
XLAT zuerst unregelmäßig, dann ca 1ms LOW und ca 250ns HIGH.
Könnte passen. XLAT ist nur ein kurzer HIGH Puls, um die Daten der Schieberegister zu speichern.
Ein Bild sagt mehr als 1000 Worte.
Ja es ist ein 2-lagiges Layout.
Ist nicht schlimm, auch ist dein Layout nicht so schlim wie einige Nörgler hier immer wieder rausposaunen.
Ich habe gehofft/gedacht, dass man quasi die Bauteile platzieren kann
und "einfach" verbinden kann oder groß nachzudenken.
JAIN.
Es sollte ja kein
professionelles Projekt werden, daher habe ich keine Gedanken zur
Verteilung bzw. zum Layout gemacht. Noch dazu dachte ich, dass die
Library im Code ausreicht, um das Projekt zu betreiben. Tja, dumm von
mir, aber so lernt man irgendwie etwas dazu.
Noch hast du nichts gelernt. Zuerst müssen die Fehler gefunden und behoben werden.
Die Versorgungsleitung ist halt 0,5mm dick
Reicht, kann man hier aber breiter machen, es ist genügend Platz da.
Ich sehe hier eher ein Problem der Masseleitung deiner TLC5940. Mach mal ein gutes Bild, wo die Masseleitung + Flächen leuchten (Highlighing). Ich hab da meine Bedenken.
Breit. Kann man machen, ist aber eher unnötig dünn. Bei der Platine und Platz reichen auch 0,3mm. Aber heute kann man sich schmale Leitungen leisten, der Chinamann kann das problemlos ätzen.
Ich habe nun das Layout geplottet und als PDF Datei angehängt, hoffe
dadurch eventuell, dass etwas zum Erkennen ist.
Sieht auf den ersten Blick gut aus. Allerdings kann man keine kritischen Signale anzeigen. Lad mal die KiCAD Daten hoch, dann kann man mehr sagen.
Ich hätte gedacht, den Quarz mit seinen Kondensatoren so nah wie möglich
und die Leitungen so kurz wie möglich, würde da ausreichen.
ich habe mich auch mal mit dem Spiel beschäftigt, ich meine bei 2005 rum, gab es auch mal ein Spiel im Elektor und ich hatte auch eine Studio Simulation irgendwo her.
Ich weiß noch dass der Algorithmus des "Gegners" sehr sehr unterschiedlich stark war, der eine war mega schlecht - da machte das Spielen gar keinen Spaß und der andere war sehr sehr gut, da musste man schon drei mal überlegen vor dem nächsten Zug...
Sieht auf den ersten Blick gut aus. Allerdings kann man keine kritischen
Signale anzeigen. Lad mal die KiCAD Daten hoch, dann kann man mehr
sagen.
Ich habe die KiCad Dateien als ZIP Datei hochgeladen, hoffe man kann sie öffnen.
Nachdem einige Signale (BLANK, GSCLK, usw.) lt. Messungen nicht ganz stimmen, würde das bedeuten, dass die Library Tlc5940 nicht zu gebrauchen ist?
Müsste ich selber einen Code schreiben, der dann die ganzen ausgänge toggelt? (SEUFZ)
Ich habe die KiCad Dateien als ZIP Datei hochgeladen, hoffe man kann sie
öffnen.
Naja. Es ist schon so wie befürchtet hatte. Deine "Massefläche" ist extrem zerstückelt. Ob das so läuft, muss man testen. Beim nächsten Layout muss das aber anders werden.
/* This loop will create a Knight Rider-like effect if you have LEDs plugged
into all the TLC outputs. NUM_TLCS is defined in "tlc_config.h" in the
library folder. After editing tlc_config.h for your setup, delete the
Tlc5940.o file to save the changes. */
Du musst das #define NUM_TLCS in "tlc_config.h" im Bibliotheksordner auf 6 einstellen (naja, so richtig C++ ist das nicht).
In deinem Schaltplan sind XLAT und BLANK am Controller vertauscht!
Du hast aber Glück! Man kann die Pins im Quelltext anders zuordnen, man braucht keine Hardwareänderung.
Die Kondensatoren parallel zu deinen Tastern sind falsch, das macht man so nicht. Entprellung macht man per Software. Oder wenn schon per Hardware, dann richtig mit RC-Filter, siehe Artikel.
Dein PIN-Signal muss auf VCC gesetzt werden.
Wenn du die Änderungen gemacht hast, sollte das einfache Beispiel oben mit dem Knight Rider Effekt funktionieren.
Probier mal.
P S Dein Schaltplan ist im Wesentlichen OK. Aber auf Seite 1 kann man das alles deutlich übersichtlicher ohne Schnörkel zeichnen.
Sooooooo, ich war dann mal so frei und habe die Schaltung, vor allem das Layout, "etwas" aufgeräumt.
Zur Schaltung
Schaltplan sauber zeichnen, vor allem Seite 1!
Keine doppelten Signalnamen!
GSCLK sollte ein Pin mit PWM-Fähigkeit sein, wenn man denn WIRKLICH PWM nutzen will. Denn dort wird ein dauerhalft hoher Takt benötigt, im Bereich von 400 kHz! Das kann man nicht sinnvoll ohne PWM Pin erzeugen.
Bei der LED-Matrix sollte man diese im Schaltplan so anordnen, wie sie im Layout angeordnet ist. Im Normalfall ist das NICHT so! Hier aber doch, denn damit wird die wichtige Info transportiert, siehe unten.
An U49 habe ich am Ende von SCK einen RC-Snubber (Terminator) platziert. Vielleicht braucht man ihn, vielleicht nicht. Siehe Wellenwiderstand.
Eigentlich braucht man für ein 4 Gewinnt Spiel keinen Quarzoszillator, der interne 8 MHz RC-Takt reicht locker.
Für die TLC5940 reichen 1uF als Entkoppelkondensator.
Layout
Um das Chaos und die Verknotung der Leitungen zu minimieren, um eben NICHT auf eine 10 Lagen Platine ausweichen zu müssen (haha), sollte man die Zuordnung der LEDs zu den Treibern eben NICHT einfach 1:1 leicht im Schaltplan eintragen, sondern geometrisch optimieren. Damit ergibt sich vielleicht ein wenig "Chaos" und "unlogische" Zuordnung, aber das kann man recht einfach hier wieder in Software korrigieren, Stichwort "Mapping". Man braucht nur eine Tabelle, um die physischen LEDs den logischen LEDs der Matrix zuzuordnen.
Der Gewinn liegt in der deutlich veringerten Komplexität der Verdrahtung.
Damit kommen wir zum Höhepunkt der Veranstaltung. Um mal ein berühmtes Filmzitat zu bemühen.
Sooooooo, ich war dann mal so frei und habe die Schaltung, vor
allem das
Layout, "etwas" aufgeräumt.
Wow! Vielen Dank für die Mühe! Man sieht, wieviel man da so rausholen kann.
Zur Schaltung
Schaltplan sauber zeichnen, vor allem Seite 1!
Keine doppelten Signalnamen!
GSCLK sollte ein Pin mit PWM-Fähigkeit sein, wenn man denn WIRKLICH PWM
nutzen will. Denn dort wird ein dauerhalft hoher Takt benötigt, im
Bereich von 400 kHz! Das kann man nicht sinnvoll ohne PWM Pin erzeugen.
GSCLK ist ja am PIN PD3 am Atmega verbunden, der kann ja soweit ich weiß PWM Signal liefern.
Layout
Um das Chaos und die Verknotung der Leitungen zu minimieren, um eben
NICHT auf eine 10 Lagen Platine ausweichen zu müssen (haha), sollte man
die Zuordnung der LEDs zu den Treibern eben NICHT einfach 1:1 leicht im
Schaltplan eintragen, sondern geometrisch optimieren. Damit ergibt sich
vielleicht ein wenig "Chaos" und "unlogische" Zuordnung, aber das kann
man recht einfach hier wieder in Software korrigieren, Stichwort
"Mapping". Man braucht nur eine Tabelle, um die physischen LEDs den
logischen LEDs der Matrix zuzuordnen.
Der Gewinn liegt in der deutlich veringerten Komplexität der
Verdrahtung.
Ja stimmt, so könnte man es auch lösen, wäre eventuell etwas verwirrend aber ja.
Damit kommen wir zum Höhepunkt der Veranstaltung. Um mal ein berühmtes
Filmzitat zu bemühen.
"DAS ist eine Massefläche!" ;-)
Das sieht wirklich toll aus jetzt.
Siehe Anhang. Viel Spaß damit
Nochmals vielen Dank!
Ich werde den Schaltplan ein wenig aufräumen und die angesprochenen Punkte ausbessern und eine neue Platine bestellen.
Wow. Ich bin auch beeindruckt, welche Arbeit sich Falk da jetzt gemacht hat!
Ich hoffe daher ein wenig, man nimmt mir dieses Posting hier jetzt nicht krumm...
Bevor Du bestellst: Was war denn der eigentliche Grund für Dich, dieses ganze Vorhaben überhaupt anzugehen? Wolltest Du unbedingt mal eine etwas komplexere Schaltung entwerfen und bauen? Oder wolltest Du ein cooles Hardware-4-Gewinnt-Spiel haben? Oder hast Du einen Sack voll Bauteile gefunden, der "verbastelt" werden muss?
Weil ... man könnte das ganze schaltungstechnisch viel einfacher und gleichzeitig mit noch mehr coolen Möglichkeiten (z.B. mehr als 2 Spieler, leichter auch variable Feldgrößen möglich, noch ganz andere Spiele auf gleicher Hardware, ...), realisieren, wenn man eine Kette von WS2812 benutzt. Elektrisch und Layout-technisch wäre sowas aber natürlich deutlich langweiliger. D.h. ich will Dich zu nix überreden, sondern wollte es nur mal erwähnt haben.
Bevor Du bestellst: Was war denn der eigentliche Grund für Dich, dieses
ganze Vorhaben überhaupt anzugehen? Wolltest Du unbedingt mal eine etwas
komplexere Schaltung entwerfen und bauen? Oder wolltest Du ein cooles
Hardware-4-Gewinnt-Spiel haben? Oder hast Du einen Sack voll Bauteile
gefunden, der "verbastelt" werden muss?
Weil ... man könnte das ganze schaltungstechnisch viel einfacher und
gleichzeitig mit noch mehr coolen Möglichkeiten (z.B. mehr als 2
Spieler, leichter auch variable Feldgrößen möglich, noch ganz andere
Spiele auf gleicher Hardware, ...), realisieren, wenn man eine Kette von
WS2812 benutzt. Elektrisch und Layout-technisch wäre sowas aber
natürlich deutlich langweiliger. D.h. ich will Dich zu nix überreden,
sondern wollte es nur mal erwähnt haben.
Ich wollte wirklich ein cooles Hardware 4 Gewinnt Spiel basteln und dabei eine etwas komplexere Schaltung entwerfen. Ich hätte aber nicht gedacht, dass diese Schaltung so komplex wird. Ich wollte meine PCB Layout Kenntnisse auffrischen und daher entstand dieses Projekt.
Stimmt vollkommen, mit WS2812B wäre das Ganze um einiges einfacher (habe ich auch schon in Betracht gezogen bzw. wird dann eventuell eh umgesetzt, wenn dieses Projekt mit den TLCs nichts wird), aber ich wollte eigentlich eine komplexere Schaltung bauen, um auch ein wenig dazu zu lernen, wie man Schaltungen bzw. Layout entwirft, bei denen HIGH Speed Signale eine Rolle spielen.