Jump to content

Recommended Posts

Posted (edited)

I’ve started a joystick modding project and since I did a lot of research and got a lot of inspiration from other posts around the net, I thought I’d also post my updates on various flight sim forums (the original thread is here).

My goal: extend the MS FFB2 so I could enjoy the enhanced precision provided by a longer throw. Along the way, I also found that this is a good opportunity to replace the grip with something that has more buttons.

 

Background:

I needed something that could be easily removed as I have two small kids who can’t be expected to show proper respect to Daddy’s flying equipment – which (for now) lives in the living room until I can get my own room (next year’s project). I’m already using VESA mounts for the CH Throttle which I routinely install and remove on the arms of the chair (with the help of some 3M velcro).

I won’t be needing the built-in twist rudder as I’m now using my namesake’s excellent Crosswind rudder.

I found these posts to be really inspiring:

http://forums.eagle....86&postcount=51

http://forum.il2stur...k-2/#entry46228

http://forums.eagle....ad.php?t=125281

 

Here are the steps I performed so far:

 

  1. Preparing MS FFB2 base

    1. remove original grip (incl cabling and twist rudder)
    2. add carbon tube extension (20cm)
    3. create hole in base for extra cabling
    4. remove throttle control for tighter fit
    5. increase current to FFB motors to compensate for longer leverage by adding resistors to one of the base PCBs

 

[*]Seat modification

  1. cut away parts of my office chair’s seat to allow enough movement for stick between my legs
  2. install tray to hold joystick base below leg level

 

[*]Grip replacement

  1. strip down Thrustmaster F-16 FLCS joystick for grip only
  2. install Teensy board, connect to grip wiring
  3. add mini-USB cable connected to Teensy, lead through the shaft extension and out in the base
  4. program board so it shows up as a joystick device in Windows
  5. limit stick throw by adding an outer ring the bottom of the shaft

 

Materials needed:

 

Total cost of materials (MSFFB2 joystick included): $211

 

In the consecutive posts I'll detail each of the stages.

Edited by Milopapa
Adding costs
  • Like 1

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

Posted

1. MS FFB2 base modifications

 

So here is the first step, removing the grip and trying on the carbon extension.

I had to remove the buttom plate to get access to the wiring - I wanted to keep the original grip intact and the only way to do that is to pull it through the shaft.

nfoRuxgl.jpg

 

The central 3 screws scared me first - I though they were stripped as a regular philips head wouldn't catch them. Fortunately I found this guide which assured me these were normal heads and all I needed was to experiement with different screwdrivers till I found a fitting one. Basically the grooves are a lot deeper that in a regular phillips head - I eventually just used a trusted old flathead.

You can see the cable strip going into the shaft on the image above - that's the one carrying the signals of the grip buttons, the twist rudder and the IR sensor.

 

Next I tried the tube on – it fits really nice and tight:

Ik2wmBzl.jpg

It's a bit long as my raw material is 50cm long - I cut it to a comfortable size after a few tests (currently 20cm).

During the disassembly process I came unto an interesting find. The twist rudder's centering force is achieved through a U-shaped spring.

s8VWIZ2l.jpg

 

