Browse Source

Measurements in mV max-min are working.

Thomas Chef 3 years ago
parent
commit
f5d477d5b9
2 changed files with 52 additions and 6 deletions
  1. 20 2
      STM32/Core/Src/main.c
  2. 32 4
      STM32/Core/Src/stm32f1xx_it.c

+ 20 - 2
STM32/Core/Src/main.c

@@ -45,7 +45,8 @@ ADC_HandleTypeDef hadc1;
 UART_HandleTypeDef huart2;
 
 /* USER CODE BEGIN PV */
-uint32_t adcCounter = 0;
+extern uint32_t adcCounter;
+extern uint16_t maxWaveDiff;	// Stores the latest measured ADC Wave data (MAX-MIN)
 
 /* USER CODE END PV */
 
@@ -71,6 +72,18 @@ static void MX_NVIC_Init(void);
 	adcCounter++;
 }*/
 
+uint16_t getADCDiff() {
+
+	volatile uint32_t firstCnt;
+	volatile uint16_t value;
+	do {
+		firstCnt = adcCounter;
+		value = maxWaveDiff;
+
+	} while( firstCnt != adcCounter );
+	return value;
+}
+
 
 /* USER CODE END 0 */
 
@@ -137,7 +150,12 @@ int main(void)
 
     /* USER CODE BEGIN 3 */
 	  HAL_GPIO_TogglePin (GPIOC, GPIO_PIN_13);
-	  HAL_Delay (1000);
+	  HAL_Delay (500);
+
+
+
+	  printf("Cnt:%lu  Diff:%u   mV:%u \n",adcCounter, getADCDiff(), (getADCDiff()*805)/1000);
+
   }
   /* USER CODE END 3 */
 }

+ 32 - 4
STM32/Core/Src/stm32f1xx_it.c

@@ -42,7 +42,8 @@
 
 /* Private variables ---------------------------------------------------------*/
 /* USER CODE BEGIN PV */
-extern uint32_t adcCounter;
+uint32_t adcCounter=0;
+uint16_t maxWaveDiff = 0;	// Stores the latest measured ADC Wave data (MAX-MIN)
 
 /* USER CODE END PV */
 
@@ -207,11 +208,38 @@ void SysTick_Handler(void)
 void ADC1_2_IRQHandler(void)
 {
   /* USER CODE BEGIN ADC1_2_IRQn 0 */
-	volatile static uint16_t adcData = 0;
 
-	//__HAL_ADC_CLEAR_FLAG(&hadc1,ADC_FLAG_EOC);
+	/**
+	 * Test with osc wave out 50Hz Sine 2160mV (according to Osc measurement)
+	 *
+	 * ADC is 0-3.3V on 12 bits = 4096 bits = 0,8056640625mV / bit
+	 *
+	 * max-min measured in ADC of 2605 = 2098,7mV so a small diff of 61mV
+	 */
+
+
+	static uint16_t adcData = 0;
+	static uint16_t minValue = 0xFFF;
+	static uint16_t maxValue = 0;
+
+	static uint32_t cnt = 10000;	// 205 882,35Hz = 4 117,6 samples/wave. 10000 samples = 48mS = 2.4 Waves
+
 	adcData = ADC1->DR;
-	adcCounter++;
+
+	if( cnt > 0 ) {
+		if( adcData > maxValue ) maxValue = adcData;
+		else if( adcData < minValue ) minValue = adcData;
+		cnt--;
+	}
+	else {
+		cnt = 10000;
+		maxWaveDiff = maxValue - minValue;
+		maxValue = minValue = 0;
+		adcCounter++;
+	}
+
+
+
 
   /* USER CODE END ADC1_2_IRQn 0 */
   /* USER CODE BEGIN ADC1_2_IRQn 1 */