|
@@ -72,6 +72,18 @@ int main(void) {
|
|
|
*/
|
|
|
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
|
|
|
|
|
|
+ /* Activates the ADC1 driver and the temperature sensor. */
|
|
|
+ adcStart(&ADCD1, NULL);
|
|
|
+
|
|
|
+ /* Starting GPT3 driver, it is used for triggering the ADC. */
|
|
|
+ gptStart(&GPTD1, &gptcfg1);
|
|
|
+ GPTD1.tim->CCMR1 = 100; // 1Mhz/100=10kHz=100 us
|
|
|
+ GPTD1.tim->EGR = STM32_TIM_EGR_CC1G; // Capture/Compare 1 generation
|
|
|
+ GPTD1.tim->CCMR1= (STM32_TIM_CCMR1_OC1CE | STM32_TIM_CCMR1_OC1M(3));
|
|
|
+ GPTD1.tim->CCER = STM32_TIM_CCER_CC1E;
|
|
|
+ //?GPTD1.tim->BDTR = STM32_TIM_BDTR_MOE;
|
|
|
+ adcStartConversion(&ADCD1, &adcgrpcfg1, &ADC_Data, ADC_GRP1_BUF_DEPTH); //?
|
|
|
+
|
|
|
/*
|
|
|
* Buttons
|
|
|
*/
|
|
@@ -109,6 +121,8 @@ int main(void) {
|
|
|
chsnprintf(buf, 22, "T = %d.%03u °C ", a, b);
|
|
|
ST7735_WriteString(0, LCD_LINE_1, buf, LiberM_7x10, Yellow, Black);
|
|
|
}
|
|
|
+ chsnprintf(buf, 22, "U = %u V", Voltage);
|
|
|
+ ST7735_WriteString(0, LCD_LINE_3, buf, LiberM_7x10, Orange, Black);
|
|
|
chThdSleepMilliseconds(1000);
|
|
|
}
|
|
|
}
|
|
@@ -202,3 +216,28 @@ static uint8_t X_centered(const uint8_t len, const uint8_t pix) {
|
|
|
return (uint8_t)((wdt - pl) / 2);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+/* in ADC_Data[] we heave measured data */
|
|
|
+static void ADC_cb(ADCDriver *adcp) {
|
|
|
+ (void)adcp;
|
|
|
+ int i;
|
|
|
+ uint64_t adc_buf = 0;
|
|
|
+
|
|
|
+ for (i=0; i<ADC_GRP1_BUF_DEPTH; i++) {
|
|
|
+ adc_buf += ADC_Data[i] * ADC_Data[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ // adc_buf - sum of squares. SQRT:
|
|
|
+ uint32_t val = 0;
|
|
|
+ uint32_t step = 1;
|
|
|
+ while (step < adc_buf) {
|
|
|
+ adc_buf -= step;
|
|
|
+ step += 2;
|
|
|
+ val ++;
|
|
|
+ }
|
|
|
+ // transform ADC values to real voltage
|
|
|
+ val /= ADC_GRP1_BUF_DEPTH;
|
|
|
+ val *= ADC_REF_VOLTAGE;
|
|
|
+ val /= 4096;
|
|
|
+ Voltage = val;
|
|
|
+}
|