USB-Joystick-Adapter schnell und kostengünstig selber gebaut


Einführung

Von der Firma Retronics Design gibt es einen solchen fertigen Adapter für knapp 30 kanadische Dollar zu kaufen. Das Besondere an diesem Adapter ist, dass es verschiedene Firmware-Versionen gibt, für verschiedene Arten von Joysticks. So kann man nicht nur die bekannten Atari-Joysticks anschließen, sondern eine Vielzahl anderer Marken sind verwendbar, wie Sega, Texas Instruments, Coleco, etc. Man muss nur die jeweilige Firmware über USB laden und der entsprechende Joystick kann am PC oder sogar an einem MiSTer FPGA verwendet werden.

Das wirklich praktische daran ist, dass Retronics sowohl das Layout als auch natürlich die verschiedenen Firmware-Versionen kostenlos zum Download anbietet. So kann man sich diesen Adapter selbst bauen. Und der Aufbau ist wirklich auch für Anfänger geeignet. Es werden keine SMD-Bauteile verwendet und das Ganze kann auf einer Streifenrasterplatine recht schnell und einfach selber aufgebaut werden.


Schaltplan

Der Schaltplan und die Firmware können HIER heruntergeladen werden. Ich hatte den Schaltplan aber auch in KiCad übernommen. Warum ich das getan habe, darauf komme ich später noch zu sprechen. Der Schaltplan selbst ist für dieses Projekt nicht so wichtig, was vor allem für weniger Erfahrene interessant ist, das Ganze soll 1:1 auf einer Streifenrasterplatine aufgebaut werden.

Und natürlich habe ich für die Lochraster Platine eine extra Zeichnung angefertigt. Um solche Zeichnungen zu erstellen, kann ich das Open-Source-Projekt DIY Layout Creator empfehlen, das für jede Plattform zum Download bereitsteht. Damit kann man schnell kleine Layouts auf Breadboards oder Stripboards erstellen.

Bauteile Liste

Wie auf dem Bild oben zu sehen ist, werden eine Handvoll Teile benötigt. Ich habe bei Reichelt einen Warenkorb erstellt, den bei Bedarf gerne als Vorlage verwenden kann.

Die Stückliste sieht wie folgt aus:

BezeichnerMengeReichelt Best.-Nr.Bauteil-Typ
R1,R22RND 0W2J0182A10Widerstand, Metalloxyd, 1,8 kOhm, axial, 0,5 W, 5%
R3,R421/4W 68Widerstand, Kohleschicht, 68 Ohm, 0207, 250 mW, 5%
R511/4W 2,2KWiderstand, Kohleschicht, 2,2 kOhm, 0207, 250 mW, 5%
R611/4W 10KWiderstand, Kohleschicht, 10 kOhm, 0207, 250 mW, 5%
C1,C22KERKO 100NKeramik-Kondensator, 100 nF, -20…+80 %, Y5V, 50/100 V, RM 5
C3,C42KERKO 22PKeramik-Kondensator 22 pF, 5 %, NPO, 100 V, RM 2,54
C5,C62X7R-5 68NVielschicht-Keramikkondensator 68N, 10%
C71T356 10U 35Tantal, bedrahtet, 10µF, 35V, 85°C
Z-D1,Z-D22ZF 3,6Zenerdiode, 3,6 V, 0,5 W, DO-35
Y1112,0000-HC49U-SStandardquarz, Grundton, 12,000000 MHz
U11ATMEGA 328P-PU8-Bit-ATMega AVR Mikrocontroller, 32 KB, 20 MHz, PDIP-28
1H25SR100Streifenrasterplatine, Hartpapier, 100x100mm
1USB-A 10080109USB 2.0 A Stecker – freie Enden, 1,8 m, sw
1D-SUB ST 09D-SUB-Stecker, 9-polig, Lötkelch
1KAPPE 09MD-SUB-Kappe f. 9-polig D-Sub, metallisiert
1LIYY 1014-5Steuerleitung 10×0,14mm², ungeschirmt, 5m-Ring

