added some filtering for the voltage reading

This commit is contained in:
schneider 2012-01-19 23:01:00 +01:00
parent eee6ae55f0
commit d9b7a2c6bd
1 changed files with 15 additions and 9 deletions

View File

@ -3,26 +3,31 @@
#include "basic/basic.h" #include "basic/basic.h"
#include "funk/nrf24l01p.h" #include "funk/nrf24l01p.h"
static uint32_t voltage=5000; #define VOLTAGE_SAMPLES 8
static uint32_t voltage=5000*VOLTAGE_SAMPLES;
static uint8_t chrg=1; static uint8_t chrg=1;
void VoltageCheck(void){ void VoltageCheck(void){
uint32_t v;
chrg=gpioGetValue(RB_PWR_CHRG); chrg=gpioGetValue(RB_PWR_CHRG);
//slow down the adc for our high impedance volatage devider //slow down the adc for our high impedance voltage devider
ADC_AD0CR = ((CFG_CPU_CCLK / SCB_SYSAHBCLKDIV) / 100000 - 1 ) << 8; ADC_AD0CR = ((CFG_CPU_CCLK / SCB_SYSAHBCLKDIV) / 100000 - 1 ) << 8;
voltage = adcRead(1); v = adcRead(1);
//speed it up again //speed it up again
ADC_AD0CR = ((CFG_CPU_CCLK / SCB_SYSAHBCLKDIV) / 1000000 - 1 ) << 8; ADC_AD0CR = ((CFG_CPU_CCLK / SCB_SYSAHBCLKDIV) / 1000000 - 1 ) << 8;
voltage *= 10560; v *= 10560;
voltage /= 1024; v /= 1024;
//add the drop over the voltage switch //add the drop over the voltage switch
voltage += 50; v += 50;
voltage -= voltage/VOLTAGE_SAMPLES;
voltage += v;
//battery is assumed empty if the volatge falls bellow 3.5V //battery is assumed empty if the volatge falls bellow 3.5V
if( voltage < 3500 ){ if( voltage < (3500*VOLTAGE_SAMPLES) ){
//if( voltage < 3500 ){
nrf_off(); nrf_off();
gpioSetValue (RB_PWR_GOOD, 0); gpioSetValue (RB_PWR_GOOD, 0);
gpioSetValue (RB_LCD_BL, 0); gpioSetValue (RB_LCD_BL, 0);
@ -35,7 +40,8 @@ void VoltageCheck(void){
}; };
uint32_t GetVoltage(void){ uint32_t GetVoltage(void){
return voltage; return voltage/8;
//return voltage;
}; };
uint8_t GetChrgStat(void){ uint8_t GetChrgStat(void){