LED Matrix selbstgebastelt...

  • Momentan ist der VA Hype bei LED Walls angekommen und da kam mir die Idee, sowas in einer einfachen Form selbst zu bauen. So gut wie alle DMX Programme (sofern man ein DMX Interface fürn PC verwendet hat man sowas ;) ) haben mitlerweile ein Plugin für die Ansteuerung von LED Matrixen per DMX mit an Bord.


    Bei einer Auslastung eines Universes sind das dann auch 512 Pixel "Schwarz/Weiß" oder 170 Pixel in RGB Vollfarbe. Bei zweiterer Variante sind RGB LEDs (Rainbow LEDs) zu verwenden, da es da besser ausschaut. Ansteuerung ist die komplett idente, egal ob Farbe oder Monocolor.


    Auch wenn die Pixelzahl nach recht wenig klingt - Ziel ist es nicht Videos abzuspielen sondern einfach irgendwelche Muster und Schriften ablaufen zu lassen. Habe das ganze mit Freestyler getestet und die Ausgabegeschwindigkeit ist seit dem neuen Update 3.33 auch schnell genug (falls es das 3.33er noch nicht gibt, ich hab einen Patch auf 3.33 vom Entwickler von FS hier [ACHTUNG! Update von 3.3.2 auf 3.3.3]).


    Ich hab mich auf gemacht und einmal einen uController darauf eingestellt, dass er DMX Daten empfängt und diese per 24 PWM Kanäle mit Linear LED Dimming wieder ausgibt. Vielleicht kann man das noch auf 64 Kanäle per Multiplex optimieren. Diese Module kann man dann Moduladressen geben (Modul 1 = Adr 1 bis 24, Modul 2 = Adr 24 - ....). Das funzt bereits bestens. Somit sind alle LEDs Dimmbar in ca. 64 Schritten (durch das Linear Dimming sind ein paar Werte "verlorengegangen".


    Das ganze noch mit 16MHz Quartz ausprobieren, dann ists auch komplett Flimmerfrei. Viell. noch den Quelltext optimieren, das kann ich im Zuge der 64 PX Version machen.


    Jetzt seid ihr dran: Vorschläge sind willkommen, wir will kann auch hier wieder mitnaschen und selbst nachbauen.


    - Wir haben jetzt 24 Pins, wo die LEDs dran kommen, die zwischen 5V und 0V eine PWM erzeugen. Ob Low Pegel am Pin "LED EIN" bedeutet oder umgekehrt ist noch egal, das kann man umprogrammieren. Es geht darum eine Stromquelle zu bauen. Mir liegt hier irgendwo im Sinn, mehrere LEDs als ein Bildpunkt zu verwenden, da das ganze dann hinter DJs oder dergleichen Einsatz finden soll und man so einiges an Pixeln braucht. Vielleicht auch irgendwie an der Stromquelle den Strom nochmals Global regelbar, um die Helligkeit direkt an den Modulen einzustellen (1 Mastermodul, die anderen sind Slave Module). DMX Wert 255 ist dann einfach die maximale eingestellte Helligkeit. Hat wer eine Schaltung für sowas, die recht Simpel ist, da wir die ja 512x aufbauen müssen. Mir schwebt da momentan eine normale Transistorstromquelle vor, nur diese ist bislang noch nicht per Spannung Stromregelbar.


    - Wie baut man das eigentliche Array am besten auf, dass das Gewicht in Grenzen bleibt, das Teil nicht dauernd kaputt geht und man die Module aneinanderreihen kann. Ich tendiere hier an ein Alu Gerüst mit "U" Profilen, aber vielleicht gibts hierfür andere Vorschläge, die man auch DIY selbstbauen kann. Vorhänge und dergleichen sind hier unpassend, da man diese nicht verarbeiten kann.


    Ich strebe eine größe von 512 Pixel auf 2x6 Meter oder sowas an. Das macht dann 16cm Pixelabstand, bei 9 LEDs per Pixel sinds dann 5,5cm zwischen den LEDs, also brauchbar. Ein Modul auf die Größe 1x1 Meter oder 1x 0,5m bringen wäre das Ziel. Was meint ihr?


    Um zur Preisproblematik zu kommen: Hardware ohne LEDs und Stromquellen um 10 Euro pro Modul, 1000 LEDs in Weiß bekommt man weit unter 100 Euro bei eBay, Multicolor etwas teurer.

  • Zitat

    Bei einer Auslastung eines Universes sind das dann auch 512 Pixel "Schwarz/Weiß"


    Da Sollte eigentlich mehr gehen. 256 Kanäle nur um eine Led zu dimmen? Da Reichen 16 Helligkeitsstufen am Anfang mehr als aus, also kann man schonmal 2 Leds auf einen DMX-Kanal packen. Wenn man die Stufen auf 4 Reduziert was für einfache Laufbildchen immer noch mehr als reicht passen 4 Leds auf einen kanal, bei An/Aus sogar 8, entsprechend den 8 Bit des DMX-Wertes. Ganz davon abgesehen das es Irrsinn ist für jede einzelne LED einen Dimmerkanal zu schalten.
    Für RGB-Pixel sind das immerhin bei 4 Helligkeitsstufen der einzelnen Farben ein Pixel pro Kanal.


    Eine SW-Matrix kann also mit einem Universe 2^13 Pixel ansteuern. das sind 2^6 * 2^7 also 64*128 Pixel. Da geht schon was.

  • Ein DMX Kanal dimmt eine LED, macht bei einem Universe 512 LEDs. Bei RGB braucht "1 Pixel" dann halt 3 LEDs, somit 3 Kanäle.
    Wieso mehrere LEDs auf einen Kanal hängen? Sicher ginge das, aber ich will sie doch alle unabhängig voneinander steuern können. Außerdem gibts genug Software, die das ansteuern kann, die Arbeitet pro Kanal mit einer LED, wieso also das Rad neu erfinden.


    DMX Control, Freestyler oder auch Madrix (kein Freeware) können solche LED Matrixen ansteuern.


    Um zum eigentlichen Projekt zurückzukommen. Neben ein paar kleinen Timinggeschichten läuft das ganze flimmerfrei @8MHz, momentan ohne Linear Dimming sondern nur normales PWM Dimming. Das Problem liegt momentan noch in der Zeilenansteuerung, da ich noch genauer schauen muss, wann die Zeile gesteuert werden muss und wann die Spalte, dass es zu keinen Überlappungen kommt.


    Hat mich gestern etwas aufgeregt, da ein ROL oder ROR befehl nicht so wirklich das Byte "00000001" nach links oder rechts verschiebt sondern über umwege mit dem Carryflag verbindet. Habs jetzt anders gelöst und es scheint zu funzen. Auf deutsch nach links schieben, wenn im Register (=Variable) dann 00000000 drin steht einfach dieses mit "00000001" neu schreiben und von vorne gehts weiter...
    Diese Werte in den Registern sind einmal die Ansteuerung der Zeilen MOSFETS und bei den Spalten wird dieser Wert logisch OR mit einem zu beginn leeren Regsiter verknüpft, über das die PWM erzeugt wird.
    Klappt, hat wenig Quelltextzeilen (was somit mehr Geschwindiegkeit bedeutet) und düdelt dahin wie eine 1. Bis 4 in der Nacht hats dazugedauert ;)


    Werde dann mal ein 8x8 LED Array da anschließen und schauen, wo es raucht ^^. Wenns klappt noch das Linear Dimming einbauen und dann ists mehr oder weniger fertig.


    Was ich habe:
    - DMX Adressierung 1 - 512
    - 64 Kanäle mit 8x8 PWM Multiplex (255 Step)
    - DMX "ist da" LED


    was noch kommt:
    - Linear Dimming (für optisches lineares Dimmen)
    - 16MHz statt 8 MHz Quartz (dann gehts noch schneller und damit noch flimmerfreier)
    - LED Abschaltung bei nicht anliegendem DMX Signal (wenn das DMX Signal weg ist sollen alle LEDs aus sein)

  • Zitat

    Wieso mehrere LEDs auf einen Kanal hängen? Sicher ginge das, aber ich will sie doch alle unabhängig voneinander steuern können. Außerdem gibts genug Software, die das ansteuern kann, die Arbeitet pro Kanal mit einer LED, wieso also das Rad neu erfinden.


    Eigentlich doch recht einfach: So viele LEDs auf einem Universe wie irgendwie Möglich.
    Ein DMX-Kanal Hat 8 Bit. Wenn man jedes Bit dazu verwendet eine Weiße LED zu steuern, hat man pro kanal 8 Leds. Das ist gigantisch viel mehr als eine, Da ist schn ordentliche Laufschrift auf einem DMX-Universe möglich.


    Eine Idee wäre auch noch die Daten in 2 Takten zu übertragen, ala Fernsehen, also Interlaced... das erste Bit gibt dann an um welchen Takt es sich Handelt, die restlichen 7 sind für die LEDs da, wären wir schon bei 14 LEDs pro Kanal... aber ich fürchte ich erfinde hier gerade das rad neu und sollte erstmal ne Runde lesen ;)


    [Irgendwas tief in mir sagt mir das ich grad gequirlte Kacke von mir gebe, wenn man das weiter treiben würde könnte man 128 LEDs pro Kanal Steuern.... 7 bit für die Adresse, 1 bit für An/Aus. Allerdings dann mit Einbußen an der Aktualisierungsrate der einzelnen LEDs. Wenn ich mich nicht irre wird das DMX-Packet 466 mal pro Sekunde durch das Geschickt(Wikipedia und ein Taschenrechner... ), was auf dem Display eine Mögliche Refreshrate von ca 3,6 Hz ermöglicht.
    Konkret:
    Erstes DMX-Packet kommt an, Display-Controller merkt sich für welche LEDs die werte da sind, wenn nach 128 Paketen alle da sind, werden die Werte ausgegeben und der Zwischenspeicher gesäubert. Danach das ganze nochmal.
    Mein oberflächliches Bewusstsein wäre sehr erfreut wenn mich jemand bestätigen würde ;) ]



    Du machst mir gehörige Lust mir auch so ein Teil zu bauen und mich mal damit auseinander zu setzten...

  • Version 1 nun auf 192 LED Kanäle erweitert, somit ist ein 8x8 RGB Cluster realisierbar.


    Dieses 8x8 Array soll nun auf Elemente mit einer größe von rund 1x1Meter. Ein Pixel kann auch aus mehreren LEDs bestehen, soweit hab ich mich noch nicht festgelegt. Hat jemand vorschläge oder Ideen, wie man das ganze am besten baulich verarbeiten kann?


    Als weitere Erweiterung: kennt jemand eine halbwegs "hobbytaugliche" Lösung, Video FPAS, VGA oder gar DVI Signale in einen uController reinzubringen?

  • Sehr interessant was du da machst. *händeklatsch*


    Zitat

    kennt jemand eine halbwegs "hobbytaugliche" Lösung, Video FPAS, VGA oder gar DVI Signale in einen uController reinzubringen?


    Wie wäre es mit einem Beagleboard? http://beagleboard.org/

  • Hey Mike, coole Sache, sieht schon mal stark aus.


    Was meinst Du eigentlich mit "linearem Dimmen"? Etwa, dass Du mit dem Diodenstrom die Helligkeit einstellen willst? Da denke ich aber, dass ein PWM-Signal besser geeignet ist (wegen Verlustleistung und so...)


    Gruß, Jürgen :wink:

    Lieber mit Röhre geampt, als in Selbige geschaut!

  • Mit linearem Dimmen meine ich eine PWM Wertabänderung, um den Dimmverlauf zu ändern. Dimmt man eine LED direkt mit dem DMX Signal von 0 auf 100%, so wird sie schnell hell und bleibt dann sozusagen hell. Formt man dies in einen exponentiellen Verlauf um, so ergibt sich ein Lineares Dimmen - bei DMX 50% ist auch die LED optisch 50% hell, nicht 90% oder mehr.


    Düftle gerade an einer "schaltbaren" Stromquelle. Hab da schon meine Ideen, das recht Simpel zu halten und dennoch per uC zu schalten (Zeilenschaltung). Die Kathoden werden ganz normal über einen Mosfet geschalten.


    Zitat

    Habe ich da im Hintergrund sonen 3D Cube gesehen?


    Ja, hab ich aus dem Internet nachgebaut. Hat mir, wo ich den gesehen hab, Hunger darauf gemacht, sowas zu bauen. Funzt, sieht auch garned so übel aus, nur nochmals mach ich das nicht, das ist ne fu** arbeit!


    Zitat

    Hätte einen Tipp für dich wegen den Stromquellen bzw. Stromsenken:
    http://www.austriamicrosystems.com/eng/ ... ICs/AS3691


    Danke für den Tipp, werds mir mal Speichern, falls meine Idee nicht tut was ich will...


    Heute war ich am Teslaspulenbauen, morgen gehts nach D zu einem Forenmember hier ein DMX Pult holen und am Mittwoch hab ich dann eventuell Zeit mir das Thema mit den Stromquellen genauer anzuschauen und einen Prototyp zu bauen. Ich werde berichten, wenns was neues gibt. Vielleicht auch ein paar TechDocs für Euch, mitlesen ist das eine, vielleicht haben ein paar hier Hunger bekommen und haben Lust auch mitzubasteln^^.

    Einmal editiert, zuletzt von Mike J. ()

  • Zitat von "Mike J."

    Mit linearem Dimmen meine ich eine PWM Wertabänderung, um den Dimmverlauf zu ändern. Dimmt man eine LED direkt mit dem DMX Signal von 0 auf 100%, so wird sie schnell hell und bleibt dann sozusagen hell. Formt man dies in einen exponentiellen Verlauf um, so ergibt sich ein Lineares Dimmen - bei DMX 50% ist auch die LED optisch 50% hell, nicht 90% oder mehr.


    Düftle gerade an einer "schaltbaren" Stromquelle. Hab da schon meine Ideen, das recht Simpel zu halten und dennoch per uC zu schalten (Zeilenschaltung). Die Kathoden werden ganz normal über einen Mosfet geschalten.

    Klar soweit, gut gedacht, wollte noch anmerken, dass Du eventuell die LEDs selektieren musst, da wohl nicht alle bei gleichen Parametern gleich hell sind...


    Gruß, Jürgen :wink:

    Lieber mit Röhre geampt, als in Selbige geschaut!

  • Zitat

    wollte noch anmerken, dass Du eventuell die LEDs selektieren musst, da wohl nicht alle bei gleichen Parametern gleich hell sind...


    Du auch gut mitgedacht. Zur Zeit habe ich nicht so viel Geld, dass ich da anfangen kann Kiloweise LEDs zu kaufen und dann selektieren.


    Werde mir auch gedanken über einen physikalischen Verbau machen, dass das ganze dann auch zum Einsatz kommen kann.
    Nimmt man das 8x8er Cluster her und bläst es auf 1x1 Meter auf, dann wird man sicher 9 LEDs pro LED Dimmerkanal hernehmen müssen, dann kommt man auf einen LED Abstand von ca. 4cm. Das sind dann im Singlecolor Mode 576 LEDs, also nicht unterschätzen.


    Hab mir bei Martin was abgekukt und das gefällt mir soweit gut. Sprich ich mach einen Rahmen aus "L" Profilen mit einem Maß von 1x1 Meter. Oben kommen dann Sub D-9 Buchsen fix dran im Abstand von 4 cm ("Sub"pixelabstand). Die ganzen LEDs kommen dann in 1m lange U Profile im Abstand von 4 cm. Dieses Profil hat dann auch oben wieder einen SUB D-9 (diesmal Stecker). Dieser beeinhaltet die 8 Multiplexleitungen sowie einen Linesteuerkanal. Diese U Profile können dann oben und unten per M-Schraube an das Grundgerüst geschraubt werden und bei Bedarf getauscht werden, da sie alle komplett ident sind. Diese U Profile könnte man dann mit irgendeinem durchsichtigen Harz vergießen oder mit einem Milchglasplexischeibenstreifen bedecken.


    Brainstormt einmal mit, wer lust dazu hat.

  • Aha, so ähnlich wie bei "Sicherheits-Lichtgittern" - also Lichtschranken für große Flächen wie Aufzugstüren, da nimmt man auch U-Profile mit drin verteilten LEDs...
    ...das Ganze dann vor ne schwarze Rückwand und ne Rauchglasscheibe, oder getönte Folie davor - wird bestimmt hübsch :wink:


    Gruß, Jürgen

    Lieber mit Röhre geampt, als in Selbige geschaut!

  • So, hab mir mal genauere Gedanken über das LED Array und die geplanten Strips gemacht.


    Ich habe somit vor, 8 LED Kanäle untereinander zu bauen. Pro LED Kanal 3 LEDs. Dabei werden die LEDs von oben nach unten in der Multiplexfrequenz gegen Masse gezogen während dem am "Datenkanal" der Strom zum Leuchten anliegt.


    Somit gehen in ein Stripe die 8 "gegen Masse ziehenden" Multiplexleitungen sowie bei RGB 3 Datenkanalleitungen (1xRot, 1xGrün, 1xBlau) rein.


    Hier das ganze schematisch dargestellt:



    Ein Stripe in CAD von unten gesehen:


    Die Stripe Platine (Ausschnitt 3 LEDs):


    Hier noch eine Version des Schaltplans

    http://mediaportal.jmibk.ath.c…l/lldv2ledschaltstufe.jpg


    Die kleinen Problemchen:
    Da die Platine nur 17mm Breit sein darf, ist es recht schwer, hier diese 11 Leiterbahnen unterzubringen (8x Linemultiplex und 3x Daten). Jetzt würde es auf der Hand liegen, 9 LEDs parallel (3 LEDs pro Stripe und 3 Stripes parallel bilden ein Pixel) zu schalten und diese dann an eine Transistorstromquelle zu hängen. Dies ohne Serienwiderstand zu machen ist wahrscheinlich nicht die beste Idee oder meint ihr das geht?


    In der CAD Zeichnung ist die Platine sichtbar, die da mehr oder weniger in dem U Profil drin schwebt. Hat jemand eine Idee, wie man aus dem Schwebezustand einen festen machen kann ^^.


    Das mit den einzelnen LEDs hab ich mir bei Martin abgeschaut, die haben auch sowas im Angebot - mit einzelnen LEDs eben. Hab mich etwas umgeschaut wegen Rainbow LEDs, von mir aus auch SMD und etwas heller. Habe da jedoch nur so 300/500/1000mcd Dinger gefunden mit den Außenmaßen von 2,5x3,5mm (eher ein Witz). Weiß jemand eine Quelle für die Superhellen Rainbow LEDs die auch in den ganzen LED Movingheads verbaut sind? Oder meint ihr, dass normale 5mm Rainbow LEDs besser sind? Diese würde man in eBay um einen Spotpreis bekommen.


    Auf dem Schematikplan ist rechts oben das Schaltbild der Transistorstromquelle mit Abschaltung gezeichnet. Gibt der Controller 5V aus, so ist die LED aus (da die Basis des Stromquellentransistors so gegen Masse gezogen wird. Das ist nur eine Grundidee, meint ihr das funzt so (werds auf jeden Fall ausprobieren, aber vielleicht hat wer einen anderen Vorschlag).


    Wenn wer eine Layoutidee hat, wie man die LEDs zu dritt in Serie schalten kann, sodass es mit dem Layout nicht knapp wird mit der Breite, ist die natürlich herzlich Willkommen.

  • So, habe heute einmal die Stromquelle gebaut um zu schauen ob die auch funzt (siehe im Schaltplan vorheriger Thread).
    Sie tut es auch. Hab das ganze mit weißen LEDs ausprobiert und dabei gemerkt, dass die LEDs teilweise auch ganz wenig leuchten, auch wenn kein Signal für sie anliegt.




    Ich hab die Stromquelle mit LEDs an LED Kanal 1 angeschlossen (Kathode war dabei einfach am Controller, wie bei allen vorhergehenden Tests auch). Zieht man Kanal 1 nun hoch, so leuchtet die LED, zieht man den Kanal runter, ist sie aus. Zieht man nun mehrere Kanäle (irgendwelche zwischen Kanal 2 und Kanal 192) hoch, so kann sein, dass die Kanal 1 LED ganz leicht leuchtet. Aber nur, wenn die Stromquelle im Spiel ist.


    Schließt man die LED ohne Stromquelle an den Spaltentreiber (siehe ebenfalls Schaltplan) an, so funzt alles und die LED glimmt auch nicht, wenn andere Kanäle hochgezogen werden. Hier die gemessenen Timings an den LEDs:



    zur Funktion:
    Die Diagramme zeigen hier das Signal, das an den Kathoden der Dioden anliegt. Leuchtet die LED so ist das Signal LOW Pegel. Innerhalb der "LOW Zeit" werden in einer Schleife die nächsten 24 Werte der nächsten Zeile aus dem RAM gelesen, mit dem PWM Counter verglichen und je nachdem ob der gelesene Wert größer als der Counter ist eine "1" in ein Bit eines Registers geschrieben. Anderfalls steht eine "0" drin. Solche Register gibt es 3 (somit 24 neue Werte).


    Dann werden alle LEDs ausgeschaltet und alle 3 Register parallel in die 74HC573 geschrieben (und dabei den Enable Anschluss ganz kurz auf "1" gehoben).
    An dieser Stelle wird der PWM Zähler um 4 erhöht (im Timing Diagramm sinds +16), welcher von 0 bis 255 zählt.


    Nachher wird der PIN (Kathode) der entsprechenden Zeile auf Masse gezogen, somit leuchten alle LEDs, bei denen eine "1" im 74HC573 steht. Jetzt werden die nächsten 24 RAM Werte gelesen...


    Das alles läuft in der Hauptschleife ab, während dem in einem UNterprogramm der DMX Empfang stattfindet (das heißt somanche Timings können auch länger sein). Das Problem tritt aber auch auf, wenn kein DMX Empfang stattfindet (man das DMX Kabel absteckt). Erhöht man die Totzeit (also die Zeit, wo alle LED Massen "abgeschaltet" sind), wirds besser mit dem glimmen, weg ists aber nicht.
    Kann es sein, dass die Stomquelle für den Zweck zu langsam ist? Ohne Stromquelle funzt alles bestens (siehe Videos eine Seite davor). Betrieben wurde alles nur mit 8MHz (da erst die nächsten Tage die 16MHz Quartze vom großen C kommen.


    Hat jemand einen Tipp, woran das liegen kann?


    Nachtrag: Mir ist aufgefallen, dass der Strom durch die LED so einen Verlauf hat (hier im Diagramm Zeitlich sichtbar mit 3 Zeilensignalen und dem einen Spaltensignal mit Controllerausgang und Stromquellenausgangsstrom:



    Hier fällt auf, dass die Abfallszeit der Stromquelle zu groß ist und dass das eventuell auch damit zu tun haben kann, dass die LED glimmt.

  • Hier noch ein Teil der Software, vielleicht gibts da auch das eine oder andere zu verbessern:


    Vor der MAIN Routine:

    Code
    LDI		R16,0b00000001		          ;PWM MULTIPLEX
    MOV		PWM_LINE,R16                             ;Diese beiden Variablen werden logisch verschoben
    MOV		PWM_COLUMN,R16                        ;somit ist immer nur eine Stelle "1"
    LDI		PWM_MULTICOLUMN,0b00000010     ;Wert für die Latches Enable (D0 und D1 ist UART)


    Hauptroutine


    Jetzt fehlt noch die Laderoutine der Daten aus dem Ram:


    Wer Verbesserungsvorschläge hat bitte gerne. Die Werte kommen über eine DMX Routine in den RAM rein, die per Interrupt läuft.#


    Der Befehl LSL macht aus dem Wert 0b00000100 den Wert 0b00001000, sprich schiebt alle Bits eins nach links. Wenn man LSL nun auf 0b10000000 anwendet, dann steht leider nicht 0b00000001 im Register, sondern 0b00000000. Wenn es eine Möglichkeit geben würde, hier von links nach rechts zu schieben könnte man die Performance des Programms um einiges erhöhen.


    Ich habe versucht alles zu kommentieren, ich hoffe diejenigen, die sich als Helfend erweisen wollen, verstehen mein Programm so halbwegs. Sonnst einfach Fragen!




    Code
    CPI	PWM_COLUMN,0b10000000	   ;PWM_COLUMN mit 0b10000000 vergleichen 
    	BRNE NOT_OVER
    	LDI	PWM_COLUMN,0x01              ;wenns ist mit 0b00000001 überschreiben
    	RJMP COLUMN_EXIT
    	NOT_OVER:
    	LSL PWM_COLUMN		   ;PWM_COLUMN nach links schieben, wenn nicht auf 0b00000001 gesetzt wurde
    	RJMP 	COLUMN 	                ;wieder rauf zur RAM Leseroutine, wenn nicht auf 0b0000001 gesetzt wurde (sprich 8 Werte aus dem Ram gelesen wurden)
    	COLUMN_EXIT:


    ist zu vergleichen mit dem in C++ (zum einfacheren Verständis was ich da mach):

    Code
    if (PWMCOLUMN==0b10000000)
       {
       PWM_COLUMN=0b00000001;
       }
    else
      {
       LSL (PWM_COLUMN) ;also alles was drin steht um eine Stelle nach links schieben
       RJMP COLUMN         ;wieder zum Punkt "COLUMN" springen
       }


    Hier gibts noch das HEX File fürn ATMEGA8515-16, wer das gleich ausprobieren möchte. Anschluss wie im Schaltplan oben. Die Fusebits für "externen Oszillator" setzen und 8MHz Quartz verwenden. Weiters JTAG an PortC AUSSCHALTEN und die Brownoutdetection AUSSCHALTEN, falls wenn alle LEDs ein sind das Zeug anfängt zu Stroben.


    Zu Testzwecken können alle Anoden der LEDs direkt ohne Widerstände an die Latchausgänge und die Kathoden direkt an den Controllerboard gehängt werden. Sicher nicht das beste für die Elektronik aber es hat bei mir mal mehrere Tage durchgehend hingehauen, da die Chips ohnehin nicht mehr als 10mA pro Ausgang hergeben.