Zusätzlich empfehle ich ein paar Stiftleisten und -buchsen, wenn man die Leitungen nicht direkt auf der Platine anlöten möchte. Auf jeden Fall sollte man eine zweireihige Stiftleiste für die Verbindung zum flashen des ATMega-Chips einlöten. Für die Verdrahtung auf der Streifenrasterplatine kann entweder einen Teil der Steuerleitung genommen, oder eine einfache Litze verwendet werden. Was auch immer gerade zu Hause verfügbar ist, es gibt keine besonderen Anforderungen daran. Gegebenenfalls wäre auch ein Sockel für den ATMega nicht verkehrt. So kann dieser bei Bedarf leicht entnommen werden.

Ansonsten haben wahrscheinlich viele die meisten Bauteile zu Hause, wer die Teile komplett neu bestellen muss, der zahlt bei Reichelt knapp 13,- Euro (Stand 16.04.2018) für die Teile. Meiner Meinung nach, ein sehr guter Preis für diesen vielseitigen Adapter.


Aufbau

Zunächst einmal ein Bild des fertigen Adapters.

Und dann das Ganze als Zeichnung, die vielleicht ein bisschen besser zu erkennen ist:

Am einfachsten ist es, an der Platine als erstes Markierungen anzubringen. Sowohl horizontal als auch vertikal beginnt man in der linken oberen Ecke zu zählen. Dabei wird das Alphabet verwendet. Die obere linke Ecke ist also A-A. Wenn man das Ende des Alphabets erreicht hat, fängt man wieder von vorne an zu zählen. Ein Loch (Lötpunkt) in der 4. Reihe und der 10. Spalte wäre also D-J. Auf der Zeichnung oben findet man Buchstaben wieder (leider etwas schwer zu erkennen, da sehr hell auf weißem Hintergrund).

So kann man die entsprechenden Punkte durch einfaches Zählen oder Buchstabieren leicht finden.

Zuerst müssen einige Streifen an bestimmten Stellen auf der Platine unterbrochen werden. Dies sind die folgenden Stellen:

  • A – P/Q
  • B – P/Q
  • C – P/Q
  • L – I/J
  • M – I/J
  • N – I/J
  • O – I/J
  • P – I/J
  • Q – I/J
  • R – I/J
  • S – I/J
  • T – I/J
  • U – I/J
  • V – I/J
  • W – I/J
  • X – I/J & M/N
  • Y – I/J
  • Z – D/E

Am Beispiel des ersten Schnittpunktes “A – P/Q” bedeutet dies, dass in der horizontalen Reihe A, als erste Reihe, zwischen den Buchstaben P und Q die Streifenbahn durchtrennt wird. Dies geschieht am besten mit einem scharfen Cuttermesser. Gegebenenfalls muss der Schnitt mehrmals wiederholt werden, bis die Leiterbahn vollständig durchtrennt ist.

Anschließend empfehle ich, mit einem Multimeter einen Durchgangstest zu machen, um zu sehen, ob die Leiterbahn wirklich vollständig durchtrennt wurde. Es passiert leicht, dass eine haarfeine, mit dem Auge kaum erkennbare Verbindung übrig bleibt, die später für einen Kurzschluss völlig ausreichend ist.

Wenn alle entsprechenden Stellen durchtrennt und nachgemssen wurden, sollten als nächstes die Drähte, bzw. Litzen eingelötet werden. Dies sind die roten Drähte auf dem Bild, bzw. die grünen, schwarzen, blauen und roten Anschlüsse auf der Zeichnung. Dann können die Bauteile eingelötet werden. Wie üblich sollte die Reihenfolge von klein nach groß erfolgen. Angefangen mit den Kondensatoren oder Dioden und abschließend mit dem AtMega ganz am Ende.

