diff --git a/src/W800_SDK_v1.00.10/app/app_drivers/watch_peripherals/watch_peripherals.c b/src/W800_SDK_v1.00.10/app/app_drivers/watch_peripherals/watch_peripherals.c index 04aa104..be4559a 100644 --- a/src/W800_SDK_v1.00.10/app/app_drivers/watch_peripherals/watch_peripherals.c +++ b/src/W800_SDK_v1.00.10/app/app_drivers/watch_peripherals/watch_peripherals.c @@ -312,7 +312,7 @@ void watch_peripherals_register_battery_controller_status_change_cb(BatteryContr uint16_t watch_peripherals_get_battery_voltage(battery_unit_e unit) { tls_gpio_write(BATTERY_VOLTAGE_DIVIDER_ENABLE, 1); - int batteryVoltage = adc_get_inputVolt(BATTERY_VOLTAGE_ADC_CHANNEL, 1, 1) * 2 + _adc_offset; + int batteryVoltage = adc_get_inputVolt_with_gains(BATTERY_VOLTAGE_ADC_CHANNEL, 1, 1) * 2 + _adc_offset; tls_gpio_write(BATTERY_VOLTAGE_DIVIDER_ENABLE, 0); switch (unit) diff --git a/src/W800_SDK_v1.00.10/include/driver/wm_adc.h b/src/W800_SDK_v1.00.10/include/driver/wm_adc.h index 891bd50..a85d3ca 100644 --- a/src/W800_SDK_v1.00.10/include/driver/wm_adc.h +++ b/src/W800_SDK_v1.00.10/include/driver/wm_adc.h @@ -270,7 +270,23 @@ int adc_get_interTemp(void); * * @note None */ -int adc_get_inputVolt(u8 channel, u8 gain1, u8 gain2); +int adc_get_inputVolt(u8 channel); + +/** NOT PART OF THE OFFICIAL SDK **/ +/** + * @brief This function is used to read input voltage also allowing to + * specify ADC gains. + * + * @param[in] channel adc channel,from 0 to 3 is single input;8 and 9 is differential input. + * @param[in] gain1 ADC PGA gain 1 + * @param[in] gain2 ADC PGA gain 2 + * + * @retval voltage unit:mV + * + * @note None + */ +int adc_get_inputVolt_with_gains(u8 channel, u8 gain1, u8 gain2); +/**********************************/ /** * @brief This function is used to read internal voltage. diff --git a/src/W800_SDK_v1.00.10/platform/drivers/adc/wm_adc.c b/src/W800_SDK_v1.00.10/platform/drivers/adc/wm_adc.c index 41c313a..5d05490 100644 --- a/src/W800_SDK_v1.00.10/platform/drivers/adc/wm_adc.c +++ b/src/W800_SDK_v1.00.10/platform/drivers/adc/wm_adc.c @@ -532,7 +532,7 @@ int adc_get_interTemp(void) return adc_temp(); } -int adc_get_inputVolt(u8 channel, u8 gain1, u8 gain2) +int adc_get_inputVolt(u8 channel) { int average = 0; double voltage = 0.0; @@ -544,7 +544,7 @@ int adc_get_inputVolt(u8 channel, u8 gain1, u8 gain2) tls_adc_init(0, 0); tls_adc_reference_sel(ADC_REFERENCE_INTERNAL); - tls_adc_set_pga(gain1, gain2); + tls_adc_set_pga(1,1); tls_adc_set_clk(0x28); tls_adc_start_with_cpu(channel); @@ -567,6 +567,43 @@ int adc_get_inputVolt(u8 channel, u8 gain1, u8 gain2) return average; } +/** NOT PART OF THE OFFICIAL SDK **/ +int adc_get_inputVolt_with_gains(u8 channel, u8 gain1, u8 gain2) +{ + int average = 0; + double voltage = 0.0; + + if(_polyfit_param.poly_n == 0 || (channel == 8) || (channel == 9)) + { + adc_get_offset(); + } + + tls_adc_init(0, 0); + tls_adc_reference_sel(ADC_REFERENCE_INTERNAL); + tls_adc_set_pga(gain1, gain2); + tls_adc_set_clk(0x28); + tls_adc_start_with_cpu(channel); + + waitForAdcDone(); + average = tls_read_adc_result(); + signedToUnsignedData(&average); + tls_adc_stop(0); + + if ((channel == 8) || (channel == 9)) + { + voltage = ((double)average - (double)adc_offset)/4.0; + voltage = voltage*(126363/1000)/1000000; + } + else + { + return cal_voltage((double)average); + } + + average = (int)(voltage*1000); + return average; +} +/**********************************/ + u32 adc_get_interVolt(void) { u32 voltValue; diff --git a/src/W800_SDK_v1.00.10/src/app/factorycmd/factory_atcmd.c b/src/W800_SDK_v1.00.10/src/app/factorycmd/factory_atcmd.c index ac2db68..1b8516c 100644 --- a/src/W800_SDK_v1.00.10/src/app/factorycmd/factory_atcmd.c +++ b/src/W800_SDK_v1.00.10/src/app/factorycmd/factory_atcmd.c @@ -934,7 +934,7 @@ static int factory_atcmd_adc_vol_proc( struct factory_atcmd_token_t *tok, char * if (val & (1 << i)) { wm_adc_config(i); - voltage[i] = adc_get_inputVolt(i, 1, 1); + voltage[i] = adc_get_inputVolt(i); } } *res_len = sprintf(res_resp, "+OK=%d,%d,%d,%d\r\n", voltage[0], voltage[1], voltage[2], voltage[3]);