Montag, 27. September 2010

LEDMatrix - aktualisierte Firmware

Es ist nun schon einige Zeit vergangen seitdem Mike und ich das Projekt abgeschlossen haben. Leider war der letzte Stand der Firmware noch nicht ganz zufriedenstellend.

Das Problem war zum einen, die Stabilität der USB-Verbindung des Microcontrollers zum Linux-Rechner. Genauer gesagt wurde die USB-Verbindung regelmäßig vom PC aus,resettet wenn zu schnell Daten an den AVR gesendet wurden.

Nach mehreren Tests konnte ich jedoch einen neuen Release der Firmware erstellen, welche zum einen die aktuelle Version des V-USB Projektes beinhaltet und zum anderen einige (kleine aber wichtige) Änderungen die das Timing- und Kommunikations-Verhalten verändern.
Die Verbindung ist nun stabil und die USB-Verbindung wird nicht mehr resettet.
Das zweite, größere Problem war, dass der Microcontroller nur per dazwischen geschaltetem USB-Hub an dem Rechner erkannt wurde, der die Matrix steuern sollte. Jeder andere Linux-PC jedoch hatte mit dem direkten Anschließen des Controllers keine Probleme.
Nachdem wir das Problem mit einem weiteren PC, der auch einen Nvidia Chipsatz besitzt, verifizieren konnten, war das Problem also lokalisiert. Auch diverse Forenbeiträge im OBDEV-Forum ergaben ähnliche Erfahrungen mit Nvidia. Genauer gesagt liegt das Problem beim Timing des Modules im V-USB Treiber für die Verwendung von 16 MHz Quarzen. Manche Chipsätze und deren Treiber kommen damit einfach nicht zurecht. Und da das Debugging in dem Fall (jedenfalls für uns) zu aufwendig werden würde, ersetzen wir demnächst das 16MHz Quarz durch eines mit 12MHz.
Dadurch sollten, laut den Foren, alle Probleme mit der Erkennung  auf Nvidia-Chipsätzen endgültig beseitigt worden sein.

Die neue Firmware kann wie immer hier heruntergeladen werden.
Dem Archiv habe ich auch den aktuellen Schaltplan als PDF beigefügt.

Donnerstag, 3. Juni 2010

Acer Aspire 1825ptz - Datenverlust bei Treiberupdate

Heute geht es unüblicherweise um ein ganz anderes Thema. Habe ich mir doch von ein paar Tagen aufgrund dem Schwächeln der alten Hardware ein neues Notebook geleistet. Ein Acer Aspire 1825ptz mit 4G RAM, 320GB HDD und Windows 7 Home Premium 64bit usw. Nach ein paar wenigen Tagen und dem ernsthaften Versuch meine privaten Projekte auch effizient unter Windows fortsetzen zu können bin ich allerdings auf eine Sache gestoßen, die mich nun doch wieder auf den Boden der Tatsachen zurückgeholt hat.
War ich doch tatsächlich leicht davon überzeugt das Gerät zunächst unter Windows zu betreiben zu können. Zumindest bis das Touchpanel akzeptabel unter Linux unterstützt wird und ich die Zeit dafür gefunden habe. Funktioniert hatte unter Windows auch alles soweit, bis auf eine Kleinigkeit die ich aber gerne verwendet hätte. Das Gerät besitzt einen eingebauten Bluetooth Adapter, wobei Windows aber für 3 der Komponenten des Adapters leider keinen passenden Treiber findet. War ich also der Meinung den Treiber von der
Acer-Support-Seite für mein Gerät herunterzuladen und diesen auch zu installieren. Gesagt getan, auf der genannten Seite kommt man recht bequem und einfach zu seinem Produkt und den verfügbaren Treibern. Sogar deren Auswahl ist eindeutig (zumindest bei meinem Notebook) so dass man keine unnötigen Daten herunter lädt.

Leider war das Ganze ein großer Fehler!!!

Im Laufe der Installation bleibt der Fortschrittsbalken bei etwa 60-70%, mit der Meldung dass der vorherige Treiber deinstalliert wird (oder ähnlich...), stehen und die HDD-LED zeigt einen dauerhaften Festplattenzugriff an. Leider dauerte dieser Zugriff mehr als 10 Minuten, was mich dann doch irgendwie kritisch stimmte. Durch Zufall habe ich darauf gesehen wie das Dropbox-Icon im Tray angefangen hat eine Synchronisation an zu zeigen.