By bending and twisting it a little (well, I'm saying little but it took me more than half an hour) I could lessen the centering force which previously made it very difficult to apply small movements in the rudder. Once happy with the result, I took out the spring from this stick (I won't be needing it) and installed it in my backup joystick (which I'll be keeping as a regular MS FFB2 in case I mess up the extension smile.gif). It made a huge difference in my ability to use the twist rudder and I wholeheartedly recommend everyone using the twist rudder in this joystick to give it a try.

19bWTgsl.jpg

 

 

I did some preliminary tests and while the centering forces seemed okay, the shaking effect was reduced significantly. So next step was to increase motor power – as described in this thread.

I used these SMD resistors (RC1206 1R 1Ohm 1/4W 1%):

7qjD3FXl.jpg

 

I couldn't believe my eyes when I open the box, they are tiny little f*ckers! Photos did them no justice - they are really small! I was already scared shitless about the soldering (for me soldering is a necessity not a skill), but I did some practice runs on an old HDDs circuitry and managed to figure out the right technique.

This video also helped a lot:

 

In the end, the actual soldering took maybe 10 minutes.

 

Here's what the result looks like:

ieXp2Ddl.jpg

 

Zooming in:

Haa59MGl.jpg

 

 

Result:

The force feedback effects are back in their glorious strength! biggrin.png I actually had to reduce the centering effect from 100% to about 70% in Rise of Flight, same as with the unmodified stick. Shaking is now clearly noticable, not to mention the bumping on the ground effect (that was always crazy strong anyway).

This mod makes a world of a difference to the extension, makes it feel exactly like the original (without a grip at least). I'm not sure what the longevity effect is but if it last for at least 2 years, I'll be a happy man. biggrin.png There is some noticable heating around the power conversion area (lots of capacitor there) – I might add a fan in the long run.

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

Posted

2. Chair modification

 

Here's where I started with the chair.

OdTqV1Tl.jpg

 

Cutting the sitting materials out, preserving the leather:

u9K45Qzl.jpg

 

M0p8oVDl.jpg

 

NGqVnTIl.jpg

 

The result:

dxlBqqYl.jpg

 

KIuzeQQl.jpg

 

Since I haven't found anything that would work as the joystick holder, I decided to make one myself.

Here is what it looks like:

DFnt6WSl.jpg

 

w4JVXgtl.jpg

 

TcXqomVl.jpg

 

I later painted it black to make it blend in some more (don’t forget, this is in a living room).

iDOSbqll.jpg

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

Posted

3. Grip modification

 

Here is the original F-16 joystick from Thrustmaster:

xKErMd2l.jpg

This goes for $30-40 on ebay – no use in newer PCs as it still uses a gameport connection. For me, that doesn’t matter, I just needed the grip with the buttons.

 

Grip replacement

I started out by disassembling the joystick and then the grip itself. Surprise: as opposed to the CH Fighterstick, the handle is chock full of wires and a control PCB so I had trouble finding a home for the Teensy.

As the inside of the grip is extremely busy, it took a long time to figure out where to put the Teensy... or more precisely, the Teensy + the mini USB cable going through the handle.

In the end, I put it on top of the exisiting PCB but I had to reroute some of the existing wires to different parts of the grip. Soldering was also a bitch... This was probably the most difficult part of the whole project.

 

83PKLmMl.jpg

f8Dpcjql.jpg

 

The two-stage trigger was worn down, I ended up replacing the hard foam for the second stage as a large part of it was missing.

lkiIj8Fl.jpg

 

This is how the grip looks like. I put a screw perpendicular to the shaft to try and keep it from rotating... it’s not perfect but it’ll do for now.

AA69erol.jpg

 

This is how the extra USB cable is routed in the base. For the outlet, I simply enlarged the existing one to accommodate an extra cable. It's tight but it works.

ettWZDVl.jpg

 

Programming the Teensy:

Getting the Teensy to work in Windows was relatively easy (apart from a bug). I need the Arduino IDE (only version 1.6.5 works with Teensy) and the Teensyduino extension.

Then I pasted in this code (credit: NonWonderDog):

 

 

   
 /* USB FLCS Grip
    You must select Joystick from the "Tools > USB Type" menu
 */
  
 // Buttons are muxed into shift registers, use the SPI protocol to read them
 #include <SPI.h>
  
 const int slaveSelectPin = 0;
  
 unsigned int buttonInputs1;   // data read from SPI
 unsigned int buttonInputs2;
 unsigned int buttonInputs3;
  
 // Use some macros to clean things up
 #define S3   !(buttonInputs1 & 0x80)    /* Pinky Switch */
 #define TG1  !(buttonInputs1 & 0x40)    /* Trigger 1 */
 #define TG2  !(buttonInputs1 & 0x20)    /* Trigger 2 */
 #define S1   !(buttonInputs1 & 0x10)    /* Nose Wheel Steering */
 #define S4   !(buttonInputs1 & 0x08)    /* Paddle Switch */
 #define S2   !(buttonInputs1 & 0x04)    /* Pickle */
  
 #define H1D  !(buttonInputs2 & 0x80)    /* Trim */
 #define H1R  !(buttonInputs2 & 0x40)
 #define H1U  !(buttonInputs2 & 0x20)
 #define H1L  !(buttonInputs2 & 0x10)
 #define H4U  !(buttonInputs2 & 0x08)    /* CMS */
 #define H4L  !(buttonInputs2 & 0x04)
 #define H4D  !(buttonInputs2 & 0x02)
 #define H4R  !(buttonInputs2 & 0x01)
  
 #define H3D  !(buttonInputs3 & 0x80)    /* DMS */
 #define H3R  !(buttonInputs3 & 0x40)
 #define H3U  !(buttonInputs3 & 0x20)
 #define H3L  !(buttonInputs3 & 0x10)
 #define H2D  !(buttonInputs3 & 0x08)    /* TMS */
 #define H2R  !(buttonInputs3 & 0x04)
 #define H2U  !(buttonInputs3 & 0x02)
 #define H2L  !(buttonInputs3 & 0x01)
  
 // setup() runs once on boot
 void setup() {
   // set the slaveSelectPin as an output:
   pinMode (slaveSelectPin, OUTPUT);
   // start the SPI library:
   SPI.begin();
   // configure the joystick to manual send mode.  This gives precise
   // control over when the computer receives updates, but it does
   // require you to manually call Joystick.send_now().
   Joystick.useManualSend(true);
 }
  
  
 // loop() runs for as long as power is applied
 void loop() {
   // take the SS pin low to select the chip
   digitalWrite(slaveSelectPin,LOW);
   // send a value of 0 to read the SPI bytes
   buttonInputs1 = SPI.transfer(0x00);
   buttonInputs2 = SPI.transfer(0x00);
   buttonInputs3 = SPI.transfer(0x00);
   // take the SS pin high to de-select the chip:
   digitalWrite(slaveSelectPin,HIGH); 
  
   // Write to joystick buttons
   Joystick.button(1,  TG1);
   Joystick.button(2,  S2);
   Joystick.button(3,  S3);
   Joystick.button(4,  S4);
   Joystick.button(5,  S1);
   Joystick.button(6,  TG2);
   Joystick.button(7,  H2U);
   Joystick.button(8,  H2R);
   Joystick.button(9,  H2D);
   Joystick.button(10, H2L);
   Joystick.button(11, H3U);
   Joystick.button(12, H3R);
   Joystick.button(13, H3D);
   Joystick.button(14, H3L);
   Joystick.button(15, H4U);
   Joystick.button(16, H4R);
   Joystick.button(17, H4D);
   Joystick.button(18, H4L);
   //Joystick.button(19, H1U);
   //Joystick.button(20, H1R);
   //Joystick.button(21, H1D);
   //Joystick.button(22, H1L);
  
   // Determine Joystick Hat Position
   int angle = -1;
  
   if (H1U) {
     if (H1R) {
       angle = 45;
     } else if (H1L) {
       angle = 315;
     } else {
       angle = 0;
     }
   } else if (H1D) {
     if (H1R) {
       angle = 135;
     } else if (H1L) {
       angle = 225;
     } else {
       angle = 180;
     }
   } else if (H1R) {
     angle = 90;
   } else if (H1L) {
     angle = 270;
   }
   Joystick.hat(angle);
  
   // Because setup configured the Joystick manual send,
   // the computer does not see any of the changes yet.
   // This send_now() transmits everything all at once.
   Joystick.send_now();
 }
  
   

 

 

I had to choose "Serial+Keyboard+Mouse+Joystick" under Tools > USB Type as the one without the Serial wouldn't show any buttons or axis in joy.cpl - this looks like a Windows bug. I also chose 1MHz speed as some reported issues with faster speeds - didn't bother to test.

Uploading the code was a simple matter and the joystick shows up in Game controllers right away. All buttons work (even if some require extensive force due to the age)!

 

So here is what it looks like at the moment:

kNm7Ytzl.jpg

 

Sn1sEZol.jpg

 

I limited the stick throw slightly as it was getting a bit excessive. I used a plastic ring cut from a windshield cleaner bottle – pretty much anything that’s a hard (non-sticking) plastic ring would do. I don't have pictures about that yet, can upload later if anyone's interested.

 

Overall - I spent some time testing this setup in Il2 Bos, Rise of Flight and DCS:Huey and flying with the extended stick is AWESOME.

 

Summary of impressions:

 

  • great immersion, controls feel much more natural center-mounted
  • precise control of pitch and roll - crucial for heli but really useful for prop planes too
  • abundancy of buttons (even if they are a bit worn)
  • very slight throbbing/vibrations can be felt occasionally, might be due to the increased current to the motors - insignificant overall
  • the grip reduced the force feedback further but it's still pretty good - motor boost is a must have with an extension like this
  • two-stage trigger is NICE - I programmed guns to TG1 (leading) and cannons to TG2 (killing)

Please let me know if there is any additional detail you'd be interested to hear more about.

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

Posted

Nice. Thanks for the whole written summary.

 

I purchased two MSFFB2 Sticks for arround 20$ a month ago and eager to start my own build.

This gives me another sweet starting point.

 

The Thrustmaster F-16 stick is all plastic, right? I would really like to use my warthog stick for my build because of the feel, but I'm pretty sure it will be to heavy. :(

And I have no clue how the wiring is done inside the handle.

 

But again, thanks :)

