GamePort Joystick Adapter

  • Eine Möglichkeit USB Joysticks am Gameport zu verwenden gibt es wahrscheinlich prinzipiell nicht oder? Hab da ein paar coole gesehen mit Metall-Standfuß 🙂

    1. K6-2+ 400, 128 SDRAM, Elsa Erazor II, USB Onboard, 80GB HDD, SB AWE64 (WIN98se)

    2. P1 133, 64MB PS/2, Matrox 4MB + Voodoo 4MB, CD-Wechsler 4x

    3. Tandon 286, 8Mhz, 1Mb Ram+3MB XMS, TVGA9000a 512Kb, SB CT2940->IDE Quadspeed-CD, Realtek 8019AS, XTIDE+1GB CF (DOS 6.22 2x2GB)

    4. M326 486DLC + 4c87DLC, 8MB SIMM, TVGA8900c 1Mb, SBPro2, 8x CD, Compex RL2000a PNP+XTIDE Rom, GW2760ex 16GB CF (DOS 7.1)

    5. I7 6700K @4.5Ghz, 16GB DDR4, GTX1080, 250GB SSD + 512GB NVME

  • So ist es. Jemand aus dem Verein zum Erhalt klassischer Computer hat sowas wohl auch schon mal gemacht, für den Dragon. Der Unterschied zum PC-Interface ist neben dem anderen mechanische Stecker wohl, dass das Poti (ebenfalls 100kOhm) am anderen Ende gegen Ground gezogen wird. Deshalb baue ich bei meiner Lösung auch Schalter ein, die das Poti optional gegen Ground ziehen, sodass man zwischen PC und (mit einem Kabeladapter) Dragon/Tandy umschalten kann. Aber die Designs existieren.


    Im Moment machen die Buttons bei mir noch nicht ganz das, was sie sollen (muss ich noch rausfinden, warum, weil es ja das gleiche Prinzip ist, wie beim Amiga-Joystick, da funktionieren sie), und ich muss noch DS1803-100 bestellen (hab versehentlich -010 bestellt, aber mit nur 10kOhm bewegt sich der Joystick am PC nur in einem sehr kleinen Radius oben-links - aber er bewegt sich schon!). Außerdem ist jeder USB-Joystick anders, da werde ich wohl noch ein paar Exemplare durch testen müssen.


    Das Gesamtprojekt ist ja ein Interface-Monster und bis alle Interfaces komplett durchprogrammiert sind, wird es noch eine gewisse Zeit dauern. Aber da ja scheinbar Bedarf da ist, werde ich das Projekt Joystick etwas priorisieren und einen Spinoff mit einem kleineren Board machen. Das ist schnell getan. Der Einfachheit halber, auch wenn der natürlich etwas teurer ist, wohl auch mit dem Mega2560 und nicht mit dem Uno (hatte glaub ich vorher mal Nano geschrieben, das USB-Host-Shield benötigt aber einen Uno oder Mega).


    Für alle interessierte: Gebt mir noch 1-2 Monate und seit euch im Klaren, dass das Ganze etwas teurer wird. Ich werde zwar die PCBs (vermutlich knapp 10 Euro inkl. Versand/Zoll/Etc) und die DS1803-100 (etwas schwerer zu bekommen, aber ich hab dank Nebengewerbe einen Account bei RS, die haben die, 2 Stück um je 5 Euro, Reichelt hat nur die -010) sowie Kleinkram wie Pinheader und Sockel gerne als Sammelbestellung zum Selbstkostenpreis weitergeben, Löten sollte jeder selbst hinbekommen (alles Through-Hole), aber ihr braucht nur einen Mega2560 und ein USB Host Shield.


    Was den "Klassisch zu Modern" Weg angeht scorp da würde ich mich auch mal für ein Kit, gerne komplett, einreihen.

    Arbeitspferde: Xeon E5-2683v3/32GB/GTX1650 Super/1TB NVMe+8TB HDD und Q6600/8GB/GTX460/1TB SSD+4GB+2GB HDDs

    Retro Maschinen:

    P2-450/256MB/128GB SSD/TNT2-M64+2xVoodoo2/Soundblaster 16+Yamaha DB50XG

    Commodore PC20-II/V20+8087/XTCF lite 256MB/Tandy Sound

    286-16/287-8/4MB/256MB CF/ET3000/Aztech NX-II

    Amiga 500/1MB/Gotek/Vortex AT-once Plus 286 + Amiga 500/1MB

    Pentium 166/FAST Video Machine+DDPR+YUV Board

    Projekt-Rechner: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64

    Projekte: USB RetroArduInput

  • Ja, ich spiele tatsächlich mit dem Gedanken. Es sind ja nicht mal alle Projekte, die ich bisher veröffentlich habe.... Aber sollte ich einen Online Shop machen, werden es nicht die Preise sein, die ich hier im Forum verlangt habe. Ich habe bisher immer alles praktisch für Materialkosten verkauft und nur das verdient, was die Leute so drauf gelegt haben. Finde ich auch ok, so lange es hier in kleinen Runde passiert.

  • ein exklusiver Onlineshop nur für das Forum wäre ja mal hammer geil😁👍

    1. K6-2+ 400, 128 SDRAM, Elsa Erazor II, USB Onboard, 80GB HDD, SB AWE64 (WIN98se)

    2. P1 133, 64MB PS/2, Matrox 4MB + Voodoo 4MB, CD-Wechsler 4x

    3. Tandon 286, 8Mhz, 1Mb Ram+3MB XMS, TVGA9000a 512Kb, SB CT2940->IDE Quadspeed-CD, Realtek 8019AS, XTIDE+1GB CF (DOS 6.22 2x2GB)

    4. M326 486DLC + 4c87DLC, 8MB SIMM, TVGA8900c 1Mb, SBPro2, 8x CD, Compex RL2000a PNP+XTIDE Rom, GW2760ex 16GB CF (DOS 7.1)

    5. I7 6700K @4.5Ghz, 16GB DDR4, GTX1080, 250GB SSD + 512GB NVME

  • GuillermoXT ja, nennt sich "Biete" :D :D

    Du meinst wohl "Sonderpreise" für Forenmitglieder?

    Ja stimmt eigentlich ich habe auch gar nicht daran gedacht dass wir sowas schon längst haben XD

    1. K6-2+ 400, 128 SDRAM, Elsa Erazor II, USB Onboard, 80GB HDD, SB AWE64 (WIN98se)

    2. P1 133, 64MB PS/2, Matrox 4MB + Voodoo 4MB, CD-Wechsler 4x

    3. Tandon 286, 8Mhz, 1Mb Ram+3MB XMS, TVGA9000a 512Kb, SB CT2940->IDE Quadspeed-CD, Realtek 8019AS, XTIDE+1GB CF (DOS 6.22 2x2GB)

    4. M326 486DLC + 4c87DLC, 8MB SIMM, TVGA8900c 1Mb, SBPro2, 8x CD, Compex RL2000a PNP+XTIDE Rom, GW2760ex 16GB CF (DOS 7.1)

    5. I7 6700K @4.5Ghz, 16GB DDR4, GTX1080, 250GB SSD + 512GB NVME

  • scorp würdest du das auch mit meinem Gravis Phoenix machen ? Ich habe auch irgendwo noch das original DOS Programm dazu...

    Damit ist es leider deutlich komplizierter. Der Gravis Phoenix ist, wie ich schon oben geschrieben habe, ein Hybrid aus Joystick und Tastatur. Mein Adapter kann sowas hardwaretechnisch schon gar nicht. Ich meine bei dem Thrustmaster ist der zweite Kabel, der an die Tastatur geht, optional, und man braucht es nur um an Joystick irgendwelche Befehle zu schicken, Einstellungen und so weiter. Tex bitte korrigiere mich, wenn ich falsch liege. Das Teil sollte an einem GamePort auch funktionieren, wenn das zweite Kabel in der Luft hängt. Bei dem Gravis Phoenix ist es IMHO nicht optional, da die Tasten alle als Tastatur Kombinationen an den Rechner über das Tastatur-Kabel geschickt werden. Das bedeutet, dass der Adapter in der Form erst mal sich dafür nicht eignet. Außerdem habe ich für Thrustmaster (Protokoll) den Treiber schon geschrieben, daher hoffe ich, dass da nicht mehr viel Arbeit auf mich zu kommt. Das Problem ist gerade, dass ich 10000 Projekte habe und der Tag nur 24 Stunden. Vielleicht werde ich meinen Adapter in Zukunft so erweitern, dass man auch solche Joysticks, wie den Gravis Phoenix anschließen kann, aber zur Zeit erst Mal eher nicht.

    So kompliziert ist es in meinen Augen auch wieder nicht PS/2 auf USB Adapter gibt es ja fertig zu kaufen, mir ging es darum den "Joystick Teil" zu adaptieren sofern das überhaupt nötig ist. Einziger Schönheitsfehler wäre dann das man zum Programmieren auf Retro Hardware zurückgreifen muss aber das ist für uns ja kein Problem...

    Der Joystick hat keinen speziellen Treiber oder das ist alles Tastatur bzw. Gameport Emulation.

    386SX- 20 Mhz "Erster eigener Rechner!2" NoName Komponenten

    486DX -30 "Industrie PC" auf Steckkarte

    Super Sockel 7 Gigabyte GA-5AA 3Dfx Voodoo 3500 TV

    AMD "Geode" ebenfalls Steckkarte für Backplane

    3x IBM Netvista 8364 "ThinRetroSystem" 1-2 von denen würde ich tauschen...


    "und noch so einiges mehr... "

  • Stefan307 also, so weit ich es sehe wird der Joystick Teil auch funktionieren, aber Du wirst nur 4 Tasten und 4 Achsen haben. Das wäre etwas enttäuschend bei dem Biest :D Der Rest geht scheinbar über die Tastatur, wenn ich es richtig verstehe. Ich sage ja nur, dass es schwierig wird, wenn man auch den Teil haben will. Das würde bedeuten, dass der Adapter mit einer PS/2 (oder DIN5?) Buchse ausgestattet werden muss und man muss dann die Tastatur-Signale abfangen und entsprechend über USB als Joystick weiter geben. An sich alles machbar, aber eben Aufwand für neue Platine und Software.

  • Stefan307 also, so weit ich es sehe wird der Joystick Teil auch funktionieren, aber Du wirst nur 4 Tasten und 4 Achsen haben. Das wäre etwas enttäuschend bei dem Biest :D Der Rest geht scheinbar über die Tastatur, wenn ich es richtig verstehe. Ich sage ja nur, dass es schwierig wird, wenn man auch den Teil haben will. Das würde bedeuten, dass der Adapter mit einer PS/2 (oder DIN5?) Buchse ausgestattet werden muss und man muss dann die Tastatur-Signale abfangen und entsprechend über USB als Joystick weiter geben. An sich alles machbar, aber eben Aufwand für neue Platine und Software.

    Reden wir an einander vorbei? es gibt doch Adapter PS2 auf USB für Tastaturen und Mäuse also die aktiven nicht diese Steckeradapter wo die Tastatursteuerung intern entsprechend umschaltet...

    386SX- 20 Mhz "Erster eigener Rechner!2" NoName Komponenten

    486DX -30 "Industrie PC" auf Steckkarte

    Super Sockel 7 Gigabyte GA-5AA 3Dfx Voodoo 3500 TV

    AMD "Geode" ebenfalls Steckkarte für Backplane

    3x IBM Netvista 8364 "ThinRetroSystem" 1-2 von denen würde ich tauschen...


    "und noch so einiges mehr... "

  • Stefan307 also, so weit ich es sehe wird der Joystick Teil auch funktionieren, aber Du wirst nur 4 Tasten und 4 Achsen haben. Das wäre etwas enttäuschend bei dem Biest :D Der Rest geht scheinbar über die Tastatur, wenn ich es richtig verstehe. Ich sage ja nur, dass es schwierig wird, wenn man auch den Teil haben will. Das würde bedeuten, dass der Adapter mit einer PS/2 (oder DIN5?) Buchse ausgestattet werden muss und man muss dann die Tastatur-Signale abfangen und entsprechend über USB als Joystick weiter geben. An sich alles machbar, aber eben Aufwand für neue Platine und Software.

    Reden wir an einander vorbei? es gibt doch Adapter PS2 auf USB für Tastaturen und Mäuse also die aktiven nicht diese Steckeradapter wo die Tastatursteuerung intern entsprechend umschaltet...

    Nein, nein, tun wir nicht, ich habe Deinen Vorschlag von vorher schon verstanden, dass Du einen weiteren Adapter für die Tastatur Befehle verwenden möchtest. Ich habe nur über eine integrierte Lösung nachgedacht. Aber das mit zwei Adaptern zu lösen würde wahrscheinlich gehen. Also möchtest nur, dass ich Deinen Joystick mit meinem Adapter teste und sage ob es damit als normaler Analog nach USB Joystick geht? Das kann ich sicherlich tun. Wenn ich die Teile bekomme und weitere Adapter baue, kann ich Dir auch gerne einen zusenden und Du kannst es selbst versuchen. Sollte es nicht gehen, kannst es dann entweder an mich oder jemanden im Forum weiter schicken....

  • ha, wie geil!

    scorp, du bist mein persönlicher Held. Ich habe mich jetzt extra angemeldet, um das zu sagen.


    Ich habe einen MS SW 3D Pro (1996 persönlich in den USA gekauft, war damals während der Schule ein paar Monate da...), und ich bin absolut überzeugter Fan von dem Teil. (drei Achsen plus Schubregler! optische Abtastung! nativ digitales Sampling! kann mehr als ein Gameport eigentlich können sollte!), und habe vor einem halben Jahr herausgefunden, dass schon 2007 3DPVert von Grendel entwickelt wurde... in zumindest einer Version davon kann man das auch auf einem Teensy 2.0 verwenden, und ich konnte meinen geliebten Retro-Stick wieder nutzen! Dann habe ich ein bisschen damit gespielt, und wollte wissen, wie das eigentlich geht.


    Außerdem dachte ich mir, man müsste doch eigentlich noch mehr Input-Geräte (mini-Joystick? zusätzliche Tasten?) verwenden können, schließlich hat der Teensy noch ein paar Pins frei... also fing ich an, C++ zu lernen - ein bisschen kannte ich ja schon von kleineren Arduino-Laufversuchen. Ich fand außerdem im Netz den "Adapt-FFB-Joy" von tloimu, der genau das vorsieht, nämlich zusätzliche Rudder-Controls, allerdings nur für den Force Feedback Pro.


    Also habe ich versucht, selbst etwas mit Arduino / Teensy 2.0 hinzubekommen... leider ist die einzige funktionierende Implementation (3DPVert, weil Adapt-FFB-Joy eigentlich nur eine abgewandelte Version davon ist) wirklich etwas krass, weil die zentralen Funktionen eben auf Assmbler-Code basieren, wie du ja schon festgestellt hast. Ich dachte eigentlich, dass ich es auch hinbekommen würde, indem ich eine sehr beschränkte Lösung programmiere, bei der ich die Port-Register, die ich verwende, direkt anspreche (PORTx |= PINx & xyz und so)... leider habe ich es nicht geschafft, den Stick auch nur dazu zu bekommen, ein einfaches polling-signal als solches zu akzeptieren. Irgendwas haut also mit dem Timing wahrscheinlich gar nicht hin, aber ich habe kein Oszilloskop, um das zu überprüfen. (ich habe gesehen, du machst es eigentlich genauso, nur dass du eben elegant warst und eine generisch verwendbare Lösung in DigitalPin.h etabliert hast... chapeau... das hätte ich mit meinem Anfänger-Wissen nie hinbekommen.


    Nachdem ich mich wochenlang durch die Quellcodes gekämpft habe, und auch durch den Linux-Treiber, und auch durch das Microsoft-Patent, habe ich heute (übrigens bei der Google-Suche nach "US5628686A" als zweiter Treffer :) :) ) diesen Thread entdeckt!


    Jetzt werde ich erstmal versuchen, deinen Quellcode zu verstehen, der zwar definitiv meinen C++-Horizont übersteigt, aber man kann ja dazulernen (hoffentlich).



    Ein paar Fragen aber jetzt schon einmal:


    1) Hardware: Ich gehe mal davon aus, dass die 100kOhm-Widerstände einfach für die Gameport-Pins 3/6/11/13, also für die Achsen, gedacht sind, oder? (Ich habe bisher noch nie mit Custom-PCBs gearbeitet, deshalb kann ich die Dateien nicht interpretieren... )


    2) Software: deine "Toggle"-Funktion invertiert einen Pin-state für eine definierte Zeit, oder? Aber muss der MS SW 3D Pro nicht ein zeitgleiches Signal auf die X1 und Y2 - Achse bekommen, um in den voll-digitalen Transfer Modus zu schalten?


    3) Software/Vorschlag: in "enableDigitalMode", warum verwendest du nicht einfach die Sequenz "{ magic, magic + 725, magic + 300, 1, 0 }"? Damit würde automatisch der letzte Trigger innerhalb der Schleife gesendet, und du müsstest nicht nochmal "m_trigger.pulse(PULSE_DURATION);" nach der Schleife explizit aufrufen. Das habe ich mich schon bei der Betrachtung des linux-Treibers gefragt. Würde das nicht gehen?


    4) wie hast du magic=200 festgelegt? ausprobiert? (ich frage, weil ich eine nahezu identische Funktion ausprobiert habe, die dann von einer Schleife aufgerufen wurde, in der ich Werte von 20-1200 durchprobiert habe, und hatte nie Erfolg... wahrscheinlich lag es an etwas ganz anderem, aber trotzdem: wie bist du vorgegangen?


    Gruß


    Moritz

  • scorp, du bist mein persönlicher Held. Ich habe mich jetzt extra angemeldet, um das zu sagen.

    Danke auch Moritz ;)

    ...du eben elegant warst und eine generisch verwendbare Lösung in DigitalPin.h etabliert hast... chapeau...

    Ich habe jahrelang Softwareengineering und vor allem C++ unterrichtet, das wäre ziemlich peinlich für mich, wenn ich selbst angefangen hätte da Mist zu bauen. Bei Open Source schauen ja Leute mit, die mich später zusammenschlagen könnten :P

    1) Hardware: Ich gehe mal davon aus, dass die 100kOhm-Widerstände einfach für die Gameport-Pins 3/6/11/13, also für die Achsen, gedacht sind, oder?

    Korrekt.

    2) Software: deine "Toggle"-Funktion invertiert einen Pin-state für eine definierte Zeit, oder? Aber muss der MS SW 3D Pro nicht ein zeitgleiches Signal auf die X1 und Y2 - Achse bekommen, um in den voll-digitalen Transfer Modus zu schalten?

    Nein, die DigitalOutput::toggle() funktion flippt das signal nur. Also wenn es 0 war geht es auf 1 und wenn es 1 war, dann auf 0. Die Funktion die einen Pulse einer bestimmten Länge macht ist DigitalOutput::pulse(uint32_t). Diese Funktion toggelt eben das Signal ein Mal, dann wartet die angegebene Zeit ab und toggelt noch mal. Dadurch entsteht ein Pulse der gewünschten Länge.

    3) Software/Vorschlag: in "enableDigitalMode", warum verwendest du nicht einfach die Sequenz "{ magic, magic + 725, magic + 300, 1, 0 }"? Damit würde automatisch der letzte Trigger innerhalb der Schleife gesendet, und du müsstest nicht nochmal "m_trigger.pulse(PULSE_DURATION);" nach der Schleife explizit aufrufen. Das habe ich mich schon bei der Betrachtung des linux-Treibers gefragt. Würde das nicht gehen?

    Ja, das kann man so auch machen. Ich hatte das sogar so in einer Zwischenversion. Nach dem letzten Puls ist es halt nicht notwendig 1us noch mal zu warten, daher mache ich es außerhalb der Schleife. Der Pro Micro kann keine 1us Auflösung und die kleinste Einheit ist 4us. Also, auch wenn da 1 stehen würde, würde der 4us warten. Wäre an sich aber nicht schlimm, da danach sowieso ein cooldown folgt. Ich überlege es mir...

    4) wie hast du magic=200 festgelegt? ausprobiert? (ich frage, weil ich eine nahezu identische Funktion ausprobiert habe, die dann von einer Schleife aufgerufen wurde, in der ich Werte von 20-1200 durchprobiert habe, und hatte nie Erfolg... wahrscheinlich lag es an etwas ganz anderem, aber trotzdem: wie bist du vorgegangen?

    Das steht im Patent auf der Seite 20. Es gilt, folgendes:


    115us < tv < 305us

    tv + 697us < t2 < tv + 755us

    tv + 288us < t3 < tv + 312us


    Wobei tv ist die Länge des ersten Impulses (bei mir magic), t2 ist die Länge des zweiten und t3, entsprechend, des dritten. Linux Kernel hat sich für tv=140 entschieden ich habe einfach eine runde Zahl mehr in Richtung Mitte genommen um etwas mehr Luft in beide Richtungen zu haben (die Mitte wäre 267). Warum 200? Nun so konnte ich einfacher Kästchen auf dem Logic Analyzer zählen :D


    Wenn Du übrigens Vorschläge hast oder Support für weitere Joysticks hinzufügen möchtest, kannst Du gerne auf GitHub einfach Tickets öffnen. So haben wir alle technischen Details an einer Stelle, statt die über das halbe Netz zu verteilen.


    Ich freue mich auf jeden Fall, dass es auch technisches Interesse gefunden hat. Wenn Leute den Adapter verwenden freut es mich natürlich, aber noch mehr freut es mich, wenn jemand sich die Arbeit im Detail anschaut. Sollte das Projekt länger leben, werde ich nicht im Stande sein alle möglichen Joystick Treiber dafür selbst zu implementieren. Erstens, weil ich nicht alle Joysticks dieser Welt habe auch, wenn ich dank creopard schon viele habe und er und andere mir inzwischen andere Modelle zum Ausleihen angeboten haben. Zweitens, weil es einfach viel zu viel Zeit kosten würde. Es wäre cool, wenn jeder, der einen noch nicht unterstützten Joystick hat, entweder den Trieber selbst implementiert, oder wenigstens die komplette technische Details liefert, damit das ganze implementiert werden kann. Leider ist bei weitem nicht jeder im Stande das zu tun, daher Mal sehen, wie es sich entwickelt.


    Ich werde versuchen die Tage ein Video-Special zu dem Adapter auf meinem YT Kanal zu machen. Da scheinen schon einige darauf zu warten.....

  • Ich habe jahrelang Softwareengineering und vor allem C++ unterrichtet, das wäre ziemlich peinlich für mich, wenn ich selbst angefangen hätte da Mist zu bauen. Bei Open Source schauen ja Leute mit, die mich später zusammenschlagen könnten :P

    :P :D :D :D



    Nein, die DigitalOutput::toggle() funktion flippt das signal nur. Also wenn es 0 war geht es auf 1 und wenn es 1 war, dann auf 0. Die Funktion die einen Pulse einer bestimmten Länge macht ist DigitalOutput::pulse(uint32_t). Diese Funktion toggelt eben das Signal ein Mal, dann wartet die angegebene Zeit ab und toggelt noch mal. Dadurch entsteht ein Pulse der gewünschten Länge.

    ah, stimmt. :rolleyes:

    und mittlerweile habe ich auch mehr in deinen Code geschaut: du hast (für's erste?) nur den 1-Kanal-Modus (1x Clock, 1xData) etabliert, wie ich sehe. Hast du vor, den 3-Kanal-Modus (1xClock, 3xData) noch zu bauen, oder meinst du, der Aufwand lohnt sich nicht?


    Wenn Du übrigens Vorschläge hast oder Support für weitere Joysticks hinzufügen möchtest, kannst Du gerne auf GitHub einfach Tickets öffnen. So haben wir alle technischen Details an einer Stelle, statt die über das halbe Netz zu verteilen.

    Ich hatte in den letzten Wochen mehrfach Kontakt mit Tero (tloimu), der damals den ursprünglichen 3dpvert um die force-feedback-Funktionen des MS FFP erweitert hat... soll ich ihn mal fragen, ob er Zeit und Lust hat, dir zu helfen, deinen Code für den ForceFeedbackPro inklusive force-feedback zu erweitern?


    (Ich hatte letzte Woche in meiner Verzweiflung sogar versucht, Detlef Müller zu kontaktieren, nachdem ich in detektivischer Arbeit herausgefunden habe, wo er mittlerweile wohnt und arbeitet 8o ... also "grendel", der damals 3dpvert geschrieben hat. Leider hat er noch nicht geantwortet. :saint: )




    Hast du mal probiert / überlegt, ob du die 100kOhm-Widerstände wirklich brauchst? Mal rein vom Prinzip her haben analoge Joysticks ja einen (üblicherweise) 0-100kOhm TrimPot an den Achsen. Der Arduino Pro Micro sollte doch, genau wie der Teensy 2.0 und die üblichen Arduino-Boards auch volle 5V vertragen können, und die zusätzlichen Vor-Widerstände daher gar nicht brauchen... oder?



    Zumindest die Sidewinder-Joysticks senden ja bei korrekter Trigger-Sequenz ein "ID-packet". Müsste man nicht auf die dip-switch-Auswahl für die Sidewinder-Reihe komplet verzichten können? Man könnte ja am Anfang versuchen, ein ID-packet zu lesen, und wenn man eins bekommt, werden die switches einfach ignoriert, weil die Sache klar ist... :huh: ich muss nochmal nachschauen, wie der linux-Treiber das macht, und würde dann ein GitHub-Ticket eröffnen, oder?

  • scorp nach dem YT special solltest du dich darauf einstellen, dass es noch mehr Bestellungen hageln wird! :D


    Wäre natürlich noch cooler wenn sich dadurch auch mehr Leute finden, die weitere Modelle implementieren könnten!

    ganz ehrlich, diese Implementation ist mit einem Arduino so einfach nachzubasteln, dass man einfach eine do-it-yourself-Anleitung machen sollte. :D

    (die switches kann man ja durch jumper-kabel ersetzen :P und ein paar female-to-male-jumperkabel kann man direkt auf den DB15-Stecker vom Joystick rammen :P )

  • ...du hast (für's erste?) nur den 1-Kanal-Modus (1x Clock, 1xData) etabliert, wie ich sehe. Hast du vor, den 3-Kanal-Modus (1xClock, 3xData) noch zu bauen, oder meinst du, der Aufwand lohnt sich nicht?

    Ich habe lokal mit 3-Kanal Modus schon experimentiert, aber ich sehe den Vorteil erst mal nicht. Wie gesagt es kostet ja alles sehr viel Zeit, daher beschränke ich mich auf das, was man braucht. Was auf jeden Fall schon mal geht ist, dass man mit meinem DigitalInput Code in 3-Kanal auch die Daten auszulesen schafft, ohne das Gefrikel mit Registern und Assembler. Ich kann das alles zwar, aber ich finde es Softwaretechnisch einfach zum kotzen. Da steigt man nach drei Monaten ja selbst nicht mehr durch und die Software später auf andere Hardware zu portieren ist die Hölle sowieso. Jedenfalls, ist die Tür zum 3-Kanal nicht zu, wenn man das brauchen sollte.

    Ich hatte in den letzten Wochen mehrfach Kontakt mit Tero (tloimu), der damals den ursprünglichen 3dpvert um die force-feedback-Funktionen des MS FFP erweitert hat... soll ich ihn mal fragen, ob er Zeit und Lust hat, dir zu helfen, deinen Code für den ForceFeedbackPro inklusive force-feedback zu erweitern?

    Ist alles Open Source, wer auch immer Bock hat da beizutragen, desto besser, denke ich. Ich stehe für Merge-Requests offen. Alleine werde ich es nicht schaffen, da alle möglichen Joysticks zu implementieren.

    Hast du mal probiert / überlegt, ob du die 100kOhm-Widerstände wirklich brauchst? Mal rein vom Prinzip her haben analoge Joysticks ja einen (üblicherweise) 0-100kOhm TrimPot an den Achsen. Der Arduino Pro Micro sollte doch, genau wie der Teensy 2.0 und die üblichen Arduino-Boards auch volle 5V vertragen können, und die zusätzlichen Vor-Widerstände daher gar nicht brauchen... oder?

    Ja, brauchst Du, am Anfang habe ich ohne versucht, aber der Pro Micro dreht dabei völlig am Rad. Ich bin mir immer noch nicht sicher wieso, da ich auch gedacht habe, dass es gehen sollte. Offensichtlich nicht. Leider ist es durch den Spannungsteiler so, dass man die Hälfte der Auflösung verliert, aber das merkt man nie im Leben hinterher.


    EDIT: das sind übrigens keine Vorwiderstände, sondern pull-down.

    Zumindest die Sidewinder-Joysticks senden ja bei korrekter Trigger-Sequenz ein "ID-packet". Müsste man nicht auf die dip-switch-Auswahl für die Sidewinder-Reihe komplet verzichten können? Man könnte ja am Anfang versuchen, ein ID-packet zu lesen, und wenn man eins bekommt, werden die switches einfach ignoriert, weil die Sache klar ist... :huh: ich muss nochmal nachschauen, wie der linux-Treiber das macht, und würde dann ein GitHub-Ticket eröffnen, oder?

    Das ist schon so implementiert. Der Switch sagt einfach, dass es sich um einen Joystick aus der Sidewinder Familie handelt, man stellt nicht ein um welchen. Der Rest wird automatisch erkannt, zur Zeit funktionieren ja Sidewinder GP und 3D Pro. Erkennung passiert nicht durch ein Spezielles ID Paket, sondern einfach anhand der Länge des Daten Pakets. Das ist auch so im Linux umgesetzt, aber da die da viel mehr Sidewinder unterstützen müssen die etwas mehr auswerten, aber im Prinzip ist es eine ziemlich dumme Geschichte. Man kann ein Datenpaket abwürgen und einen Puls am Trigger aussenden, währen ein Sidewinder die Daten schickt, dann versetzt man den Joystick in ein Info State, wo man dann Firmware Version und so ein Mist bekommt. Das wird man vielleicht brauchen, wenn man weitere Sidewinder unterstützen möchte. War bisher nicht nötig, also habe ich es nicht gemacht. Nur ein wenig experimentiert. Mein Motto - erschaffe eine stabile, gut dokumentierte, pflegeleichte Basis und implementiere darauf immer nur das, was Du brauchst. Sonst wuchert es zu einem Klumpen und den Mist kannst Du nur noch weg werfen.

    ganz ehrlich, diese Implementation ist mit einem Arduino so einfach nachzubasteln, dass man einfach eine do-it-yourself-Anleitung machen sollte. :D

    (die switches kann man ja durch jumper-kabel ersetzen :P und ein paar female-to-male-jumperkabel kann man direkt auf den DB15-Stecker vom Joystick rammen :P )

    Das stimmt, 99% des Aufwandes stecken in der Software und ich habe mir viele Gedanken darüber gemacht, damit es am Ende was wird. Aber was Du vergisst ist, dass bei weitem nicht jeder mal eben so was basteln kann. Viele Menschen, einige auch hier im Forum, sind keine Software- oder Hardware-Entwickler, sondern Retro Fans und eher Anwender. Klar, die meisten hier könnten im Schlaf einen Rechner zusammenbauen, aber das ist noch lange nicht das selbe. Viele wollen einfach mal den alten Joystick anschließen und spielen. Das versuche ich gerade auch zu ermöglichen, so weit ich kann. Und sagen wir Mal so, wenn ich in der Zukunft damit das eine oder andere Oiro für meine Projekte verdienen kann, hätte ich nichts dagegen. Hier habe ich es für Materialkosten in sehr kleinen Mengen angeboten, aber sollten sich viele dafür interessieren, dann werde ich etwas überlegen müssen. Ich meine von nichts kommt nichts....

    Mein Youtube Kanal: Necroware

    Einmal editiert, zuletzt von scorp ()

  • :thumbup:

    :thumbup:

    :thumbup: spannend... auch bei 3DPVert ist es so, dass es ohne die Vor-Widerstände deutlich weniger stabil läuft, aber immerhin läuft es. Eventuell gibt es da irgendwelche Feedback-Schleifen zwischen dem simulierten Widerstand im Joystick und den Schaltkreisen im Board ?(

    :thumbup:

    :thumbup: klaro. Apropos, nimmst du Spenden entgegen? :D Deine geniale Arbeit wäre mir jetzt schon einiges Wert, denn erstens ist es genau das, wonach ich gesucht habe, und zweitens bietet es mir die Gelegenheit, noch mehr über's Coding zu lernen :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!