Noise Issues with ADC. Using Control Voltage for Analog Input

Hi. I’m trying to get an Analog In reading with the least amount of noise possible. Out of the 1024 values that Arduino gives to the Input, I need it to sway no more than 6 values (10 if the input voltage is optimised).

Currently, the input stays at one voltage and moves up or down in increments of 0.04 volts but only when inputted by the user. Otherwise the voltage stays spot on. With each increment, a different color is outputted to the LED. Can anyone help me reduce my ADC noise? I’ve tried capacitors almost everywhere and still havent had much luck.

I can’t use a smoothing function in the code because I need the Input to respond quickly and accurately to the changes in Voltage. That way the color changes on the LED are accurate to the inputted value without having input colors show up from the smoothing function. Also, if I could keep this on one power source, that would be great!

Optimisation: Currently my range of input is 3.4v. If i could manage to move that to 5v then that would probably help a lot. I’ve gotten close with a voltage divider but it was still too noisy. So maybe with one or two more fixes this will help get it to where it needs to be. The hardest part about this is that I haven’t been able to read any current from my voltmeter, making it hard to choose resistor values.

Any help would be much appreciated! Thanks

Loose the 1M resistor that is causing your noise.

Cool. Thanks for the reply Mike! I took out the 1M resistor, put in (2) 10k resistors and the voltage was still too high. Which i think is due to lack of current (wont show up on my multimeter). So I laid down a voltage divider to lower the V and I am still getting noise issues. Here is an updated fritz.

Can you explain what that black blob is feeding the A0 input? And why you are cutting down the voltage from it.

The A/D works best when there is a 0 to 5V input.

If that blob is a jack socket please note you can not feed audio directly into an Arduino like that because half the time an audio signal is negative and that can damage the input pin. If it is audio then what you will see is a signal constantly changing, is this what you are thinking is noise?

Do agree with Grumpy.

1 Have you checked that the input signal HAS NOT noise itself?

2 Try grounding the input signal as close as you can to the controller itself.

Regards

Hi. The black blog is an audio input haha. But it is coming from my Synthesizer from the Pitch CV output. According to my multimeter it is unipolar unlike some of the other CV outs(LFO for example). The Pitch CV's standard range is from 0 to 7v. The output from the Pitch CV changes only when I play a different note on the synth. Otherwise, the Voltage is very steady. Extremely steady as far as I can tell from my multimeter. On the ADC the fluctuations that are occurring are +/- 9 values out of the 1024 values. Just a side note, I'm actually driving an LED strip, Neopixels (from Adafruit) to be exact. I don't know if this might somehow introduce extra noise from the Logic switching. Thanks for taking the time to respond! I really appreciate the help.

Just tried connecting the Ground on the Audio Jack to the Ground on the Arduino board. Still getting a +/- 8 out 1024

How many times per second are you reading the ADC and updating the LED colour?

I don't get why people keep uploading these massively huge graphics.

polymorph: I don't get why people keep uploading these massively huge graphics.

Because they are not aware hf how massively big they are. They appear reasonable on there machines because their machines do the scaling. That is the problem with too much abstraction from the underlying technology. People want mega pixel cameras with out realising what that means in terms of real scree pixels.

positivelypositiv: Otherwise, the Voltage is very steady. Extremely steady as far as I can tell from my multimeter.

Yes a multimeter will not show the rapid variations you are seeing because it averages and only produces about three updates a second.

There are two possible causes. 1) Your signal does indeed have this noise on it when you are playing. 2) The noise is being picked up from something.

I would try and disconnect any LEDs you might be switching and see if that improves things. Then we can another look.

Wow. So I unplugged the LEDs and now the ADC is giving a stable value with a deviation of +/- 1 which is great! I tried this earlier but I did not have the Audio Ground plugged into the Arduino Ground. I just retried it to double check.

The LEDs are being updated at 800 Hz. Sorry about the large image size, these were my first exports from Fritz, from now on i'll resize them.

OK we have something to go at now. First of all look to your grounding. Take a separate ground from your analogue input to the arduino. Then have the ground from the LEDs on the arduino ground on the other ( digital pins ) side of the board. See if that helps.

And try an electrolytic capacitor on the power connections at the neopixel strip. 220uF to 1,000uF.

Alright. I moved the LED strip Ground to the pin side Ground on the Arduino. Added a 220uF cap, tried it out, and it’s back to +/- 10 out of 1024. I also tried out a 2200uF to see if it would make a difference. Here is an updated schematic.

PCVX_bb.jpg

While the topology of the circuit is right the layout is poor if it is truly like your Fritzing layout. To be useful the capacitor needs to be as close as possible to the load not miles away like it is shown. I would not even put the analogue circuits on the same bread board as the digital stuff.

Cool. This time I connected the Audio Ground and Lead directly to the Arduino. This is okay as long as I don’t play too high on the keyboard. Here is a more accurate representation of the Layout. With the 2200uF Cap, I’m getting a +/- 6 reading on the ADC. I can make a post on the Adafruit forum if this becoming too much of a hassle. Thanks again for all of the help so far

PCVXX_bb.jpg

if this becoming too much of a hassle.

No problem.

Have you got rid of the potential divider on the analogue input. The last time you had two 10K resistors. If you could make them two 1K resistors then that might help because the lower impedance the less prone it is to picking up interference.

Also if you have a 0.1uF ceramic capacitor I would place that across the large capacitor to take out the high frequency noise. Also a low value resistor 5 or 10 ohms or better yet an inductor ( as large as you can get ) in series with the LED's supply will help even more. Like the last circuit on this page. http://www.thebox.myzen.co.uk/Tutorial/De-coupling.html

I guess you are using the single LED symbol to represent the neopixel strip? How long are the leads from the strip to the breadboard? And can you move the capacitor to connect directly across the neopixel power leads where they plug into the breadboard? Or even better, solder the capacitor to the strip itself?

I got rid of the resistors on the Audio Lead. This is okay for testing purposes as long as I dont play really high on the Keyboard.
The 0.1uF really did the trick for the lower voltages(+/- 0.5ish).
The lowest resistor I have on hand is 100 ohms and that fixed the rest of the higher voltages coming in to the ADC. At first when the ADC received anything higher than 0.8V, it would start jumping around again +/- 20 (of 1024). But that 100 ohm resistor with everything else really did the trick. The Strip is a lot more dim now but once I get my next order of parts in, i’ll try out some lower resistors and see how it works.

The LED in the picture is representing the LED strip.
The length of the wire from the breadboard to the LED strip is about one foot. I just tried one that is 3 inches from the breadboard connections and am getting the same result. Dim with a side of good ADC.

All in all, I would say problem solved. Once I get an inductor and lower resistors in, i’ll post the results.

Thank you so much guys! And Mike, I owe you a beer

Happy you’ve solved it.

About grounding. For a totally different project I’m invloved in, the closest place to ground I’ve found was a pin in the middle of the arduino (due) card. I grounded my signal source there; as I made some other changes at the same time (error; you should make ONE change at a time to see how it works) I can’t tell you if this ONLY would have solve the problem (thst is actually solved).

Regards