I was playing around with some MCP3008 ADCs from Microchip with an Arduino. The playground has an example for the MCP3208 (which seems to be just a 12 bit version of the MCP3008)

Well, when I tried the example, I forgot to only read 10 bits instead of the examples 12 bits. I noticed the reading was from 0-4096

In the interest of learning, I tried doing 13 bits and could read to 8192. With 16 bits, to 65535.

Is this dangerous to do? As in, not accurate? I just had a cheap trimpot and breadboard. There was some noticeable bounce, 500 at 16 bit and about 90 at 13 bit. The drift was around 10 at 10 bit reading.

Are all ADCs typically the same chip that is just binned based on performance?


1 Answer 1


No, the MCP3008 is a 10-bit only ADC. Take a look a how the microcontroller reads data from it:

enter image description here

Notice that Dout will only output a 10-bit value [B9:B0], and there is no way to have it send the microcontroller a number with more bits. Therefore what you are seeing is most likely a left-shifted value. For example, if the output of the ADC was 385 as a 10-bit (which is 0110000001 in binary), if you shift to the left 2 times you'll get 1540 (which is 011000000100 in binary). But you haven't really gained any new information, just multiplied the number by a factor of 4.

  • \$\begingroup\$ Ah, that makes very much sense. Thanks for your time \$\endgroup\$ Jan 23, 2013 at 4:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.