8x8x8 RGB LED Cube (5) – Programmierung
18. Februar, 2013 in: Elektronik, Sinnloses, StudiumEs geht weiter! Nach längerer Pause melde ich mich im neuen Jahr zurück 😉
Da ich derzeit mein Praxissemester mache, habe ich weniger Freizeit als sonst und musste einige Projekte etwas zurückstellen. In der Zwischenzeit konnte ich aber dennoch etwas weiter an meinem Würfel feilen.Der verwendete Arduino Mega 2560 besitzt als Herz wie fast jeder Arduino einen ATMega Mikrocontroller, diese können ohne Probleme mit AVR Studio in C programmiert werden, oder man nutzt die Arduino IDE für die Entwicklung. Diese hat die Vorteile von umfangreichen, frei verfügbaren Bibliotheken für alle möglichen Verwendungszwecke. Dies ist in sofern praktisch, da der verbaute LED Treiber, der TLC5940, etwas aufwändiger ist anzusteuern als z.B. ein einfaches LCD Display. Für die korrekte Funktion des TLCs ist es nötig, genau die Ablauf und Timingvorgaben einzuhalten, das nachfolgende Programming FlowChart von TexasInstruments kann dabei eine große Hilfe sein.
Oder man macht es sich einfach und verwendet eine fertige Bibliothek für den Arduino. Ich habe diese hier gewählt tlc5940arduino, für welche es sogar eine Multiplexing Version gibt. Nach ersten Tests mit der Library stellte ich fest, dass es zu nachleuchten der LEDs kommt. Ich verbaute also an jeder Anode einen Pull-Down Widerstand mit 1k Ohm um den Ausschaltstrom durch die LED zu minimieren, dies half tatsächlich etwas. Mein nächster Ansatz war die Interroupt Service Routine (ISR), die die LEDs multiplext, anzupassen. Ich brachte ein einfaches, aber kurzes, Delay zwischen den Umschaltevorgängen an und konnte so, dass Nachleuchten abstellen. Anschließend packte ich das Nachladen der Daten für die TLCs in die Delayphase und verkürzte das Delay noch auf ein Minimum.
Der erste Testlauf am Würfel verlief leider etwas anders als geplant. Im hinteren Bereich der 12 verbauten TLCs kam es zu deutlichen Fehlern, welche ich mir zunächst nicht erklären konnte. Die einzige logische Möglichkeit war, dass das Signal zu stark durch die TLCs verfälscht wird, da die Daten durch alle Bauteile in Serie durchgeschleift werden. Im Datenblatt wurde eine Verzögerung von max. 30ns + eine Rise/Falltime des Ausganges von je 16ns angegeben. Das Standard SPI Signal der Library wurde mit 8 MHz betrieben wurde, was eine Periodendauer von 125ns bedeutet sollte dies eigentlich sich noch im Rahmen bewegen. Da das Clocksignal Aufgrund meiner Verkabelung anderen Verschleifungen ausgesetzt war als das Datensignal verkürzte ich alle Kabel und verbaute die Platine fest im Sockel des Würfels, mit extrem kurzen Kabeln. Und tatsächlich konnte ich das Problem so beseitigen.
Da nun die Grundlegende Funktionalität vorhanden war, konnte ich mit der Programmierung des Würfels beginnen. Ich erstellte eine Testanimation und portierte ein paar Animationen von meinem einfarbigen Würfel. Ein Video über die bisherigen Funktionen werde ich im nächsten Artikel hochladen.
In der Zwischenzeit hat der Würfel auch schon ordentlich Staub angesetzt, aus diesem Grund habe ich schon Plexiglas samt Kleber geordert um ein Gehäuse für diesen zu bauen. Auch wurde er schon Opfer eines Unfalls, als von meinem Bluray Regal ein paar Filme auf ihn abstürzten, doch nun ist er wieder halbwegs gerade und eine kalte Lötstelle habe ich dabei auch noch gefunden 😉
Also im nächsten Artikel gibts Video und Arduino Code für den Nachbau 😉
Hallo Philipp,
Ich habe Dein RGB-Cube Projekt bis hier hin aufmerksam verfolgt und wäre an weiterführenden Informationen interessiert, z.B: Deine Quellen in China, wie geht das ? schickst Du denen einen Schaltplan oder Layout ? in welchem Format ? Oder der TLC5940:
der hat einen Minimumoutput von 5 mA, ich habe eine Matrix von 256 LC-LEDs die eigentlich nur 2 mA brauchen, das soll machbar sein, aber wie ?
Ausserdem bin ich sehr gespannt wie es mit Deinem Cube weitergeht (ich hoffe das Projekt ist noch nicht gestorben !?)
schöne Grüße Michael
Hallo Michael,
ich werde dir bei Gelegenheit eine Mail schreiben, aber um schonmal das nötigste zu beantworten schreibe ich es schnell hier. Die Platinen bestelle ich immer bei http://www.iteadstudio.com da gibts 10 Platinen 5cmx5cm für 9,90$ oder 10 Platinen 10cmx10cm für 24,90$. Es gibt noch mehr Anbieter die etwa gleiche Preise haben wie z.B. http://www.dfrobot.com. Den Schaltplan und das Layout erstelle ich mit Eagle (kostenlose Version auf 10cmx8cm Platinengröße beschränkt) und generiere am Ende die Gerber Daten, die ich dann nach China schicke. Die Gerber Daten sind quasi einzelne Dateien für jede Art von Layer wie Bohrungen, Kupfer Oben, Kupfer Unten Lötstop ect.
Das der TLC5940 einen Minimumoutput hat, wusste ich bisher nicht. Habe gerade kurz im Datenblatt aber auch nichts dazu gefunden. Betreibst du die Matrix im Multiplex, wenn ja könntest du nachsehen ob deine LowCurrent LEDs einen höheren Pulsstrom vertragen, dann wäre das Problem ja quasi schon gelöst.
Nein das Projekt ist noch nicht gestorben, der Würfel steht schon seit einigen Monaten bei mir rum, hat die ein oder andere Animation einprogrammiert bekommen aber nicht wirklich viele. Ich habe einfach vergessen nochmal darüber zu schreiben 😉
Gruß,
Philipp
Hallo,
wirklich erfrischend deine direkte und ausführliche, leicht zu verfolgende Art deine Arbeit zu dokumentieren. Muss doch mal geschrieben werden. Finden sich irgendwo Teile des Quellcodes, um dort die Gedanken nachvollziehen zu können?
🙂
Wolf
Hallo Wolf,
vielen Dank für die Blumen, jetzt wo du es schreibst, habe ich wohl damals tatsächlich vergessen das Ergebnis zu präsentieren 😀
Muss ich heraussuchen den Quellcode und ein Video vom Endergebnis könnte ich auch mal erstellen und einstellen 🙂
Gruß
Philipp