The problem:
X and Y axis drift on Windows 7. Severe drift! 50% range Y, 20% range X. Strong visible noise.
Recalibration does not help, DXTweaker
does not help, because center point is swinging over a very wide range during a very short time span (during 1 minute it could float 25% up or down). Also it doesn't get better over time.
When I'm hooking this joystick up to a Linux machine and using jstest
, it's rock solid! Perfectly centered along all axes, zero noise.
Joystick model is Saitek Cyborg Evo. Tried drivers both standard Windows 7 and proprietary, same behavior.
I suppose some auto-tuning feature in Windows goes bananas, but how to kill it?
Added:
Looks like I've jumped to conclusions too quickly and it is a hardware issue after all.
I took an active USB hub, hooked up a joystick before plugging it into the PC to boot up it's internal controller. I'm a bit used to making devices and had a guess that giving a cleaner voltage supply to the ADC during it's self-calibration stage could help stabilize it.
Seems like it worked. After plugging the hub (with a joystick already connected and powered up) to a PC, the joystick readings are stable.
However, after a few hours a subtle drift starts to kick in and is becoming worse over time. Repeating the steps for a clean boot does cure this problem, but the solution is not good enough. Will check this PC's USB line for electrical problems and maybe use a capacitor to stabilize the joystick's input voltage.
Solution:
After numerous measurements and ideas (tried front USB, shielded USB card with filtered power) I think the problem is found:
Inside the joystick there was a damaged wire touching the board (red arrow
). This wire is powering the LEDs under buttons at the base. I disconnected both LED assemblies from the PCB (green arrows
) and insulated the damaged wire.
After a few hours of... ehm... testing :D no drift or jitter appeared.