Intel I9 10900k @5.1GHz | MSI MEG Z490 Unify | Corsair Vengeance 64GB - 3600MHz | EVGA RTX 3090 FTW3
VPC T-50 Base /w Viper & Hornet Grip | VPC Rotor TCS Pro w/ Hawk-60 Grip | TM TPR
LG C2 42" | Reverb G2 | TIR 5 | PointCtrl | OpenKneeboard

Posted

The Thrustmaster F-16 stick is all plastic, right? I would really like to use my warthog stick for my build because of the feel, but I'm pretty sure it will be to heavy. :(

And I have no clue how the wiring is done inside the handle.

Correct, it's all plastic - that was one of the reasons I chose it. Even like this, the stick got pretty heavy with the grip on top of the extension.

I'm sure using a full-metal grip would further diminish the FFB effects. You'd probably need the dual motor setup, the resistor mod and a counterweight to have similar effects.

 

As for the wiring, I forgot to include this image:

JH5gg1P.jpg?1

Brown - VCC / +5V

Green - GND

Yellow - MISO / PB3

Red - SS / PB0

Orange - SCLK / PB1

 

It's pretty simple as all the button handling is done by the F-16 chips, and it outputs all data on a 5-wire cable strip. This is what you need to solder to the Teensy board.

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

Posted (edited)

