aboutsummaryrefslogtreecommitdiff
path: root/cores/arduino/wiring_analog.c
diff options
context:
space:
mode:
Diffstat (limited to 'cores/arduino/wiring_analog.c')
-rwxr-xr-xcores/arduino/wiring_analog.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/cores/arduino/wiring_analog.c b/cores/arduino/wiring_analog.c
index 529ad52..63be477 100755
--- a/cores/arduino/wiring_analog.c
+++ b/cores/arduino/wiring_analog.c
@@ -39,16 +39,20 @@ int analogRead(uint8_t pin)
{
uint8_t low, high;
- // set the analog reference (high two bits of ADMUX) and select the
- // channel (low 4 bits). this also sets ADLAR (left-adjust result)
- // to 0 (the default).
- ADMUX = (analog_reference << 6) | (pin & 0x07);
-
#if defined(__AVR_ATmega1280__)
+ if (pin >= 54) pin -= 54; // allow for channel or pin numbers
+
// the MUX5 bit of ADCSRB selects whether we're reading from channels
// 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high).
ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
+#else
+ if (pin >= 14) pin -= 14; // allow for channel or pin numbers
#endif
+
+ // set the analog reference (high two bits of ADMUX) and select the
+ // channel (low 4 bits). this also sets ADLAR (left-adjust result)
+ // to 0 (the default).
+ ADMUX = (analog_reference << 6) | (pin & 0x07);
// without a delay, we seem to read from the wrong channel
//delay(1);