Implement the temperature computation in fixed point.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 29 Jun 2010 09:25:19 +0000 (09:25 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 29 Jun 2010 09:25:19 +0000 (09:25 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3966 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/cpu/cortex-m3/io/stm32_adc.h
boards/stm32-p103/hw/hw_adc.h

index 09bb07487fd251563dc3102b7b86214065286937..a3d4d2edc1b5154f3535b64b2d0d6f53cad40f85 100644 (file)
 
 
 /* ADC defines for SMT32F103Bxx */
-#define ADC_TEMP_V25         4.3
-#define ADC_TEMP_SLOPE      1.43
-#define ADC_TEMP_CONST        25
-#define ADC_TEMP_CH           16
-#define ADC_VREFINT_CH        17
+#define ADC_TEMP_V25         4300  // uV / C
+#define ADC_TEMP_SLOPE       1430  // mV
+#define ADC_TEMP_CONST      25000
+#define ADC_TEMP_CH            16
+#define ADC_VREFINT_CH         17
 \r
 struct stm32_adc
 {
index c2c321f13b2826a2a118b319844879045728be12..0313b2fc47a68939ceea41a1279460e78c26ca9b 100644 (file)
@@ -43,7 +43,7 @@
 #include <io/stm32.h>
 
 /*
- * Return the Vrefint voltage in mV
+ * Return the Vrefint voltage in mV.
  */
 INLINE uint16_t hw_readVrefint(void)
 {
@@ -51,12 +51,14 @@ INLINE uint16_t hw_readVrefint(void)
 }
 
 /*
- * Return the cpu core temperature in degrees.
+ * Return the cpu core temperature in degrees * 100.
  */
-INLINE float hw_readIntTemp(void)
+INLINE uint16_t hw_readIntTemp(void)
 {
-       float vsens = ADC_RANGECONV(adc_read(ADC_TEMP_CH), 0, 3.3);
-       return (float)(((ADC_TEMP_V25 - vsens) / ADC_TEMP_SLOPE) + ADC_TEMP_CONST);
+       uint16_t vsens = ADC_RANGECONV(adc_read(ADC_TEMP_CH), 0, 3300);
+
+       uint16_t temp = (((ADC_TEMP_V25 - vsens) * 1000)/ ADC_TEMP_SLOPE) + ADC_TEMP_CONST;
+       return (temp / 10);
 }
 
 #endif /* HW_ADC_H */