diff --git a/platform/osd-merkur/dev/batmon.c b/platform/osd-merkur/dev/batmon.c new file mode 100644 index 000000000..6ff0c135b --- /dev/null +++ b/platform/osd-merkur/dev/batmon.c @@ -0,0 +1,55 @@ +#include "contiki.h" +#include "batmon.h" +#include + + + + +int8_t batmon_init() +{ + return 0; +} + +int8_t batmon_get_voltage(uint16_t* voltage) +{ + uint16_t volt = 0; + uint16_t resolution = 75; + uint16_t offset = 2550; + int8_t ctr = 0; + + BATMON = 0 | BV(BATMON_HR); + _delay_us(2); + + if(BATMON & BV(BATMON_OK)) + { + // voltage above 2.550 V + resolution = 75; + offset = 2550; + for(ctr=15; ctr>=0; ctr--) + { + BATMON = (BATMON & 0xF0) | (ctr); + _delay_us(2); + if(BATMON & BV(BATMON_OK)) break; + } + } + else + { + // voltage below 2.550 V + resolution = 50; + offset = 1700; + + BATMON &= ~BV(BATMON_HR); + + for(ctr=15; ctr>=0; ctr--) + { + BATMON = (BATMON & 0xF0) | (ctr); + _delay_us(2); + if(BATMON & BV(BATMON_OK)) break; + } + } + + volt = resolution*ctr+offset; + *voltage=volt; + + return 0; +} diff --git a/platform/osd-merkur/dev/batmon.h b/platform/osd-merkur/dev/batmon.h new file mode 100644 index 000000000..c05f48200 --- /dev/null +++ b/platform/osd-merkur/dev/batmon.h @@ -0,0 +1,8 @@ +#ifndef BATMON_H_ +#define BATMON_H_ + +int8_t batmon_init(); +int8_t batmon_get_voltage(uint16_t* voltage); + + +#endif /* BATMON_H_ */