
Vor ein paar Tagen hat mich jemand gebeten, ihren Joystick für Pegasus im Stil eines Sticks zu "zaubern". Solche Controller waren zum Beispiel bei Atari- oder Commodore-Konsolen beliebt, während meine Augen bei Pegasus so etwas noch nie gesehen hatten.


Es war also notwendig, einen vorgefertigten Joystick zu finden und seine Kommunikationsschnittstelle an die Konsole anzupassen. Die Joypads aus den obigen Fotos haben den einzigen Vorteil - sie sind in der Kommunikation trivial: Im Inneren haben wir nur Kontaktfelder für jede der Richtungen und Tasten, und die Signale für sie werden in separaten Drähten herausgeführt, die beim Drücken jeweils an Masse angeschlossen sind.
Die Kehrseite ist die eher dürftige Bedienungsgenauigkeit (nach dem Neigen des Hebels über einen bestimmten Winkel hinaus wird das Kontaktfeld kurzgeschlossen) und, trotz des Anscheins, der Preis. Ich denke, die Leute assoziieren sie mit den Konsolen der alten Zeit, weil ich nichts zu einem vernünftigen Preis gefunden habe. Und nur eine Taste, und der Pegasus benötigt vier (A, B, Select, Start).
Eine andere Idee war, ein modernes USB-Joypad zu kaufen. Der Nachteil wäre hier jedoch die Schwierigkeit, mit ihm zu kommunizieren (die Notwendigkeit einer USB-Host-Unterstützung). Es wäre möglich, irgendwie mit der Platine im Inneren zu verbinden, aber es würde eine eingehende Analyse des Inneren erfordern, die ich vermeiden wollte.
Als goldener Mittelweg erwies sich der Kauf eines Controllers für den alten Gameport (DB15-Pin), der einmal mit Soundkarten verbunden war. Das Kommunikationsprotokoll ist sehr einfach und die Popularität und die niedrigen Preise auf dem Sekundärmarkt (5-11 €) haben dazu geführt, dass ich es, zwei solcher Joypads an einem Tag geschafft habe.

Die GamePort-Spezifikation ermöglicht es Ihnen, digitale Informationen über den Zustand von vier Tasten und analoge Informationen über den Zustand von vier Schiebereglern (d. h. X1, Y1, X2, Y2) zu senden. Die Norm legt fest, dass die Auslenkung des Schiebers einer linearen Widerstandsänderung von 0-100 kΩ entspricht.

Erinnern Sie sich noch, wie Sie zu Zeiten von Windows 95 einen solchen Joystick in der Systemsteuerung kalibriert haben? Es ging einfach darum, dass das System weiß, welcher Widerstand der neutralen Position des Hebels (in der Mitte) entspricht und wie groß der Änderungsbereich für die extremen Auslenkungen ist.

Adapterdesign
Einen solchen Joystick mit dem Pegasus unmittelbar zu verbinden ist unmöglich. In Pegasus ist der Zustand jeder Taste erstens digital und zweitens seriell gesendet. Im Gamepad haben wir digital + analog und parallel.
Also dachte ich mir, dass ich einen passenden Adapter auf Basis des beliebten Atmega 88 Mikrocontrollers erstellen würde (ich habe ein bisschen davon, man musste kleine Vorräte machen, weil die Preise der Chips auf aliexpres fingen an verrückt zu werden).
Der Atmega 88 ist dem Atmega 8 sehr ähnlich, hat sogar etwas mehr Funktionen (z.B. Unterbrechungen an jedem der Pins) und war bei den östlichen Brüdern günstiger als die acht. Wie Sie sehen, reguliert das Angebot die Nachfrage.

Widerstand kann auf verschiedene Weise abgelesen werden. Im PC lädt dieser Widerstand einen Kondensator (auf der Soundkarte), der mit dem Flip-Flop verbunden ist. Die Software misst die Zeit von der vollständigen Entladung bis zur Änderung des Zustands des Flip-Flops und nähert sich basierend darauf der Auslenkung an.
In meinem Fall war es einfacher, der Masse einen Widerstand 100 kΩ hinzuzufügen, indem ein Teiler erstellt wurde, und der Spannungswert (2,5 V - 5 V) wurde mit dem ADC-Wandler gelesen. Auch eine Taste und ein Display sind im Adapter praktisch (dazu gleich mehr). Und natürlich Anschlüsse zum Anschluss an die Konsole und das Joypad. Ich habe mich entschieden, das Ganze in Form von zwei mit Klebeband verbundenen Platinen umzusetzen, mit nur der DB15-Buchse auf der kleineren)




Kalibrierung
Natürlich ist es notwendig, den Joystick zu kalibrieren, oder genauer gesagt, den Bereich zu bestimmen, ab dem die Auslenkung des Hebels als "Drücken" der Richtung zu betrachten ist. Es ist auch nützlich, einzustellen, welche der Joypad-Tasten den Pegasus-Tasten A / B / Select / Start entspricht. Der obige Konfigurationsmodus wird durch Drücken der Taste CONF aktiviert. Auf dem Display erscheinen folgende Aufschriften:
o LE - den Hebel nach LINKS in die gewünschte Position neigen und, während man ihn gedrückt hält, die Taste CONF drücken
o PR, GO, DO - dasselbe, nur mit dem Hebel nach rechts / oben / unten
o B / A / SE / ST - die Taste auf dem Joypad drücken, die von Pegasus entsprechend interpretiert wird
Alle diese Informationen werden im EPROM-Speicher von Atmega gespeichert, sodass nach dem Aus- / Einschalten keine Neukalibrierung erforderlich ist, es sei denn, Sie möchten die Tastenbelegung ändern oder einen anderen Joystick anschließen).
Nun, möchte ich nur hinzufügen, dass das Spielen mit einem solchen Joystick (zumindest in Plattformspielen) eine Qual ist, vielleicht für einige Schießereien oder Kämpfe geeignet. Nun, über Geschmäcker wird nicht gesprochen.
Cool? DIY-Rangliste