Index: trunk/firmware/SES/Src/precharge.c
===================================================================
--- trunk/firmware/SES/Src/precharge.c	(revision 10)
+++ trunk/firmware/SES/Src/precharge.c	(revision 1)
@@ -6,10 +6,10 @@
 #include "precharge.h"
 
-#define DELAYS_NUM			7U
+#define DELAYS_NUM			43U
 
 extern void (*MOSFETS_Management)(void);
 extern void DoNothing(void);
 
-static void (*WhereToGoAfterPrecharge)(void);
+static void (*ReturnFunctionPtr)(void);
 
 //------------------------------------------------------------------------------
@@ -17,5 +17,5 @@
 void SetReturnFunction(void (*WhereToReturnControl)(void))
 {
-	if (WhereToReturnControl != NULL) WhereToGoAfterPrecharge = WhereToReturnControl;
+	if (NULL != WhereToReturnControl) ReturnFunctionPtr = WhereToReturnControl;
 }
 
@@ -28,22 +28,74 @@
 #endif
 {
-	const int32_t MHz = 1000000U;
 	static int stage = 0;
 	static int cnt = 0;
 	static int mal = 0;
-								//   DAC = 0   DAC = 3V
-	const int32_t delay_µs[DELAYS_NUM] = {   3, 3,	  // 0, 1	  - 6710µs is MAX @320kHz, [0,1,2,3] = 3µs, [4] = 5.5µs
-									       700, 3,	  // 2, 3
-										   700, 4, 	  // 4, 5
-										   700		  // 6
-									     };
-	const int32_t delay_cnt[DELAYS_NUM] = { (delay_µs[ 0 ] * CURRENT_INTEGRAL_FREQ) / MHz,
-										    (delay_µs[ 1 ] * CURRENT_INTEGRAL_FREQ) / MHz,
-										    (delay_µs[ 2 ] * CURRENT_INTEGRAL_FREQ) / MHz,
-										    (delay_µs[ 3 ] * CURRENT_INTEGRAL_FREQ) / MHz,
-										    (delay_µs[ 4 ] * CURRENT_INTEGRAL_FREQ) / MHz,
-										    (delay_µs[ 5 ] * CURRENT_INTEGRAL_FREQ) / MHz,
-										    (delay_µs[ 6 ] * CURRENT_INTEGRAL_FREQ) / MHz,
-									      };
+								//    DAC = 0  DAC = 3V
+	const int delay_µs[DELAYS_NUM] = {	50,	  	   2,	  // 0, 1	  - 6710µs is MAX @320kHz
+										50,	  	   2,	  // 2, 3
+										50,	  	   2, 	  // 4, 5
+										50,	  	   2, 	  // 6, 7
+										50,	  	   2, 	  // 9, 9
+										50,	  	   2, 	  // 10, 11
+										50,	  	   2, 	  // 12, 13
+										50,	  	   2, 	  // 14, 15
+										50,	  	   2, 	  // 16, 17
+										50,	  	   2, 	  // 18, 19
+										50,	  	   2, 	  // 20, 21
+										50,	  	   2, 	  // 22, 23
+										50,	  	   2, 	  // 24, 25
+										50,	  	   2, 	  // 26, 27
+										50,	  	   2, 	  // 28, 29
+										50,	  	   2, 	  // 30, 31
+										50,	  	   2, 	  // 32, 33
+										50,	  	   2, 	  // 34, 35
+										50,	  	   2, 	  // 36, 37
+										50,	  	   2, 	  // 38, 39
+										50,	  	   2, 	  // 40, 41
+										50};			  // 42
+	const int delay_cnt[DELAYS_NUM] = { (delay_µs[ 0] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[ 1] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[ 2] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[ 3] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[ 4] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[ 5] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[ 6] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[ 7] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[ 8] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[ 9] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[10] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[11] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[12] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[13] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[14] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[15] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[16] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[17] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[18] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[19] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[20] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[21] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[22] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[23] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[24] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[25] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[26] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[27] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[28] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[29] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[30] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[31] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[32] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[33] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[34] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[35] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[36] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[37] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[38] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[39] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[40] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[41] * CURRENT_INTEGRAL_FREQ) / 1000000U,
+										(delay_µs[42] * CURRENT_INTEGRAL_FREQ) / 1000000U
+									  };
 	 
 	switch(stage)
@@ -54,5 +106,5 @@
 			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
 
-			if (cnt++ >= delay_cnt[0])	// 1c
+			if (cnt++ >= delay_cnt[0])
 			{
 				cnt = 0;
@@ -62,13 +114,453 @@
 
 		case 1:
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V >> 1;
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V >> 1;
-
-			if (cnt++ >= delay_cnt[1])	// 1c
-			{
-				cnt = 0;
-				stage++;
-			}
-			break;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[1])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		/*case 2:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[2])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 3:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[3])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 4:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[4])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 5:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[5])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 6:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[6])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 7:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[7])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 8:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[8])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 9:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[9])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 10:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[10])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 11:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[11])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 12:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[12])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 13:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[13])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 14:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[14])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 15:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[15])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 16:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[16])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 17:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[17])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 18:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[18])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 19:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[19])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 20:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[20])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 21:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[21])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 22:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[22])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 23:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[23])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 24:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[24])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 25:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[25])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 26:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[26])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 27:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[27])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 28:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[28])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 29:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[29])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 30:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[30])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 31:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[31])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 32:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[32])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 33:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[33])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 34:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[34])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 35:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[35])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 36:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[36])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 37:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[37])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 38:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[38])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 39:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[39])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 40:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
+
+			if (cnt++ >= delay_cnt[40])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;
+
+		case 41:
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
+
+			if (cnt++ >= delay_cnt[41])
+			{
+				cnt = 0;
+				stage++;
+			}
+			break;*/
 
 		case 2:
@@ -76,59 +568,14 @@
 			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
 
-			if (cnt++ >= delay_cnt[2])	// 300c
-			{
-				cnt = 0;
-				stage++;
-			}
-			break;
-
-		case 3:
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = 0xBFF;//DAC_3V;
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = 0xBFF;//DAC_3V;
-
-			if (cnt++ >= delay_cnt[3])	// 1c
-			{
-				cnt = 0;
-				stage++;
-			}
-			break;
-
-		case 4:
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
-
-			if (cnt++ >= delay_cnt[4])	// 50c
-			{
-				cnt = 0;
-				stage++;
-			}
-			break;
-
-		case 5:
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_3V;
-
-			if (cnt++ >= delay_cnt[5])	// 1c
-			{
-				cnt = 0;
-				stage++;
-			}
-			break;
-
-		case 6:
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_A_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
-			*(__IO uint32_t *)((uint32_t)DAC_HANDLE.Instance + DAC_CH_B_ALIGNMENT(DAC_ALIGN_12B_R)) = DAC_0V;
-
-			if (cnt++ >= delay_cnt[6])	// 50c
-			{
-				cnt = 0;
-				stage = 5;
+			if (cnt++ >= delay_cnt[3])
+			{
+				cnt = 0;
+				stage = 0;
 				
-				if (mal++ >= 100/*12000*/)	  // approx 4.25s
+				if (mal++ >= 1600 - 1)	  // approx 95ms
 				{
 					mal = 0;
-					stage = 0;
 					HAL_NVIC_DisableIRQ(ADC_DMA_IRQ);
-					if (WhereToGoAfterPrecharge != NULL) MOSFETS_Management = WhereToGoAfterPrecharge;
+					if (NULL != ReturnFunctionPtr) MOSFETS_Management = ReturnFunctionPtr;
 					else MOSFETS_Management = &DoNothing;
 					HAL_NVIC_EnableIRQ(ADC_DMA_IRQ);
