Forum: Projekte & Code LED Matrix Display Photonenbanner 96x24 Atmel


von Stefan Wendt (Gast)


Lesenswert?

Der Bau eines LED Matrix Displays fällt eindeutig unter die Kategorie 
"muss man mal gemacht haben".

Das Photonenbanner fing mit eine paar LEDs an, wurde dann aber
doch größer als ursprünglich geplant.

- 96 Spalten, 24 Zeilen
- 2304 LEDs
- ATMega 644 @ 20Mhz
- 2MByte extra SPI Flash Speicher
- C Programm mit diversen Echtzeiteffekten
- C# Programm zur Steuerung über SER
- PHP web-frontend zum Texten und Pixeln

Vieleicht findet hier jemand ein paar interessante Ideen:

Projektbeschreibung:
http://www.crafted.de/photonenbanner.php

Video vom Bau:
http://www.youtube.com/watch?v=LWY_jnurgo0

Video 2304 Echtzeitdemo:
http://www.youtube.com/watch?v=XgEYBqEIDEY

von Lehrmann M. (ubimbo)


Lesenswert?

Stefan Wendt schrieb:
> Der Bau eines LED Matrix Displays fällt eindeutig unter die Kategorie
> "muss man mal gemacht haben".

Nicht schlecht ...

Stefan Wendt schrieb:
> Video 2304 Echtzeitdemo:
> http://www.youtube.com/watch?v=XgEYBqEIDEY

Darf ich fragen wie du die Animationen gespeichert hast? Sind das 
Einzelbilder die du vom PC zum MEGA überträgst oder sind das Shift- bzw. 
relative-Ausdrücke auf einem Array?

Im Speziellen würde mich die Generation der Animation bei 1:23 
interessieren.

Einige Anregungen für spätere Projekte möchte ich dir dennoch mit auf 
den Weg geben:

1. Viel Lötzinn != gut 
http://www.crafted.de/tutorials/photonenbanner/SpaltenFETs.JPG das ist 
schon hart =)

2. Gerade wenn PWM im Spiel ist - Lochraster ist nichts für hohe 
Frequenzen. Das Ding entwickelt sich zur unschönen EMV Schleuder. Wenn 
schon keine PCB, dann evtl. Streifenraster und hin und wieder eine Bahn 
auf GND legen. Nur so als Denkanstoß.

Trotzdem ein gelungenes Projekt ...

von Stefan Wendt (Gast)


Lesenswert?

>
> Darf ich fragen wie du die Animationen gespeichert hast? Sind das
> Einzelbilder die du vom PC zum MEGA überträgst oder sind das Shift- bzw.
> relative-Ausdrücke auf einem Array?

Das Display läuft ohne PC. Der PC kommt nur ins Spiel um neue Bilder
zu programmieren oder um Daten aus dem Netz ranzuhohlen. Die 
Echtzeitdemo enthält bis auf die Zeichen und "the real party is outside" 
keine Bilder oder Animationen. Das wird alles in Echtzeit vom ATMega644 
berechnet. Dabei werden 2 Arrays (framebuffer) genutzt. Der eine wird 
angezeigt, der andere neu berechnet.

Die Animationen, die im Howto Video zu sehen sind, wurden auf dem PC 
gepixelt, und in eine raw Datei konvertiert. Teilweise liegen die 
Animationen in dem externen Flashspeicher. Über SER und mit der Hilfe 
des MC läßt sich der externe Speicher im laufenden Betrieb 
programmieren. Teilweise sind die Bilder aber auch direkt im ProgMem 
hardcoded.

>
> Im Speziellen würde mich die Generation der Animation bei 1:23
> interessieren.

Die "Plasmabalken"  werden über PWM gemacht. Für jede der 16 Spalten 
läßt sich über einen 8-Bit Timer ein eigenes PWM Signal erzeugen. Das 
gleiche PWM Signal gilt aber immer für die entsprechende Spalte aller 6 
Pannels. Das sieht man in diesem Effekt aber nicht, da die Sinuswelle 
genau so eingestellt ist, das Spalte=m+n*16 (m=0,..,15 - n=0,...,5) 
sowieso die gleiche Helligkeit haben.

Der Photonenbanner ist aber eigentlich nicht für PWM gebaut. Dafür 
braucht man eine ganz andere Schaltung.

>
> Einige Anregungen für spätere Projekte möchte ich dir dennoch mit auf
> den Weg geben:
>
> 1. Viel Lötzinn != gut
> http://www.crafted.de/tutorials/photonenbanner/Spa... das ist
> schon hart =)

