Zero Delay USB Encoder True Analog Joystick Modification.

Introduction: Zero Delay USB Encoder True Analog Joystick Modification.

When I discovered these cheap CY-822A / USB Joystick X1 - Game Control Board USB Joystick Encoders on Ebay and Amazon I was puzzled by their description and construction.

A lot of people like to make their own input devices and controllers and these are a cheap way to get started - but just switches are not always what you want.

Despite the Analogue description its a very Digital device.

The Good News is that the Analogue feature is buried inside - you just need to let it out. I tried asking the manufacturers.... but as expected the reply is still yet to arrive.

I bought a couple of these as cheaply as possible to play with just to experiment with, and I was surprised at the results.

This instructable is a description of what worked for me on this specific model of encoder.

Supplies

CY-822A / USB Joystick X1 - Game Control Board USB Joystick Encoder

Linear Potentiometers of your choice to suit the controller project you are working on. 20K - 200K ohms

Suitable wires to complete your project

Patience and ingenuity

Soldering tools and the ability to use them in a tidy fashion.

Basic understanding of electronic components.

Step 1: Why Are They Advertised As Analogue / Digital Devices?

As far as I could see all of the switch kits they came with were On/Off switches - and that to me is 'Digital' only. If you toggle the MODE option between Analog / Digital you only switch between Up / Down / Right / Left action on the X-Y axes or turn on the Top Hat view movement.

You can see that activity in Windows Game Controller Setup Calibration.

So wheres the Analogue action in that?

True Analog Joysticks contain potentiometers - the type of joysticks you would use for Flight and Driving simulators.

Why are some components missing from the PCB?

Two of four possible LEDs are missing, and some 5 volt output sockets, but they are not so important.

Of more interest are the empty locations for 4 twin banks of resistors - but only 1 bank has a pair of resistors fitted. Typically from pictures you see of these boards only R1+R2 are present - but R3 to R8 are missing.

Some photos have R7+R8 fitted instead of R1+R2. They are both the same value resistors - usually 10K ohms each.

Step 2: Windows Game Controller Gives the Game Away !

Is the number 4 a coincidence - considering most flight joysticks have 4 variable inputs?

If you plug this encoder into a Windows PC and run the Game Controller calibration program you will see 12 Red buttons 'lights' matching the 12 sockets on the edge of the pcb.

It doesn't however tell you anything about the status of the Auto / Mode / Clear / Turbo inputs - mostly internal functions I think.

If you make the contact on any combination of the 12 switch inputs you will see the corresponding number light on the Windows test program - even if you switch between Analog and Digital modes with the Mode option on the encoder.

However you also see the 4 variable X+Y axes cross hairs in a box and 2 coloured Z Axis and Z Rotation just as you would with a real analogue joystick.

Note that all of these are in their centered positions - so they are all balanced and stuck there.

As supplied the X and Y axis and Hat View settings can only ever go to maximums and minimums using the Sanwa socket and/or AU, AD, AR, AL two pole switches when operated.

These are all the same input - just different connectors - examine the tracks - you'll see.

Step 3: Resistors and Tracks

So from experimentation I have discovered that this "balance" is achieved by the presence of the 2 x 10K ohm resistors.

The Balance resistors are in effect a fixed 20K potentiometer (10K + 10K) - in its central position. They are wired in series between the +5V and Zero volts pin of the USB connection from the PC. At the junction of the 2 resistors the voltage will be 2.5 Volts.

The manufacturers save money on the resistors by linking them all together. - all of the junctions of R1+R2, R3+R4, R5+R6, R7+R8 are all linked together on the rear of the PCB by very fine tracks.

Now, the quick and dirty point of this Instructable is that to make the "Analogue" part of this encoder do its stuff, you need to unsolder and remove these Balance resistors and replace with linear potentiometers and carefully cut the appropriate tracks between the pairs with a fine blade.

There are 3 links in total.
If you don't you won't have independent controls.

ONLY CUT THE TRACKS BETWEEN THE CENTRAL SOLDER PAD PAIRS WHERE THE RESISTORS WOULD HAVE BEEN ! Any other tracks go to the chip hidden under the Black Blob - and you DO NOT want to cut those.

With experimentation I have successfully added 4 linear potentiometers (in my testing 2 x 100K for X+Y axes, a 20K for Rudder control and a 300K slider for Throttle) to fly in FSX.

The values don't appear to be critical but linear potentiometers will always work best for this type of activity.

