diff --git a/include/ir_feet_conf.h b/include/ir_feet_conf.h
index 6e0564f67c77720ef072334188461f1a8b8a7c59..80e834b9ee6f35e4beef770a1f05867d6117ce6c 100644
--- a/include/ir_feet_conf.h
+++ b/include/ir_feet_conf.h
@@ -6,7 +6,7 @@
 #define EEPROM_DYN_SLAVE_BASE_ADDRESS2  ((unsigned short int)0x0010)
 
 /* ADC registers base address */
-#define RAM_ADC_DMA_BASE_ADDRESS        ((unsigned short int)0x004a)
+#define RAM_ADC_DMA_BASE_ADDRESS        ((unsigned short int)0x0020)
 
 #define EEPROM_NUM_VAR                  32
 
diff --git a/src/adc_dma.c b/src/adc_dma.c
index ed82d8b1cde44d6213afb2111e7cc18127ad167b..2dd9b8d96216eb9100481ef8ad9d3b14d301ea57 100755
--- a/src/adc_dma.c
+++ b/src/adc_dma.c
@@ -1,5 +1,6 @@
 #include "adc_dma.h"
 #include "adc_dma_registers.h"
+#include "scheduler.h"
 #include "ram.h"
 
 #define ADC1_CH1                  ADC_CHANNEL_0
@@ -131,32 +132,32 @@ void adc_convert_voltage(adc_dma_ch_t channel_id,uint16_t value)
                              ram_data[DOWN_LEFT_FRONT_VOLTAGE+1]=ram_value/256;
                              break;
     case DOWN_RIGHT_REAR_CH: adc_voltages[4]=((float)value)*VOLTAGE_DELTA;
-                             ram_value=(uint16_t)adc_voltages[0];
+                             ram_value=(uint16_t)adc_voltages[4];
                              ram_data[DOWN_RIGHT_REAR_VOLTAGE]=ram_value%256;
                              ram_data[DOWN_RIGHT_REAR_VOLTAGE+1]=ram_value/256;
                              break;
     case DOWN_RIGHT_MIDDLE_CH: adc_voltages[5]=((float)value)*VOLTAGE_DELTA;
-                               ram_value=(uint16_t)adc_voltages[0];
+                               ram_value=(uint16_t)adc_voltages[5];
                                ram_data[DOWN_RIGHT_MIDDLE_VOLTAGE]=ram_value%256;
                                ram_data[DOWN_RIGHT_MIDDLE_VOLTAGE+1]=ram_value/256;
                                break;
     case DOWN_RIGHT_FRONT_CH: adc_voltages[6]=((float)value)*VOLTAGE_DELTA;
-                              ram_value=(uint16_t)adc_voltages[0];
+                              ram_value=(uint16_t)adc_voltages[6];
                               ram_data[DOWN_RIGHT_FRONT_VOLTAGE]=ram_value%256;
                               ram_data[DOWN_RIGHT_FRONT_VOLTAGE+1]=ram_value/256;
                               break;
     case FRONT_LEFT_CH: adc_voltages[7]=((float)value)*VOLTAGE_DELTA;
-                        ram_value=(uint16_t)adc_voltages[0];
+                        ram_value=(uint16_t)adc_voltages[7];
                         ram_data[FRONT_LEFT_VOLTAGE]=ram_value%256;
                         ram_data[FRONT_LEFT_VOLTAGE+1]=ram_value/256;
                         break;
     case FRONT_RIGHT_CH: adc_voltages[8]=((float)value)*VOLTAGE_DELTA;
-                         ram_value=(uint16_t)adc_voltages[0];
+                         ram_value=(uint16_t)adc_voltages[8];
                          ram_data[FRONT_RIGHT_VOLTAGE]=ram_value%256;
                          ram_data[FRONT_RIGHT_VOLTAGE+1]=ram_value/256;
                          break;
     case FRONT_ANALOG_CH: adc_voltages[9]=((float)value)*VOLTAGE_DELTA;
-                          ram_value=(uint16_t)adc_voltages[0];
+                          ram_value=(uint16_t)adc_voltages[9];
                           ram_data[FRONT_ANALOG_VOLTAGE]=ram_value%256;
                           ram_data[FRONT_ANALOG_VOLTAGE+1]=ram_value/256;
                           break;
@@ -173,6 +174,12 @@ void adc_read_cmd(unsigned short int address,unsigned short int length,unsigned
   ram_read_table(address,length,data);
 }
 
