From e3104e6907180c458fa2609233908334bed6c144 Mon Sep 17 00:00:00 2001 From: payton Date: Fri, 21 Jul 2023 11:13:54 +0800 Subject: [PATCH] =?UTF-8?q?1.=E7=94=B5=E6=B1=A0=E7=94=B5=E5=8E=8B=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sf_app/code/source/battery/sf_battery.c | 96 +++++++++++++++---- 1 file changed, 80 insertions(+), 16 deletions(-) diff --git a/code/application/source/sf_app/code/source/battery/sf_battery.c b/code/application/source/sf_app/code/source/battery/sf_battery.c index cf8913541..17daa9148 100644 --- a/code/application/source/sf_app/code/source/battery/sf_battery.c +++ b/code/application/source/sf_app/code/source/battery/sf_battery.c @@ -302,7 +302,7 @@ UINT32 sf_battery_adc_value_get_once(void) if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS) { dcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc); - dcVoltageVal += 2; + //dcVoltageVal += 2; if(puiPara->BatteryLogSwitch) printf("DC ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,dcVoltageVal,dcVoltageVal/10,dcVoltageVal%10); @@ -311,7 +311,7 @@ UINT32 sf_battery_adc_value_get_once(void) if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS) { liPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); - liPolymerVoltageVal += 2; + //liPolymerVoltageVal += 2; if(puiPara->BatteryLogSwitch) printf("Li ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,liPolymerVoltageVal,liPolymerVoltageVal/10,liPolymerVoltageVal%10); @@ -320,7 +320,7 @@ UINT32 sf_battery_adc_value_get_once(void) if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) { batVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); - batVoltageVal += 2; + //batVoltageVal += 2; if(puiPara->BatteryLogSwitch) printf("Bat ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,batVoltageVal,batVoltageVal/10,batVoltageVal%10); } @@ -693,6 +693,68 @@ signed int sf_battery_value_fast_get(void) return ret; } + +/****************************************************** + Function: sf_battery_adc_value_get + Description: auto mode:take the maximum of 5 times; + manual mode:take the average of 10 times; + Input: N/A + Output: N/A + Return: SUCCESS/FAIL + Others: N/A + *******************************************************/ +SINT32 sf_battery_adc_value_get(void) +{ + UINT8 readBatCnt = 0; + + UINT32 dcTemp = 0; + UINT32 batTemp = 0; + UINT32 dcValueList = { 0 }; + UINT32 batValueList = { 0 }; + + //SINT32 ret = FAIL; + + //uiPara_t * puiPara = appUiParaGet(); + + for(readBatCnt = 0; readBatCnt < 10;) //get average value of 10 times. + { + if(sf_battery_adc_value_get_once() == SUCCESS) + { + dcValueList = _DcVoltageVal; + + if(_LiPolymerVoltageVal) + { + batValueList = _LiPolymerVoltageVal; + } + else + { + batValueList = _BatVoltageVal; + } + + dcTemp += dcValueList; + batTemp += batValueList; + + readBatCnt++; + + sf_sleep_ms(100); + if(readBatCnt >= SF_READ_BAT_MAX) + { + _DcVoltageVal = dcTemp / SF_READ_BAT_MAX; + + if(_LiPolymerVoltageVal) + { + _LiPolymerVoltageVal = batTemp / SF_READ_BAT_MAX; + } + else if(_BatVoltageVal) + { + _BatVoltageVal = batTemp / SF_READ_BAT_MAX; + } + } + } + } + return SUCCESS; +} + /************************************************* Function: sf_battery_level_polling Description: polling battery level @@ -717,11 +779,11 @@ void sf_battery_level_polling(void) static UINT32 battEmpty = 0; - for(readBatCnt = 0; readBatCnt < 100;) //get average value of 100 times. + for(readBatCnt = 0; readBatCnt < 10;) //get average value of 10 times. { - if(sf_battery_adc_value_get_once() == SUCCESS) + if(sf_battery_adc_value_get() == SUCCESS) { - sf_sleep_ms(100); + //sf_sleep_ms(100); dcTemp += _DcVoltageVal; temperValue += _TemperAdc; @@ -731,17 +793,17 @@ void sf_battery_level_polling(void) LibatTemp += _LiPolymerVoltageVal; batCnt++; } - else + else if(_BatVoltageVal) { batTemp += _BatVoltageVal; LibatCnt++; } readBatCnt++; - if(readBatCnt >= 100) + if(readBatCnt >= 10) { - _DcVoltageVal = dcTemp / 100; - _TemperAdc = temperValue/100; + _DcVoltageVal = dcTemp / 10; + _TemperAdc = temperValue/10; if(LibatCnt) _LiPolymerVoltageVal = LibatTemp / LibatCnt; @@ -1217,12 +1279,14 @@ UINT8 sf_battery_value_get(UINT8 nightMode) *************************************************/ UINT8 sf_battery_type_get(void) { - if(IsPowerDcIn) - return SF_POWER_TYPE_DC; - else if(LiPolymerVoltageVal) - return SF_POWER_TYPE_LI_POLYER; - else - return SF_POWER_TYPE_AA; + if(IsPowerDcIn) + return SF_POWER_TYPE_DC; + else if(LiPolymerVoltageVal) + return SF_POWER_TYPE_LI_POLYER; + else if(BatVoltageVal) + return SF_POWER_TYPE_AA; + else + return SF_POWER_TYPE_DC; } /*************************************************