Beiträge von artymori

    ich habe Tero ("tloimu") angeschrieben, er hatte für den Sidewinder Force Feedback Pro einen ATMega-basierten Adapter entwickelt (adapt-ffp-joy) - er kann eventuell helfen, sogar das (Midi-basierte) force-feedback-Protokoll zu adaptieren

    Hallo zusammen! Ich bin mir mittlerweile nicht mehr sicher, ob es das wirklich gab, aber in meinem Kopf zumindest habe ich ein Bild von einem PC-Controller, von dem ich glaube, dass es ihn mal gab, den ich aber um's Verrecken nicht mehr finde. Aber wenn es das Ding gab/gibt, weiß es bestimmt eine*r von euch... :saint:


    Das Teil sieht aus wie eine schwarze PC-Maus, ist aber auf einem kurzen "Stick" montiert, und kann in mehreren Achsen bewegt werden: vor/zurück und seitlich "schieben", vor/zurück und seitlich "kippen", drehen und vielleicht auch noch hoch/runter, wobei ich mir da nicht sicher bin.


    Hat davon schon mal jemand gehört? Gab es das wirklich, oder hat mein Gehirn sich das nur ausgedacht? 8| Müsste im Prinzip in den 90ern gewesen sein, also lange vor der 3Dconnexion SpaceMouse (die ja im Prinzip die gleichen Funktionen hat, aber total anders aussieht).

    :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 :)

    artymori wie bist du auf den Nicknamen gekommen?


    Hrzl_wlkmn

    nachdem ich in den alten Zeiten aufgrund von Keyboard-Treiber-Lokalisierungs-Inkompatibilitäten meinen Vornamen immer wieder als "Mority" geschrieben habe, war es zu "Moriarty" nicht mehr weit... da es aber in den meisten Foren, online-Spielen und ähnlichem ungefähr 30 Sekunden nach Öffnung der Server schon einen "Moriarty" gibt, habe ich irgendwann die Reihenfolge geändert - und bin dann dabei geblieben. den Nick gibt es meist noch nicht :P :P :P

    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 )

    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?

    oooops, hatte ich einen fremden Thread gekapert? Sorry!

    "echte" Vintage-Rechner habe ich leider nicht mehr... ich behelfe mir mit Emulatoren, um gelegentlich alte Sachen spielen zu können, bzw. mein Lieblings-Vintage-Spiel (UFO:Enemy Unknown / XCom: UFO Defense) gibt es ja mitterweile als extrem guten Nachbau: openxcom.


    Ich habe zwar noch ein Gehäuse von 1997, aber die Komponenten darin sind nach und nach ausgetauscht worden. Im Nachhinein ärgerlich, dass ich nicht mehr Sachen aufgehoben habe, aber nach mehreren Umzügen mussten halt doch immer wieder alte Sachen weichen, weil kein Platz da war. Da ich aber früher viel an meinen PCs herumgeschraubt habe, fühle ich mich hier im Forum schon zuhause ;)

    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