Wir haben die Matrix aller 6 Pannels an einem einzigen Tag gelötet, und 
das mit Mitgliedern, die noch nie einen Lötkolben in der Hand gehalten 
haben. Bis auf 2-3 Lötstellen ist bis jetzt - nach mehreren Transporten 
- alles heile geblieben.

von Vlad T. (vlad_tepesch)


Lesenswert?

Stefan Wendt schrieb:
> Das Photonenbanner fing mit eine paar LEDs an, wurde dann aber
> doch größer als ursprünglich geplant.

ist das das Ding von der Revision aus der Real Wild Compo?

von Thorsten S. (Gast)


Lesenswert?

Hi,

sehr interessant:

ich würde gern wissen wie man das softwaretechnisch aufbaut. Mein 
Vorgehen besteht meist darin die LED Matrix im Prozessor abzubilden, 
z.B. je ein bit für eine LED. Wenn ich nun an die fliegenden Sterne 
denke, wie sieht da die Schnittstelle aus (Softwareschnittstelle)? Lasst 
ihr einen Punkt auf einer Geraden wandern? Wie macht Ihr die Drehung von 
Bildern, gibt es eine Bild-dreh-funktion um den Mittelpunkt der Matrix?

Wie funktionieren die größer-kleiner Effekte - ist ein Buchstábe mit 
maximal möglicher Auflösung abgespeichert und wird dann linear kleiner 
gerechnet und das dann auch noch in Verbindung mit dem dreh Effekt?

Wie schafft man es bei so viel rechnerei das das Bild nicht ruckelt bei 
20MHz? Ihr habt nur "pasive" also nicht speichernde Elemente - der 
Prozessor muss doch ständig das Bild am "leben" erhalten...

T.

von Tom M. (tomm) Benutzerseite


Lesenswert?

Kompliment, tolle Animationen!

Stefan Wendt schrieb:
> Die Animationen, die im Howto Video zu sehen sind, wurden auf dem PC
> gepixelt, und in eine raw Datei konvertiert. Teilweise liegen die
> Animationen in dem externen Flashspeicher.

Womit gepixelt, womit ins passende Format gebracht? PCX oder XPM? ;)

Ist die Animation "hardcoded", oder speicherst du eine Art Drehbuch, ne 
Bitmap hier, ne Bitmap da, dazwischen Anweisungen zu Effekten (Zoom, 
Drehen, Überblenden usw.)? Erzähl mal! :)

von Thorsten S. (whitejack)


Lesenswert?

hallo?

von Stefan W. (trolli02)


Lesenswert?

>
> ich würde gern wissen wie man das softwaretechnisch aufbaut. Mein
> Vorgehen besteht meist darin die LED Matrix im Prozessor abzubilden,
> z.B. je ein bit für eine LED.

Ja. Das ist hier auch der Fall. Jede LED wird im FrameBuffer durch ein 
Bit angesprochen.

> Wenn ich nun an die fliegenden Sterne
> denke, wie sieht da die Schnittstelle aus (Softwareschnittstelle)? Lasst
> ihr einen Punkt auf einer Geraden wandern?