Nun werden die Stiftleisten bzw. die Einzeldrähte für das USB-Kabel und den Joystick-Anschluss eingelötet. Die Farben habe ich oben in der Übersicht eingezeichnet. Da der USB-Stecker bereits mit dem Kabel verbunden ist, braucht nur noch das offene Ende entsprechend der Farben eingelötet werden.

Für den Joystickanschluss muss zusätzlich die D-SUB 9 Buchse angeschlossen werden. Die Pinbelegung ist wie folgt:

Wenn der Adapter fertig ist, sollte dieser wie folgt aussehen:

Übrigens habe ich am Ende dieses Artikels ein Paket zum Download bereitgestellt, das alle notwendigen Dateien für den Zusammenbau enthält. Auch die Zeichnung ist in höherer Auflösung beigefügt.


Programmieradapter für den ATMega

Damit der Joystick-Adapter überhaupt funktioniert, wird die entsprechende Firmware benötigt. In diesem Artikel werde ich die Firmware für Atari Joysticks verwenden. Wenn eine andere Firmware benötigt wird, kann diese von der Retronics Homepage heruntergeladen werden.

Nun kann man die Firmware direkt selbst flashen, der Adapter funktioniert damit problemlos. Allerdings braucht man dann immer einen Programmieradapter für den ISP-Port, wie z.B. den beliebten USBasp oder den EPROM-Brenner MiniPro TL866A, der ebenfalls einen solchen Port hat.

Bequemer ist es, vorher einen Bootloader zu flashen. Denn damit kann man die Firmware über den PC und dessen USB-Anschluss und ein kleines Tool jederzeit einfach ändern, bzw. aktualisieren. Die Vorgehensweise ist in beiden Fällen die selbe, nur die Datei ist eine andere. Deshalb beschreibe ich hier die Installation des Bootloaders, weil ich diesen Weg für den bevorzugten halte.

Wie bereits erwähnt, wird ein sogenannter ISP-Programmieradapter benötigt. Es gibt verschiedene Typen unter verschiedenen Namen. Einer der bekanntesten und günstigsten ist der USBasp.

Hier ist eine kleine Auswahl an verschiedenen Programmieradaptern, die für die ATMega-Serie verwendet werden können:

Welches Modell verwendet wird, bleibt jedem selbst überlassen. Auf jeden Fall reicht ein günstiges Modell vollkommen aus. Die gibt es aus China schon für knapp 2,- Euro.

Um den Mikroprozessor zu flashen, wird neben der eigentlichen Firmware natürlich auch eine entsprechende Software benötigt. Ich persönlich verwende das Tool AVRDUDE, das man kostenlos für Windows, Linux und MacOS herunterladen kann. Es ist ein Kommandozeilentool, das unter Linux und MacOS in einer Shell und unter Windows in einer Eingabeaufforderung (Kommandozeile, bzw. CMD) läuft. Das Tool unterstützt fast alle ISP-Programmieradapter. Als Voraussetzung werden die LIBUSB-Treiber benötigt, die vorher installiert werden müssen.

Falls es Fragen oder Probleme bei der Installation geben sollte, kann ich auch ein kleines Tutorial dazu schreiben. Ansonsten finden sich im Internet schon etliche hervorragende Tutorials zu diesem Thema.


Bootloader flashen

Wenn alles vorbereitet ist, kann der Bootloader auf den ATMega geflasht werden. Dazu muss man den Programmieradapter an die Streifenrasterplatine anschließen. Dazu wird der 6polige Stecker verwendet. Dabei muss auf die Polarität geachtet werden. Auf dem kleinen Flachbandkabel an den Programmiergeräten ist eine Leitung immer rot markiert. Diese Leitung steht für Pin 1. Auf unserer Platine wäre PIN 1 dann in der oberen Reihe, links.

