int Get_Voltage(void)
{
UINT8 val_meas_1 = 0;
UINT8 val_meas_2 = 0;
int i = 0, n = 0;
int total_meas_1 = 0;
int total_meas_2 = 0;
int avg_meas_1 = 0;
int avg_meas_2 = 0;
int get_val = 0;
u16 vbat = 0;
/* 1 << 0 VBAT is measured */
sanremo_set_bit(0x50, 0);
for (i = 0 ; i < 5 ; i++ ){
Delay_us(50);
sanremo_read(0x6D, &val_meas_1); //MEAS_1 4-11
sanremo_read(0x6E, &val_meas_2); //MEAS_2 0-3
if(val_meas_1 == 0){
++n;
continue;
}
total_meas_1 += val_meas_1;
total_meas_2 += val_meas_2;
}
avg_meas_1 = total_meas_1 / (i - n );
avg_meas_2 = total_meas_2 / (i - n );
get_val = ( avg_meas_1 << 4 ) | ( avg_meas_2 & 0xF );
vbat = (u16) (((u32) get_val * 3 * 18 * 1000) >> 12) / 10;
printf (NULL, "vbat = %d. ", vbat );
return vbat;
}
|