Lange Rede kurzer Sinn, die Installationsroutine hat nicht den alten Treiber deinstalliert sondern sie war dabei ALLE Dateien auf dem System zu entfernen. Bootbar war das System darauf dann nicht mehr, der Windows Bootloader meinte etwas von 0x0000000f und ich müsse nun von einem externen Medium booten und die System-Reparieren Option ausführen.
Zum Glück hatte ich mir zuvor die Recovery-DVD's erstellt und konnte das System wiederherstellen. Die Daten waren leider alle weg und mussten aus Backups wieder hergestellt werden.

Wieder 5 Stunden meines Lebens die ich damit verschwendet habe mich mit unausgereifter proprietärer kommerzieller Software auseinander zu setzen, nur um während des "recover" dann feststellen zu müssen das meine Daten doch nicht mehr herzustellen sind.

Fazit:
Acer sollte da die Installationsdatei vielleicht doch nochmal prüfen, ich bin zumindest auf die Antwort des Supports gespannt...
Schmerzlich habe ich daraus wieder einmal gelernt, nie einem Software-Produkt zu trauen das aus dem Hause Microsoft kommt oder in irgendeiner Form darauf aufbaut oder davon abhängig ist. Es ist absolute Zeitverschwendung...

Edit (2010-06-22 12:11): Acer hat mein Ticket kommentarlos als "erfolgreich geschlossen" markiert. Ein neuer Treiber ist auf der Webseite offensichtlich noch online, dass wäre auch zuviel verlangt...

Donnerstag, 27. Mai 2010

fnordlicht Ambilight Update

Nachdem ich das Projekt beim letzten Treffen des CTHN vorgestellt hatte und dort doch noch die eine oder andere Ungereimtheit aufgetaucht ist, habe ich hier einen neuen Patch online gestellt. Der Patch beinhaltet alle Änderungen die nötig sind um den fnordlicht-Support in den VLC-Code  ein zu spielen. Eines der aufgetretenen Ungereimtheiten war, dass die Farbe Rot (und darauf folgend Blau) viel zu intensiv ausgegeben wurde. Dies war jedoch über die Einstellungen im AtmoLight-Filter selbst leicht an zu passen. Die Probleme mit der Verbindung zu den fnordlichtern werden durch den neuen Patch entfernt. Es war z.B. zuvor nicht möglich mehrere Dateien hintereinander ab zu spielen ohne den VLC-Player neu starten zu müssen.
Die im Video-Filter vorgenommenen Einstellungen können auch weiterhin nicht, ohne den Video-Stream neu zu starten, übernommen werden. Das scheint ein Grundlegendes "Problem" in den Videofiltern des VLC zu sein. Dank der Zusammenarbeit mit dem AtmoWin Entwickler André Weber ist nun auch die Unterstützung für Windows gegeben, wenn sie auch noch nicht komplett getestet werden konnte...

Zu den genannten Änderungen besitzt der AtmoLight-Filter nun noch die folgenden Erweiterungen:
  •  Unterstützung für das anzeigen einer Farbe wenn der Player pausiert wird oder wenn das aktuelle Video zu Ende ist.
  • Reset der fnordlichter beim beenden von VLC.
  • fnordlich-Protokoll: start_bootloader und boot_enter_application wurden für den Reset implementiert.
Die nötigen Konfigurationseinstellungen für die fnordlichter werden im folgenden Video gezeigt.


Mit diesen Einstellungen habe ich, was die Farbgenauigkeit und die Geschwindigkeit der Farbänderungen an geht, recht gute Ergebnisse erzielt.

Zur Demonstration gibt es wieder ein kleines Video. Meine 2 fnordlichter habe ich hinter meinen Fernseher geklebt und zuvor jeweils mit einer Art Diffuser ausgestattet (siehe Bild), die das Licht der LED's etwas besser vermischen. Den Ton habe ich aus Lizenz rechtlichen Gründen entfernt. Zu sehen ist das Musikvideo Shoot to Thrill von AC/DC (Iron Man 2).


Viel Spaß beim zusehen!

Edit (2010-06-04 14:20): Danke André für den Hinweis! Hier nochmal der Link zu den Nightly builds des VLC für diejenigen welche die Kommantare nicht lesen...

Edit (2010-06-26 18:50): Der neue Release des VLC 1.1.0 kann hier herunter geladen werden. Dieser beinhaltet die beschriebenen Änderungen um fnordlichter als Ambilight verwenden zu können.

Mittwoch, 12. Mai 2010

fnordlicht-"Ambilight" mit VLC

