Index: /trunk/fw_g473rct/Core/Inc/main.h
===================================================================
--- /trunk/fw_g473rct/Core/Inc/main.h	(revision 23)
+++ /trunk/fw_g473rct/Core/Inc/main.h	(revision 24)
@@ -42,5 +42,5 @@
 /* Exported constants --------------------------------------------------------*/
 /* USER CODE BEGIN EC */
-
+#define VREF								  3000.0
 /* USER CODE END EC */
 
Index: /trunk/fw_g473rct/Core/Src/adc.c
===================================================================
--- /trunk/fw_g473rct/Core/Src/adc.c	(revision 23)
+++ /trunk/fw_g473rct/Core/Src/adc.c	(revision 24)
@@ -54,5 +54,5 @@
   */
   hadc1.Instance = ADC1;
-  hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256;
+  hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
@@ -92,5 +92,5 @@
   sConfig.Channel = ADC_CHANNEL_1;
   sConfig.Rank = ADC_REGULAR_RANK_1;
-  sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
+  sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
   sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
   sConfig.OffsetNumber = ADC_OFFSET_NONE;
@@ -122,5 +122,5 @@
   */
   hadc2.Instance = ADC2;
-  hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256;
+  hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
   hadc2.Init.Resolution = ADC_RESOLUTION_12B;
   hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
@@ -148,71 +148,93 @@
   sConfig.Channel = ADC_CHANNEL_3;
   sConfig.Rank = ADC_REGULAR_RANK_1;
