#include #include "lights.h" #define RESISTOR_HI 1500 // kOhm #define RESISTOR_LO 100 // kOhm volatile unsigned char battery_100mv = 0; void init_battery() { battery_100mv = 0; } void battery_adc(uint16_t adcval) { /* * This is tricky: we need to maintain precision, so we first * multiply adcval by as big number as possible to fit uint16_t, * then divide to get the final value, * and finally type-cast it to unsigned char. * We don't do running average, as the required precision * is coarse (0.1 V). */ battery_100mv = (unsigned char) ((uint16_t)(adcval * 11 // 1.1V * (RESISTOR_HI+RESISTOR_LO)/RESISTOR_LO // resistor ratio / 4) >> 8); // divide by 1024 }