N64 Analog Ersatz-Stick
Verschleißfreier Analogstick für besseres Retro-Gaming
Einige meiner Schulfreunde hatten damals eine N64 Konsole. Die Kiste war jedoch mit 300 DM nicht besonders günstig, mein Taschengeld reichte nur für einen Gameboy. 17 Jahre später - ich schlendere durch den An- und Verkauf Laden meines Vertrauens - steht so ein Ding vor mir. 40 Euro will er dafür haben. Ein guter Kurs, bei eBay liegen die Konsolen deutlich höher.
"Der Analog Stick ist immer die Schwachstelle. Der hier.. Oh. Ich gucke noch mal ob ich noch einen besseren Controller für dich habe!" Es stellt sich heraus, dass dies nicht der Fall ist. Dafür geht er noch 5 Euro im Preis runter. Ich verlasse den Laden mit meinem neuen Bastelobjekt.
Zuhause angekommen wird alles erst einmal zerlegt und gründlich gereinigt. Auch der Analogstick wird untersucht. Plastik Führungsschienen, Zahnräder, Zählscheiben und Lichtschranken. Späne rieseln mir entgegen. Die Führung ist total ausgeschlagen, daher hat der Stick so viel Spiel. Geplante Obsoleszenz?
Ein neuer Stick
Ersatz muss her. Ich befrage Google und werde fündig. Kitsch Bent bietet Nachbauten der defekten Plastikteile. Außerdem finden sich bei eBay und Amazon diverse chinesische Nachbauten, entweder im "Original Style" oder im "Gamecube Style". Bei letzterem verspricht der Händler eine besonders lange Haltbarkeit. Ich bestelle also den "Gamecube Style" Stick.
Einige Tage später kommt der Nachbau Stick mit der Post. Mit wenigen Handgriffen ist er verbaut. Ich spiele eine Runde "Super Mario 64" und bin zunächst begeistert. Wenig später stehe ich allerdings vor einem eigenartigen Problem: Der Stick ist in Nullposition und trotzdem läuft Mario ganz langsam nach rechts. Auch im Internet finden sich Berichte dazu. Drücken von L+R+Start resetten den Controller. Das funktioniert tatsächlich, es ist allerdings ziemlich nervig, ständig das Spiel zu pausieren und den Reset auszuführen. Eine Lösung muss her!
Das Problem genauer analysiert
Im Original wird je eine Zählscheibe von zwei Lichtschranken abgetastet. Sie sind so ausgerichtet, dass sie je nach Drehrichtung abwechselnde Impulse erzeugen. Diese werden von dem Chip auf der Hauptplatine des Controllers in eine absolute Position umgerechnet.
Der Nachbau verwendet stattdessen ein Joystick Poti. Die Spannung am Schleifer variiert je nach Position. Diese wird von einem Mikrocontroller gemessen, verglichen und in Impulse umgesetzt. Die Software darin ist offenbar so schlecht das bei schnellen Bewegungen ab und an einzelne Impulse verloren gehen. Der Nullpunkt verschiebt sich.
Die Lösung
Micro aus dem Circuit Board Forum hatte sich bereits dieses Problems angenommen und eine alternative Platine entwickelt. Im Thread "N64 Stick Converter PCB v2.2" fanden sich alle Informationen dazu. Fertige Bausätze inclusive detaillierter Anleitung bietet er dort zu fairen 10 Euro an. Leider musste ich jedoch feststellen, dass immer nur alle paar Monate einige Sätze zum Verkauf stehen. Ich konnte einfach nicht abwarten...
Selbst ist der Bastler
Glücklicherweise hat Micro die Firmware des AVR Mikrocontrollers auf seiner neuen Platine veröffentlicht. Sie ist gut kommentiert (ich hätte es tatsächlich nicht besser machen können) und für private Nutzung frei verwendbar. Das verwendete Poti ist übrigens hier erwähnt.
Das passende Platinenlayout wurde bislang noch nicht veröffentlicht. Im Sourcecode findet sich allerdings die genaue Pinbelegung. Also schnell das CAD Programm aufgerissen und einen Schaltplan erstellt, das sollte doch kein Problem sein!
Statt dem ATTiny24 Mikrocontroller habe ich einen ATTiny44 verwendet. Dieser ist Pin- und Softwarekompatibel und verfügt über mehr FLASH-Speicher für eventuelle Erweiterungen. Damit sich der AVR nicht aufschwingt habe ich außerdem zusätzlich noch einen 10μF Kondensator (C2) vorgesehen. Ansonsten ist alles wie im Original umgesetzt.
Der chinesische Nachbau Stick wird entsprechend Micros Einbauanleitung zerlegt und von Bauteilen befreit, alle relevanten Positionen ausgemessen und in das CAD Programm übertragen. Abwechselnd wird probegedruckt und korrigiert bis alles 100% exakt passt.
Nun können die restlichen Bauteile platziert, und die Leiterbahnen gerouted werden. Die Transparentfolien für Platinenober- und Unterseite werden gedruckt, die doppelseitige Leiterplatte belichtet, entwickelt, geätzt, gebohrt, zugeschnitten und anschließend bestückt. Besonders Spaßig: Durchkontaktierungen unter Controller und Poti mit 0,6mm Bohrloch. Ein eingelöteter Draht stellt die Verbindung her. Nach dem Verlöten werden die Lötstellen der Durchkontaktierungen vorsichtig runtergeschliffen damit die darüber montierten Komponenten wieder möglichst Plan auf der Platine aufliegen. Dies ist natürlich nur für das Prototyping nötig. Spätere, kommerziell hergestellte Platinen sind bereits chemisch durchkontaktiert - und vor allem auch mit Lötstopplack überzogen.
Erste Testhardware ist nun fertiggestellt!
Jetzt fehlt nur noch die Firmware.
Die Firmware
Die ZIP-Datei von Micro beinhaltet ein AVR Studio Projekt sowie vorcompilierte HEX und EEP Files. Es ist also möglich das Projekt selber zu compilieren (falls Veränderungen vorgenommen werden sollen) oder aber direkt HEX und EEP zu flashen. Zunächst gehe ich auf letzteres ein.
Wir benötigen das Programm Avrdude sowie einen AVR In System Programmer. Ich verwende den USBASP. Auf meiner Platine ist ein 6-poliger Pin-Header für den ISP vorhanden. Dieser wird (am einfachsten mit angelöteten Drähten) zum Programmer durchverbunden.
Die Dateien "N64 Stick Converter PCB v2.1.hex" sowie .eep aus dem Ordner Debug werden entpackt und vorsichtshalber in "N64_Stick_Converter_PCB_v2.1.hex" sowie .eep umbenannt, da uns Leerzeichen im Dateinamen unter Umständen Probleme bereiten könnten.
In einem neu geöffneten Terminal (Windows: Eingabeaufforderung) wechseln wir in unseren Ordner und führen dort folgende Kommandos zum Setzen der Fusebits und Beschreiben von Flash und EEPROM aus:
avrdude -p attiny44 -P usb -c usbasp -U flash:w:N64_Stick_Converter_PCB_v2.1.hex
avrdude -p attiny44 -P usb -c usbasp -U eeprom:w:N64_Stick_Converter_PCB_v2.1.eep
Hat alles ohne Fehlermeldung geklappt, können die Drähte wieder abgelötet werden. Anschließend wird die Kalibrierung des Sticks laut Handbuch durchgeführt.
Firmware im Selbstbau
Wer statt dem vorcompilierten Debug-Build lieber selber bauen möchte kann das Projekt entweder in AVR Studio öffnen oder es auf der Konsole compilieren. Da es zu AVR Studio genug Anleitungen gibt und ich das Arbeiten ohne Entwicklungsumgebung direkt auf der Konsole bevorzuge, soll nachfolgend gezeigt werden wie sich die Firmware auch ohne IDE compilieren und flashen lässt.
Dazu werden AVR-GCC Compiler und Avrdude benötigt. Unter Windows kann einfach WINAVR installiert werden. Unter Linux benötigen wir die Pakete avr-gcc, avr-binutils, avr-libc und avrdude, welche über den Paketmanager (z.B. yum oder apt-get) installiert werden.
Wir entpacken nun die Datei "N64 Stick Converter PCB v2.1.c" aus dem ZIP-Archiv in einen Ordner und benennen sie vorsichtshalber in "N64_Stick_Converter_PCB_v2.1.c" um keine Leerzeichen im Dateinamen zu haben. Außerdem wird mein Makefile (Download unten) in diesen Ordner entpackt.
Hier führen wir in unserem Terminalfenster folgende Kommandos aus:
make fuse
make program
Wenn es keine Fehlermeldungen gab kann, wie oben schon beschrieben, mit der Kalibrierung fortgefahren werden.
Nachbau des Projektes
Mein Layout sowie Micros Software dürfen für private Zwecke frei genutzt werden. Wer des Bastelns weniger mächtig ist oder auch andere Joystick-Potis montieren will sollte definitiv besser zu Micros Platine / Bausatz greifen. Mit eingerechneten Versandkosten ist das sowieso billiger. Wirklich. Nun gut, genug der Warnung.
Das von mir erstellte, alternative Layout ist bei OSH Park verfügbar. OSH Park ist ein Anbieter für Leiterplattenproduktion mit Sitz in den USA. Durch Pooling lassen sich dort Platinen von Open Source Projekten zu einem unschlagbar günstigen Preis bestellen. 6 USD pro drei Stück, doppelseitig Durchkontaktiert, lila Lötstopplack, beidseitiger Bestückungsdruck, Kontakte vergoldet.
Micros Platine v3
Ein kleiner Nachtrag: Micro hat dritte Version seiner Platine / Firmware angekündigt! Details dazu im Circuit-Board.
Video vom Aufbau
Downloads & Links
- Schaltplan (PDF)
- Teileliste (PDF)
- Leiterplatte bei Aisler (Deutschland)
- Leiterplatte bei OSH Park (USA)
- Download der Gerber-Files zur Leiterplatte
- Sourcecode von Micro (Link zu nfggames.com) [Mirror]
- Mein Makefile zum Compilieren auf der Konsole
- Foto des passenden Sticks (Link zu circuit-board.de) [Artikel bei Conrad Elektronik]
Die in diesem Beitrag genannten Markennamen sind Eigentum der jeweiligen Hersteller.