+void adc_start_conv(void)
+{
+  HAL_ADC_Start(&hadc2);
+  HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,6);
+}
+
 /* interrupt handlers */
 void ADC_DMA_IRQHandler(void)
 {
@@ -185,6 +192,7 @@ void ADC_DMA_IRQHandler(void)
   if(__HAL_DMA_GET_FLAG(&hdma_adc1, __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1)) != RESET)
     if(__HAL_DMA_GET_IT_SOURCE(&hdma_adc1, DMA_IT_TC) != RESET)
     {
+      __HAL_DMA_CLEAR_FLAG(&hdma_adc1, __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1));
       HAL_ADC_Stop(&hadc2);
       adc_convert_voltage(DOWN_LEFT_MIDDLE_CH,adc_data[0]&0x0000FFFF);
       adc_convert_voltage(DOWN_LEFT_REAR_CH,(adc_data[0]>>16)&0x0000FFFF);
@@ -365,13 +373,11 @@ uint8_t adc_init(TMemory *memory)
   if(!mem_add_module(memory,&adc_mem_module))
     return 0x00;
 
-  return 0x01;
-}
+  /* assigna a scheduler channel */
+  scheduler_set_channel(SCHED_CH1,adc_start_conv,10);
+  scheduler_enable_channel(SCHED_CH1);
 
-void adc_start_conversion(void)
-{
-  HAL_ADC_Start(&hadc2);
-  HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,6);
+  return 0x01;
 }
 
 float adc_get_voltage(adc_dma_ch_t channel_id)
diff --git a/src/ir_feet_dyn_slave.c b/src/ir_feet_dyn_slave.c
index 1ec2beb67549cd64e6c450bfb09394aa2fcdc709..7b679deaa1a7e712e869bbedec5ca16107aba101 100755
--- a/src/ir_feet_dyn_slave.c
+++ b/src/ir_feet_dyn_slave.c
@@ -68,12 +68,12 @@ void ir_feet_dyn_slave_write_cmd(unsigned short int address,unsigned short int l
 {
   if(ram_in_range(DEVICE_ID,address,length))
   {
-    dyn_slave_set_address(&ir_feet_dyn_slave,0x01/*data[DEVICE_ID-address]*/);
+    dyn_slave_set_address(&ir_feet_dyn_slave,data[DEVICE_ID-address]);
     ram_data[DEVICE_ID]=data[DEVICE_ID-address];
   }
   if(ram_in_range(BAUDRATE,address,length))
   {
-    ir_feet_comm_init.BaudRate=115200;//2000000/(data[BAUDRATE-address]+1);
+    ir_feet_comm_init.BaudRate=2000000/(data[BAUDRATE-address]+1);
     usart1_config(&ir_feet_dyn_slave_comm,&ir_feet_comm_init);
     ram_data[BAUDRATE]=data[BAUDRATE-address];
   }
@@ -125,7 +125,7 @@ uint8_t ir_feet_dyn_slave_init(TMemory *memory)
 
   /* initialize the comm object */
   comm_init(&ir_feet_dyn_slave_comm,0x01,&ir_feet_dyn_slave_timer);
-  ir_feet_comm_init.BaudRate     = 115200;//2000000/(DEFAULT_BAUDRATE+1);
+  ir_feet_comm_init.BaudRate     = 2000000/(DEFAULT_BAUDRATE+1);
   ir_feet_comm_init.WordLength   = UART_WORDLENGTH_8B;
   ir_feet_comm_init.StopBits     = UART_STOPBITS_1;
   ir_feet_comm_init.Parity       = UART_PARITY_NONE;
@@ -141,7 +141,7 @@ uint8_t ir_feet_dyn_slave_init(TMemory *memory)
   priorities.dma_tx_subpriority=0;
 
   usart1_init(&ir_feet_dyn_slave_comm,&ir_feet_comm_init,&priorities);
-  dyn_slave_init(&ir_feet_dyn_slave,&ir_feet_dyn_slave_comm,1/*DEFAULT_DEVICE_ID*/,DYN_VER1);
+  dyn_slave_init(&ir_feet_dyn_slave,&ir_feet_dyn_slave_comm,DEFAULT_DEVICE_ID,DYN_VER1);
   ir_feet_dyn_slave.on_read=ir_feet_on_read;
   ir_feet_dyn_slave.on_write=ir_feet_on_write;
   ir_feet_dyn_slave.on_ping=ir_feet_on_ping;
diff --git a/src/main.c b/src/main.c
index 01d84674e1d0d3d4b4b1317c1e5244af59e69ed5..d18bbe5b84868748545ba1622ea74f8b7e186385 100755
--- a/src/main.c
+++ b/src/main.c
@@ -37,10 +37,6 @@ int main(void)
 
   while(1)/* main function does not return */
   {
-    gpio_set_led(DOWN_LEFT_FRONT);
-    HAL_Delay(1000);
-    gpio_clear_led(DOWN_LEFT_FRONT);
-    HAL_Delay(1000);
   }
 }