]> www.fi.muni.cz Git - bike-lights.git/commitdiff
battery.c: adjustment for 1.1V internal reference
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Wed, 6 Mar 2013 23:19:43 +0000 (00:19 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Wed, 6 Mar 2013 23:19:43 +0000 (00:19 +0100)
firmware/battery.c

index d7123e95839a4af818f51c5bc1f73a8bd46a4541..192acf04e40502fd3097ed2425ee9c8288bc0d31 100644 (file)
@@ -5,6 +5,12 @@
 #define BATTERY_ADC_SHIFT      6
 #define RESISTOR_HI    1500    // kOhm
 #define RESISTOR_LO     100    // kOhm
+/*
+ * The internal 1.1V reference has tolerance from 1.0 to 1.2V
+ * (datasheet, section 19.6). We have to measure the actual value
+ * of our part.
+ */
+#define AREF_1100MV    1060    // mV
 
 static volatile uint16_t battery_adcval;
 volatile unsigned char battery_critical;
@@ -46,7 +52,7 @@ unsigned char battery_100mv()
 /* convert value in mV to value of ADC shifted by BATTERY_ADC_SHIFT */
 #define MV_TO_ADC(x) \
        ((uint16_t)(((uint32_t)(x) * 1024 * (1 << BATTERY_ADC_SHIFT)) \
-               / ((uint32_t) 1100 \
+               / ((uint32_t) AREF_1100MV \
                        * ((RESISTOR_HI+RESISTOR_LO)/RESISTOR_LO))))
 
 /* convert value in mV to upper 8 bits of ADC value << BATTERY_ADC_SHIFT */