Good job on FFb2. :thumbup:

 

 

For use Cougar/Warthog grip (~900grs), what people do is place a counter weight bellow FFB2 base (see Peter... dual FFb).

 

All buttons work(even if some require extensive force due to the age)!

 

Is not due the age, is due the "more heavy is more real" idea that are used in Tm sticks since FCS (see the ridiculous heavy springs in F22 PRO).

I had one those sticks new and buttons/HAT's are uncomfortable for use.

 

From game perspective the buttons/HAT in CH are more friendly. :)

They grip only lack a pinkie button, a 'mod' is need.

 

A extra 'mod' some people do in FFB2 is place ball bearings in the gimbal, and replace worm pot' with contactless sensor.

 

http://forum.il2sturmovik.ru/topic/2168-modernizaciya-msff2/

Edited by Sokol1_br
Posted (edited)
I'm sure using a full-metal grip would further diminish the FFB effects. You'd probably need the dual motor setup, the resistor mod and a counterweight to have similar effects.

 

I have done all that (dual motors, resistor mod + counterweight) with a Cougar grip which is also full-metal and I would still like to have more force. So I think it is a good idea to use plastic grip or limit the length of the extension.

 

Very nice work there Milopapa :thumbup: .

Edited by sydost
Posted

Thank you!

All told, it must have been around 20-30 hours of actual work, not counting the research.

