diff --git a/include/adc_dma.h b/include/adc_dma.h
index c0750d071f91f3336dfbefcc2dc3e2058bcfe186..898830f6e720575277306d67d865f3c0afe0ddb9 100755
--- a/include/adc_dma.h
+++ b/include/adc_dma.h
@@ -7,8 +7,10 @@ extern "C" {
 
 #include "stm32f1xx.h"
 
-typedef enum {ADC_CH1,ADC_CH2,ADC_CH3,ADC_CH4,ADC_CH5,ADC_CH6,ADC_CH7,ADC_CH8,
-              ADC_CH9,ADC_CH10,ADC_CH11,ADC_CH12,ADC_CH13,ADC_CH14,ADC_CH16,ADC_CH18} adc_ch_t;
+#define      ADC_NUM_CHANNELS      16
+
+typedef enum {ADC_CH1=0,ADC_CH2=1,ADC_CH3=2,ADC_CH4=3,ADC_CH5=4,ADC_CH6=5,ADC_CH7=6,ADC_CH8=7,
+              ADC_CH9=8,ADC_CH10=9,ADC_CH11=10,ADC_CH12=11,ADC_CH13=12,ADC_CH14=13,ADC_CH16=15,ADC_CH18=17} adc_ch_t;
 
 void adc_init(void);
 void adc_start(void);
diff --git a/src/adc_dma.c b/src/adc_dma.c
index 28a66d0689a9d1d61601251585ea93435d943b56..818549216acd6de83475d85241382dda2edb2f3b 100755
--- a/src/adc_dma.c
+++ b/src/adc_dma.c
@@ -84,13 +84,13 @@
 #define ADC_TIMER                 TIM1
 #define ENABLE_ADC_TIMER_CLK      __HAL_RCC_TIM1_CLK_ENABLE()
 #define ADC_TIMER_IRQn            TIM1_CC_IRQn
-#define ADC_TIMER_IRQHandler      TIM1_IRQHandler
+#define ADC_TIMER_IRQHandler      TIM1_CC_IRQHandler
 
 // temperature conversion functions
-#define TEMP_V25                    0.76// ADC voltage at 25 degrees in V
-#define TEMP_INV_SLOPE              400.0// ADC slope in mV/degree
+#define TEMP_V25                  1.43// ADC voltage at 25 degrees in V
+#define TEMP_INV_SLOPE            232.558// ADC slope in degree/mV
 // general voltage conversion
-#define VOLTAGE_DELTA               0.000805664
+#define VOLTAGE_DELTA             0.000805664
 
 // private variables
 ADC_HandleTypeDef hadc1;
@@ -106,7 +106,7 @@ uint16_t adc_convert_temperature(uint16_t value)
 {
   float conv_value;
 
-  conv_value=(value*VOLTAGE_DELTA-TEMP_V25)*TEMP_INV_SLOPE+25.0;
+  conv_value=(TEMP_V25-value*VOLTAGE_DELTA)*TEMP_INV_SLOPE+25.0;
 
   return conv_value*(1<<10);// fixed point format 6 | 10
 }
@@ -171,9 +171,6 @@ void ADC_DMA_IRQHandler(void)
       __HAL_DMA_CLEAR_FLAG(&hdma_adc1, __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1));
       for(i=0;i<9;i++)
       {
-        value=adc_convert_voltage(adc_data[i]&0x0000FFFF);
-        ram_data[DARWIN_ADC_CH1_L+i*4]=value%256;
-        ram_data[DARWIN_ADC_CH1_H+i*4]=value/256;
         if(i==7)
         {
           value=adc_convert_temperature(adc_data[i]&0x0000FFFF);
@@ -182,10 +179,13 @@ void ADC_DMA_IRQHandler(void)
         }
         else
         {
-          value=adc_convert_voltage((adc_data[i]&0xFFFF0000)>>16);
-          ram_data[DARWIN_ADC_CH2_L+i*4]=value%256;
-          ram_data[DARWIN_ADC_CH2_H+i*4]=value/256;
+          value=adc_convert_voltage(adc_data[i]&0x0000FFFF);
+          ram_data[DARWIN_ADC_CH1_L+i*4]=value%256;
+          ram_data[DARWIN_ADC_CH1_H+i*4]=value/256;
         }
+        value=adc_convert_voltage((adc_data[i]&0xFFFF0000)>>16);
+        ram_data[DARWIN_ADC_CH2_L+i*4]=value%256;
+        ram_data[DARWIN_ADC_CH2_H+i*4]=value/256;
       }
     }
 }
@@ -227,10 +227,10 @@ void adc_init(void)
   ADC_ENABLE_DMA_CLK;
 
   ADC1_ENABLE_CLK;
-  /* configure ADC1 */
+  // configure ADC1 
   hadc1.Instance = ADC1;
-  hadc1.Init.ScanConvMode = ENABLE;
-  hadc1.Init.ContinuousConvMode = ENABLE;
+  hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
+  hadc1.Init.ContinuousConvMode = DISABLE;
   hadc1.Init.DiscontinuousConvMode = DISABLE;
   hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
