For almost all of my embedded work I’ve used the ADCs included with microcontrollers. These are cheap, relatively fast, and not particularly good. While they sport impressive-sounding 12- and 16-bit readouts, the effective number of bits (ENOB) is usually around 8 or 9. Recently I’ve been playing with the ADS1115. It’s a dedicated ADC from TI module which plausibly delivers 16 bit accuracy. One really cool thing about the ADS111x family is a dynamic range feature that gives you up to 20 times finer measurement for small amplitude voltages. It’s accuracy where it matters. The ADS1115’s programmable gain amplifier lets you shrink the full-scale range from ±6.144 V down to ±0.256 V. That means a single LSB can represent as little as ~7.8 µV (0.256 V ÷ 32768). Compare that with a microcontroller ADC with a fixed 3.3 V range: 9 ENOB steps are ~6 mV. Another nice thing is that it uses an internal voltage reference. The RP2040, for example, requires an external 3.3V analog reference. But there’s something fishy about the pricing of the ADS1115. At quantity 1K it’s around $4 from Digikey, yet $0.60 on LCSC. That’s quite a spread. I picked up breakout boards from Amazon for $2.97 if you buy four, and I very much think these are made with the $0.60 parts from LCSC or similar. I’ve also ordered this very handsome breakout from Adafruit, which I assume uses the pricier version of the ADS1115. I’ll report back next week. So how bad are these cheap ones? I hooked one up to an I²CMini and my trusty precision DC voltage source and tried to find out. First check, are these functioning according to spec, or are they a cheaper part that’s being passed off as an ADS1115, as reported on forums? As far as I can tell, they behave as if they are real ADS1115s. The readout is true 16-bits. The PGA (Programmable Gain Amplifier) appears functional. The readout rate is variable from 8 to 860 samples per second, and this approximately matches the TI datasheet. I tested mostly in differential mode, and with the two inputs tied together, the ADC read consistently zero. With a calibrated 2.5V differential, the ADC measured very close to 2.5V, and with the polarity reversed gave exactly the same number negated. So far so good. But closer inspection showed some deviations. The TI datasheet says that the Data Rate, DR is ±10% of the nominal. So at 8 samples per second mode, samples should arrive 7.2 - 8.8 times per second. Three of the ADCs were close but slow (6.5-7 samples per second). One of the ADCs was nowhere near: 300 samples per second. That one didn’t get any further testing; there’s obviously something broken with its timing system. (But how many end users would actually notice that it’s running faster (and hence noisier) than it’s meant to?) Looking more closely at the actual measurement, my calibrated 2.50067V source was being reported by the ADS1115 as 2.4883V. That’s a 12 mV error, and a 0.5% difference. Much bigger than the claim in the TI datasheet: This isn’t quite the catastrophe that it might seem. After a simple linear correction on the MCU, I was getting results accurate to within 10 µV. So what’s going on with the cheap parts? My best guess is that these are either quite good copies, or failed parts that somehow made their way into the hobbyist supply chain. When the more respectable part arrives next week I’ll put it through the same tests and report the result. However I only bought one of these, because it’s 4X the price! Thanks for reading.