Every hour worth it! Flying with this setup (plus the Crosswind rudders) feels amazingly real.

The only thing that could make it more complete is a VR headset :) Hopefully next year.

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

Posted

Buttons

 

Good job on FFb2. :thumbup:

Is not due the age, is due the "more heavy is more real" idea that are used in Tm sticks since FCS (see the ridiculous heavy springs in F22 PRO).

I had one those sticks new and buttons/HAT's are uncomfortable for use.

 

From game perspective the buttons/HAT in CH are more friendly. :)

 

I know, but getting a CH Fighterstick would have cost me around $100 more.

 

Also, I have contacted Thrustmaster support and they agreed to send me a full set of spare hat assemblies from the Cougar for €32. They are on their way, curious to see if I can make them work with the FLCS. Those should be metal vs plastic. More weight :( but hopefully better action.

 

A extra 'mod' some people do in FFB2 is place ball bearings in the gimbal, and replace worm pot' with contactless sensor.

http://forum.il2sturmovik.ru/topic/2168-modernizaciya-msff2/

 

I don't quite get this (don't speak Russian, google translate couldn't really manage it) - why the bearings?

Also, pots are fine for me - great resolution, don't seem to be worn yet. There is a slight mechanical deadzone but nothing to worry about.

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

Posted

The use of bearings is to eliminate mechanical deadzones in axis, that became issue when use contactless sensor, this things register the slightest movement.

 

Replace pot with sensor don't improve resolution, this is defined in controller board.

The use of sensors to replace worn pot is due the impossibility to get proper pot' replacement. Joystick pot is different from commercial pot, have limited electrical angle.

 

"If ain't broken, dont fix". ;)

Posted (edited)

@Milopap

An excellent Mod! :thumbup:

 

Would you be kind enough to post the details on the Hat switch assemblies you get from thrustmaster? I am having great difficulty finding a reasonable supplier for Hat switches.

 

@Sokol1_br

 

With the addition of an OP Amp circuit you can modify the pot characteristics no problem. With this example I got full linear pot range from 280° down to 90°. (R3/6 adjusts FSD and R2/5 adjusts Zero. Excess angle is just rail voltages, just need to put mechanical stops in then.)

235252014_Potrangeclippingcircuit.thumb.jpg.955bd64a6bbbc0557313a551749b9c22.jpg

Edited by BrassEm
  • Like 1
Posted (edited)

With the addition of an OP Amp circuit you can modify the pot characteristics no problem. With this example I got full linear pot range from 280° down to 90°. (R3/6 adjusts FSD and R2/5 adjusts Zero. Excess angle is just rail voltages, just need to put mechanical stops in then.)

 

Nice work!

I have been thinking about using OpAmps for reducing travel too (that or pre-loaded gearing). May I ask how well it works? What resolution do you get out of it before noise becomes overwhelming, e.g. 10 or 12 Bit?

 

Thank you!

All told, it must have been around 20-30 hours of actual work, not counting the research.

Every hour worth it! Flying with this setup (plus the Crosswind rudders) feels amazingly real.