In diesem Beispiel hat der Programmieradapter bereits den passenden 6-poligen Stecker, der dann einfach auf die Platine gesteckt werden kann. Viele Programmieradapter haben aber einen 10poligen Stecker. Außerdem muss vorausgeschickt werden, dass diese ISP-Schnittstelle in beiden Varianten vorhanden ist. Einige Programmieradapter werden mit einem passenden Adapter geliefert. Dann kann man einfach den entsprechenden Adapter nehmen. Wenn der Programmieradapter keinen solchen Adapter hat, können einfach mit Dupont-Verbinder oder auch “Jumper Wire” genannt, gearbeitet werden, die auch auf Breadboards Verwendung finden.

Auf dem Bild sieht man die bunten Dupont-Verbinder. Mit diesen kann man einfach von der 10poligen Version auf den 6poligen Stecker adaptieren. Das ist deshalb so einfach, weil nur 6 Leitungen für die ISP-Schnittstelle benötigt werden. Die 10polige Version hat nur 4 zusätzliche GND-Leitungen.

Auf dem Bild kann man gut erkennen, wie die einzelnen Anschlüsse verbunden werden müssen. Anschließend kann der Programmieradapter an die USB-Schnittstelle des Computers angeschlossen werden.

avrdude -p <CHIP-TYP> -c <PROGRAMMINGADAPTER> -U flash:w:<FLASHFILE>:i

Wenn der Befehl ohne Parameter ausgeführt wird, erhält man eine Liste mit den möglichen Parametern. Wenn man mehr über einen einzelnen Parameter wissen möchte, kann entweder in der Dokumentation nachgeschaut oder ein Fragezeichen hinter den Parameter geschrieben werden.

Wenn man zum Beispiel wissen möchte, welchen Wert wir hier für unser ATMega verwenden muss, dann einfach folgendes eingeben:

avrdude -p ?

Danach kommt eine recht lange Liste zurück. Für dieses Projekt wird ein ATMega328P-PU Mikrokontroller verwendet. Diesen finden wir in der Liste auch mit dem Eintrag “m328p = ATmega328P“. Vorne steht der Wert, der für AVRDUDE wichtig ist: m328p.

Jetzt wird es ein bisschen schwieriger. Denn der nächste Parameter hängt von dem verwendeten Programmiergerät ab. Auch hier kann man die Liste mit einem Fragezeichen hinter dem Parameter “-c” erhalten. Wird das weit verbreitete USBasp verwendet, dann würde der Eintrag wie folgt aussehen: “usbasp = USBasp, https://www.fischl.de/usbasp/” Und hier wäre der einzugebende Wert: usbasp

Die meisten günstigen Adapter von eBay sind Varianten des USBasp. Manchmal hilft der Wert “usbasp-clone”. Ansonsten kann man auch einfach testen, ob der Programmieradapter erkannt wird. Ansonsten einfach einen anderen Adapter testen.

Die eigentliche Firmware, bzw. in unserem Fall der Bootloader wird mit dem Parameter “-U” geflasht. Auch die Fuses werden auf diese Weise gesetzt. Der Wert hinter “-U” gibt an, ob die Firmware (oder der Bootloader) oder z.B. eine Fuse gesetzt werden soll.

An dieser Stelle verwenden wir die Werte FLASH, EFUSE, LHUSE und HFUSE. Die anderen Werte werden immer durch einen Doppelpunkt “:” getrennt. Danach folgt ein “w” für write. Schließlich folgt der Dateiname der zu flashenden Datei. Schließlich wird der Dateityp angegeben. Dieser kann in den meisten Fällen weggelassen werden, aber es schadet nicht, ihn anzugeben. Da es sich um eine Intel HEX-Datei handelt, wäre der richtige Parameter in diesem Fall ein “i“.

Komplett würde der Parameter wie folgt aussehen: -U flash:w:bootloader_retronics_v3.hex:i

Die Datei ist auch in dem Paket zu finden, das weiter unten zu finden ist

Wenn der Bootloader geflasht werden soll und ein USBasp-Programmieradapter verwendet wird, würde der vollständige Befehl wie folgt aussehen:

avrdude -p m328p -c usbasp -U flash:w:bootloader_retronics_v3.hex:i