I just tested with what I had to hand - an old Maplin joystick in a plastic box with 2 push switches, a simple potentiometer and a slider control on a pcb which used to be the temperature selector out of an old kettle base unit. No such thing as scrap - just parts waiting for a new project !

Don't just cut the tracks, fit potentiometers and expect it to work in Windows - its unlikely to work correctly UNLESS you run the calibration program. Windows has to understand what you fitted and the ranges these components provide at their full ranges.

Step 4: Setting Up

Once all controls are connected its essential to
1 - Use the MODE option to select analogue mode - which turns on the Green LED (left) on the encoder pcb.

2 - Use Game Controller calibration so that windows can establish the midpoints of all the controls you used.

If you only want to you some but not all 4 channels then you need to make sure the unused ones still have balance resistors fitted otherwise if your game or other software is looking at the values it could have a negative effect on the desired effect. Without any resistors you will see the values dither about in the calibration program.

If you seperated all the channels by cutting the tracks you can just fit new pairs of 10K resistors.

If you happen to wire the ends of the poentiometers the wrong way round you may be able to invert the control function in the game you are playing to save rewiring if the game allows it.

The wiper (centre) of the potentiometer must always go to what was the junction of the balance resistors.

Then either end of the potentiometer are wired to +5 v and 0 v respectively.

Mostly I just soldered the wires to the rear of the PCB. You need to be carefull and tidy here - but its your design so careful planning is time well spent !

One VERY important thing to note is that with the encoders, the Common track running around the edge of PCB is NOT zero (0) Volts - its the +5 volts USB supply from your computer - so you don't want to be connecting it to Ground in any contructions you might be dreaming up !!

Step 5: Overall View of Potentiometer Connections

As shown these connections all worked for me once calibrated.

Don't forget you can still connect switches to the Up/ Down/ Left/ Right/ sockets as they work POV Hat functions when you select Analog mode (if your program supports it.)

IMPORTANT CALIBRATION NOTES>

You must plug USB lead into the PC and wait for the RED LED to light up - this confirms USB recognised and its set to DIGITAL mode.

You must switch it to Analog mode FIRST before calibrating.

You must have a switch (normally open) connected to at least ONE of the TWELVE input connections (shown on the first picture - but NOT shown on my illustration above) because the Calibration program asks you to press a button on the controller at certain steps and it MUST be one of those 12.

Also when calibrating, don't switch between Analog and Digital part way through because the calibration program will stop looking at your controls.

If you accidentally do it - just start the calibration again after selecting Analog Mode again (Green LED will be ON).

Once calibrated Windows should remember your new device. If you replace the components connected for different resistive values, recalibration is needed.

And lastly everytime you connect your device it reverts back to Digital mode (Red LED ON) so you need to set Analog with the mode switch before Flight or driving !!

UPDATE::: Feb 2021 ******

Modification to Start in Analogue Mode:

I have been advised by other users (they deserve the credit! ) that if you change the position of the Resistor at position J1 to the upper location instead of how it was supplied (digital mode) the module will automatically start in Analogue mode - so you dont need to construct my fancy solution (link below). You probably wont ever need a mode switch either - the choice is yours.

I have done that modification myself and it works - so thanks to all who reported it!

If however you insist that you want to make something which will mimic you pressing the Mode button once after a short delay then the link is below.

This is the link:

https://www.instructables.com/id/ZERO-USB-JOYSTICK...

This modifcation pcb could have uses for other projects or functions on this pcb for the adventurous amongst you. Please note that not all of these switch options - Auto / Turbo / Mode etc function the same. From memory I think some switch high and some switch low. Always check with a voltmeter to understand its actions.

Have Fun !!