The only thing that could make it more complete is a VR headset smile.gif Hopefully next year.

 

That is one awesome stick mash-up, kudos! While building and tinkering itself is great fun, seeing it all come together and work is something really special.

Edited by Viersbovsky

Callsign "Lion"

Posted
Would you be kind enough to post the details on the Hat switch assemblies you get from thrustmaster? I am having great difficulty finding a reasonable supplier for Hat switches.

 

Sure - last I heard from Thrustmaster support, they're scheduled to arrive this Friday (Nov 27), so hopefully I can take a detailed look at them this weekend.

 

I have high expectations due to their supposedly metal nature :) Although CH has repeatedly proven that you can do nice things with plastic.

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

Posted
I suspect this "nature" will be only in the cap part ("hat"). :)

 

Could be... I can only speculate based on Cougar reviews.

 

They are supposed to have longer throws than FLCS hats which alone would make me happy (if I can get them to work).

 

Compared to the older TM F-22 PRO, the hats have longer shafts and stand away from the body of the handle more, thus offering a longer throw and greater control. Much easier getting those corner positons first time now.
Practically all metal construction (...) Even the hats and buttons are metal!
Source: http://cougar.flyfoxy.com/features.php

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

  • 2 weeks later...
Posted

Thrustmaster replacement hats

 

The Thrustmaster replacement hats arrived right on time (I just didn't have time to come back and write a proper report about them).

 

In short: they are AMAZING and well worth the money! Really nice action (their shaft are a lot longer than the originals), the touch of metal buttons is a welcome change after all the plastic - and they were really easy to replace (same pinout as the FLCS).

Also, they have a very distinctive feel compared to the hats on my CH throttle: they feel a lot more serious (I don't know maybe even more military?). Instead of a plasticky click, they have this nice little bouncy action - very smooth, with longer throw that prevents accidental clicks.

 

I'm posting a few photos below to illustrate my point.

 

Here is the original setup (Thurstmaster F-16 FLCS with original buttons - note the small gap/short throw):

cuNfiL1l.jpg

 

Here are the replacement Cougar parts:

GrhzBbal.jpg

 

A thumb hat:

0wyZmyUl.jpg

koJbGpWl.jpg

 

A TMS hat side-by side (top is Cougar, bottom is FLCS):

EgLdWx7l.jpg

 

Replacement procedure (same pin layout):

rmkkQ5dl.jpg

 

Final results (note the throw):

hZCnQ11l.jpg

jDtCLDil.jpg

mQqhDldl.jpg

 

Let me know if you have any questions.

  • Like 1

PC HW: i5 3770k@4.6GHz | Asus 1080Ti | 16GB DDR3 | Samsung 850 EVO | MSI MPower Z77 Input: MS FFB2 w/ F-16 FLCS grip | CH Pro Throttle | MFG Crosswind | HTC Vive DCS modules: F-14, FW-190, P-51, Bf109, UH1, Mi-8, FC3, CE2

  • 2 weeks later...
Posted
Thank you!

All told, it must have been around 20-30 hours of actual work, not counting the research.

Every hour worth it! Flying with this setup (plus the Crosswind rudders) feels amazingly real.

The only thing that could make it more complete is a VR headset :) Hopefully next year.

 

Hehe, you should try the Gametrix seat and SimShaker SW as well.

FFB effects in your whole seat. ;)

 

http://forums.eagle.ru/showpost.php?p=2430581&postcount=182

 

http://dreamsimteam.blogspot.ru/p/simshaker.html

System specs:

 

Gigabyte Aorus Master, i7 9700K@std, GTX 1080TI OC, 32 GB 3000 MHz RAM, NVMe M.2 SSD, Oculus Quest VR (2x1600x1440)

Warthog HOTAS w/150mm extension, Slaw pedals, Gametrix Jetseat, TrackIR for monitor use

 

Posted

Milopap very cool stuff.