@@ -240,7 +240,7 @@ void adc_init(void)
   multimode.Mode = ADC_DUALMODE_REGSIMULT;
   HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode);
 
-  /* configure ADC1 channels */
+  // configure ADC1 channels 
   sConfig.Channel = ADC1_CH1;
   sConfig.Rank = 1;
   sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
@@ -278,7 +278,7 @@ void adc_init(void)
   sConfig.Rank = 9;
   HAL_ADC_ConfigChannel(&hadc1, &sConfig);
 
-  /* configure GPIO */
+  // configure GPIO 
   GPIO_InitStruct.Pin = ADC1_CH1_PIN|ADC1_CH2_PIN|ADC1_CH3_PIN|ADC1_CH4_PIN|
                         ADC1_CH5_PIN|ADC1_CH6_PIN|ADC1_CH7_PIN;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
@@ -286,18 +286,15 @@ void adc_init(void)
 
   ADC2_ENABLE_CLK;
   hadc2.Instance = ADC2;
-  hadc2.Init.ScanConvMode = ENABLE;
-  hadc2.Init.ContinuousConvMode = ENABLE;
+  hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
+  hadc2.Init.ContinuousConvMode = DISABLE;
   hadc2.Init.DiscontinuousConvMode = DISABLE;
-  hadc2.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
+  hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;//ADC_EXTERNALTRIGCONV_T1_CC1;
   hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
   hadc2.Init.NbrOfConversion = 9;
   HAL_ADC_Init(&hadc2);
 
-  multimode.Mode = ADC_DUALMODE_REGSIMULT;
-  HAL_ADCEx_MultiModeConfigChannel(&hadc2, &multimode);
-
-  /* configure ADC2 channels */
+  // configure ADC2 channels 
   sConfig.Channel = ADC2_CH1;
   sConfig.Rank = 1;
   sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
@@ -335,7 +332,7 @@ void adc_init(void)
   sConfig.Rank = 9;
   HAL_ADC_ConfigChannel(&hadc2, &sConfig);
 
-  /* configure GPIO */
+  // configure GPIO 
   GPIO_InitStruct.Pin = ADC2_CH4_PIN|ADC2_CH5_PIN|ADC2_CH6_PIN|ADC2_CH7_PIN|
                         ADC2_CH8_PIN|ADC2_CH9_PIN;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
@@ -347,9 +344,9 @@ void adc_init(void)
 
   GPIO_InitStruct.Pin = ADC2_CH1_PIN;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
-  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
-  /* initialize DMA */
+  //initialize DMA 
   hdma_adc1.Instance = ADC_DMA_CHANNEL;
   hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
   hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
@@ -366,24 +363,23 @@ void adc_init(void)
   HAL_NVIC_EnableIRQ(ADC_DMA_IRQn);
 
   /* initialize timer */
+  ENABLE_ADC_TIMER_CLK;
   ADC_TIM_Handle.Instance = ADC_TIMER;
   ADC_TIM_Handle.Init.Prescaler = 1000;
   ADC_TIM_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
   ADC_TIM_Handle.Init.Period = 0xFFFF;
   ADC_TIM_Handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
   ADC_TIM_Handle.Init.RepetitionCounter = 0;
-  HAL_TIM_Base_Init(&ADC_TIM_Handle);
   HAL_NVIC_SetPriority(ADC_TIMER_IRQn, 3, 1);
   HAL_NVIC_EnableIRQ(ADC_TIMER_IRQn);
+  HAL_TIM_OC_Init(&ADC_TIM_Handle);
   /* use the internal clock */
   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
   HAL_TIM_ConfigClockSource(&ADC_TIM_Handle, &sClockSourceConfig);
-  HAL_TIM_OC_Init(&ADC_TIM_Handle);
   /* disable master/slave mode */
   sMasterConfig.MasterOutputTrigger = TIM_TRGO_OC1REF;
   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
   HAL_TIMEx_MasterConfigSynchronization(&ADC_TIM_Handle, &sMasterConfig);
-
   sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
   sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
   sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
@@ -392,7 +388,6 @@ void adc_init(void)
   sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
   sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
   HAL_TIMEx_ConfigBreakDeadTime(&ADC_TIM_Handle, &sBreakDeadTimeConfig);
-
   TIM_OCInitStructure.OCMode = TIM_OCMODE_TOGGLE;
   TIM_OCInitStructure.OCPolarity = TIM_OCPOLARITY_HIGH;
   TIM_OCInitStructure.OCNPolarity = TIM_OCNPOLARITY_HIGH;
@@ -409,7 +404,6 @@ void adc_init(void)
 
   HAL_ADC_Start(&hadc2);
   HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,9);
-  adc_start();
 }
 
 void adc_start(void)
@@ -432,7 +426,7 @@ void adc_stop(void)
 
 void adc_set_period(uint8_t period_ms)
 {
-  adc_period_ms=period_ms*84;
+  adc_period_ms=period_ms*36;
   ram_data[DARWIN_ADC_PERIOD]=period_ms;
 }