Archive

Archive for the ‘Software’ Category

Turnigy 9x: alternative Firmware

Die Turnigy 9x ist eine super Fernbedienung! Ziemlich günstig und kann einiges. Leider macht einem die Standardsoftware einen Strich durch die Rechnung. Sobald man mehr nutzen möchte als die Steuerknüppel, muss man sich mit dem schrecklichen Menü (und dem Bestätigungsbeep der Tasten 😉 ) quälen. Der Mischer, in dem man verschiedene Schalter mischen und auf einen Ausgangskanal legen können sollte, ist leider etwas fehlerhaft und extrem umständlich zu bedienen. Wie es aber bei solchen Sachen immer ist, haben sich einige Leute hingesetzt und alternative Frimware programmiert.

Ich entschied mich für das Projekt er9x. Um die Firmware flashen zu können, muss man nur einige Kabel in der Fernbedienung verlöten. An den passenden Stellen sind sogar schon Lötpads vorhanden (Achtung: es gibt verschiedene Hardwarerevisionen, bei denen ein Lötpad anders verbunden ist!). Das sieht dann so aus (leider etwas unscharf):

Der Stecker kann von innen ins Batteriefach geführt werden und bleibt dadurch immer erreichbar.

Eine gute Anleitung gibt es auf der Projektseite. Möchte man die Fernbedienung mit einem Arduino flashen, empfiehlt sich diese Seite: http://diyjunky.blogspot.de/2011/09/using-your-arduino-to-program-turnigy.html. Man verbindet also die entsprechenden Pins mit dem Arduino, spielt wieder den ArduinoISP Sketch auf (wie auch schon im letzten Artikel beschrieben), dann kann man die Software eepe starten und den Anleitungen im Netz folgen, um die Firmware zu flashen. Die Einstellungen von avrdude sind eventuell etwas umständlich, bei mir funktionierte die Einstellung „arduino“ unter Programmer nicht, sondern ich musste „avrisp“ verwenden. Mit eepe kann man auch noch die Einstellungen und Mischer am Rechner einstellen und Simulieren und dann ins EEPRom der Fernbedienung flashen 😉 Allerdings gibt es da einen Bug im Arduinosketch. Eepe gibt einen Fehler beim Lesen und Schreiben des EEPROMs aus „Bad eeprom“ oder so ähnlich. Das Problem lässt sich sehr einfach lösen. Leider finde ich die Quelle nicht mehr wieder, der Ersteller möge mir verzeihen 😉

Man ändert im ArduinoISP Sketch die Zeile


int start = here * 2;

in den Funktionen uint8_t write_eeprom(int length) und char eeprom_read_page(int length) in


// here is a word address, get the byte address
 int start = here;// * 2; -NA for m64

um. Der Grund für diesen Fehler ist die Adressierung des verwendeten Prozessors. Dieser verwendet byte und keine word-Adressen.

Damit kann man auch das EEPROM der Fernbedieung lesen und schreiben.

Sehr lohnenswerte Modifikation.

Bootloader flashen mit Arduino-ISP

Der Flightcontroller meines Quadrocopters legte manchmal ein seltsames Verhalten an den Tag. Nachdem der Akku angeschlossen wurde, startete der Arduino seinen Bootloader und wartete 8 Sekunden ob vielleicht ein USB-Kabel angeschlossen war oder ähnliches. Dadurch bekamen die Regler der Motoren kein passendes Signal und stellten sich ab. Also leuchtete beim Start des Copters nur die LED, die Flugbereitschaft signalisierte, jedoch setzten die Regler dieses Signal nicht um. Kurzfristig kann man dieses Problem umgehen, indem man die Regler nach dem Akku anschließt, was jedoch auch nur manchmal half. Ziemlich nervig.

Aber der Hersteller hat auf dieses Problem reagiert und einen neuen Bootloader programmiert, der den Resetgrund erkennt und die Bootloaderroutine umgeht wenn es sich um einen Reset durch Spannungsabfall handelt. Ich hatte vorher schon einmal einen Blick in den Code des Standardbootloaders geworfen und eigentlich sollte dieser genau das auch machen. Leider liegt der Code des Herstellers nicht vor, sodass ich nicht weiß, was er geändert hat.

Man findet den neuen Bootloader inklusive einer Anleitung unter http://forum.flyduino.net/viewtopic.php?f=8&t=39.

Bei mir sah das dann so aus:

Mit dem ArduinoISP Sketch, kann man also leicht den Bootloader eines anderen Arduino flashen. Praktischerweise kann man mit eimen Arduino und ArduinoISP nicht nur Bootloader flashen, sondern auch normale Mikrocontroller programmieren, dazu mehr im nächsten Artikel

OpenRanked: Einführung

In den letzten Tagen habe ich viel für das Projekt OpenRanked gemacht. OpenRanked ist ein zentraler Statistik-Server, der von verschiedenen Clients über Protobuf die Statistik-Daten sammelt. Ziel war und ist es, dass man eine Alternative zum offiziellen Ranking-System von id Software hat.

Der OpenRanked-Server (ORS) basiert auf Java. Alle Clients, die sich mit dem ORS verbinden wollen, müssen die Library libopenranked benutzen, die für Transportschicht (Googles Protobuf über SSL) zuständig ist. Für Enemy Territory:Quake Wars (ET:QW) haben wir einen Mod entwickelt, der über libopenranked die Verbindung mit dem ORS aufnimmt.

Einen Überblick über die dahinterstehende Architektur ist im Git des Sourceforges zu finden.

Falls ihr selbst den Code unter Linux kompilieren wollt, läuft das folgendermaßen ab:

  • Git-Repository klonen
  • apt-get install libssl-dev scons build-essential mesa-common-dev libprotobuf-dev
  • Zuerst libopenranked erstellen:
    • cd modules/libopenranked
    • scons
  • Danach ORM erstellen:
    • Download des ET:QW 1.5 SDKs, entpacken mit Wine und Inhalt des Verzeichnisses source nach modules/openranked-mod kopieren
    • cd modules/
    • patch -p0 < openranked-mod-patch/latest.patch
    • cd openranked-mod
    • scons
    • Erstellter Mod liegt unter openranked-mod/build/release/game/sys/scons/libgame.so