#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; }