16 channel independently regulated 3.3v ic?

Thread Starter

tsmspace

Joined Mar 16, 2026
62
Hello!

I have a homemade game controller, which uses potentiometer thumbsticks. There are a lot of potentiometers in total, which means that deflecting some sticks always results in tiny changes to the readings on the others. mostly for gaming it's not a big deal, but actually over time it gets to be an issue where erroneous inputs are given if I play with finely tuned response on the inputs. For cheaper thumbsticks it doesn't come up as much since they are more like buttons anyway, but for nicer thumbsticks ( I have several controllers I've put together) with good even response and precision input, it is much more of an occurrence that a deep input on one stick will result in an erroneous reading on one or more others.


The controllers all run from an arduino off a usb supplied 5v. I thought if I powered the potentiometers with independently regulated 3.3v, I might be able to eliminate this behavior. I don't want to necessarily wire up 90million 3.3v regulators with associated components, and although I did just buy a batch of little modules making it a 3 wire-per-channel mission, I would much prefer an ic that just had vin and then I could connect the outputs to their associated potentiometers.

I did not find such an IC in a google search, but don't honestly know how to go about finding these kinds of things, what they should be called, etc. I just find endless options of 3 pin single output version.

edit::: Alternatively, could I just wire up a zener diode in series before each potentiometer? I could supply all of the potentiometers with a 5v pretty easily, and then just have a zener diode in series before each potentiometer limiting the voltage to 3.3, but I don't know if this "simple fix" would actually provide the result i desire. It would be cheap!!
 
Last edited:

Jerry-Hat-Trick

Joined Aug 31, 2022
803
I’m familiar with thumb wheels and joysticks but not come across thumsticks before? Assuming they are just pots, and from the title you have 16 of them (not 90 million) how are you getting the A/D values into the processor? Maybe 2 x 8 channel converters? Maybe the pot values are too low such that, when in parallel they draw too much current from the 3.3V pin?

Not sure if Zener diodes are the right way to drop 5V to 3.3V. Using the 5V pin is a good idea as it can probably supply more current, but instead of Zener diodes just drop with a resistor so the potential divider gives 3.3V maximum at the wiper. For example, 5V into a fixed resistor of 5K into the 10K pot into ground would give a maximum wiper voltage of 3.33V
 

Thread Starter

tsmspace

Joined Mar 16, 2026
62
I’m familiar with thumb wheels and joysticks but not come across thumsticks before? Assuming they are just pots, and from the title you have 16 of them (not 90 million) how are you getting the A/D values into the processor? Maybe 2 x 8 channel converters? Maybe the pot values are too low such that, when in parallel they draw too much current from the 3.3V pin?

Not sure if Zener diodes are the right way to drop 5V to 3.3V. Using the 5V pin is a good idea as it can probably supply more current, but instead of Zener diodes just drop with a resistor so the potential divider gives 3.3V maximum at the wiper. For example, 5V into a fixed resistor of 5K into the 10K pot into ground would give a maximum wiper voltage of 3.33V
Hey! Thanks for the answer.

The thumbsticks are what is in a normal gamepad. xbox, playstation, etc. those little joysticks are called thumbsticks. It doesn't matter unless you're going to buy one, but it does define the form factor of the joystick.

The pots on thumbsticks can vary between usually 5-10k , but mine are all pretty much 10k.

How I get the values to the processor has two variations, depending on the controller. the smaller version is actually a 8 potentiometer (4 joystick) configuration, which fits nicely into arduino's default analog input configuration, so I just wire them directly to the arduino (nano) analog inputs. For the larger controller with 16axis , I use a basic arduino packaged multiplexer, you can find it easily by searching for arduino multiplexer, there is one primary pcb module you can buy for 1-16.

It doesn't have to be 3.3v, it can be five, 3, 4, whatever, because you just calibrate the top and bottom of the thumbstick in the driver, but simply increasing the resistance of each stick will still leave them all in parallel and slightly changing the voltage of all the others when one is deflected. (because when you dramatically change the resistance you affect the current through the others, I assume mostly when you drop the resistance lower it is the greatest effect, which may justify more resistors in series with each to keep the resistance from ever dropping to 0).

So, I suppose it does make sense that if I added a resistor to each channel, then when the thumbstick tilts the potentiometer to 0 resistance, there will still be that floor resistance preventing that most dramatic impact. But, it doesn't matter if it goes to 3.3 , and then setting 3.3 was just that it was far enough below 5 that I imagined it would have plenty of headroom. I suppose I would want nice big resistors in that case, so that current through the potentiometers is always as small as possible, and ensuring that none of them get close to a short at extreme joystick deflection.
 

KeithWalker

Joined Jul 10, 2017
3,604
Hey! Thanks for the answer.

The thumbsticks are what is in a normal gamepad. xbox, playstation, etc. those little joysticks are called thumbsticks. It doesn't matter unless you're going to buy one, but it does define the form factor of the joystick.

The pots on thumbsticks can vary between usually 5-10k , but mine are all pretty much 10k.

How I get the values to the processor has two variations, depending on the controller. the smaller version is actually a 8 potentiometer (4 joystick) configuration, which fits nicely into arduino's default analog input configuration, so I just wire them directly to the arduino (nano) analog inputs. For the larger controller with 16axis , I use a basic arduino packaged multiplexer, you can find it easily by searching for arduino multiplexer, there is one primary pcb module you can buy for 1-16.

It doesn't have to be 3.3v, it can be five, 3, 4, whatever, because you just calibrate the top and bottom of the thumbstick in the driver, but simply increasing the resistance of each stick will still leave them all in parallel and slightly changing the voltage of all the others when one is deflected. (because when you dramatically change the resistance you affect the current through the others, I assume mostly when you drop the resistance lower it is the greatest effect, which may justify more resistors in series with each to keep the resistance from ever dropping to 0).

So, I suppose it does make sense that if I added a resistor to each channel, then when the thumbstick tilts the potentiometer to 0 resistance, there will still be that floor resistance preventing that most dramatic impact. But, it doesn't matter if it goes to 3.3 , and then setting 3.3 was just that it was far enough below 5 that I imagined it would have plenty of headroom. I suppose I would want nice big resistors in that case, so that current through the potentiometers is always as small as possible, and ensuring that none of them get close to a short at extreme joystick deflection.
The input impedance of an Arduino analog input is extremely high. It will never cause a noticable difference in the current flow through the potentiometer, and certainly not enough to get anywhere near a short!
If you want to isolate the supply to each pot, why not use an analog regulator like the NT7333 to drop the 5V down to 3.3V. Thet are very inexpensive ($3.00 for 20 on AliExpress) and will eliminate the possibility of interaction through the power supply.
 

Irving

Joined Jan 30, 2016
5,064
The readings are more likely to be impacted by changes on the 5v and/or 3.3v rail used as the default reference due to changes on the load on those supplies as the Arduino core and peripherals switch on and off. Although the use of the supply rail as a reference shouldn't cause issues as it's ratiometric this isn't perfect. Poor power supply decoupling will exacerbate this. Also the 3.3v regulator on the Arduino is already slightly stressed, especially if running other peripherals on it. Bigger decoupling capacitors on 5v and 3.3v rail might help, or decouple the feed to the pots with, say, a 470ohm series resistor, plus a 100nF and 10uF capacitor to ground on the pot side of the resistor, and feed that to the Arduino EXT REF input.

Alternatively, use the internal 1.1v reference (which is very stable), and feed pots from a 1.1v source OR feed pots from an external stable source between say, 2 to 3v, and feed that to the Arduino EXT REF input as previously mentioned.

How fast are you taking readings?
 

Thread Starter

tsmspace

Joined Mar 16, 2026
62
The readings are more likely to be impacted by changes on the 5v and/or 3.3v rail used as the default reference due to changes on the load on those supplies as the Arduino core and peripherals switch on and off. Although the use of the supply rail as a reference shouldn't cause issues as it's ratiometric this isn't perfect. Poor power supply decoupling will exacerbate this. Also the 3.3v regulator on the Arduino is already slightly stressed, especially if running other peripherals on it. Bigger decoupling capacitors on 5v and 3.3v rail might help, or decouple the feed to the pots with, say, a 470ohm series resistor, plus a 100nF and 10uF capacitor to ground on the pot side of the resistor, and feed that to the Arduino EXT REF input.

Alternatively, use the internal 1.1v reference (which is very stable), and feed pots from a 1.1v source OR feed pots from an external stable source between say, 2 to 3v, and feed that to the Arduino EXT REF input as previously mentioned.

How fast are you taking readings?
My initial reaction was to think it might be this load on the voltage supply. That's why I thought resistors in series with each potentiometer might help, but now that I've further investigated, it does say that readings should be taken by the arduino analog read on loads with less than 10k resistance, and the potentiometers on thumbsticks are pretty much all 10k, of which I have a lot, and want to use.

It does say in the arduino forums that if the resistance of the tested load is greater than 10k, there is a capacitor in the atmega328p that will not be able to fully discharge resulting in "signal crossover" to another channel. When I deflect the sticks to their extremes, I take the resistance from roughly 5k (centered stick) to roughly 0k, or roughly 10k. It is better when the stick and potentiometer have roughly the same throw, but some get really close, while others have a much longer stick throw than potentiometer active range, so it is pretty common to reach very close to 0 and 10k. I imagine that it may be possible that my issue relates to this 10k ceiling. I have not done any testing other than my experience with playing it in games or sitting in the driver and watching the various axis deflect slightly when I tilt one to the extreme, and other than using a voltmeter to try and make some huge chart, I'm not sure what I would actually do to make test data besides this "looking in the driver screen to watch the axis move", which is adequate enough to know there is an effect, but not really good enough to know the difference between a stooping voltage supply or a capacitor struggling to discharge in time for the next measurement.

as for the rate of measurement, it's just running the arduino. I have no idea. It's using vjoyserialfeeder, and my sketch is set up for either 8 analog axis or 16 via a multiplexer, although the behavior seems to be actually worse on the 16 through a multiplexer, which would make more sense for a stooping voltage supply, and less sense for a discharging capacitor, since addressing the multiplexer should take a few more microseconds, giving the capacitor more time to discharge.

vjoyserialfeeder is at GitHub - Cleric-K/vJoySerialFeeder: Feed Virtual Joystick driver with data from a serial port · GitHub

my project can be investigated here 4 joystick (6-axis 6-dof) game controller | Hackaday.io

My original thought was that I would require each potentiometer to have its own dedicated regulated voltage supply, with all of the regulators given enough headroom that a full deflection of the thumbstick does not drop the supply to these regulators below the regulated voltage. There are some links that say stability can be achieved with a 0.1uf cap at each measurement point, so I would probably put them on the return from each potentiometer, at the thumbstick breakout were I to try this, and similarly I did think after an above reply that perhaps a resistor to increase the total resistance and prevent the resistance from going so low on the pots, but after learning about the 10k max resistance for loads to be measured, I thought this would not be ideal, although am not sure if perhaps this 10k resistance is actually the cause of the issue, which might be "signal crossover", which I do not know if it is or not.

the behavior is stable. When I hold a stick deflected, the change it causes in other axis stays constant until I release the stick, and this change is repeatable with every deflection. My present solution is to simply have a deadzone in the driver that is big enough to prevent the change from making it to the gameplay, although with more sticks and more of them tilted fully, some still gets through, and I don't want to make the entire throw of the thumbstick deadband.
 

sarahMCML

Joined May 11, 2019
696
Are you sure it's not a mechanical interaction effect between the various axes of the stick? Afterall, they are hardly precision devices, so there must be a certain amount of X-Y deviation.
 

Thread Starter

tsmspace

Joined Mar 16, 2026
62
Are you sure it's not a mechanical interaction effect between the various axes of the stick? Afterall, they are hardly precision devices, so there must be a certain amount of X-Y deviation.
yes. it will affect axis that are not on the same stick.
 

Irving

Joined Jan 30, 2016
5,064
Although the Atmel328p ADC is optimised for a source impedance <10k it's possible, as documented in the datasheet (section 23.6.1) that, at high conversion rates, or if the conversion is started too soon after selecting the channel, the swing from full scale to minimum, or vice versa, results in a erroneous reading. Without looking at the code in depth it's hard to say if this is the problem. However, you could try reducing the series resistance from 5k to, say, 100ohm on 2 channels and then see if the interaction goes away, or at least is reduced, between those two. If that is so, then that's your fix. You don't really need a series resistor.
 

Michael42

Joined Apr 20, 2026
5
I ran into the same issue and for me it turned out not to be a voltage problem but ADC crosstalk and noise, so switching to 3.3V or using zeners didn’t help, what actually fixed it was adding small caps on each pot, cleaning up the grounding, and slowing down the ADC reads a bit, after that the random inputs pretty much disappeared
 

Irving

Joined Jan 30, 2016
5,064
I ran into the same issue and for me it turned out not to be a voltage problem but ADC crosstalk and noise, so switching to 3.3V or using zeners didn’t help, what actually fixed it was adding small caps on each pot, cleaning up the grounding, and slowing down the ADC reads a bit, after that the random inputs pretty much disappeared
Yes, a few nF after the series resistor, creating a low-pass-filter is normal practice, as is decoupling the supply to the pots.

But the TS' problem doesn't sound like noise or crosstalk as it's repeatable, and static - crosstalk requires an AC signal.
 

Thread Starter

tsmspace

Joined Mar 16, 2026
62
Although the Atmel328p ADC is optimised for a source impedance <10k it's possible, as documented in the datasheet (section 23.6.1) that, at high conversion rates, or if the conversion is started too soon after selecting the channel, the swing from full scale to minimum, or vice versa, results in a erroneous reading. Without looking at the code in depth it's hard to say if this is the problem. However, you could try reducing the series resistance from 5k to, say, 100ohm on 2 channels and then see if the interaction goes away, or at least is reduced, between those two. If that is so, then that's your fix. You don't really need a series resistor.
 

Thread Starter

tsmspace

Joined Mar 16, 2026
62
well. I am thinking about it now, I suppose I could try to put a resistor in parallel with each potentiometer to reduce their resistance.


it's a static fault from my perspective, but the signal actually does jump around on them continously, there are some variables I suppose in the contact on the potentiometer since it's just a wiper and not a really good connection, but what I mean is that moving the sticks and then this noise does result in "AC", so I guess I wouldn't want to rule out crosstalk, which would only have to produce a small change in voltage to produce the result I experience.

It looks like my options are this:
-put like a .01uf cap on each signal wire, probably right at the thumbstick breakout board.
-put a parallel resistor with each potentiometer to reduce the effective resistance of the potentiometer.
-put some delay in the sketch after each read of a channel.

-probably all 3

I really don't like this solution though, although I didn't like the idea of putting regulators on each potentiometer either. However, it actually works well enough as it is that for a while now I haven't cared while playing, it's a small problem until you're really serious about using the controller for precision. So, I suppose a modification to "upgrade" would be a good way to present the whole concept, with the basic version being the best option for most.
 

Irving

Joined Jan 30, 2016
5,064
looks like my options are this:
-put like a .01uf cap on each signal wire, probably right at the thumbstick breakout board.
It needs to be a low-pass-filter, a series R, parallel C with values that don't impact significantly on your desired dV/DT else your game play will be sluggish. Ideally as near the ADC input as possible to minimise noise ingress.

-put a parallel resistor with each potentiometer to reduce the effective resistance of the potentiometer.
That won't change anything. The same current flows through the pot irrespective of the parallel resistor.

-put some delay in the sketch after each read of a channel.
The delay needs to be between the selection of the input channel and the start of the conversion to allow the sample & hold capacitor voltage to stabilise at the new value. If you are using the Arduino analogRead() you have no control of that. Your only solution is to read the channel twice, discarding the 1st reading. Might be a good idea to try that anyway as an experiment.
 

MisterBill2

Joined Jan 23, 2018
27,311
Now the whole discussion is a bit confusing BECAUSE of calling the thumb-sticks potentiometers. I am not a gamer and so it has become confusing here.
Are they REALLY potentiometers, with three conections and a voltage applied across the resistance, and the output voltage being dependent on the slider position??OR are the sticks two-terminal variable resistors, changing the current thru an separate resistor, and thus changing the voltage across that resistor?? THAT is a very different arrangement. Two wire devices versus three wire devices. There are solutions for either issue, but they are quite different.
 

skstrobel

Joined Nov 29, 2023
28
The multiple-input ADC is probably (internally) a single ADC with a MUX in front of it. The portions of the circuit following the MUX (inside the ADC) have some parasitic capacitance. When you switch the MUX and the new input is at a different voltage than the previous one, a bit of charge needs to flow in or out of the ADC input to pull that (unwanted but unavoidable) capacitor to the new voltage level. The resistance of the joystick potentiometers forms a RC filter with a time constant. If the voltage is read before it has time to stabilize, there will be crosstalk. I'm guessing that is the root cause of the crosstalk.

If that is the cause, each input will probably affect the inputs that are read immediately afterward more than it affects others. So A affects B the most, B affects C the most, C affects D and (assuming 4 inputs), D affects A.

The first thing I would try (also mentioned by previous posters) is to put a capacitor across each of the signals going to the ADC. When the MUX switches channels, these capacitors can rebalance charge with the parasitic capacitance faster than the RC time constant. A 0.1uF cap would be a reasonable place to start. If this helps, you can be almost sure of the root cause. But it might not be the best remedy for cost or space reasons.

A software remedy, if vjoyserialfeeder supports it, is to slow down the ADC readings in such a way that the ADC switches the MUX and waits a bit before reading the voltage. Note that just delaying between reading the results will probably not accomplish this; it is often done by changing how the ADC is configured before the readings are taken. Rather than modifying vjoyserialfeeder, you might be able to let it do the ADC setup, then manually go write different values to the ADC configuration registers to change the settings without vjoyserialfeeder knowing it.

Another option, if supported, is to make vjoyserialfeeder read the same input multiple times in a row. I would expect less crosstalk in the later readings. Again, how you read the results is not the issue; it is how vjoyserialfeeder controls the MUX. You need it to stay on the same input for multiple readings in a row to give things time to settle so the later readings aren't affected by the crosstalk. Then switch to the next input and read it multiple times.

If you can choose different resistor values for the joystick pots, another option would be to use 1K rather than 10K to reduce the RC time constant to 1/10 as long. Putting a resistor across the pot is not the same thing; you would need to change the value of the pots themselves.

You shouldn't need to take this any further to get good results for this project, but if you needed extreme precision, Googling for "ADC driver" would lead you down a very deep rabbit hole.
 
Top