Nun müssen die Fuses gesetzt werden. Dies geschieht in ähnlicher Weise mit dem folgenden Aufruf:

avrdude -p m328p -c usbasp -U lfuse:w:0xdf:m -U hfuse:w:0xd2:m -U efuse:w:0xfd:m

Wenn es keine Fehlermeldungen gibt, ist der Bootloader nun installiert und die Fuses sind gesetzt, so dass die eigentliche Firmware geflasht werden kann.


Flashen der Firmware

Die Firmware kann nun jederzeit mit einem kleinen Tool direkt ohne Programmieradapter geflasht werden. Es wird lediglich ein Joystick benötigt. Diesen schließt man an den 9poligen D-SUB-Stecker an, drückt den Feuerknopf und hält ihn während der gesamten Prozedur gedrückt. Den Joystickadapter mit gedrücktem Feuerknopf an den USB Port des Rechners anschließen und weiterhin diesen auch gedrückt halten. Dadurch wird der Bootloader aktiviert, der das Flashen der Firmware ermöglicht.

Das Tool ist in einer Linux- (“bootloadHID“) und einer Windows-Version (“HIDBootFlash.exe“) verfügbar. Die Windows-Version hat eine eigene Oberfläche, die recht selbsterklärend ist. Zunächst auf “Find Device” klicken, bis der Joystick-Adapter gefunden wurde, danach auf “Open .hex File” klicken und die Firmware-Datei “Atari_C64_Amiga_Joystick_v3.1.hex” auswählen. Nun auf die Checkbox “Reboot AVR” klicken und dann auf “Flash Device“.

Nun beginnt der eigentliche Flashvorgang, der mit einer entsprechenden Meldung quittiert wird. Sollte etwas schief gelaufen sein, z.B. wenn versehentlich der Feuerknopf losgelassen wurde, kann der gesamten Vorgang jederzeit wiederholt werden. Dank dem Bootloader kann nichts schief gehen.

Wurde die Firmware fehlerfrei installiert, kann der Feuerknopf nun losgelassen werden. Anschließend die USB-Verbindung trennen.


Fertigstellen

Jetzt ist der USB-Joystick-Adapter einsatzbereit. Er kann unter Windows, Linux und MacOS verwendet werden. Er funktioniert aber auch hervorragend auf dem MiSTer FPGA.

Auf der Retronics-Website findet man weitere Firmware-Versionen für andere Joysticks. Auch gibt es von Zeit zu Zeit neue Versionen, oder Bugfixes. Dank des Bootloaders kann die Firmware immer recht schnell und einfach neu geladen werden. Alles was benötigt wird, ist der Joystick-Adapter, ein Joystick, ein PC mit Windows oder Linux und das Flash-Tool.

Ich wünsche viel Spaß beim nachbauen.

Aber Moment mal… Der aufmerksame Leser wird sich sicher fragen, was mit dem Schaltplan vom Anfang passiert ist. Und es stimmt, ich habe ihn nicht mehr erwähnt. Der Schaltplan wird benötigt, um unseren Joystick-Adapter auf einer Streifenrasterplatine…

in folgendes zu “verwandeln”:

Und jetzt habe ich nicht einfach die Platine weggelassen und die Stecker mit einem Kabel verbunden. Ich habe einfach eine kleine Platine mit SMD-Bauteilen aus der Streifenrasterplatine, bzw. dem Schaltplan gemacht. Und ich habe sie so verkleinert, dass diese in das kleine Gehäuse des D-SUB 9 Steckers passt. Wenn dafür Interesse besteht, einfach von Zeit zu Zeit wieder hier rein schauen. Ich werde bald einen eigenen Artikel darüber verfassen.

Wer das ganze etwas professioneller möchte, inkl. einem passenden Gehäuse, für den empfehle ich dieses Projekt: USB 2X Joystick Adapter selbst gemacht


Download

Wie weiter oben erwähnt, hier noch das Paket mit allen notwendigen Dateien:

0 Comments
Älteste
Neueste
Nach oben scrollen