Seit ein paar Wochen beschäftige ich mich nun mit 2 Fnordlichtmini's, die ich bei einem Workshop des Chaostreff Heilbronn zusammen gelötet hatte. Was ist ein Fnordlicht? Kurz - es leuchtet und kann mit einem entsprechenden Wandler per RS232 oder USB gesteuert werden. Es ist zudem möglich mehrere der Platinen über einen Bus zu verbinden. Diese Fnordlichter können dann einzeln  oder im Verbund über die selbe Schnittstelle gesteuert werden.
Eine der Ideen, die auf kamen, war es nun mehrere Fnordlichter als eine Art "Ambilight", wie bei Phillips Fernsehern, ein zu setzen. Bleibt also nur das Problem, entweder die Daten eines Software-Videoplayers oder ein Videosignal auf dem Weg zum TV ab zu greifen. Da mir im Moment die Zeit für die Elektronik fehlthabe ich mich für die Softwarelösung entschieden.
Nach ein wenig "googeln" bin ich dann über das atmo-Modul im VLC-Player gestolpert. Dieses Modul wurde für eine andere Hardware geschrieben, was aber das nicht weiter stört. Da die Entwickler von VLC recht hohe Ansprüche an den in ihrem Repository eingepflegten Code stellen, war es reine Fleißarbeit eine Klasse zur Kommunikation mit den Fnordlichtern zu erstellen. Zudem musste nicht das ganze fnordlicht-Protokol implementiert werden.
Es genügen:
  • sync 
  • stop
  • fade_rgb
Detailierte Informationen zum Protokoll können hier nachgelesen werden. In der Konfiguration des atmo-Moduls können nach meinen Änderungen die folgenden Informationen festgelegt werden:
  • die Anzahl der angeschlossenen Fnordlichter
  • die Zuordnung der Fnordlicht-Adressen (Channel 0..3) zu den 1-4 Bereichen des aktuellen Frames.