will be modifying my MSFFB2 as well. i do however plan on using the TMWH grip, counter-weighted.

 

 

BrassEm, would i be able to use LM393 instead of LMC6482 IC? or are any modifications I will need to make to your circuit?

Thanks in advance

 

@

 

With the addition of an OP Amp circuit you can modify the pot characteristics no problem. With this example I got full linear pot range from 280° down to 90°. (R3/6 adjusts FSD and R2/5 adjusts Zero. Excess angle is just rail voltages, just need to put mechanical stops in then.)

 

gseat_build_20151121d.jpg

Anton.

 

My pit build thread .

Simple and cheap UFC project

  • 2 years later...
  • 1 year later...
  • 1 month later...
Posted

Signed up just to comment on this thread... Thank you to the OP you showed me the way! I did a variant of this mod and thanks to the excellent write up only took me about 4 hours. I did a few things differently.

 

Started with MSFFB2 and Thrustmaster F-16 same as you (Sidewinder $50 from FB marketplace, Thrustmaster from ebay)

 

I have not extended the stick, so no carbon tube. I don't mind playing with the joystick in my lap. So also no resistor mod.

 

I used a Teensy 3.2 instead of a 2.0. This required a few small changes but overall was basically the same. Reason I went with the 3.2 was for the higher precision on the ADC in case I want to add the joystick axis to the Teensy in the future. Also uses micro USB instead of mini USB and I no longer have any mini USB cables lying around.

 

I elected not to put the Teensy in the handle, I placed it in the base instead and ran the 5 wire ribbon cable down into the base.

 

I removed the existing Sidewinder handle, cable, and connector intact (easy enough to stuff the connector sideways through the tube), then I took the guts of the handle (switch board, Z axis pot, and IR hand sensor) and made a neat little bundle out of it with tape and put it back in a convenient spot in the base (with the ribbon cable reattached). This way no wires cut. Because the IR sensor is taped up it registers as a hand always being present, if I want to cut power I just pull the plug. Because the Z pot it still present I don't need to worry about spurious signals. Also it would be easy to reverse the install if I desired.

 

The tube for the Sidewinder handle is slightly smaller in diameter than the tube for the Thrustmaster handle, so I made up the difference with a few wraps of duct tape and a washer under the screw same as the OP. Once the handle was tightened down, it is very secure.

 

My only "permanent" modification was to cut a very small part of the base to accommodate the extra USB cable.

 

I added a little extra code to slow the SPI polling down, not sure this was necessary but the Teensy 3.2 slowest CPU speed is 24MHZ so I wanted to give the shift registers a fighting chance.

 

Wiring of the Teensy board is basically the same except:

Select Device is pin 10 instead of 0

CLCK is pin 13 instead of 1

MISO is pin 12 instead of 3

 

I loaded as Flight Sim Controls + Joystick at 24MHZ.

 

Code here

