# DB9 zu USB Adapter Dieses Projekt ermöglicht es, alte **DB9-Joysticks** (wie den Amiga-Joystick oder andere Retro-Joysticks) mit modernen Computern über **USB** zu verbinden. Mithilfe eines **Raspberry Pi Pico** und eines **DB9-Anschlusses** werden die Joystick-Eingaben ausgelesen und als USB-Gamepad-Signale ausgegeben, sodass der Joystick mit modernen Systemen und Emulatoren verwendet werden kann. ## Funktionen - Unterstützt **DB9-Joysticks** (z. B. Amiga, C64, Atari) - Erfasst **2 Achsen** (X und Y) und **1 Feuertaste** - Wandelt Joystick-Eingaben in **USB HID**-Gamepad-Signale um - Plug-and-Play auf modernen Betriebssystemen (Windows, Linux, macOS) - Geschrieben in **C++** mit der **TinyUSB**-Bibliothek zur USB-HID-Unterstützung ## Hardwareanforderungen - **Raspberry Pi Pico** (empfohlen wegen der einfachen USB-HID-Unterstützung) - **DB9-Buchse** für den Joystick-Eingang - **Kabel** für die Verbindungen ## Softwareanforderungen - **Arduino IDE** mit Unterstützung für den Raspberry Pi Pico (RP2040 Boards) - **Adafruit TinyUSB Library** - **TinyUSB Library** (in der Adafruit-Bibliothek enthalten) Stelle sicher, dass du diese Bibliotheken über den Bibliotheksmanager der Arduino IDE installierst. ## Schaltplan Die Pins des DB9-Anschlusses müssen mit den entsprechenden GPIO-Pins des Raspberry Pi Pico verbunden werden: | DB9-Pin | Signal | Pico-Pin | |---------|------------|---------------| | 1 | Hoch | GPIO 10 | | 2 | Runter | GPIO 11 | | 3 | Links | GPIO 12 | | 4 | Rechts | GPIO 13 | | 6 | Feuer | GPIO 14 | | 8 | Masse | GND | ## Code-Erklärung Die Firmware liest die Joystick-Eingaben aus und sendet die Daten als USB-Gamepad-Bericht. Die **TinyUSB-Bibliothek** übernimmt die USB-Kommunikation. Der Joystick hat zwei Achsen (X und Y) und eine Taste für den Feuerknopf. Hier eine Zusammenfassung des verwendeten HID-Berichtsdeskriptors: - **X- und Y-Achsen**: 8-Bit-Werte, Bereich von -127 bis +127 - **1 Taste**: 1-Bit-Wert (an/aus) - **USB HID-Deskriptor-Format**: Benutzerdefinierter Berichtsdeskriptor für minimale Joystick-Eingaben ### Wichtige Funktionen - `setup()`: Initialisiert das USB-Gerät und konfiguriert die GPIO-Pins als Eingänge. - `loop()`: Liest den Status des Joysticks und sendet einen USB-Gamepad-Bericht an den Host. - `usb_hid.sendReport()`: Sendet den HID-Bericht mit dem aktuellen Joystick-Zustand. ## Verwendung 1. **Firmware auf den Raspberry Pi Pico hochladen** über die Arduino IDE. 2. **DB9-Joystick an den Pico anschließen** über die Buchse. 3. **Pico mit dem PC verbinden**. Der Adapter wird als USB-Gamepad erkannt. 4. Funktionalität des Joysticks mit Tools wie `jstest` (Linux) oder den **Gamepad-Einstellungen** unter Windows testen. ## Testen ### Linux (`jstest`) Um sicherzustellen, dass der Joystick korrekt funktioniert, kannst du das Tool **jstest** unter Linux verwenden: ### Windows Öffne die **Systemsteuerung > Geräte und Drucker** und prüfe die **Gamecontroller-Einstellungen**, um die Joystick-Eingaben zu testen. ## Zukünftige Erweiterungen - Gehäuse (z. B. 3D-gedrucktes Gehäuse)