# What is the voltage range on an Arduino pin when doing analogRead()?

I know what an Arduino's ADC generates a number with 10 bits of resolution (0 to 1023). How is this number generated? Is there a minimum and maximum voltage it will assign 0 and 1023 to, respectively?

I'm taking input from an amplified electret microphone.
Also, when I give the Arduino input, the value is not 0 when I'm not making noise in the mic. Sometimes is around 500, sometimes around 300, it changes. What could be the reason for this?

• I suggest you read the chapter on the ADC in the datasheet of the controller of your Arduino. – starblue Jul 9 '11 at 11:59
• Got it thanks! Its 0 to 5 volts (corresponding to 0 to 1023) for anyone who was wondering as well. – Shubham Jul 10 '11 at 1:28

## 1 Answer

Most microcontroller ADCs have a pin for the positive ADC reference voltage, and some will also have one for the negative reference. Those that don't will use ground as the lower reference. Then the ADC's reading is $\dfrac{V_{IN} - V_{REF-}}{V_{REF+} - V_{REF-}} \times Maximum\ reading$. If Maximum Reading is 1023, then $V_{IN} = V_{REF-}$ will give you 0, and $V_{IN} = V_{REF+}$ will result in a 1023 reading.

As for the unexpected values you see, check this answer.

• Whether the AREF pin is used depends on how the ADC is configured. ATmega controllers can also use the analog power supply AVCC or an internal bandgap reference of 1.1V. – starblue Jul 9 '11 at 11:57
• Thanks steven, this explains how it works, and I found the answer in the arduino reference site – Shubham Jul 10 '11 at 1:29