[gnoduino: 124/237] fixed analog pin mapping for 32u4



commit af7ebe8841412399675f484b758048e8e34120bc
Author: Zach Eveland <zeveland blacklabel-development com>
Date:   Tue Sep 13 23:52:26 2011 -0400

    fixed analog pin mapping for 32u4

 arduino/cores/arduino/wiring_analog.c    |    7 ++++-
 arduino/variants/leonardo/pins_arduino.h |   33 ++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 2 deletions(-)
---
diff --git a/arduino/cores/arduino/wiring_analog.c b/arduino/cores/arduino/wiring_analog.c
index d248f4c..62b91cf 100644
--- a/arduino/cores/arduino/wiring_analog.c
+++ b/arduino/cores/arduino/wiring_analog.c
@@ -46,8 +46,11 @@ int analogRead(uint8_t pin)
 #else
 	if (pin >= 14) pin -= 14; // allow for channel or pin numbers
 #endif
-
-#if defined(ADCSRB) && defined(MUX5)
+	
+#if defined(__AVR_ATmega32U4__)
+	pin = analogPinToChannel(pin);
+	ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
+#elif defined(ADCSRB) && defined(MUX5)
 	// 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);
diff --git a/arduino/variants/leonardo/pins_arduino.h b/arduino/variants/leonardo/pins_arduino.h
index 6fc3ea9..65ab5e2 100644
--- a/arduino/variants/leonardo/pins_arduino.h
+++ b/arduino/variants/leonardo/pins_arduino.h
@@ -48,6 +48,10 @@ const static uint8_t A5 = 19;
 const static uint8_t A6 = 20;
 const static uint8_t A7 = 21;
 
+//	__AVR_ATmega32U4__ has an unusual mapping of pins to channels
+extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
+#define analogPinToChannel(P)  ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
+
 #ifdef ARDUINO_MAIN
 
 // On the Arduino board, digital pins are also used
@@ -228,6 +232,35 @@ const uint8_t PROGMEM digital_pin_to_timer_PGM[18] = {
 	NOT_ON_TIMER,
 };
 
+const uint8_t PROGMEM analog_pin_to_channel_PGM[11] = {
+	/*
+	 A0		PF7							ADC7
+	 A1		PF6							ADC6
+	 A2		PF5							ADC5
+	 A3		PF4							ADC4
+	 A4		PF1							ADC1
+	 A5		PF0							ADC0
+	 D4		A6		PD4					ADC8
+	 D5		A7		PD6		FastPWM		OC4D/ADC9
+	 D6		A8		PD7		FastPWM		#OC4D/ADC10
+	 D9		A9		PB5		PWM16		OC1A/#OC4B/ADC13/PCINT5
+	 D10	A10		PB6		PWM16		OC1B/0c4B/ADC12/PCINT6
+	 */
+	
+	7,
+	6,
+	5,
+	4,
+	1,
+	0,
+	8,
+	9,
+	
+	10,
+	13,
+	12
+};
+
 #endif
 
 #endif
\ No newline at end of file



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]