Die 1-4 Bereiche des Frames repräsentieren "einfach" nur die Farbanteile im linken, rechten, oberen und unteren Bildbereich.  Es wird auch ein "Summenkanal", aller 1-4 Bereiche, zur Zuordnung angeboten. Der Kombination von Fnordlichtern und Bildbereichen ist also nur durch die Anzahl der vorhandenen Hardware (und der maximalen Anzahl von Geräten an einem Bus) eine Grenze gesetzt.
    Hier ein Video das eine Fnordlicht-Kette von 2 Modulen in Aktion zeigt.

    Ein erster Patch gegen die aktuelle VLC-Version aus dem Git-Repository kann hier herunter geladen werden.

    Edit (2010-05-15): Hier gibt es den Schaltplan für die Verbindung zwischen dem Pegelwandler und dem fnordlicht-Bus...

    Mittwoch, 7. April 2010

    LEDMatrix - Projektabschluss...

    So, zum Projektabschluss gibt es nun noch ein paar Videos zum Equalizer in Aktion.
    Das Erste Video zeigt die, in den Rahmen des MP3-Player, eingebaute Matrix, welche über ein Notebook angesteuert wird. Auf dem Notebook läuft ein aktuelles Ubuntu Linux mit einer von Mike geschriebenen Testsoftware für den Equalizer.



    Das zweite Video zeigt den komplett fertigen Player. Es wird Musik abgespielt und die Matrix als Equalizer angesteuert.


    Wie immer kann an der einen oder anderen Stelle noch etwas optimiert und geändert werden. Im großen und ganzen jedoch bleibt es nun wie es ist.
    Eine neue Sache ist jedoch aufgetaucht, die USB-Verbindung (per V-USB) macht ausschließlich auf dem verwendeten ASRock miniPC Probleme. So sind wesentlich geringere Übertragungsraten und doch sehr häufige Abbrüche der Verbindung zu verzeichnen, sofern das USB-Gerät überhaupt erkannt wird.
    Da die Elektronik der Matrix ja aber dem V-USB "standard" entspricht, der verwendete Linux-Kernel bzw. das Kernelmodul auf allen getesteten Systemen identisch  ist bzw. sind und weitere Geschwindigkeitsunterschiede der getesteten Rechner letztendlich keine Rolle spielen, scheint das Problem doch an einer anderen Stelle zu liegen.
    Sobald ich hierfür eine Lösung gefunden habe werde ich wie üblich davon berichten und ein neues Update der Software bereit stellen. Hier gibt es jedoch wie immer die letzten Änderungen der Firmware...

    Sonntag, 28. März 2010

    LEDMatrix - Neue Videos

    Ein paar Tage sind nun vergangen und nachdem die Matrix auf anhieb funktionierte, habe ich ein paar Optimierungen in der Firmware und bei den Tools mit der sie zu bedienen ist durchgeführt. Aber zunächst kurz zum ersten Test der beiden Komponenten, den LED's und der Steuerplatine. Die 64 Kabel der Reihen waren recht schnell an den 8 Steckern befestigt, was an der sehr guten Vorarbeit von Mike lag, der alle Kabel bereits sortiert hatte. So war nach dem alle Kabel eingesteckt und die Steuerplatine mit einem 9V-Block verbunden wurde, direkt die erste Startanimation zu sehen. Allerdings schien etwas nicht zu stimmen, im Ablauf dieser ersten Animation wurde ein Pixel nicht dort angezeigt wo er eigentlich sollte.
    Auf so einen Fall bereits vorbereitet, starteten wir vom Notebook aus einen Testzyklus, mit dem jede einzelne LED auf Funktion getestet wird. Das dafür verwendete Perl-Script liegt dem Archiv bei schon länger bei. Es stellte sich schlussendlich heraus, dass uns in einer Reihe (aber damit für alle Ebenen) ein Kabeldreher untergekommen ist. Mehr Probleme gab es keine. Und das bei 441 LED's, 441 Querverbindungen unter den LED-Reihen der einzelnen Ebenen, den 8 Masseleitungen der und dann noch die ganzen Drähte für die Kathoden der LED's meiner Meinung nach keine schlechte Leistung! Insgesamt wurden etwa 100 Meter Kabel, 10 Meter Draht, einiges an Lötzinn verbraucht. Ganz zu schweigen von der von uns beiden hinein investierten Zeit, der Geduld und den Nerven.

    Aber nur mit dem Zusammenbau war es nicht getan. Wie oben bereits erwähnt musste das eine oder andere optimiert werden. Die USB-Verbindung zum Beispiel war anfangs, bei höhreren Frameraten, recht instabil. Mit ein paar Änderungen in dem einen oder anderen Timer in der Firmware war dieses Problem aber auch schnell behoben.

    Aus diesem Optimierungsprozess der Firmware ergab sich auch eine Erweiterung des USB-Clients. Dieser ist nun mit einer Art interaktiven "Shell" ausgestattet auf der nacheinander Befehle abgesetzt und Frames übertragen werden können, ohne dabei ständig eine neue Verbindung zum Gerät aufbauen zu müssen. Neben dieser großen Änderung gibt es noch 2 andere neue Scripte. Mit dem einen ist es Animationen oder einzelne Frames, aus Mike's shinyLED, in C-Funktionen umwandeln. Diese können dann mit in die Firmware hinein compilieret werden. Das andere kann die Animationen auf der Matrix von der Kommandozeile aus "abspielen".

    Wie ich in einem früheren Post schon beschrieben habe kann der Mikrocontroller auch Animationen intern speichern, die per USB aktiviert werden können. Das nächste Video zeigt einen Equalizer. Die einzelnen "Ringe" sind dabei einzelne im Microkontroller gespeicherte Teilframes, die einzeln oder gruppiert aktiviert und deaktivert werden können. Mit aktiviert und deaktiviert ist gemeint, dass diese Teilframes zu dem aktuell angezeigten Frame hinzugefügt oder davon abgezogen werden. Hierfür werden jeweils nur 2 Bytes per USB übertragen., wie für das gruppierte ansteuern. Gruppieren bedeutet, dass mehrere Ringe gleichzeitig aktiviert werden. Zu sehen ist dies in der Mitte des ersten Videos, an der Stelle wo sich die Matrix von innen nach außen füllt und von außen nach innen wieder leert. Am Anfang und am Ende werden die Ringe einzeln aufgerufen.


    Im nächsten Video wird per USB jede auf der Matrix sichtbare Veränderung übertragen. Hierzu wird das Script zum testen der Animationen verwendet. Trotz der mit 21x21 Pixel geringen Auflösung könnte ich mir, zu Demozwecken, doch das eine oder andere einfache Spiel darauf vorstellen...


    Nach Ostern ist dann die Deadline für das Projekt und dann wird der Sprichwörtliche Hammer fallen gelassen. Es gibt zwar noch das eine oder andere das man machen könnte aber das steht erstmal auf der Wunschliste. Bis Ostern muss also noch Mikes MP3-Player die Matrix als Equalizer ansprechen können, was aber sogut wie fertig ist und dann muss das ganze wieder an seinen vorgesehenen Platz in der Halterung eingespannt werden. Eingespannt?! War da was? - Ja, das Blech wird in einen Rahmen eingesetzt und erfährt damit eine Biegung. Hoffen wir mal das wir alles richtig ausgemessen und geplant haben und es keine größeren Schäden und vor allem Kurzschlüsse gibt... ;)

    Sobald das ganze das erste mal komplett da steht, werde ich wieder das eine oder andere Video und Foto online stellen.

    Das neue Archiv mit allen Änderungen kann wieder hier heruntergeladen werden.

    Mittwoch, 17. März 2010

    LEDMatrix - Fertig!

    Ohne Worte...

    Donnerstag, 11. März 2010

    LEDMatrix - Update

    Aus der letzten Arbeit an der Platine für die LEDMatrix sind zwei "neue" Dinge entstanden.
    Zum einen die neue Firmware für den AVR-Controller und zum anderen eine angepasste Version des USBaspLoaders, um diesen auf dem ATMega32 lauffähig zu machen. Zudem besitzt die Platine nun einen Reset-Button und einen Jumper, siehe Bild.

    Der Reset-Button kann dazu verwendet werden, den Mikrocontroller neu zu starten (wozu auch sonst). Ist dabei jedoch der Jumper auf die im Bild gezeigte Stellung gesetzt, wird in den USBaspLoaders gesprungen, der sich im Bootloader befindet. Dadurch ist der AVR-Controller nun direkt per USB programmierbar.
    Der USBaspLoader startet nur per Reset-Taster. Um wieder in die Firmware für die Matrix zu springen, muss der Jumper umgesteckt und erneut Reset gedrückt werden werden. Alternativ kann die Platine auch aus- und wieder eingesteckt werden. Durch den Verlust der Versorgungsspannung wird kein Reset des Controllers registriert, so das der Bootloader dazu veranlasst wird, direkt in die Matrix-Firmware zu springen.

    Bei Gelegenheit werde ich den, im Vergleich zum LEDCube, geänderten Schaltplan des Mikrokontrollers fertig und online stellen.

    Das Update für den USBaspLoader kann hier heruntergeladen werden. Die neue Firmware der LEDMatrix kann wie üblich hier geladen werden. Für Details siehe Changelog...

    In den nächsten Tagen werden LED's und die Platine vereint. Dabei wird sicher das eine oder andere Video und Bild entstehen. Es ist und bleibt also spannend... mal ganz abgesehen von der stetig wachsenden Verkabelung auf der Platine und unter den LED's ;)

    Mittwoch, 17. Februar 2010

    Erste Firmware für die LEDMatrix

    Die Arbeiten an der Steuerplatine für Mike's LEDMatrix sind, wie ich in meinem letzten Post zu diesem Projekt bereits berichtet hatte, abgeschlossen und so musste die Firmware des LEDCube in den letzten Tagen daran glauben. Das Ziel war die Kommunikation mit dem Mikrocontroller per USB, zum Übertragen einzelner Frames, Ansteuern von Animationen/internen Funktionen und gemeinsames Dimmen aller LED's. Zudem sollte beim Start Mikes Start-Animation mit seinem Logo angezeigt werden.

    Soweit fertig ist aus dieser Liste alles bis auf das Dimmen der LED's. Dazu müsste jedoch noch das eine oder andere geändert werden, was aber erstmal noch Zeit hat bis die LED's fertig verlötet sind.

    Die erste alpha Version gibt es hier. Im Moment ist das ganze allerdings noch etwas experimentell und muss noch ausgiebig getestet werden.
    Enthalten ist in dem Archiv die angepasste Firmware, der USBClient zum Testen der Verbindung, Mike's QT Oberfläche shinyLED zum klicken von Animationen. Weiterhin noch die Sourcen des USBaspLoader welcher später als Bootloader eingesetzt werden soll und noch ein paar Scripte und Tools zum konvertieren und übertragen von Animationen.

    Das Bild oben zeigt übrigens die Matrix in Aktion. Das ganze ist allerdings direkt an ein Netzteil angeschlossen.

    Mittwoch, 10. Februar 2010

    USBaspLoader und der GCC-AVR (4.3.3) in Verbindung mit Ubuntu 9.10 (amd64)

    Habe ich mich doch vor ein paar Monaten dazu entschlossen mein altes 8.10 Ubuntu (32Bit) durch die neue Ubuntu 9.10 (64 Bit) zu ersetzen. Bisher war ich auch weitgehend überzeugt von der Performance und der Verfügbarkeit der Softwarepakete. Sicher gibt es das eine oder andere Problem, wie zum Beispiel das kein Flash Plugin für den Firefox richtig läuft [solved] oder das manche Programme die libSDL verwenden sich nur mit kill -9 beenden lassen...

    Alles in allem aber zu verkraften, Programme die nicht funktionieren werden ggf. aus den Sourcen kompiliert und das Problem ist erledigt.

    Aber an manchen Stellen gibt es dann das eine oder andere Tool das einen Stunden seines Lebens kostet. So zum Beispiel der GCC (4.3.3) Compiler aus dem gcc-avr Paket.
    Dieser beinhaltet laut diversen einschlägigen Foren eine bessere Optimierung des erzeugten Binary Codes. Optimiert wurde also auch die Option, welche beim übersetzen einer Firmware für Microkontroller normalerweise immer verwendet wird. Die Option -Os. Diese wird an den gcc übergeben um die "kleinstmögliche" Firmware zu generieren. Leider geht der löbliche Optimierungswahn der GCC Entwickler hier ganz klar am Ziel vorbei. Der optimierte Binary-Code ist wesentlich größer als der von älteren gcc-Versionen - tolle Sache...

    Mein ATMega168 für den HackStick besitzt 16KB Flash Speicher wovon 2KB für einen Bootloader reserviert werden können. In meinem Fall soll im Bootloader die Firmware des USBaspLoader-Projektes laufen um den HackStick direkt per USB flashen zu können.
    Da ist es nicht gerade förderlich, dass der gcc nicht dazu überredet werden kann den, in diesem Fall um 140 Byte(!!!) größeren Binary Code auf die ursprüngliche Größe von 2002 Byte zu verkleinern.

    Die Firmware des Bootloaders ist durch das Überschreiten der 2048 verfügbaren Bytes natürlich nicht übertragbar. Zum Glück besitzt man ja nicht nur einen Rechner und so konnte ich die Firmware auf einem anderen kompilieren und übertragen, ohne mir einen älteren GCC installieren zu müssen. Über kurz oder lang kommt man aber bei Ubuntu 9.10 (amd64) nicht drum herum.

    Schlussendlich ergab sich aus all dem ein Patch gegen die mittlerweile doch in die Tage gekommenen Version der Firmware des USBaspLoader vom 20.3.2009. Zum einen beinhaltet dieser Patch nun den neuesten Release von V-USB und kleinere Änderungen um den USBaspLoader auf einem ATMega168 lauffähig zu bekommen.

    Dienstag, 9. Februar 2010

    Mike's LED Matrix - 1000'de Lötstellen später...

    Das Projekt schreitet voran und nach einer mehr als 13 stündigen Löt-Session sind nun zumindest die Masseleitungen der LED's (Mikes Aufgabe) und die Steuerplatine (meine Aufgabe) fertig. Rechts ein Bild der unverbundenen LED's.
    Besonders aufgefallen ist bei den LED's, dass wohl nur 2 Stück von den 441 (500 wurden bestellt) defekt waren oder eher defekt gemacht wurden... ;)

    Sobald die Steuerplatine und die LED Matrix in ein paar Tagen verheiratet wurden, werden wir ein Video drehen das die ersten Animationen und Bilder der ersten Tests zeigt. Die originale Firmware des LED Cube's ist ohne Anpassungen auf unserer Platine bereits am laufen und muss nur noch auf unsere Anforderungen (USB Datenübertragung und Regelung der Leuchtintensität der LED's) angepasst werden.

    Hier im Voraus ein Bild der fertigen Steuerplatine.


    • links oben der Spannungsregler mit Power-LED, an dem ein 9V Block angeschlossen ist
    • links der AVR-Mikrokontroller (ATMega32)
    • links unten der USB-Anschluss
    • rechts vom Microkontroller sind die 8 N-MOSFET's zu sehen
    • die 8 IC's (D-type Latches) steuern die LED's und sind mit den Steckverbindern verbunden
    Der 9V Block wird nur zum Testen der Schaltung verwendet. Später wird das Netzteil des Rechners, der die Daten per USB an den Microkontroller übergibt, diese Aufgabe übernehmen.

    Dieser Marathon wird Mike und mir sicher ewig ins Gehirn gebrannt bleiben und die Anzahl der zu verarbeitenden Bauteile wird sich in Zukunft auch sicher in kleineren Dimensionen bewegen.

    Mehr dazu in Kürze hier...

    Donnerstag, 4. Februar 2010

    Mike's LED Matrix

    Seit längerem haben Mike und ich das vorhaben, in die Frontblende dieses MP3-Player's eine LED Matrix ein zu bauen. Diese Matrix soll dann per Microkontroller gesteuert werden, der wiederum seine anzuzeigenden Daten per USB von dem ThinClient aus dem MP3-Player erhält. Es geht bei diesem Projekt übrigens um 441 blaue, ultrahelle 3mm LED's die mit 441 Halterungen in die 5mm Löcher der Blende befestigt werden .

    Als Referenzprojekt verwenden wir die LED-Cube und den Borg3d Würfel.

    Da die Liste der Bauteile aber bei beiden Projekten teils unvollständig oder nicht zufriedenstellend war gibt es unsere Liste hier online bei Reichelt. Die LED's und die Halterungen wurden jeweils bei 2 anderen Shops online bestellt.

    Jetzt könnte man sich fragen wieso man als Referenz eine 3D Anordnung für eine 2D Matrix verwendet. Ganz einfach, bei einem 8x8x8 Würfel gibt es 512 LED's zum ansteuern. Unsere Matrix besitzt nur 21 x 21 = 441 LED's, was übrigens an der Optik in der Frontblende liegt. Es fällt also eine gesamte 8x8 Ebene aus der Würfeldarstellung weg. Zudem wird die 7te Ebene nicht vollständig ausgenutzt, was aber keinen Nachteil ergibt. Die überschüssige 8te Ebene wird dann vor der Inbetriebnahme aus der Software entsprechend heraus gepatcht. Die Ebenen werden einfach Schachbrett-Artig nebeneinander angeordnet. Bei dem rechten und unteren Rand muss jedoch ein wenig getrickst werden.

    Als Firmware wird die des LED-Cube's verwendet, da diese gut strukturiert ist, und vor allem einfacher zu verstehen war da der Code extrem kurz, gut dokumentiert und anpassungsfähig ist.

    Nun zum ansteuern der Matrix. Sie wird per Multiplexing angesteuert, wie das ganze funktioniert ist sehr gut auf diesen beiden Videos dargestellt. [#1] [#2]
    Kurz: Damit wird ermöglicht jede einzelne LED auch einzeln leuchten zu lassen.

    Mike arbeitet bereits an einer auf QT basierenden Software mit der man die einzelnen Frames für die Matrix "klicken" kann.
    Jetzt fehlt nur noch die Hardware. Bestellt ist alles, aber noch nicht ausgeliefert...

    Sobald das Projekt komplett aufgebaut und die Software fertig ist gibt es hier dazu mehr.

    Mittwoch, 27. Januar 2010

    Shakes & Fidget Bot

    Schneller als gedacht wäre der SFBot also wieder am laufen gewesen... ;)

    Dass alle Aktionen des Spielers seit dem Update per HTTP-GET an den Server gesendet wurden war sofort ersichtlich. Und die Session und das Passwort für den Login, sahen auf den ersten Blick einer MD5-Summe doch sehr ähnlich. Glücklicherweise sieht man einer vermeintlichen MD5-Summe aber auch so gut an, dass die Entwickler des Spiels doch tatsächlich das vom Benutzer eingegebenen Passwort erst in UTF-8 umwandeln, bevor die MD5-Summe daraus gebildet wird...

    Der Dekompilier-Vorgang einer SWF-Datei dauert ja nur wenige Sekunden, mal davon abgesehen, dass der dabei herauskommende ActionScript-Code recht gut lesbar ist.

    Ich habe zwar noch nie den Code einer Methode zur Bildung einer MD5-Summe gesehen, aber da bereits am Anfang der Aufruf stand, der den übergebenen String in UTF-8 wandelte, war das Problem sofort erkannt!

    Der Rest war reine Fleißarbeit...

    Das Video zeigt die grundlegenden Funktionen des Bot's.



    Für alle die jetzt noch fragen was der Bot denn nun alles kann:
    Er erledigt Quest's, kämpft in Dungeons und der Arena, meldet sich zu Gilden-Kämpfen an und wenn nichts weiter getan werden kann, schickt er den Held automatisch in die Stadtwache (arbeiten). Das ganze läuft auf jeder Kommandozeile. Benötigt wird nur ein Java Interpreter.

    Veröffentlichen werde ich den Quellcode des Bots allerdings aus vielerlei Gründen nicht!
    Gegen horrende PayPal Spenden, um meine Arbeit zu unterstützen, habe ich jedoch nichts einzuwenden. ;)


    Freitag, 22. Januar 2010

    klaute's HackStick (v0b00000010)

    Lange ist es her das ich über den Stick geschrieben habe, es hat sich auch nicht all zu viel getan.

    Die Firmware hat ein paar neue Features bekommen und wurde, gerade was die Performance und Speichernutzung angeht, optimiert.

    Eine wesentliche Änderung ist eine kleine Platine die auf den Stick gesteckt wird und die Pegelwandlung von den +5V des AVR's auf die bipolaren Spannungen einer RS232 Schnittstelle angleicht.

    Oder kurz und einfach gesagt, ich habe einen MAX232 angeschlossen ;-)

    Im Moment arbeite ich an dem Fuzzer und demnächst wird der ATMega8-16PU (8kB flash) durch einen ATMega168-20 ersetzt, wodurch sich der Flashspeicher verdoppelt und die Taktfrequenz von 16MHz auf 20MHz erhöht. Der neue Mikrocontroller sollte ein gutes Stück weniger mit der USB-Verbindung ausgelastet sein als vorher und zudem steht das doppelte an Flash zur Verfügung. Allerdings ist die Firmware mittlerweile ~8 kB groß, was mich auf die Idee zum wechseln gebracht hatte... ;)

    Shakes & Fidget Browsergame

    Wer jetzt denkt ich stelle hier ein Browsergame vor, irrt sich. Ganz davor drücken möchte ich mich dennoch nicht. Shakes & Fidget ist eine Online Comic Bilderserie über zwei Figuren die sich humorvoll und planlos ihren Weg durch World of Warcraft kämpfen. Mehr dazu hier. - http://www.shakes-and-fidget.com

    Seit einer ganzen Weile gibt es zu dieser Web Comic-Reihe auch ein Browsergame. Da ich aber nicht die Zeit habe das Spiel zu spielen, geht es mir wie auch in vielen anderen Spielen, ich müsste Cheaten, oder mir zumindest einen Weg finden mit selbst den Zeitverlust zu mindern.

    Nach ein paar Stunden Entwicklungszeit könnte man ja fast einen Java-Client für die Konsole schreiben, der das Spiel automatisch und wesentlich effizienter spielt als man das als Mensch könnte. Wenn das nicht verboten wäre... ;-)

    Das Spiel basiert übrigens auf Flash und kommuniziert(e) plain text über eine unverschlüsselte Socketverbindung mit dem Server.

    Vor ein paar Tagen wurde jedoch ein Update des Flash-Clients online gestellt, in dem die Verbindung zum Server auf HTTP umgestellt wurde. Verbessert wurde dadurch nichts merklich, nur das die Bilder noch langsamer geladen werden als vorher.

    Aber zum Glück habe ich diesen Bot nicht geschrieben sonst würde das Reverse Engineering schon wieder von vorne losgehen... :D

    Dienstag, 12. Januar 2010

    GarbageBot v0.4

    Wie auf dem Bild zu sehen ist besitzt der Roboter nun 2 weitere LED's, die über denen liegen, welche ich bereits in meinem letzten Blogeintrag über den Bot beschrieben hatte.

    Diese beiden neuen LED's können gemeinsam vom AVR-Controller ein-/ausgeschaltet werden und dienen als zusätzliche Lichtquelle um die Reflexionen auf Hindernissen zu erhöhen.

    Sie werden jedoch nur bei Nacht oder dämmernden Lichtverhältnissen benötigt, da die Empfindlichkeit der ursprünglichen normalen, roten LED's leider nicht ausreichend hoch gewesen ist um auch bei Nacht sinnvolle Messintervalle realisieren zu können.

    Diese normalen LED's wurden jedoch mittlerweile durch ultra-helle rote ersetzt, welche im Vergleich zu den Vorgängern eine viel höhere Empfindlichkeit ausweisen.

    Die Firmware besitzt nun auch einen rudimentären Autopiloten und einen Programm-Modus in dem der GarbageBot über die IR Fernbedienung frei konfiguriert/gesteuert werden kann. Ist der Auto-Pilot aktiv, wird die Umgebung im Alleingang "erkundet". Da die Messungen der LED's jedoch noch nicht ganz fehlerfrei ist, sind Kollisionen quasi an der Tagesordnung...