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 a005fe516..35cc1b7b7 100755 --- a/code/application/source/sf_app/code/source/battery/sf_battery.c +++ b/code/application/source/sf_app/code/source/battery/sf_battery.c @@ -212,7 +212,7 @@ UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval) { static UINT8 getAdcFlg = 0; //static UINT8 outputflag = 1; - UINT32 adc_device_delay_time_ms = 100; + UINT32 adc_device_delay_time_ms = 20; *pval = 0; if(getAdcFlg) @@ -349,7 +349,7 @@ UINT32 sf_battery_adc_value_get_once(void) UINT32 liPolymerVoltageVal = 0; UINT32 batVoltageVal = 0; static UINT8 getBatAdcFlg = 0; - UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + // UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); if(getBatAdcFlg) return SUCCESS; @@ -361,8 +361,8 @@ UINT32 sf_battery_adc_value_get_once(void) { dcVoltageVal = sf_battery_voltage_convert(24, 100, batAdc); //dcVoltageVal += 2; - if(puiPara->BatteryLogSwitch) - printf("DC ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,dcVoltageVal,dcVoltageVal/10,dcVoltageVal%10); + // if(puiPara->BatteryLogSwitch) + // printf("DC ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,dcVoltageVal,dcVoltageVal/10,dcVoltageVal%10); } @@ -370,8 +370,8 @@ UINT32 sf_battery_adc_value_get_once(void) { liPolymerVoltageVal = sf_battery_voltage_convert(24, 100, batAdc); //liPolymerVoltageVal += 2; - if(puiPara->BatteryLogSwitch) - printf("Li ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,liPolymerVoltageVal,liPolymerVoltageVal/10,liPolymerVoltageVal%10); + // if(puiPara->BatteryLogSwitch) + // printf("Li ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,liPolymerVoltageVal,liPolymerVoltageVal/10,liPolymerVoltageVal%10); } @@ -379,15 +379,15 @@ UINT32 sf_battery_adc_value_get_once(void) { batVoltageVal = sf_aa_battery_voltage_convert(24, 100, batAdc); //batVoltageVal += 2; - if(puiPara->BatteryLogSwitch) - printf("Bat ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,batVoltageVal,batVoltageVal/10,batVoltageVal%10); + // if(puiPara->BatteryLogSwitch) + // printf("Bat ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,batVoltageVal,batVoltageVal/10,batVoltageVal%10); } if(sf_adc_value_get(SF_ADC_TEMP, &batAdc) == SUCCESS) { _TemperAdc = batAdc; - if(puiPara->BatteryLogSwitch) - printf("_TemperAdc:%d \n",batAdc); + // if(puiPara->BatteryLogSwitch) + // printf("_TemperAdc:%d \n",batAdc); } _DcVoltageVal = dcVoltageVal; @@ -768,45 +768,61 @@ SINT32 sf_battery_adc_value_get(void) UINT32 dcTemp = 0; UINT32 batTemp = 0; - UINT32 dcValueList = { 0 }; - UINT32 batValueList = { 0 }; + UINT32 LibatTemp = 0; + UINT8 LibatCnt = 0; + UINT8 batCnt = 0; + UINT32 temperValue = 0; //SINT32 ret = FAIL; //uiPara_t * puiPara = appUiParaGet(); - for(readBatCnt = 0; readBatCnt < 10;) //get average value of 10 times. + for(readBatCnt = 0; readBatCnt < 5;) //get average value of 10 times. { if(sf_battery_adc_value_get_once() == SUCCESS) { - dcValueList = _DcVoltageVal; - + dcTemp += _DcVoltageVal; + temperValue += _TemperAdc; if(_LiPolymerVoltageVal) { - batValueList = _LiPolymerVoltageVal; + LibatTemp += _LiPolymerVoltageVal; + LibatCnt++; } else { - batValueList = _BatVoltageVal; + batTemp += _BatVoltageVal; + batCnt++; } - dcTemp += dcValueList; - batTemp += batValueList; - readBatCnt++; - sf_sleep_ms(100); - if(readBatCnt >= SF_READ_BAT_MAX) + //sf_sleep_ms(10); + if(readBatCnt >= 5) { - _DcVoltageVal = dcTemp / SF_READ_BAT_MAX; + _DcVoltageVal = dcTemp / 5; + _TemperAdc = temperValue/ 5; + + if(LibatCnt) + _LiPolymerVoltageVal = LibatTemp / LibatCnt; + if(batCnt) + _BatVoltageVal = batTemp / batCnt; - if(_LiPolymerVoltageVal) - { - _LiPolymerVoltageVal = batTemp / SF_READ_BAT_MAX; + if((_DcVoltageVal > _LiPolymerVoltageVal) && (_DcVoltageVal >= _BatVoltageVal) && (_DcVoltageVal >= SF_DC_IN_VOLATAGE)) + { + IsPowerDcIn = 1; } - else if(_BatVoltageVal) + else { - _BatVoltageVal = batTemp / SF_READ_BAT_MAX; + IsPowerDcIn = 0; + } + + if ((_LiPolymerVoltageVal > _BatVoltageVal)) + { + _BatVoltageVal = 0; + } + else + { + _LiPolymerVoltageVal = 0; } } } @@ -842,7 +858,7 @@ void sf_battery_level_polling(void) { if(sf_battery_adc_value_get() == SUCCESS) { - //sf_sleep_ms(100); + sf_sleep_ms(100); dcTemp += _DcVoltageVal; temperValue += _TemperAdc; @@ -1097,7 +1113,7 @@ void sf_view_osd_battery_draw(UINT8 bShow) UINT8 sf_battery_value_get(UINT8 nightMode) { UINT8 value = 0; - UINT8 batteryVal = 0; + UINT32 batteryVal = 0; UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); if(IsPowerDcIn == 0)