Die Sterne sind als Polarkoordinaten im RAM. Jeweils zwei Bytes für 
einen Stern. Erst der Winkel (Wert 0-255), dann der Z-Wert (Wert 0-255). 
Es handelt sich um eine Array aus Zufallswerten, die am Anfang aus dem 
ProgMem gelesen werden. Die Werte werden jeweils mit einem zPlus und 
winkelPlus addiert um die Sterne zu bewegen. Dann werden die Daten in 
eine X und Y Koordinate umgrechnet (siehe 
http://de.wikipedia.org/wiki/Polarkoordinaten ). Dabei geht zSumme als 
zusätzlicher Faktor mit in die Berechnung ein, um die Sterne, die sich 
"weiter Hinten" befinden, dichter ans Zentrum zu setzen.

xStrich = (x * zSumme) / 256

Ein großer Teil der Sterne wird nicht angezeigt, da sie sich ausserhalb 
des Sichtfensters befinden. Der eigentlich Trick ist es die 
Wertebereiche so zu wählen, das es beim Rechnen nicht zum Überlauf 
kommt. Oder aber das der Überlauf gezielt genutzt wird. Viele 
Berechnungen benötigen 16Bit Werte, aber man sollte so viel wie möglich 
mit 8Bit Werten machen.

> Wie macht Ihr die Drehung von
> Bildern, gibt es eine Bild-dreh-funktion um den Mittelpunkt der Matrix?
>

Vektorrotation ( http://de.wikipedia.org/wiki/Drehmatrix ). Es werden 3 
Vektoren im 2D Raum definiert. A=LinkeObereEcke, B=RechteObereEcke, 
C=LinkeUntereEcke. Diese 3 Punkte können über die Drehmatix in einen
anderen Raum umgerechnet werden. Alle Punkte der 2D Fläche lassen sich 
über diese 3 Punkte berechnen.

AB=A-B
deltaAB=AB/anzahlXPunkte;
AC=A-C
deltaAC=AC/anzahlYPunkte;

P=A + x*deltaAB + y*deltaAC

Durch 2 verschachtelte Schleifen kann die Multiplikation umgangen 
werden.

> Wie funktionieren die größer-kleiner Effekte - ist ein Buchstábe mit
> maximal möglicher Auflösung abgespeichert und wird dann linear kleiner
> gerechnet und das dann auch noch in Verbindung mit dem dreh Effekt?
>

Die Zoomeffekte benutzen GFX, die in etwa so groß sind wie die 
physikalische Auflösung des Photonenbanner. Mit der ABC 3Punkt Methode 
kann auch das Zooming betrieben werden, indem ein Z Wert als 
zusätzlicher Faktor benutzt wird.

> Wie schafft man es bei so viel rechnerei das das Bild nicht ruckelt bei
> 20MHz? Ihr habt nur "pasive" also nicht speichernde Elemente - der
> Prozessor muss doch ständig das Bild am "leben" erhalten...
>

Das Videomaterial läuft nur mit ca. 25 Hz. Der Photonenbanner läuft mit 
150 Hz. Dadurch ist ein sehr großer Teil der Spritzigkeit beim Abfilmen 
auf der Strecke geblieben. In Wirklichkeit sieht die 2304 Demo sehr viel 
flüssiger aus.

Die Latches halten das Signal und sind notwendig um die große Anzahl von 
LEDs anzusteuern. Der yC arbeitet zwar "immer mal wieder" um die Latches 
mit Daten zu versorgen. 288Bytes * 150Hz ist nicht wirklich viel bei 
20Mhz. Da bleibt noch genügent Platz für die Echtzeiteffekte.

von Stefan W. (trolli02)


Lesenswert?

Tom M. schrieb:
> Kompliment, tolle Animationen!
>
> Stefan Wendt schrieb:
>> Die Animationen, die im Howto Video zu sehen sind, wurden auf dem PC
>> gepixelt, und in eine raw Datei konvertiert. Teilweise liegen die
>> Animationen in dem externen Flashspeicher.
>
> Womit gepixelt, womit ins passende Format gebracht? PCX oder XPM? ;)

Hauptsächlich mit GIMP als PNG oder GIF gespeichert. Dann mit einem 
kleinen selbstgebauten PHP Skript in echtes RAW konvertiert. Im 
allgemeinen werden Bilder Zeile für Zeile gespeichert. Das 
Photonenbanner arbeitet aber alles Spalte für Spalte ab. Deshalb ist 
auch der Speicher so organisiert.  Die ursprügliche Bitmap muss also 
noch rotiert und gespiegelt werden. All das macht mein kleines 
Konvertierungsscript. PHP als Kommandozeileninterpreter macht es einem 
sehr einfach verschiedene Bildertypen zu laden und zu manipulieren.

>
> Ist die Animation "hardcoded", oder speicherst du eine Art Drehbuch, ne
> Bitmap hier, ne Bitmap da, dazwischen Anweisungen zu Effekten (Zoom,
> Drehen, Überblenden usw.)? Erzähl mal! :)

In der 2304 Demo sind überhaupt keine Animationen, dort wird alles in 
Echtzeit berechnet. Die grobe Steuerung erfolgt durch eine 
Storyboard(Drehbuch/Playlist). Diese Bytefolge definiert welcher Effekt 
zu welcher Zeit abläuft. Verzögerungen und Überblendungen werden 
Teilweise aus dem Storyboard gesteuert.

Die Animationen (also alles was per Hand gepixelt wurde) sind Bild für 
Bild im externen Flashspeicher abgelegt. Die Bilder (einige 100 pro 
Animation) werden einfach in den FrameBuffer kopiert und dann ein wird 
für einige msec gewartet.

Es stehen ca. 50 verschiedene Befehle zur Verfügung, die vom Storyboard 
aus getriggert werden können. Den Befehlen follgen teilweise weitere 
Argumente, die z.B. ansagen wie lange gewartet werden soll, wie schnell 
eine Animation abgespielt werden soll, oder welches Logo in den 
FrameBuffer geladen werden soll.