+  sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
+  sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
+  sConfig.OffsetNumber = ADC_OFFSET_NONE;
+  sConfig.Offset = 0;
+  if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /* USER CODE BEGIN ADC2_Init 2 */
+
+  /* USER CODE END ADC2_Init 2 */
+
+}
+/* ADC3 init function */
+void MX_ADC3_Init(void)
+{
+
+  /* USER CODE BEGIN ADC3_Init 0 */
+
+  /* USER CODE END ADC3_Init 0 */
+
+  ADC_MultiModeTypeDef multimode = {0};
+  ADC_ChannelConfTypeDef sConfig = {0};
+
+  /* USER CODE BEGIN ADC3_Init 1 */
+
+  /* USER CODE END ADC3_Init 1 */
+
+  /** Common config
+  */
+  hadc3.Instance = ADC3;
+  hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
+  hadc3.Init.Resolution = ADC_RESOLUTION_12B;
+  hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
+  hadc3.Init.GainCompensation = 0;
+  hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
+  hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV;
+  hadc3.Init.LowPowerAutoWait = DISABLE;
+  hadc3.Init.ContinuousConvMode = ENABLE;
+  hadc3.Init.NbrOfConversion = 3;
+  hadc3.Init.DiscontinuousConvMode = DISABLE;
+  hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
+  hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
+  hadc3.Init.DMAContinuousRequests = ENABLE;
+  hadc3.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
+  hadc3.Init.OversamplingMode = ENABLE;
+  hadc3.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256;
+  hadc3.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
+  hadc3.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
+  hadc3.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
+  if (HAL_ADC_Init(&hadc3) != HAL_OK)
+  {
+    Error_Handler();
+  }
+
+  /** Configure the ADC multi-mode
+  */
+  multimode.Mode = ADC_MODE_INDEPENDENT;
+  if (HAL_ADCEx_MultiModeConfigChannel(&hadc3, &multimode) != HAL_OK)
+  {
+    Error_Handler();
+  }
+
+  /** Configure Regular Channel
+  */
+  sConfig.Channel = ADC_CHANNEL_1;
+  sConfig.Rank = ADC_REGULAR_RANK_1;
   sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
   sConfig.SingleDiff = ADC_SINGLE_ENDED;
   sConfig.OffsetNumber = ADC_OFFSET_NONE;
   sConfig.Offset = 0;
-  if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
-  {
-    Error_Handler();
-  }
-  /* USER CODE BEGIN ADC2_Init 2 */
-
-  /* USER CODE END ADC2_Init 2 */
-
-}
-/* ADC3 init function */
-void MX_ADC3_Init(void)
-{
-
-  /* USER CODE BEGIN ADC3_Init 0 */
-
-  /* USER CODE END ADC3_Init 0 */
-
-  ADC_MultiModeTypeDef multimode = {0};
-  ADC_ChannelConfTypeDef sConfig = {0};
-
-  /* USER CODE BEGIN ADC3_Init 1 */
-
-  /* USER CODE END ADC3_Init 1 */
-
-  /** Common config
-  */
-  hadc3.Instance = ADC3;
-  hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256;
-  hadc3.Init.Resolution = ADC_RESOLUTION_12B;
-  hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
-  hadc3.Init.GainCompensation = 0;
-  hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
-  hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
-  hadc3.Init.LowPowerAutoWait = DISABLE;
-  hadc3.Init.ContinuousConvMode = ENABLE;
-  hadc3.Init.NbrOfConversion = 1;
-  hadc3.Init.DiscontinuousConvMode = DISABLE;
-  hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
-  hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
-  hadc3.Init.DMAContinuousRequests = ENABLE;
-  hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
-  hadc3.Init.OversamplingMode = DISABLE;
-  if (HAL_ADC_Init(&hadc3) != HAL_OK)
-  {
-    Error_Handler();
-  }
-
-  /** Configure the ADC multi-mode
-  */
-  multimode.Mode = ADC_MODE_INDEPENDENT;
-  if (HAL_ADCEx_MultiModeConfigChannel(&hadc3, &multimode) != HAL_OK)
-  {
-    Error_Handler();
-  }
-
-  /** Configure Regular Channel
-  */
-  sConfig.Channel = ADC_CHANNEL_1;
-  sConfig.Rank = ADC_REGULAR_RANK_1;
-  sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
-  sConfig.SingleDiff = ADC_SINGLE_ENDED;
-  sConfig.OffsetNumber = ADC_OFFSET_NONE;
-  sConfig.Offset = 0;
+  if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+
+  /** Configure Regular Channel
+  */
+  sConfig.Channel = ADC_CHANNEL_12;
+  sConfig.Rank = ADC_REGULAR_RANK_2;
+  if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+
+  /** Configure Regular Channel
+  */
+  sConfig.Channel = ADC_CHANNEL_5;
+  sConfig.Rank = ADC_REGULAR_RANK_3;
   if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
   {
@@ -241,5 +263,5 @@
   */
   hadc4.Instance = ADC4;
-  hadc4.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256;
+  hadc4.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
   hadc4.Init.Resolution = ADC_RESOLUTION_12B;
   hadc4.Init.DataAlign = ADC_DATAALIGN_RIGHT;
@@ -255,5 +277,9 @@
   hadc4.Init.DMAContinuousRequests = ENABLE;
   hadc4.Init.Overrun = ADC_OVR_DATA_PRESERVED;
-  hadc4.Init.OversamplingMode = DISABLE;
+  hadc4.Init.OversamplingMode = ENABLE;
+  hadc4.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256;
+  hadc4.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
+  hadc4.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
+  hadc4.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
   if (HAL_ADC_Init(&hadc4) != HAL_OK)
   {
@@ -265,5 +291,5 @@
   sConfig.Channel = ADC_CHANNEL_4;
   sConfig.Rank = ADC_REGULAR_RANK_1;
-  sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
+  sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
   sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
   sConfig.OffsetNumber = ADC_OFFSET_NONE;
@@ -295,5 +321,5 @@
   */
   hadc5.Instance = ADC5;
-  hadc5.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256;
+  hadc5.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
   hadc5.Init.Resolution = ADC_RESOLUTION_12B;
   hadc5.Init.DataAlign = ADC_DATAALIGN_RIGHT;
@@ -309,5 +335,9 @@
   hadc5.Init.DMAContinuousRequests = ENABLE;
   hadc5.Init.Overrun = ADC_OVR_DATA_PRESERVED;
-  hadc5.Init.OversamplingMode = DISABLE;
+  hadc5.Init.OversamplingMode = ENABLE;
+  hadc5.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256;
+  hadc5.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
+  hadc5.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
+  hadc5.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
   if (HAL_ADC_Init(&hadc5) != HAL_OK)
   {
@@ -319,5 +349,5 @@
   sConfig.Channel = ADC_CHANNEL_TEMPSENSOR_ADC5;
   sConfig.Rank = ADC_REGULAR_RANK_1;
-  sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
+  sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
   sConfig.SingleDiff = ADC_SINGLE_ENDED;
   sConfig.OffsetNumber = ADC_OFFSET_NONE;
@@ -330,5 +360,5 @@
   /** Configure Regular Channel
   */
-  sConfig.Channel = ADC_CHANNEL_1;
+  sConfig.Channel = ADC_CHANNEL_VBAT;
   sConfig.Rank = ADC_REGULAR_RANK_2;
   if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK)
@@ -339,4 +369,5 @@
   /** Configure Regular Channel
   */
+  sConfig.Channel = ADC_CHANNEL_2;
   sConfig.Rank = ADC_REGULAR_RANK_3;
   if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK)
@@ -347,4 +378,5 @@
   /** Configure Regular Channel
   */
+  sConfig.Channel = ADC_CHANNEL_1;
   sConfig.Rank = ADC_REGULAR_RANK_4;
   if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK)
@@ -375,5 +407,5 @@
   */
     PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;
-    PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;
+    PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_PLL;
     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
     {
@@ -428,5 +460,5 @@
   */
     PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;
-    PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;
+    PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_PLL;
     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
     {
@@ -443,9 +475,10 @@
     /**ADC2 GPIO Configuration
     PA6     ------> ADC2_IN3
-    */
-    GPIO_InitStruct.Pin = ADC2_IN3_UBAT__Pin;
+    PA7     ------> ADC2_IN4
+    */
+    GPIO_InitStruct.Pin = ADC2_IN3_UBAT__Pin|GPIO_PIN_7;
     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
-    HAL_GPIO_Init(ADC2_IN3_UBAT__GPIO_Port, &GPIO_InitStruct);
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
     /* ADC2 DMA Init */
@@ -480,5 +513,5 @@
   */
     PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345;
-    PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_SYSCLK;
+    PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_PLL;
     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
     {
@@ -534,5 +567,5 @@
   */
     PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345;
-    PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_SYSCLK;
+    PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_PLL;
     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
     {
@@ -587,5 +620,5 @@
   */
     PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345;
-    PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_SYSCLK;
+    PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_PLL;
     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
     {
@@ -672,6 +705,7 @@
     /**ADC2 GPIO Configuration
     PA6     ------> ADC2_IN3
-    */
-    HAL_GPIO_DeInit(ADC2_IN3_UBAT__GPIO_Port, ADC2_IN3_UBAT__Pin);
+    PA7     ------> ADC2_IN4
+    */
+    HAL_GPIO_DeInit(GPIOA, ADC2_IN3_UBAT__Pin|GPIO_PIN_7);
 
     /* ADC2 DMA DeInit */
Index: /trunk/fw_g473rct/Core/Src/main.c
===================================================================
--- /trunk/fw_g473rct/Core/Src/main.c	(revision 23)
+++ /trunk/fw_g473rct/Core/Src/main.c	(revision 24)
@@ -148,5 +148,5 @@
   RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV2;
   RCC_OscInitStruct.PLL.PLLN = 16;
-  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
   RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
   RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
Index: /trunk/fw_g473rct/SES/inc/fast_current.h
===================================================================
--- /trunk/fw_g473rct/SES/inc/fast_current.h	(revision 23)
+++ /trunk/fw_g473rct/SES/inc/fast_current.h	(revision 24)
@@ -20,5 +20,5 @@
 
 //--- GLOBALE FUNKTIONS PROTOTYPEN ---------------------------------------------
-void FAST_CURRENT_Exec(uint32_t newvalP, uint32_t newvalM );
+void FAST_CURRENT_Exec(uint32_t newVal );
 
 #endif //
Index: /trunk/fw_g473rct/SES/inc/int_bat_voltage.h
===================================================================
--- /trunk/fw_g473rct/SES/inc/int_bat_voltage.h	(revision 24)
+++ /trunk/fw_g473rct/SES/inc/int_bat_voltage.h	(revision 24)
@@ -0,0 +1,30 @@
+/******************************************************************************
+*
+* @file    ref_voltage.h
+* @author  ECS, Falko Jahn
+* @version V1.0.0
+* @date    2020-05-01
+* @brief      
+*
+******************************************************************************/
+#ifndef __REF_VOLTAGE_H
+#define __REF_VOLTAGE_H
+
+//--- INCLUDEs -----------------------------------------------------------------
+
+//--- GLOBALE TYPE DEFS --------------------------------------------------------       
+
+//--- GLOBALE DEFINES ----------------------------------------------------------
+
+//--- GLOBALE VARIABLEN PROTOTYPEN ---------------------------------------------
+
+//--- GLOBALE FUNKTIONS PROTOTYPEN ---------------------------------------------
+
+/*
+* @brief	
+* @param	kein
+* @retval	kein
+*/
+void INT_BAT_VOLTAGE_Exec(uint32_t newval);
+
+#endif // __REF_VOLTAGE_H
Index: unk/fw_g473rct/SES/inc/ref_voltage.h
===================================================================
--- /trunk/fw_g473rct/SES/inc/ref_voltage.h	(revision 23)
+++ 	(revision )
@@ -1,30 +1,0 @@
-/******************************************************************************
-*
-* @file    ref_voltage.h
-* @author  ECS, Falko Jahn
-* @version V1.0.0
-* @date    2020-05-01
-* @brief      
-*
-******************************************************************************/
-#ifndef __REF_VOLTAGE_H
-#define __REF_VOLTAGE_H
-
-//--- INCLUDEs -----------------------------------------------------------------
-
-//--- GLOBALE TYPE DEFS --------------------------------------------------------       
-
-//--- GLOBALE DEFINES ----------------------------------------------------------
-
-//--- GLOBALE VARIABLEN PROTOTYPEN ---------------------------------------------
-
-//--- GLOBALE FUNKTIONS PROTOTYPEN ---------------------------------------------
-
-/*
-* @brief	
-* @param	kein
-* @retval	kein
-*/
-void REF_VOLTAGE_Exec(uint32_t newval);
-
-#endif // __REF_VOLTAGE_H
Index: /trunk/fw_g473rct/SES/smartPro.emProject
===================================================================
--- /trunk/fw_g473rct/SES/smartPro.emProject	(revision 23)
+++ /trunk/fw_g473rct/SES/smartPro.emProject	(revision 24)
@@ -185,7 +185,7 @@
       <file file_name="inc/esr.h" />
       <file file_name="inc/fast_current.h" />
+      <file file_name="inc/int_bat_voltage.h" />
       <file file_name="inc/modbus.h" />
       <file file_name="inc/outputs.h" />
-      <file file_name="inc/ref_voltage.h" />
       <file file_name="inc/rtc.h" />
       <file file_name="inc/self_discharge.h" />
@@ -212,8 +212,8 @@
       <file file_name="src/esr.c" />
       <file file_name="src/fast_current.c" />
+      <file file_name="src/int_bat_voltage.c" />
       <file file_name="src/main.c" />
       <file file_name="src/modbus.c" />
       <file file_name="src/outputs.c" />
-      <file file_name="src/ref_voltage.c" />
       <file file_name="src/self_discharge.c" />
       <file file_name="src/shunt_temperature.c" />
Index: /trunk/fw_g473rct/SES/src/battery_voltage.c
===================================================================
--- /trunk/fw_g473rct/SES/src/battery_voltage.c	(revision 23)
+++ /trunk/fw_g473rct/SES/src/battery_voltage.c	(revision 24)
@@ -13,15 +13,15 @@
 #include "main.h"
 #include "sysdata.h"
-
+#include <stdio.h>
 //	--- EXTERNE VARIABLEN --------------------------------------------------------
 
 //	--- LOKALE DEFINES - bitte hier dokumentieren --------------------------------
-#define BATTERY_VOLTAGE_FILTER  256
+#define BATTERY_VOLTAGE_FILTER  32
 
 
-#define BATTERY_VOLTAGE_VOLTAGE_DIVIDER       6
-#define ADC_RESOLUTION						  65536 //65536/2 da im differential mode
-#define ADC_OFFSET							  0
-#define VREF								  3000
+#define BATTERY_VOLTAGE_VOLTAGE_DIVIDER       6.0
+#define ADC_RESOLUTION						  32768.0 //65536/2 da im differential mode
+#define ADC_OFFSET							  32768.0
+
 //	--- LOKALE TYPE DEFS - bitte hier dokumentieren-------------------------------
 
@@ -37,17 +37,16 @@
 
 
-void BATTERY_VOLTAGE_Exec(int32_t newvalP )
+void BATTERY_VOLTAGE_Exec(int32_t newVal)
 {
   static int measCounter;
-  static unsigned long avgsumP = 0;
-  int32_t avgvalP;
-
+  static unsigned long avgSum = 0;
+  int32_t avgVal;
   if (measCounter < INT32_MAX) measCounter++;
 
 
   // Filterlängen in 2er-Potenzen --> Compiler optimiert
-  avgsumP -= avgsumP / BATTERY_VOLTAGE_FILTER;
-  avgsumP += newvalP;
-  avgvalP = avgsumP / BATTERY_VOLTAGE_FILTER;
+  avgSum -= avgSum / BATTERY_VOLTAGE_FILTER;
+  avgSum += newVal;
+  avgVal =  avgSum / BATTERY_VOLTAGE_FILTER;
 
   
@@ -55,5 +54,5 @@
 
   //Umrechung auf Eingangsspannung am Gerät mit Teiler
-  sys_data.s.values.batteryVoltage = ((avgvalP-2048) * 3000 * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / 2048;
+  sys_data.s.values.batteryVoltage = ((avgVal-ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / ADC_RESOLUTION;
 
   
@@ -75,7 +74,7 @@
 
 
-  //Berechnung schnellen Wert ohne Glättung:
+  //Berechnung schnelle Wert ohne Glättung:
   //Umrechung auf Eingangsspannung am Gerät mit Teiler
-  sys_data.s.values.fast_voltage = ((newvalP-ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / ADC_RESOLUTION;
+  sys_data.s.values.fast_voltage = ((newVal-ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / ADC_RESOLUTION;
 
 
Index: /trunk/fw_g473rct/SES/src/chip_temperature.c
===================================================================
--- /trunk/fw_g473rct/SES/src/chip_temperature.c	(revision 23)
+++ /trunk/fw_g473rct/SES/src/chip_temperature.c	(revision 24)
@@ -24,8 +24,8 @@
 //	--- LOKALE VARIABLEN - bitte hier dokumentieren ------------------------------
 uint32_t calTemperatureSensor30Value;  // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen)
-uint32_t calTemperatureSensor130Value; // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen)
+uint32_t calTemperatureSensor110Value; // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen)
 uint32_t calTemperatureSensorDiff;     // Differenz calTemperatureSensor130Value und calTemperatureSensor30Value wird für die Kalibrierung des internen Temperatursensors bentigt
                                                               // Daten Temperaturanzeige µProzessor
-
+double slope;
 //	--- LOKALE FUNKTIONS PROTOTYPEN ----------------------------------------------
 
@@ -46,5 +46,5 @@
   uint16_t * pCalibrationData;
   float calibrationData30;
-  float calibrationData130;
+  float calibrationData110;
 
   // lade Temperatur Kalibrierungswert (Wert bei 30°C)
@@ -55,33 +55,34 @@
   //Berechnung Spannung in mV bei CAL Punk 30°C
   //Kalbibrierung wurde mit 12 Bit und 3000mV Vref durchgeführt
-  calibrationData30 = calibrationData30 / 4096;
-  calTemperatureSensor30Value = calibrationData30 * 3000 ;      // jetzt haben wir die Kalibrierungsspannung in Volt bei 30°C;
+  calTemperatureSensor30Value = (calibrationData30 * 3000) / 4096 ;      // jetzt haben wir die Kalibrierungsspannung in Volt bei 30°C;
 
   pCalibrationData = (uint16_t *)TEMPSENSOR_CAL2_ADDR;
-  calibrationData130  = * pCalibrationData;
+  calibrationData110  = * pCalibrationData;
 
-  //Berechnung Spannung in mV bei CAL Punk 130°C
+  //Berechnung Spannung in mV bei CAL Punk 110°C
   //Kalbibrierung wurde mit 12 Bit und 3000mV Vref durchgeführt
-  calibrationData130 = calibrationData130 / 4096;
-  calTemperatureSensor130Value = calibrationData130 * 3000;      // jetzt haben wir die Kalibrierungsspannung in Volt bei 130°C;
+  calTemperatureSensor110Value = (calibrationData110 * 3000 / 4096);      // jetzt haben wir die Kalibrierungsspannung in Volt bei 110°C;
 
   // Spannungsdifferenz bei 100 Kelvin Temperatureunterschied
-  calTemperatureSensorDiff = (calTemperatureSensor130Value - calTemperatureSensor30Value);
+  // Slope enthält die Änderung in mV pro °C
+  calTemperatureSensorDiff = (calTemperatureSensor110Value - calTemperatureSensor30Value);
+  slope = (double) calTemperatureSensorDiff / (TEMPSENSOR_CAL2_TEMP - TEMPSENSOR_CAL1_TEMP);
+
+
 }
 
 void CHIP_TEMPERATURE_Exec(uint32_t chiptemperature)
 {
-    int32_t voltage;
+    double voltage;
     //Aktuelle Spannung am Temp Sensor
-    voltage = (3300 * chiptemperature) / 65536;
+    voltage = (3000 * chiptemperature) / 65536;
 
 
     voltage = voltage - calTemperatureSensor30Value;
-    voltage = voltage * 100000; //100000 da Kalibrierwerte 100 Kelvin Delta T haben und wir alles in m°C rechnen
-    voltage = voltage / (int32_t)(calTemperatureSensorDiff);
-    voltage = voltage + 30000; //30000 da Erste Kalibrierpunkt bei 30°C --> 30 000 m°C
+    voltage = voltage  / slope;
+    voltage = voltage + 30.0;
 
-    //Durch 10 teilen, damit es in 16 Bit signed modbus register passt
-    sys_data.s.values.chipTemperature = voltage /10 ;
+	//*100 für Kommastellen
+    sys_data.s.values.chipTemperature = voltage * 100  ;
 
 	calc_temp_compensation();
Index: /trunk/fw_g473rct/SES/src/fast_current.c
===================================================================
--- /trunk/fw_g473rct/SES/src/fast_current.c	(revision 23)
+++ /trunk/fw_g473rct/SES/src/fast_current.c	(revision 24)
@@ -17,9 +17,8 @@
 
 //	--- LOKALE DEFINES - bitte hier dokumentieren --------------------------------
-//#define FAST_CURRENT_FILTER  2
-
-
 
 #define I_SENSE_GAIN    40.0
+#define ADC_OFFSET							  32768
+#define ADC_RESOLUTION						  32768 //65536/2 da im differential mode
 
 
@@ -51,34 +50,13 @@
 
 
-void FAST_CURRENT_Exec(uint32_t newvalP, uint32_t newvalM )
+void FAST_CURRENT_Exec(uint32_t newVal )
 {
-  static int measCounter;
-  static unsigned long avgsumP = 0;
-  uint32_t avgvalP;
-
-  if (measCounter < INT32_MAX) measCounter++;
-
-
-  // Filterlängen in 2er-Potenzen --> Compiler optimiert 
- // avgsumP -= avgsumP / FAST_CURRENT_FILTER;
- // avgsumP += newvalP;
-//  avgvalP = avgsumP / FAST_CURRENT_FILTER;
-
-//  static unsigned long avgsumM = 0;
-//  uint32_t avgvalM;
-  // Filterlängen in 2er-Potenzen --> Compiler optimiert 
-//  avgsumM -= avgsumM / FAST_CURRENT_FILTER;
-//  avgsumM += newvalM;
-//  avgvalM = avgsumM / FAST_CURRENT_FILTER;
-
-
-  //Berechne Differenzspannung am ADC Eingnag
-  double diff;
-  diff = (int32_t) newvalP - (int32_t) newvalM; 
-  diff = (diff * sys_data.s.values.realVdd)  / 65536;
-
+ 
   //Umrechung auf Strom
   double temp_current;
-  temp_current = (diff / I_SENSE_GAIN) /  SHUNT_RESISTOR;
+  temp_current = ((int32_t) newVal - ADC_OFFSET) * VREF ;
+  temp_current = temp_current / ADC_RESOLUTION;
+  temp_current = temp_current / I_SENSE_GAIN ;
+  temp_current = temp_current / SHUNT_RESISTOR ;
   sys_data.s.values.fast_current = temp_current * (sys_data.s.parameter.batteryCurrentGainCorrectionFaktor / 1000000.0);
  
Index: /trunk/fw_g473rct/SES/src/int_bat_voltage.c
===================================================================
--- /trunk/fw_g473rct/SES/src/int_bat_voltage.c	(revision 24)
+++ /trunk/fw_g473rct/SES/src/int_bat_voltage.c	(revision 24)
@@ -0,0 +1,46 @@
+/******************************************************************************
+*
+* @file    ref_voltage.c
+* @author  ECS, Falko Jahn
+* @version V1.0.0
+* @date    2020-05-01
+* @brief       
+*
+******************************************************************************/
+
+//	--- INCLUDES -----------------------------------------------------------------
+#include "main.h"
+#include "sysdata.h"
+#include "int_bat_voltage.h"
+//	--- EXTERNE VARIABLEN -------------------------------------------------------- 
+
+//	--- LOKALE DEFINES - bitte hier dokumentieren --------------------------------
+#define REF_FILTER              64
+//	--- LOKALE TYPE DEFS - bitte hier dokumentieren-------------------------------
+
+//	--- DEFINITIONEN GLOBALER VARIABLEN - Bitte in Header dokumentieren ----------
+
+//	--- LOKALE VARIABLEN - bitte hier dokumentieren ------------------------------
+
+//	--- LOKALE FUNKTIONS PROTOTYPEN ---------------------------------------------- 
+/*
+* @brief
+* @param	kein
+* @retval	kein
+*/
+
+//	--- LOKALE FUNKTIONEN - bitte hier dokumentieren -----------------------------
+
+
+
+//	--- GLOBALE FUNKTIONEN - bitte in Header dokumentieren------------------------
+void INT_BAT_VOLTAGE_Exec(uint32_t newval)
+{
+  // Messung Externe Spannung basierend auf 3,3V Versorgungsspannung
+  // Nur für Debug Zwecke
+  sys_data.s.values.voltageVref = VREF;
+  
+  
+  sys_data.s.values.realVdd =  3 * (newval * VREF) / 65536;
+}
+/*************************** End of file ****************************/
Index: /trunk/fw_g473rct/SES/src/main.c
===================================================================
--- /trunk/fw_g473rct/SES/src/main.c	(revision 23)
+++ /trunk/fw_g473rct/SES/src/main.c	(revision 24)
@@ -39,4 +39,9 @@
 #include "battery_voltage.h"
 #include "ads1260.h"
+#include "shunt_voltage.h"
+#include "fast_current.h"
+#include "int_bat_voltage.h"
+#include "chip_temperature.h"
+#include "shunt_temperature.h"
 /* USER CODE END Includes */
 
@@ -61,5 +66,5 @@
 modbus_t modbusData __attribute__((section(".RAM1")));
 
-__IO uint16_t adc12Data[2] __attribute__((section(".RAM1")));
+__IO uint16_t adc12Data[100][2] __attribute__((section(".RAM1")));
 __IO uint32_t adc1Data[1] __attribute__((section(".RAM1")));
 __IO uint32_t adc2Data[1] __attribute__((section(".RAM1")));
@@ -68,6 +73,8 @@
 __IO uint32_t adc5Data[4] __attribute__((section(".RAM1")));
 int silentmode =0;
-static volatile uint32_t newADC1Data = 0;
-static volatile uint32_t newADC2Data = 0;
+static volatile uint32_t newADC12Data = 0;
+static volatile uint32_t newADC3Data = 0;
+static volatile uint32_t newADC4Data = 0;
+static volatile uint32_t newADC5Data = 0;
 /* USER CODE END PV */
 
@@ -95,4 +102,6 @@
     uint8_t firstStartCatcher;
 	int mode_button_disable_time=0;
+	uint32_t adc12_time;
+	uint32_t adc12_lasttime;
   /* USER CODE END 1 */
 
@@ -160,5 +169,5 @@
 
     // STM32G0 Chiptemperatur Kalibrierung
-  CHIP_TEMPERATURE_Calibration(/*&sys_data*/);
+  CHIP_TEMPERATURE_Calibration();
 
   HAL_ADCEx_Calibration_Start(&hadc1, ADC_DIFFERENTIAL_ENDED);
@@ -169,5 +178,4 @@
 
 
-
   //SET_BIT(hadc2.Instance->CFGR, ADC_CFGR_DMAEN); //Enable DMA transfer for ADC slave (ADC12_CCR.MDMA = 0b00 -> MDMA mode disabled)
   //HAL_DMA_Start(hadc2.DMA_Handle,(uint32_t)&hadc2.Instance->DR, (uint32_t)adc2Data,1); //Start ADC slave DMA 
@@ -175,9 +183,22 @@
   
     //HAL_ADC_Start_DMA(&hadc2, (uint32_t*)adc2Data, 1);
-  if (HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)adc12Data,1))  //Start ADC interleaved mode
+  if (HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)adc12Data,100))  //Start ADC interleaved mode
   {
      /* Start Error */
      Error_Handler();
   }
+
+  if (HAL_ADC_Start_DMA(&hadc3, (uint32_t *) adc3Data , 3))
+  {
+     /* Start Error */
+     Error_Handler();
+  }
+
+  if (HAL_ADC_Start_DMA(&hadc4, (uint32_t *) adc4Data , 1))
+  {
+     /* Start Error */
+     Error_Handler();
+  }
+
 
   if (HAL_ADC_Start_DMA(&hadc5, (uint32_t *) adc5Data , 4))
@@ -196,9 +217,36 @@
 
     /* USER CODE BEGIN 3 */
-	if (newADC1Data == 1)
-    {
-	  BATTERY_VOLTAGE_Exec( adc12Data[1]);
-	}
-
+	if (newADC12Data == 1)
+    {
+	  //Mit ADC_DIV2,Sample time 12,5Cycklen, ADC Clock 50Mhz, Oversampling 256
+	  //Tconv = 6400 Takte = 0,128ms Pro Konvertierung. Also für 100 messwerte 12,8mS
+	  BATTERY_VOLTAGE_Exec( adc12Data[0][1]);
+	  FAST_CURRENT_Exec(adc12Data[0][0]); 
+	  newADC12Data = 0;
+	  adc12_time = HAL_GetTick() - adc12_lasttime;
+	  adc12_lasttime = HAL_GetTick();
+
+	}
+
+
+	if (newADC3Data == 1)
+    {
+	  SHUNT_TEMPERATURE_Exec(adc3Data[0]);
+	}
+
+
+	if (newADC4Data == 1)
+    {
+	  SHUNT_VOLTAGE_Exec( adc4Data[0]);
+	}
+
+
+	if (newADC5Data == 1)
+    {
+	  CHIP_TEMPERATURE_Exec(adc5Data[0]);
+	  INT_BAT_VOLTAGE_Exec( adc5Data[1]);
+	  sys_data.s.values.ovp_sense =  (adc5Data[2] * VREF * 21 ) / 65536.0;
+      sys_data.s.values.lvp_sense =  (adc5Data[3] * VREF * 21 ) / 65536.0;
+	}
 
 	if(sys_data.s.parameter.command != 0)
@@ -327,10 +375,21 @@
     if (hadc->Instance==ADC1)
 	{
-	  newADC1Data=1;
-	}
-
-	if (hadc->Instance==ADC2)
+	  newADC12Data=1;
+	}
+
+	if (hadc->Instance==ADC3)
 	{
-	  newADC2Data=1;
+	  newADC3Data=1;
+	}
+
+
+	if (hadc->Instance==ADC4)
+	{
+	  newADC4Data=1;
+	}
+
+	if (hadc->Instance==ADC5)
+	{
+	  newADC5Data=1;
 	}
  }
Index: /trunk/fw_g473rct/SES/src/modbus.c
===================================================================
--- /trunk/fw_g473rct/SES/src/modbus.c	(revision 23)
+++ /trunk/fw_g473rct/SES/src/modbus.c	(revision 24)
@@ -183,9 +183,11 @@
 	}
 	
-	uint32_t fixedDelayInBitDurations = (FAST_BAUDRATE_INTERFRAME_DELAY_us * baudrate) / 1000000UL + 1UL;
-//	HAL_UART_EnableReceiverTimeout( usart);
-//	HAL_UART_ReceiverTimeout_Config(usart,  fixedDelayInBitDurations);
-
-    if(HAL_UARTEx_ReceiveToIdle_DMA(mb_data->uart, mb_data->rx_buffer, RXBUFFERSIZE) != HAL_OK)
+	
+	HAL_UART_EnableReceiverTimeout( usart);
+	HAL_UART_ReceiverTimeout_Config(usart,  3.5 * nrOfBitsPerChar);
+	SET_BIT(usart->Instance->CR1, USART_CR1_RTOIE); 
+
+
+    if(HAL_UART_Receive_DMA(mb_data->uart, mb_data->rx_buffer, RXBUFFERSIZE) != HAL_OK)
     {
       printf("uart error \n\r");
@@ -202,10 +204,12 @@
     modbusData.mb_rx_frame_complete = 1;
     modbusData.setRxLed = false;
-	modbusData.rx_head= 0;
-
+	modbusData.rx_head = huart->RxXferSize - __HAL_DMA_GET_COUNTER(huart->hdmarx);
+	
 
   if (huart->ErrorCode == HAL_UART_ERROR_RTO)
   {
-	printf("MB RTO Event! \n\r");
+
+	// printf("MB RTO Event! \n\r");
+	// Kein Fehler, normale Funktion
   }
   if (huart->ErrorCode == HAL_UART_ERROR_FE)
@@ -240,5 +244,6 @@
 
 
-  if(HAL_UARTEx_ReceiveToIdle_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK)
+  
+  if(HAL_UART_Receive_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK)
    {
      printf("Uart Error bei neustart nach Fehler \n\r");
@@ -250,22 +255,22 @@
 }
 
-void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
-{
-  //printf("MB rxEvent!RX=%d \n\r",Size);
-  modbusData.setRxLed = true;
-
-  modbusData.mb_rx_frame_complete = 1;
-  modbusData.rx_head= Size +1;
-
-  if(HAL_UARTEx_ReceiveToIdle_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK)
-   {
-     printf("uart error \n\r");
-  //   while(1)
-  //   {
-  //   }     
-   }    
-  
-
-}
+//void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
+//{
+//  //printf("MB rxEvent!RX=%d \n\r",Size);
+//  modbusData.setRxLed = true;
+
+//  modbusData.mb_rx_frame_complete = 1;
+//  modbusData.rx_head= Size +1;
+
+//  if(HAL_UART_Receive_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK)
+//   {
+//     printf("uart error \n\r");
+//  //   while(1)
+//  //   {
+//  //   }     
+//   }    
+  
+
+//}
 
 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
Index: unk/fw_g473rct/SES/src/ref_voltage.c
===================================================================
--- /trunk/fw_g473rct/SES/src/ref_voltage.c	(revision 23)
+++ 	(revision )
@@ -1,52 +1,0 @@
-/******************************************************************************
-*
-* @file    ref_voltage.c
-* @author  ECS, Falko Jahn
-* @version V1.0.0
-* @date    2020-05-01
-* @brief       
-*
-******************************************************************************/
-
-//	--- INCLUDES -----------------------------------------------------------------
-#include "main.h"
-#include "sysdata.h"
-//	--- EXTERNE VARIABLEN -------------------------------------------------------- 
-
-//	--- LOKALE DEFINES - bitte hier dokumentieren --------------------------------
-#define REF_FILTER              64
-//	--- LOKALE TYPE DEFS - bitte hier dokumentieren-------------------------------
-
-//	--- DEFINITIONEN GLOBALER VARIABLEN - Bitte in Header dokumentieren ----------
-
-//	--- LOKALE VARIABLEN - bitte hier dokumentieren ------------------------------
-
-//	--- LOKALE FUNKTIONS PROTOTYPEN ---------------------------------------------- 
-/*
-* @brief
-* @param	kein
-* @retval	kein
-*/
-
-//	--- LOKALE FUNKTIONEN - bitte hier dokumentieren -----------------------------
-
-
-
-//	--- GLOBALE FUNKTIONEN - bitte in Header dokumentieren------------------------
-void REF_VOLTAGE_Exec(uint32_t newval)
-{
-   static unsigned long avgsum = 0;
-   uint32_t avgval;
-   // Filterlängen in 2er-Potenzen --> Compiler optimiert 
-   avgsum -= avgsum / REF_FILTER;
-   avgsum += newval;
-   avgval = avgsum / REF_FILTER;
-
-  // Messung Externe Spannung basierend auf 3,3V Versorgungsspannung
-  // Nur für Debug Zwecke
-  sys_data.s.values.voltageVref =  (avgval * 3300) / 65536;
-  
-  // Ermittlung Vdd als Referenz
-  sys_data.s.values.realVdd =  3000L * 65536 / avgval;;
-}
-/*************************** End of file ****************************/
Index: /trunk/fw_g473rct/SES/src/shunt_temperature.c
===================================================================
--- /trunk/fw_g473rct/SES/src/shunt_temperature.c	(revision 23)
+++ /trunk/fw_g473rct/SES/src/shunt_temperature.c	(revision 24)
@@ -38,21 +38,18 @@
 void SHUNT_TEMPERATURE_Exec(int32_t adcval)
 {
-  int32_t temp;
+  double temp;
 
 
   //Umrechnung Spannung in mV
-  temp =  (adcval * 3300 ) / 65536; 
+  temp =  (adcval * VREF ) / 65536.0; 
 
-  //Umrechnung in °C mit PT 1000 Sensor
-//  temp = temp - 747;
-//  temp = temp * 70.406;
 
   //Umrechnung in °C mit LM61 Sensor
   temp = temp - 600;
-  temp = temp * 100;
+  temp = temp / 10;
 
   //2Nackommastellen
   //milli grad in grad * 100 /festkomma
-  sys_data.s.values.shuntTemperature = temp / 10;
+  sys_data.s.values.shuntTemperature = temp * 100;
 
 
Index: /trunk/fw_g473rct/SES/src/shunt_voltage.c
===================================================================
--- /trunk/fw_g473rct/SES/src/shunt_voltage.c	(revision 23)
+++ /trunk/fw_g473rct/SES/src/shunt_voltage.c	(revision 24)
@@ -17,6 +17,7 @@
 
 //	--- LOKALE DEFINES - bitte hier dokumentieren --------------------------------
-
-#define SHUNT_VOLTAGE_DIVIDER       6
+#define ADC_RESOLUTION						  32768 //65536/2 da im differential mode
+#define ADC_OFFSET							  32768
+#define SHUNT_VOLTAGE_DIVIDER				  6
 //	--- LOKALE TYPE DEFS - bitte hier dokumentieren-------------------------------
 
@@ -44,12 +45,5 @@
 void SHUNT_VOLTAGE_Exec(int32_t newval)
 {
-   static unsigned long avgsum = 0;
-   uint32_t avgval;
-   // Filterlängen in 2er-Potenzen --> Compiler optimiert 
-   //avgsum -= avgsum/SHUNT_FILTER;
-   //avgsum += newval;
-   //avgval = avgsum / SHUNT_FILTER;
-
-   sys_data.s.values.shuntVoltage =  (newval * (uint64_t)sys_data.s.values.realVdd * SHUNT_VOLTAGE_DIVIDER ) / 65536;
+   sys_data.s.values.shuntVoltage =  ((newval-ADC_OFFSET) * VREF * SHUNT_VOLTAGE_DIVIDER ) / ADC_RESOLUTION;
 
 }
Index: /trunk/fw_g473rct/fw_g473rct.ioc
===================================================================
--- /trunk/fw_g473rct/fw_g473rct.ioc	(revision 23)
+++ /trunk/fw_g473rct/fw_g473rct.ioc	(revision 24)
@@ -1,5 +1,5 @@
 #MicroXplorer Configuration settings - do not modify
 ADC1.Channel-20\#ChannelRegularConversion=ADC_CHANNEL_1
-ADC1.ClockPrescaler=ADC_CLOCK_ASYNC_DIV256
+ADC1.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1
 ADC1.CommonPathInternal=null|null|null|null
 ADC1.ContinuousConvMode=ENABLE
@@ -7,6 +7,7 @@
 ADC1.DMAContinuousRequests=ENABLE
 ADC1.EOCSelection=ADC_EOC_SINGLE_CONV
-ADC1.IPParameters=Rank-20\#ChannelRegularConversion,master,SingleDiff-20\#ChannelRegularConversion,Channel-20\#ChannelRegularConversion,SamplingTime-20\#ChannelRegularConversion,OffsetNumber-20\#ChannelRegularConversion,NbrOfConversionFlag,Mode,DMAAccessModeView,ContinuousConvMode,OversamplingMode,DMAContinuousRequests,Overrun,ClockPrescaler,EOCSelection,RightBitShift,Ratio,CommonPathInternal
+ADC1.IPParameters=Rank-20\#ChannelRegularConversion,master,SingleDiff-20\#ChannelRegularConversion,Channel-20\#ChannelRegularConversion,SamplingTime-20\#ChannelRegularConversion,OffsetNumber-20\#ChannelRegularConversion,NbrOfConversionFlag,Mode,DMAAccessModeView,ContinuousConvMode,OversamplingMode,DMAContinuousRequests,Overrun,ClockPrescaler,EOCSelection,NbrOfConversion,RightBitShift,Ratio,CommonPathInternal
 ADC1.Mode=ADC_DUALMODE_REGSIMULT
+ADC1.NbrOfConversion=1
 ADC1.NbrOfConversionFlag=1
 ADC1.OffsetNumber-20\#ChannelRegularConversion=ADC_OFFSET_NONE
@@ -16,14 +17,14 @@
 ADC1.Ratio=ADC_OVERSAMPLING_RATIO_256
 ADC1.RightBitShift=ADC_RIGHTBITSHIFT_4
-ADC1.SamplingTime-20\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
+ADC1.SamplingTime-20\#ChannelRegularConversion=ADC_SAMPLETIME_6CYCLES_5
 ADC1.SingleDiff-20\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED
 ADC1.master=1
 ADC2.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_3
-ADC2.ClockPrescaler=ADC_CLOCK_ASYNC_DIV256
+ADC2.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1
 ADC2.CommonPathInternal=null|null|null|null
 ADC2.DMAAccessModeView=ENABLE
 ADC2.DMAContinuousRequests=ENABLE
 ADC2.EOCSelection=ADC_EOC_SINGLE_CONV
-ADC2.IPParameters=Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,NbrOfConversionFlag,Mode,DMAAccessModeView,EOCSelection,DMAContinuousRequests,Overrun,ClockPrescaler,OversamplingMode,RightBitShift,Ratio,CommonPathInternal
+ADC2.IPParameters=Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,NbrOfConversionFlag,Mode,DMAAccessModeView,EOCSelection,DMAContinuousRequests,Overrun,ClockPrescaler,OversamplingMode,RightBitShift,Ratio,SingleDiff-4\#ChannelRegularConversion,CommonPathInternal
 ADC2.Mode=ADC_DUALMODE_REGSIMULT
 ADC2.NbrOfConversionFlag=1
@@ -34,37 +35,55 @@
 ADC2.Ratio=ADC_OVERSAMPLING_RATIO_256
 ADC2.RightBitShift=ADC_RIGHTBITSHIFT_4
-ADC2.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
+ADC2.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_6CYCLES_5
+ADC2.SingleDiff-4\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED
 ADC3.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_1
-ADC3.ClockPrescaler=ADC_CLOCK_ASYNC_DIV256
+ADC3.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_12
+ADC3.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_5
+ADC3.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1
 ADC3.CommonPathInternal=null|null|null|null
 ADC3.ContinuousConvMode=ENABLE
 ADC3.DMAContinuousRequests=ENABLE
-ADC3.IPParameters=Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,NbrOfConversionFlag,master,DMAContinuousRequests,ContinuousConvMode,ClockPrescaler,CommonPathInternal
+ADC3.EOCSelection=ADC_EOC_SEQ_CONV
+ADC3.IPParameters=Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,NbrOfConversionFlag,master,DMAContinuousRequests,ContinuousConvMode,ClockPrescaler,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,NbrOfConversion,EOCSelection,Overrun,OversamplingMode,RightBitShift,Ratio,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,CommonPathInternal
+ADC3.NbrOfConversion=3
 ADC3.NbrOfConversionFlag=1
 ADC3.OffsetNumber-1\#ChannelRegularConversion=ADC_OFFSET_NONE
+ADC3.OffsetNumber-2\#ChannelRegularConversion=ADC_OFFSET_NONE
+ADC3.OffsetNumber-4\#ChannelRegularConversion=ADC_OFFSET_NONE
+ADC3.Overrun=ADC_OVR_DATA_OVERWRITTEN
+ADC3.OversamplingMode=ENABLE
 ADC3.Rank-1\#ChannelRegularConversion=1
-ADC3.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
+ADC3.Rank-2\#ChannelRegularConversion=2
+ADC3.Rank-4\#ChannelRegularConversion=3
+ADC3.Ratio=ADC_OVERSAMPLING_RATIO_256
+ADC3.RightBitShift=ADC_RIGHTBITSHIFT_4
+ADC3.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
+ADC3.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
+ADC3.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
 ADC3.master=1
 ADC4.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_4
-ADC4.ClockPrescaler=ADC_CLOCK_ASYNC_DIV256
+ADC4.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1
 ADC4.CommonPathInternal=null|null|null|null
 ADC4.ContinuousConvMode=ENABLE
 ADC4.DMAContinuousRequests=ENABLE
-ADC4.IPParameters=Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SingleDiff-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests,ClockPrescaler,CommonPathInternal
+ADC4.IPParameters=Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SingleDiff-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests,ClockPrescaler,OversamplingMode,RightBitShift,Ratio,CommonPathInternal
 ADC4.NbrOfConversionFlag=1
 ADC4.OffsetNumber-3\#ChannelRegularConversion=ADC_OFFSET_NONE
+ADC4.OversamplingMode=ENABLE
 ADC4.Rank-3\#ChannelRegularConversion=1
-ADC4.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
+ADC4.Ratio=ADC_OVERSAMPLING_RATIO_256
+ADC4.RightBitShift=ADC_RIGHTBITSHIFT_4
+ADC4.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
 ADC4.SingleDiff-3\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED
 ADC5.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_TEMPSENSOR_ADC5
-ADC5.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_1
-ADC5.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_1
+ADC5.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_VBAT
+ADC5.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_2
 ADC5.Channel-5\#ChannelRegularConversion=ADC_CHANNEL_1
-ADC5.ClockPrescaler=ADC_CLOCK_ASYNC_DIV256
+ADC5.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1
 ADC5.CommonPathInternal=null|ADC_CHANNEL_TEMPSENSOR_ADC1|ADC_CHANNEL_VBAT|null
 ADC5.ContinuousConvMode=ENABLE
 ADC5.DMAContinuousRequests=ENABLE
 ADC5.EOCSelection=ADC_EOC_SEQ_CONV
-ADC5.IPParameters=Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests,EOCSelection,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,NbrOfConversion,Rank-5\#ChannelRegularConversion,Channel-5\#ChannelRegularConversion,SamplingTime-5\#ChannelRegularConversion,OffsetNumber-5\#ChannelRegularConversion,ClockPrescaler,CommonPathInternal
+ADC5.IPParameters=Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests,EOCSelection,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,NbrOfConversion,Rank-5\#ChannelRegularConversion,Channel-5\#ChannelRegularConversion,SamplingTime-5\#ChannelRegularConversion,OffsetNumber-5\#ChannelRegularConversion,ClockPrescaler,OversamplingMode,RightBitShift,Ratio,CommonPathInternal
 ADC5.NbrOfConversion=4
 ADC5.NbrOfConversionFlag=1
@@ -73,12 +92,15 @@
 ADC5.OffsetNumber-4\#ChannelRegularConversion=ADC_OFFSET_NONE
 ADC5.OffsetNumber-5\#ChannelRegularConversion=ADC_OFFSET_NONE
+ADC5.OversamplingMode=ENABLE
 ADC5.Rank-2\#ChannelRegularConversion=1
 ADC5.Rank-3\#ChannelRegularConversion=2
 ADC5.Rank-4\#ChannelRegularConversion=3
 ADC5.Rank-5\#ChannelRegularConversion=4
-ADC5.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
-ADC5.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
-ADC5.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
-ADC5.SamplingTime-5\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
+ADC5.Ratio=ADC_OVERSAMPLING_RATIO_256
+ADC5.RightBitShift=ADC_RIGHTBITSHIFT_4
+ADC5.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
+ADC5.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
+ADC5.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
+ADC5.SamplingTime-5\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5
 CAD.formats=
 CAD.pinconfig=
@@ -256,51 +278,52 @@
 Mcu.Pin12=PA5
 Mcu.Pin13=PA6
-Mcu.Pin14=PC4
-Mcu.Pin15=PC5
-Mcu.Pin16=PB0
-Mcu.Pin17=PB1
-Mcu.Pin18=PB10
-Mcu.Pin19=PB11
+Mcu.Pin14=PA7
+Mcu.Pin15=PC4
+Mcu.Pin16=PC5
+Mcu.Pin17=PB0
+Mcu.Pin18=PB1
+Mcu.Pin19=PB10
 Mcu.Pin2=PC15-OSC32_OUT
-Mcu.Pin20=PB12
-Mcu.Pin21=PB13
-Mcu.Pin22=PB14
-Mcu.Pin23=PB15
-Mcu.Pin24=PC6
-Mcu.Pin25=PC7
-Mcu.Pin26=PC8
-Mcu.Pin27=PC9
-Mcu.Pin28=PA8
-Mcu.Pin29=PA9
+Mcu.Pin20=PB11
+Mcu.Pin21=PB12
+Mcu.Pin22=PB13
+Mcu.Pin23=PB14
+Mcu.Pin24=PB15
+Mcu.Pin25=PC6
+Mcu.Pin26=PC7
+Mcu.Pin27=PC8
+Mcu.Pin28=PC9
+Mcu.Pin29=PA8
 Mcu.Pin3=PF0-OSC_IN
-Mcu.Pin30=PA10
-Mcu.Pin31=PA11
-Mcu.Pin32=PA12
-Mcu.Pin33=PA13
-Mcu.Pin34=PA14
-Mcu.Pin35=PA15
-Mcu.Pin36=PC10
-Mcu.Pin37=PC11
-Mcu.Pin38=PC12
-Mcu.Pin39=PD2
+Mcu.Pin30=PA9
+Mcu.Pin31=PA10
+Mcu.Pin32=PA11
+Mcu.Pin33=PA12
+Mcu.Pin34=PA13
+Mcu.Pin35=PA14
+Mcu.Pin36=PA15
+Mcu.Pin37=PC10
+Mcu.Pin38=PC11
+Mcu.Pin39=PC12
 Mcu.Pin4=PF1-OSC_OUT
-Mcu.Pin40=PB3
-Mcu.Pin41=PB4
-Mcu.Pin42=PB5
-Mcu.Pin43=PB6
-Mcu.Pin44=PB7
-Mcu.Pin45=PB9
-Mcu.Pin46=VP_ADC5_TempSens_Input
-Mcu.Pin47=VP_ADC5_Vbat_Input
-Mcu.Pin48=VP_CRC_VS_CRC
-Mcu.Pin49=VP_SYS_V_VREFBUF
+Mcu.Pin40=PD2
+Mcu.Pin41=PB3
+Mcu.Pin42=PB4
+Mcu.Pin43=PB5
+Mcu.Pin44=PB6
+Mcu.Pin45=PB7
+Mcu.Pin46=PB9
+Mcu.Pin47=VP_ADC5_TempSens_Input
+Mcu.Pin48=VP_ADC5_Vbat_Input
+Mcu.Pin49=VP_CRC_VS_CRC
 Mcu.Pin5=PC0
-Mcu.Pin50=VP_SYS_VS_Systick
-Mcu.Pin51=VP_SYS_VS_DBSignals
+Mcu.Pin50=VP_SYS_V_VREFBUF
+Mcu.Pin51=VP_SYS_VS_Systick
+Mcu.Pin52=VP_SYS_VS_DBSignals
 Mcu.Pin6=PC1
 Mcu.Pin7=PA0
 Mcu.Pin8=PA1
 Mcu.Pin9=PA2
-Mcu.PinsNb=52
+Mcu.PinsNb=53
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
@@ -366,6 +389,8 @@
 PA6.GPIOParameters=GPIO_Label
 PA6.GPIO_Label=ADC2_IN3_UBAT+
-PA6.Mode=IN3-Single-Ended
+PA6.Mode=IN3-Differential
 PA6.Signal=ADC2_IN3
+PA7.Mode=IN3-Differential
+PA7.Signal=ADC2_IN4
 PA8.GPIOParameters=GPIO_Label
 PA8.GPIO_Label=LVP_SENSE
@@ -502,6 +527,8 @@
 ProjectManager.UnderRoot=false
 ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC2_Init-ADC2-false-HAL-true,6-MX_ADC3_Init-ADC3-false-HAL-true,7-MX_ADC4_Init-ADC4-false-HAL-true,8-MX_ADC5_Init-ADC5-false-HAL-true,9-MX_FDCAN2_Init-FDCAN2-false-HAL-true,10-MX_FDCAN3_Init-FDCAN3-false-HAL-true,11-MX_I2C3_Init-I2C3-false-HAL-true,12-MX_I2C4_Init-I2C4-false-HAL-true,13-MX_SPI3_Init-SPI3-false-HAL-true,14-MX_USART1_UART_Init-USART1-false-HAL-true,15-MX_USART2_UART_Init-USART2-false-HAL-true,16-MX_USB_PCD_Init-USB-false-HAL-true,17-MX_CRC_Init-CRC-false-HAL-true
-RCC.ADC12Freq_Value=100000000
-RCC.ADC345Freq_Value=100000000
+RCC.ADC12CLockSelection=RCC_ADC12CLKSOURCE_PLL
+RCC.ADC12Freq_Value=50000000
+RCC.ADC345CLockSelection=RCC_ADC345CLKSOURCE_PLL
+RCC.ADC345Freq_Value=50000000
 RCC.AHBFreq_Value=100000000
 RCC.APB1Freq_Value=100000000
@@ -526,5 +553,5 @@
 RCC.I2C4Freq_Value=100000000
 RCC.I2SFreq_Value=100000000
-RCC.IPParameters=ADC12Freq_Value,ADC345Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CK48CLockSelection,CRSFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HRTIM1Freq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLM,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSourceVirtual,PWRFreq_Value,QSPIFreq_Value,RNGFreq_Value,SAI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value
+RCC.IPParameters=ADC12CLockSelection,ADC12Freq_Value,ADC345CLockSelection,ADC345Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CK48CLockSelection,CRSFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HRTIM1Freq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLM,PLLN,PLLP,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSourceVirtual,PWRFreq_Value,QSPIFreq_Value,RNGFreq_Value,SAI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value
 RCC.LPTIM1Freq_Value=100000000
 RCC.LPUART1Freq_Value=100000000
@@ -534,5 +561,6 @@
 RCC.PLLM=RCC_PLLM_DIV2
 RCC.PLLN=16
-RCC.PLLPoutputFreq_Value=100000000
+RCC.PLLP=RCC_PLLP_DIV4
+RCC.PLLPoutputFreq_Value=50000000
 RCC.PLLQoutputFreq_Value=100000000
 RCC.PLLRCLKFreq_Value=100000000
