From d4c5dba234cf88a4a9551238a4d2e088da452b51 Mon Sep 17 00:00:00 2001 From: peabody124 Date: Sun, 15 Aug 2010 00:53:30 +0000 Subject: [PATCH] [PIOS] The ADC mappings are strange because of the way the DMA engine works. Basically data is packed 16 bits ADC2 then 16 bits ADC1 channels, so the accels are pins [4 2 0] currently. Also there is inconsistency between the names of the pins in the config file which uses 1 based indexing and the index for PIOS_ADC_PinGet which is zero based and has to account for this interleaving. Probably should adjust config file to be zero based and then to make those pin numbers map to the function call. The actual order they appear is arbitrary as the ADC engine can scan in whatever order. git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1290 ebee16cc-31ac-478f-84a7-5cbb03baadba --- flight/AHRS/ahrs.c | 14 ++++----- flight/AHRS/inc/pios_board.h | 58 ++++++++++++++++++++++-------------- 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/flight/AHRS/ahrs.c b/flight/AHRS/ahrs.c index 762172a9b..2ea38ada0 100644 --- a/flight/AHRS/ahrs.c +++ b/flight/AHRS/ahrs.c @@ -151,22 +151,18 @@ int main() PIOS_HMC5843_ReadMag(mag_data.raw.axis); // Test ADC - accel_data.raw.x = PIOS_ADC_PinGet(2); - accel_data.raw.y = PIOS_ADC_PinGet(1); + accel_data.raw.x = PIOS_ADC_PinGet(4); + accel_data.raw.y = PIOS_ADC_PinGet(2); accel_data.raw.z = PIOS_ADC_PinGet(0); - gyro_data.raw.x = PIOS_ADC_PinGet(3); - gyro_data.raw.y = PIOS_ADC_PinGet(4); + gyro_data.raw.x = PIOS_ADC_PinGet(1); + gyro_data.raw.y = PIOS_ADC_PinGet(3); gyro_data.raw.z = PIOS_ADC_PinGet(5); -#if 0 /* Turn this on when the temperature ADCs are configured */ gyro_data.temp.xy = PIOS_ADC_PinGet(6); gyro_data.temp.z = PIOS_ADC_PinGet(7); -#else - gyro_data.temp.xy = 0; - gyro_data.temp.z = 0; -#endif + //PIOS_COM_SendFormattedString(PIOS_COM_AUX, "ADC Values: %d,%d,%d,%d,%d,%d\r\n", PIOS_ADC_PinGet(0), PIOS_ADC_PinGet(1), PIOS_ADC_PinGet(2), PIOS_ADC_PinGet(3), PIOS_ADC_PinGet(4), PIOS_ADC_PinGet(5)); diff --git a/flight/AHRS/inc/pios_board.h b/flight/AHRS/inc/pios_board.h index 7a5b3b5de..f2eeed667 100644 --- a/flight/AHRS/inc/pios_board.h +++ b/flight/AHRS/inc/pios_board.h @@ -121,11 +121,13 @@ TIM8 | | | | //------------------------- // ADC // PIOS_ADC_PinGet(0) = Accel Z -// PIOS_ADC_PinGet(1) = Accel Y -// PIOS_ADC_PinGet(2) = Accel X -// PIOS_ADC_PinGet(3) = Gyro X -// PIOS_ADC_PinGet(4) = Gyro Y +// PIOS_ADC_PinGet(2) = Accel Y +// PIOS_ADC_PinGet(4) = Accel X +// PIOS_ADC_PinGet(1) = Gyro X +// PIOS_ADC_PinGet(3) = Gyro Y // PIOS_ADC_PinGet(5) = Gyro Z +// PIOS_ADC_PinGet(6) = XY Temp +// PIOS_ADC_PinGet(7) = Z Temp //------------------------- //#define PIOS_ADC_OVERSAMPLING_RATE 1 #define PIOS_ADC_USE_TEMP_SENSOR 0 @@ -150,31 +152,43 @@ TIM8 | | | | #define PIOS_ADC_PIN3_ADC ADC1 #define PIOS_ADC_PIN3_ADC_NUMBER 3 -#define PIOS_ADC_PIN4_GPIO_PORT GPIOA // PA4 (Gyro X) -#define PIOS_ADC_PIN4_GPIO_PIN GPIO_Pin_4 // ADC12_IN4 -#define PIOS_ADC_PIN4_GPIO_CHANNEL ADC_Channel_4 -#define PIOS_ADC_PIN4_ADC ADC2 -#define PIOS_ADC_PIN4_ADC_NUMBER 1 +#define PIOS_ADC_PIN4_GPIO_PORT GPIOA // PA6 (XY Temp) +#define PIOS_ADC_PIN4_GPIO_PIN GPIO_Pin_6 // ADC12_IN6 +#define PIOS_ADC_PIN4_GPIO_CHANNEL ADC_Channel_6 +#define PIOS_ADC_PIN4_ADC ADC1 +#define PIOS_ADC_PIN4_ADC_NUMBER 4 -#define PIOS_ADC_PIN5_GPIO_PORT GPIOA // PA5 (Gyro Y) -#define PIOS_ADC_PIN5_GPIO_PIN GPIO_Pin_5 // ADC12_IN5 -#define PIOS_ADC_PIN5_GPIO_CHANNEL ADC_Channel_5 +#define PIOS_ADC_PIN5_GPIO_PORT GPIOA // PA4 (Gyro X) +#define PIOS_ADC_PIN5_GPIO_PIN GPIO_Pin_4 // ADC12_IN4 +#define PIOS_ADC_PIN5_GPIO_CHANNEL ADC_Channel_4 #define PIOS_ADC_PIN5_ADC ADC2 -#define PIOS_ADC_PIN5_ADC_NUMBER 2 +#define PIOS_ADC_PIN5_ADC_NUMBER 1 -#define PIOS_ADC_PIN6_GPIO_PORT GPIOA // PA7 (Gyro Z) -#define PIOS_ADC_PIN6_GPIO_PIN GPIO_Pin_7 // ADC12_IN7 -#define PIOS_ADC_PIN6_GPIO_CHANNEL ADC_Channel_7 +#define PIOS_ADC_PIN6_GPIO_PORT GPIOA // PA5 (Gyro Y) +#define PIOS_ADC_PIN6_GPIO_PIN GPIO_Pin_5 // ADC12_IN5 +#define PIOS_ADC_PIN6_GPIO_CHANNEL ADC_Channel_5 #define PIOS_ADC_PIN6_ADC ADC2 -#define PIOS_ADC_PIN6_ADC_NUMBER 3 +#define PIOS_ADC_PIN6_ADC_NUMBER 2 -#define PIOS_ADC_NUM_PINS 6 +#define PIOS_ADC_PIN7_GPIO_PORT GPIOA // PA7 (Gyro Z) +#define PIOS_ADC_PIN7_GPIO_PIN GPIO_Pin_7 // ADC12_IN7 +#define PIOS_ADC_PIN7_GPIO_CHANNEL ADC_Channel_7 +#define PIOS_ADC_PIN7_ADC ADC2 +#define PIOS_ADC_PIN7_ADC_NUMBER 3 -#define PIOS_ADC_PORTS { PIOS_ADC_PIN1_GPIO_PORT, PIOS_ADC_PIN2_GPIO_PORT, PIOS_ADC_PIN3_GPIO_PORT, PIOS_ADC_PIN4_GPIO_PORT, PIOS_ADC_PIN5_GPIO_PORT, PIOS_ADC_PIN6_GPIO_PORT } -#define PIOS_ADC_PINS { PIOS_ADC_PIN1_GPIO_PIN, PIOS_ADC_PIN2_GPIO_PIN, PIOS_ADC_PIN3_GPIO_PIN, PIOS_ADC_PIN4_GPIO_PIN, PIOS_ADC_PIN5_GPIO_PIN, PIOS_ADC_PIN6_GPIO_PIN } +#define PIOS_ADC_PIN8_GPIO_PORT GPIOB // PA7 (Gyro Z) +#define PIOS_ADC_PIN8_GPIO_PIN GPIO_Pin_1 // ADC12_IN7 +#define PIOS_ADC_PIN8_GPIO_CHANNEL ADC_Channel_9 +#define PIOS_ADC_PIN8_ADC ADC2 +#define PIOS_ADC_PIN8_ADC_NUMBER 4 + +#define PIOS_ADC_NUM_PINS 8 + +#define PIOS_ADC_PORTS { PIOS_ADC_PIN1_GPIO_PORT, PIOS_ADC_PIN2_GPIO_PORT, PIOS_ADC_PIN3_GPIO_PORT, PIOS_ADC_PIN4_GPIO_PORT, PIOS_ADC_PIN5_GPIO_PORT, PIOS_ADC_PIN6_GPIO_PORT, PIOS_ADC_PIN7_GPIO_PORT, PIOS_ADC_PIN7_GPIO_PORT } +#define PIOS_ADC_PINS { PIOS_ADC_PIN1_GPIO_PIN, PIOS_ADC_PIN2_GPIO_PIN, PIOS_ADC_PIN3_GPIO_PIN, PIOS_ADC_PIN4_GPIO_PIN, PIOS_ADC_PIN5_GPIO_PIN, PIOS_ADC_PIN6_GPIO_PIN, PIOS_ADC_PIN7_GPIO_PIN, PIOS_ADC_PIN8_GPIO_PIN } #define PIOS_ADC_CHANNELS { PIOS_ADC_PIN1_GPIO_CHANNEL, PIOS_ADC_PIN2_GPIO_CHANNEL, PIOS_ADC_PIN3_GPIO_CHANNEL, PIOS_ADC_PIN4_GPIO_CHANNEL, PIOS_ADC_PIN5_GPIO_CHANNEL, PIOS_ADC_PIN6_GPIO_CHANNEL } -#define PIOS_ADC_MAPPING { PIOS_ADC_PIN1_ADC, PIOS_ADC_PIN2_ADC, PIOS_ADC_PIN3_ADC, PIOS_ADC_PIN4_ADC, PIOS_ADC_PIN5_ADC, PIOS_ADC_PIN6_ADC } -#define PIOS_ADC_CHANNEL_MAPPING { PIOS_ADC_PIN1_ADC_NUMBER, PIOS_ADC_PIN2_ADC_NUMBER, PIOS_ADC_PIN3_ADC_NUMBER, PIOS_ADC_PIN4_ADC_NUMBER, PIOS_ADC_PIN5_ADC_NUMBER, PIOS_ADC_PIN6_ADC_NUMBER } +#define PIOS_ADC_MAPPING { PIOS_ADC_PIN1_ADC, PIOS_ADC_PIN2_ADC, PIOS_ADC_PIN3_ADC, PIOS_ADC_PIN4_ADC, PIOS_ADC_PIN5_ADC, PIOS_ADC_PIN6_ADC, PIOS_ADC_PIN7_ADC, PIOS_ADC_PIN8_ADC } +#define PIOS_ADC_CHANNEL_MAPPING { PIOS_ADC_PIN1_ADC_NUMBER, PIOS_ADC_PIN2_ADC_NUMBER, PIOS_ADC_PIN3_ADC_NUMBER, PIOS_ADC_PIN4_ADC_NUMBER, PIOS_ADC_PIN5_ADC_NUMBER, PIOS_ADC_PIN6_ADC_NUMBER, PIOS_ADC_PIN7_ADC_NUMBER, PIOS_ADC_PIN8_ADC_NUMBER } #define PIOS_ADC_NUM_CHANNELS (PIOS_ADC_NUM_PINS + PIOS_ADC_USE_TEMP_SENSOR) #define PIOS_ADC_NUM_ADC_CHANNELS 2 #define PIOS_ADC_USE_ADC2 1