Die Ausführung des Storyboards kann durch das C# Kontrollprogramm 
angehalten werden. Das Storyboard kann dann neu in den yC geschrieben 
werden. Dadurch kann das Photonnenbanner auf Veranstaltungen zur 
Laufzeit angepasst werden, ohne den Atmel Progammieradapter.

von (erstaunter) (Gast)


Lesenswert?

Der Wahnsinn! Da hat jemand Ahnung von Mathe und kann programmieren! Wie 
viele Stunden stecken in der Entwicklung von diesem Ding? Wie viele LOCs 
hat das Ganze? Open Source?

Schade nur dass einige LEDs etwas dunkler sind. (oder liegt das an der 
Aufnahme?)

Ach so, die Bilder auf der Projektseite könnten etwas verkleinert 
werden, sinnvoll wäre es die volle Größe wenn überhaupt nochmal extra zu 
verlinken. Spart Traffic und Ladezeit.

von Vlad T. (vlad_tepesch)


Lesenswert?

(erstaunter) schrieb:
> Der Wahnsinn! Da hat jemand Ahnung von Mathe und kann programmieren!
Das gehört bei den meisten Anwendungen irgendwie zusammen, oder?

> Wie
> viele Stunden stecken in der Entwicklung von diesem Ding? Wie viele LOCs
> hat das Ganze? Open Source?

Das storyboardzeug hört sich sehr durchdacht an.
Ist das modular und hardwareunabhängig gebaut?


(erstaunter) schrieb:
> Schade nur dass einige LEDs etwas dunkler sind. (oder liegt das an der
> Aufnahme?)
Ist mir auch aufgefallen.
Schade eigentlich bei so viel Arbeit - hier hätte man vorselektieren 
müssen

(erstaunter) schrieb:
> Ach so, die Bilder auf der Projektseite könnten etwas verkleinert
> werden, sinnvoll wäre es die volle Größe wenn überhaupt nochmal extra zu
> verlinken. Spart Traffic und Ladezeit.

vor allem sind sie teilweise ziemlich verrauscht oder unscharf, so dass 
man die Auflösung locker vierteln kann, ohne Informationsverlust

