56 lines
818 B
C
56 lines
818 B
C
|
#include "contiki.h"
|
||
|
#include "batmon.h"
|
||
|
#include <util/delay.h>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
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;
|
||
|
}
|