/* USB FLCS Grip
    You must select Joystick from the "Tools > USB Type" menu
 */
  
 // Buttons are muxed into shift registers, use the SPI protocol to read them
 #include <SPI.h>
  
 const int slaveSelectPin = 10;
  
 unsigned int buttonInputs1;   // data read from SPI
 unsigned int buttonInputs2;
 unsigned int buttonInputs3;
  
 // Use some macros to clean things up
 #define S3   !(buttonInputs1 & 0x80)    /* Pinky Switch */
 #define TG1  !(buttonInputs1 & 0x40)    /* Trigger 1 */
 #define TG2  !(buttonInputs1 & 0x20)    /* Trigger 2 */
 #define S1   !(buttonInputs1 & 0x10)    /* Nose Wheel Steering */
 #define S4   !(buttonInputs1 & 0x08)    /* Paddle Switch */
 #define S2   !(buttonInputs1 & 0x04)    /* Pickle */
  
 #define H1D  !(buttonInputs2 & 0x80)    /* Trim */
 #define H1R  !(buttonInputs2 & 0x40)
 #define H1U  !(buttonInputs2 & 0x20)
 #define H1L  !(buttonInputs2 & 0x10)
 #define H4U  !(buttonInputs2 & 0x08)    /* CMS */
 #define H4L  !(buttonInputs2 & 0x04)
 #define H4D  !(buttonInputs2 & 0x02)
 #define H4R  !(buttonInputs2 & 0x01)
  
 #define H3D  !(buttonInputs3 & 0x80)    /* DMS */
 #define H3R  !(buttonInputs3 & 0x40)
 #define H3U  !(buttonInputs3 & 0x20)
 #define H3L  !(buttonInputs3 & 0x10)
 #define H2D  !(buttonInputs3 & 0x08)    /* TMS */
 #define H2R  !(buttonInputs3 & 0x04)
 #define H2U  !(buttonInputs3 & 0x02)
 #define H2L  !(buttonInputs3 & 0x01)

 #define SPI_CLOCK_DIV8 0x05
 
 // setup() runs once on boot
 void setup() {
   // set the slaveSelectPin as an output:
   pinMode (slaveSelectPin, OUTPUT);
   // start the SPI library:
   SPI.begin();
   // configure the joystick to manual send mode.  This gives precise
   // control over when the computer receives updates, but it does
   // require you to manually call Joystick.send_now().
   Joystick.useManualSend(true);
   // Set SPI to run at 1/8 CPU
   SPI.setClockDivider(SPI_CLOCK_DIV8);
   }
  
  
 // loop() runs for as long as power is applied
 void loop() {    
   // take the SS pin low to select the chip
   digitalWrite(slaveSelectPin,LOW);
   // send a value of 0 to read the SPI bytes
   buttonInputs1 = SPI.transfer(0x00);
   buttonInputs2 = SPI.transfer(0x00);
   buttonInputs3 = SPI.transfer(0x00);
   // take the SS pin high to de-select the chip:
   digitalWrite(slaveSelectPin,HIGH); 
  
   // Write to joystick buttons
   Joystick.button(1,  TG1);
   Joystick.button(2,  S2);
   Joystick.button(3,  S3);
   Joystick.button(4,  S4);
   Joystick.button(5,  S1);
   Joystick.button(6,  TG2);
   Joystick.button(7,  H2U);
   Joystick.button(8,  H2R);
   Joystick.button(9,  H2D);
   Joystick.button(10, H2L);
   Joystick.button(11, H3U);
   Joystick.button(12, H3R);
   Joystick.button(13, H3D);
   Joystick.button(14, H3L);
   Joystick.button(15, H4U);
   Joystick.button(16, H4R);
   Joystick.button(17, H4D);
   Joystick.button(18, H4L);
   //Joystick.button(19, H1U);
   //Joystick.button(20, H1R);
   //Joystick.button(21, H1D);
   //Joystick.button(22, H1L);
  
   // Determine Joystick Hat Position
   int angle = -1;
  
   if (H1U) {
     if (H1R) {
       angle = 45;
     } else if (H1L) {
       angle = 315;
     } else {
       angle = 0;
     }
   } else if (H1D) {
     if (H1R) {
       angle = 135;
     } else if (H1L) {
       angle = 225;
     } else {
       angle = 180;
     }
   } else if (H1R) {
     angle = 90;
   } else if (H1L) {
     angle = 270;
   }
   Joystick.hat(angle);
  
   // Because setup configured the Joystick manual send,
   // the computer does not see any of the changes yet.
   // This send_now() transmits everything all at once.
   Joystick.send_now();
 }

 

Stick is working wonderfully in DCS and MSFS 2020 using XP-Force.

  • Like 1

Ryzen 7800x3d, 64gb, MSI RTX4090 Suprim , Sidewinder FFB with F16 grip, TM Warthog Throttle, MFG crosswind pedals. Pimax Crystal

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...