von (erstaunter) (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> (erstaunter) schrieb:
>> Der Wahnsinn! Da hat jemand Ahnung von Mathe und kann programmieren!
> Das gehört bei den meisten Anwendungen irgendwie zusammen, oder?
Jain. Polarkoordinaten und Vektorrotation braucht man (zum Glück) nicht 
zwangsläufig um einen µC zu programmieren, das hier ist schon Mathe auf 
einem etwas höheren Level. (Ich muss zugeben meine Mathekenntnisse sind 
ziemlich eingerostet. :-(   )

> (erstaunter) schrieb:
>> Schade nur dass einige LEDs etwas dunkler sind. (oder liegt das an der
>> Aufnahme?)
> Ist mir auch aufgefallen.
> Schade eigentlich bei so viel Arbeit - hier hätte man vorselektieren
> müssen
Ja...

> (erstaunter) schrieb:
>> Ach so, die Bilder auf der Projektseite könnten etwas verkleinert
>> werden, sinnvoll wäre es die volle Größe wenn überhaupt nochmal extra zu
>> verlinken. Spart Traffic und Ladezeit.
> vor allem sind sie teilweise ziemlich verrauscht oder unscharf, so dass
> man die Auflösung locker vierteln kann, ohne Informationsverlust
Genau, eben deshalb kann man sich den Traffic sparen. Einige Bilder kann 
man ruhig in groß zur Verfügung stellen, aber bitte als Extralink und 
nicht beim Klick auf die kleinen Vorschaubilder.

von Stefan W. (trolli02)


Lesenswert?

(erstaunter) schrieb:
> Der Wahnsinn! Da hat jemand Ahnung von Mathe und kann programmieren! Wie
> viele Stunden stecken in der Entwicklung von diesem Ding? Wie viele LOCs
> hat das Ganze? Open Source?
>

Es sind ca. 6500 LOC. Davon sind ca. 30% Binärdaten im C Format.
Der Sourcecode wird im Laufe des Jahres veröffentlicht. Im Momment 
genügt er noch nicht meinen eigenen estetischen Anforderungen.

> Schade nur dass einige LEDs etwas dunkler sind. (oder liegt das an der
> Aufnahme?)
>

Das ist zwar ein Problem der LEDs, aber nicht der 
Helligkeitsunterschiede der LEDs. Subjektiv lassen sich zwischen den 
LEDs keine Helligkeitsunterschiede feststellen! Der erste 1000er Sack, 
den wir aus China bestellt haben, hatte eine grandiose Streuung bei der 
Wellenlänge (siehe Foto auf crafted.de). Es war alles dabei von gelb bis 
orange. Die haben wir in einem Prototyp verbaut.

Die Helligkeitsunterschiede im Video kommen durch die follgenden 
Faktoren:
- LEDs haben einen Öffnungswinkel von nur ca. 20Grad.
- Die LEDs sitzen nicht alle im rechten Winkel zu Oberfläche.
- Die Kammera war nur ca. 4m vom Photonenbanner entfernt aufgebaut.

LEDs mit 20Grad Öffnungswinkel sind eigentlich die falsche Wahl für ein 
Matrix Display. Wenn das Auge sich im Lichtkegel befindet, dann ist der 
Lichtstrom sehr viel größer. Nach 10Grad zu jeder Seite schreitet man 
langsam aus dem Lichtkegel heraus und der Lichtstrom der einzellnen LEDs 
sinkt stark ab. Das passiert nicht für alle LEDs gleichzeitig. Wer in 
einem bestimmten Winkel zum Photonenbanner steht nimmt die LEDs in 
teilweise sehr stark unterschiedlicher Helligkeit wahr. So ist das auch 
mit der Kammera und dem Video. Die Kammera befindet sich schon 
ausserhalb des Lichtkegels der LEDs am Rand. Durch die extrem weit 
geschlossene Blende der Kammera verstärkt sich dieser Effekt noch.

Normalerweise sollte man diffuse LEDs benutzen, einen Diffusor vor das 
Display schrauben oder aber gleich LEDs mit einem viel größeren 
Abstrahlwinkel benutzen.

Im Nachherein muss man sagen, das die LEDs zwar billig waren. Das ist 
aber am falschen Ende gespart wenn man die Arbeitskosten in betracht 
zieht! Lieber ein paar 100€ für die richtigen LEDs ausgeben.

Unbedingt vorher mal 100 Stück in einen großflächigen Prototyp einbauen 
um die Streuung und den subjektiven Eindruck aus verschiedenen 
Richtungen zu testen. Auch das Trägermaterial sollte man vorher mit den 
LEDs testen!

von MaWin (Gast)


Lesenswert?

> Im Nachherein muss man sagen, das die LEDs zwar billig waren. Das ist
> aber am falschen Ende gespart wenn man die Arbeitskosten in betracht
> zieht! Lieber ein paar 100€ für die richtigen LEDs ausgeben.

Man hätte auch vorher einfach den ersten Absatz von
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.8.2
lesen können und sich den Fehler gespart.

von Lenchen (Gast)


Lesenswert?

Mit Verlaub, im Gegensatz zu dieser LED-Anzeige:

http://www.youtube.com/watch?v=7dVJcqFkJzI

ist das hier eine ziemlich müde Geschichte.

von sepp (Gast)


Lesenswert?

MaWin schrieb:
>> Im Nachherein muss man sagen, das die LEDs zwar billig waren. Das ist
>> aber am falschen Ende gespart wenn man die Arbeitskosten in betracht
>> zieht! Lieber ein paar 100€ für die richtigen LEDs ausgeben.
>
> Man hätte auch vorher einfach den ersten Absatz von
> http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.8.2
> lesen können und sich den Fehler gespart.
Der große MaWin weiß und kann natürlich alles besser. :-( Irgendwie 
klingt das ziemlich arrogant.

Lenchen schrieb:
> Mit Verlaub, im Gegensatz zu dieser LED-Anzeige:
>
> http://www.youtube.com/watch?v=7dVJcqFkJzI
>
> ist das hier eine ziemlich müde Geschichte.
Ich sehe da die schlechte Laune erzeugende Fresse von irgendeinem dieser 
TV-Hampelmänner, was hat das mit dem Thema zu tun?

von Lenchen (Gast)


Lesenswert?

sepp schrieb:
> was hat das mit dem Thema zu tun?

Es geht doch hier um ein LED Matrix Display und die dazugehörigen 
Rechenalgorithmen, oder?

von Steff (Gast)


Lesenswert?

Ist zwar off topic, aber mich interessiert der Song, der im Hintergrund 
läuft. :-)

von Stefan W. (trolli02)


Lesenswert?

Die Tracks für die beiden Videos kommen von
Stefan H. von

http://www.kreativhuette.de/

von Code (Gast)


Lesenswert?

Super Projekt. Bin immer fasziniert was man heut zu Tage noch so selbst 
zusammen bauen kann. Echt Spitze.

Ist der Quellcode schon veröffentlich?
Würde mich brennend Interessieren ;)

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
Noch kein Account? Hier anmelden.