multiple references

Hope you will bear with a rank amateur --- I know little about electronics.

I want to display a series of DC analogue values. I want to first take a 'coarse' reading to establish a value within the 0 to 1023 range of a 10 bit adc -- for that I assume I would use Vin as reference. This value will be useful in itself.

Then I want to use that value to attempt to apply the 1023 steps to a subset of the overall range, perhaps 10% to 15% above and below the above measured value. If this were given a graphic output of some kind it would give me a detailed view of the above subset.

So I might get in effect 12 bit resolution (say) from a 10 bit adc.

Suppose Vin was 5 volts. The above might be simple if I could run non-simultaneous reference ranges from (say) 4 volts to 5 volts, 3 volts to 4 volts, 2 volts to 3 volts etc. etc.... But any reference voltage is always between itself and ground, and thus could only give effective increase in resolution on a small part of the overall range.

In other words I want to establish a series of adc references, each NOT between itself and ground, but between itself and the highest value of the next range below.

I assume what I want to do is impossible and I have demonstrated complete ignorance of the basics of elecronic theory. Is this so?

Harry Potter wouldn't have any trouble getting this to work.

ross blight

If my 5 am brain is really working, then you will need an op amp, some resistors, and voltage sources. The technique is called voltage scaling, and google yielded this tutorial: . Out of curiosity, why do you need the extra resolution? It would also make sense just to use an external ADC instead of messing with multiple scales and voltAges.

Hi, thanks for your tip -- I will try to absorb it.
That which I am measuring varies in resistance from about 200 Ohms to about 300 KOhms. The coarse measurement needs only be in voltage drop to 1 decimal place (e.g. 3.4 volts). But then I need to register variations of (say) 50 to 100 Ohms around that area. The device must interface to a computer, I do not have the technical expertise to play with op amps, and I want to keep component count and cost low. The arduino's usb interface and low cost is a major plus.
Re scaling --- I need the fine display at any point over the .3 MegOhm range. I can use a resistor network to drop the reference voltage to (say) 1.25 volts but as far as I can see that only works over a small part of the overall range. To get 1000 step resolution for a section of the overall range near the other end needs as far as I can see a reference range not bound to earth. I will keep studying.

The figures you mentioned indicates that you are interested in a 1-volt range that can be moved. The 1 volts is easy, just use the internal 1v1 reference. But to move the range you need to apply an offset and AFAIK you need an opamp for this.

As bilbo says, maybe just using a more accurate external ADC is the best way to go. You can get 16-bitters with serial interfaces in tiny packages these days.


Yes, here's a 12-bit part from as one example
I2C 12-Bit, 8-CH Analog-to-Digital Converter

Thanks --- checked out the gravitech one and it's cheap --- 12 bits around $20. Have ordered one.
For interest (after about 8 hours search) --- what I need is a differential adc --- lets one use a moveable reference window. But hardware only; I looked for a software implementation and no luck.
Anyhow I've got 4X resolution with the gravitech.
Thanks all for your help & suggestions.

And if 12 bit A/D is better then 10 bits, then 16 bits is even yummer:

Looks like a deal! And from WI too, not from the far east.

Heck you can get 16 bits with differential inputs for $7 from Farnell, and in a nice small SOT23 package. This sort of thing is cheap as chips these days.


Heck you can get 16 bits with differential inputs for $7 from Farnell, and in a nice small SOT23 package. This sort of thing is cheap as chips these days.


An SOT23 packaged device is not the same as a assembled A/D module ready to go. Raw chip cost is just part of the total costs of adding better A/D performance for an Arduino project. I'm not into homebrewing my own PCB and doing SMD soldering. Fine for some, not for these tired old eyeballs. :wink:

I still think there would be a good market for a general purpose analog instrumentation shield that has a better resolution A/D, on-board D/A function and maybe a general purpose instrumentation op-amp for scaling and offset corrections.


I still don't mind using the small packages although it ain't getting any easier. Hopefully they won't get much smaller while I'm still into electronics.

Yes I think a well designed analogue shield would be good, especially as hi-res analogue is difficult to get right and probably not very breadboard friendly. It might even be practical to go to 24 bits even if the lower 2-3 aren't very useful. Certainly 16 bits would be worth while.

Add instrument amps, programmable gain and offset, maybe even some isolation and you'd have a nice board.


Add instrument amps, programmable gain and offset, maybe even some isolation and you'd have a nice board.

Very useful product I would think, however with bazzions of shields on the market I've yet to see something like this offered?


As I said, I don't have a fraction of the knowledge you blokes have. All I've got is a 'black box' approach. So it seemed that a coarse reading established a sub-range that applying whatever available steps to would give as much resolution as one could ever want. Differential input adc's let one move this window up and down the overall range -- like a sort of 'floating earth'. But the Arduino chip hasn't got one. But I have a gut feeling that there might be a way to do it with software. It wouldn't be commercially viable because a differential input adc would be cheaper than one with a microprocessor hanging off it. No-one has bothered to figure out the program logic but it is a bit fascinating.

I've yet to see something like this offered?

Opening there for a bright young lad, know any? :slight_smile:

The only way I can think of to do "differential" in software is to subtract the top value of the previous range from the current range. However this does not help with resolution, it's just a display thing.

If you have a hi-res ADC then that doesn't matter. Assuming a 5v total range with the standard ADC you get ~5mV resolution. If you use a 16-bit ADC you get .07mV resolution over the entire 5v range. If that's good enough you can forget about ranges and windows and everything, just take a measurement.

That small module retrolefty linked to is pretty much a black box.

Have a look at this thread on the Oz electronics forum

SAborn (aka Pete) uses an ADS1100 16-bit ADC to weigh the contents of a bucket on a tractor. The chip is a no brainer to use from what he says. Pete lives in South Aus, get in touch he's very happy to help people with their projects.