Be the First to Share

    Recommendations

    • Metal Contest

      Metal Contest
    • Summer Fun: Student Design Challenge

      Summer Fun: Student Design Challenge
    • First Time Author Contest

      First Time Author Contest

    21 Comments

    0
    VAIMA120
    VAIMA120

    4 months ago

    Hello,
    Thanks a lot for this post. I am very interested because I am building an instrument pannel for Microsoft Flight Simulator 2020.
    And it works perfectly.
    I attach a link to a video on Youtube, that explains the topic. Sorry, it is in french (like me of course)

    Do you allow me to post my description, based on your doc, on sites dedicated to MSFS ? I will of course mention the author (you !)

    0
    limastraker
    limastraker

    Reply 4 months ago

    Hi there - yes thats OK. I'm pleased other people are getting more use out of this module. I'm sure its possibilities are only limited by our imagination. I'm currently looking into interfacing Rotary Encoders to drive the variable settings for the Autopilot controls. Its still a work in progress but I'm hopeful that its possible without too much work. What I am trying to avoid is using anything like an Arduino - I intend to use CMOS ic's instead of software. We shall see what happens ! Good luck with your project.

    0
    Snugg
    Snugg

    Reply 4 months ago

    Would love to see how you’re interfacing rotary encoders!

    0
    limastraker
    limastraker

    Reply 3 months ago

    Well heres the good news - without an Arduino or code anywhere in sight I have succeeded in using a cheap rotary encoder, some veroboard, digital chips and one of these interface modules - (using 7 of the 12 inputs) to control the Microsoft Flight Simulator X Boeing 737 Autopilot controls. It would in theory work with any aircraft with autopilot options. I expect other simulators could use these inputs for other controls.

    FSX has lots of options to use for inputs.

    I had to research bits and pieces of existing circuits from the internet - nobody seemed to have created what I needed - so some ingenuity was needed and much testing of ideas.

    I could have made up a panel with 5 rotary encoder circuits using 10 inputs on the USB module - which would mimic the real aircraft panel on FSX.
    But the design I actually chose to build was a Touch selection switch (Why ? No switch bounce - thats why !) to allow a Step up digital FlipFlop circuit to pick the specific Autopilot function knob - and use only 1 Rotary Encoder to make the up or down changes. The dirt cheap touch switches on ebay are very handy.

    I can step through individual functions one at a time choosing Course, IAS, Heading, Altitude, Vertical Speed - each with its own indicator LED so I know what I selected (courtesy of a 4067 chip (1->16 decoder) and a step up Flip-Flop circuit 2 x 4013BE ans 1 x 4081). Because I only use 5 of the 16 possible steps I wired the 4081 to reset back to 1 at the 6th step (or for the purists back to 0 at the 5th step !).

    For the rotary encoder circuit I chose this device with added debounce components on the back of the pcb - link https://www.ebay.co.uk/itm/154016509327 . They were cheap and come with a knob that fits. And 5 for less than 7 pounds is cheap !

    By using this device I didn't have to find somewhere for 2 extra caps and resistors.
    I chose not to use the encoders push-button switch - but I did allow for another 4093 chip debounce circuit should I change my mind.
    You see the digits change on the FSX displays - so theres no need to build yet another display for the digits.

    The debounce circuit is there to make extra sure of accurate control. The rotary encoder circuit uses a 4093 for the switch up/down debounce and a 4013BE FlipFlop and a 4081 Quad 2 input AND gate and 2 transistors to drive the 2 channels on the USB interface. The module just see's switch inputs.

    I figured I cannot adjust 5 items at once - so why have 5 rotary encoders - but you could have what suits you.
    As long you can work out the button mapping in your simulator then in theory you could have a rotary encoder for almost anything. I recommend you establish whats possible first.
    They are after all just switches - but encoders are notoriously glitchy which is why the debouncers are essential.

    The Radio and NAV inputs are also ideal candidates for this arrangement - you just need more USB input modules to use to map the channels. FSX dosen't care that they are called the same name if you have more than 1 plugged in - you just need to pay attention to what you are mapping !

    I also plan to add another USB module to allow selection of the On/Off function choices for the Autopilot - another 10 inputs.

    When time allows I will try and publish the circuit details and photos before I forget how I did it !

    0
    maxlopezperez
    maxlopezperez

    7 months ago

    To make it start in analog mode, remove the 0(cero/zero) Ohm resistor in the lower part of jumper #1 (J1) and move it to the upper side. This will bring the line high instead of low. After this the board will start in analog mode by default. See image.

    USB J1.jpg
    0
    limastraker
    limastraker

    Reply 5 months ago

    Hi there thanks for the response. I have now tested that modiifcation myself and updated at the end of the article. I had already created an addon PCB to mimic the pressing of the mode button once only after successful connection to a PC which recognised this USB device. Since then this new info about the resistor change does away with the need for it - but info for both remains. Thanks to all.

    0
    lmg_01
    lmg_01

    8 months ago on Step 5

    Hello, thanks for the detailed instructions. I've found that if J1 is set the other way round (swap the 0 ohm resistor location), the controller starts in analogue mode at power up.
    Easy modification. Not found the use of the other jumpers yet. Regards.

    0
    lapelv313
    lapelv313

    Question 10 months ago

    Hi,
    I did this and generally it works great. Thanks for the Instructions.
    However, I have a huge deadzone on my potentiomter axes. When calibrating, It only shows an input once the voltage is higher than about 1.2V and will max out at round about 4.6V instead of recognising th whole 0-5V range. Any ideas?

    0
    davidgoadby
    davidgoadby

    Answer 10 months ago

    It sounds like you have not carried out the modification correctly. Check the potentiometer wiper voltages when rotating from min to max. If the voltage is only changing at the limits then there is a problem with your changes. The level should change from a bit above 0 to at least 4.7 volts. Of course you may have a "clone" which has been changed.

    0
    lapelv313
    lapelv313

    Reply 10 months ago

    Thanks for the quick reply.
    The voltage at the potentiometer shows the whole spectrum from 0 to 5.26V.
    It's just that the board doesn't seem to recognise the input until 1.2V is reached and maxes out at 4.1V (see pictures)

    IMG_20200917_041900.jpgIMG_20200917_042018.jpgIMG_20200917_042036.jpgIMG_20200917_042044.jpg
    0
    ChuckM43
    ChuckM43

    Reply 8 months ago

    I think you are correct about the voltage issues. I think that the voltage is set for small trimmer pots that you would find in handheld controllers. These pots only turn about a quarter of a turn in each direction compared to a standard potentiometer with a 180 degree turn in each direction. That being said have you had any luck with the dead zone?

    0
    limastraker
    limastraker

    Answer 10 months ago

    Hi there,

    I must admit I didn't analyse the voltage ranges with a meter as I was more interested in the end result in flight simulator - which when using virtually any value LINEAR value potentiometer produced the correct full range results.

    Any other type (LOG / ANTILOG) - including some of the tiny preset types might not give a full range as you would expect.

    Without calibration it can look like it hardly works at all.... but with it it works great for me.

    Its the calibration software on the PC that decides what full range for each pot looks like when you operate the pots from max to min positions etc.

    I tested it extensively as you can see with varied types of control before typing it all up and as stressed in the text - using the same PCB:

    - it is important to make sure the tracks are cut in the correct places to separate the inputs from each other and to eliminate any connection with those balance resistors or other controls you might have connected.

    - be sure the ends of the potentiometers are connected correctly - one end of the track to 5 volts - the other end to 0 volts and the wiper to the now isloated input track.

    - choose analog mode (green led) (you need a mode switch connected or momentarily link the mode switch contacts) and stick to it when calbrating the joystick in Wndows

    - make sure you have at least one working push switch connection available of the 12 inputs - because the calibration software needs to see a switch when it asks for it to progress t o the next step.

    If you change to a different USB socket you may well need to recalibrate again for that socket in analog mode but once done it tends to remain calibrated for that socket unless you calibrate a different setup at a later date.

    0
    WendellD3
    WendellD3

    Question 9 months ago

    Great article! Just got one for a future KSP control pad. I'll modify and test as soon as I get some break from work. A little question. The manufacture advertises this as capable of managing 7 axes. Indeed, when I plugged it to a Linux machine, the joystick test utility reported 7 axes. I was thinking, could those J1, J2, and J3 marks near the resistors be the missing 3 axes? They are similarly linked with a resistor, if you inspect the lines. What your thoughts on this? Worth a testing? Thank you for your time ;-)

    0
    limastraker
    limastraker

    Answer 9 months ago

    Hi there.Thanks for the feedback. I don't know about the 7 axes claim - I haven't seen that - maybe different sellers make different claims. Without a manufacturers circuit diagram (I tried but the Chinese don't exactly volunteer anything) its all guesswork however I would have thought with the device set up as analogue mode that gives you 4 proportional axes and the hat switch (as seen by windows is another 4 but they are digital only..... I presume !)
    I just had another look at the PCB and you are correct those 3 do look similar with the same +5 and ground tracks as the other 4. The single component on my board looks like a very low ohm resistor - might even just be a link. The difference appears that those 3 dont have tracks to disconnect - just go straight to the processor. So if you have linux machine which sees them - you could try a potentiometer and see what happens. I will have to try on my Raspberry Pi and see what it shows. My Windows machine only see 4 analogs... probably a USB driver quirk I expect.
    And then you have 12 switch inputs. I guess final usability is down to what the computer looking at the USB data can interpret. With your own design you can customize as you need to. Have fun !

    0
    davidgoadby
    davidgoadby

    10 months ago on Step 5

    I just bought a pair of these and this "hack" is just what I needed. Thank you.

    0
    limastraker
    limastraker

    Reply 10 months ago

    Thanks for the comment. it certainly works for me and allows flexibility to build your own inputs - cheap too !

    0
    Saint_Hu9o
    Saint_Hu9o

    11 months ago

    This sounds great! Will bookmark it and try later.