Heltecv2 battery monitor
This commit is contained in:
parent
bbc2592552
commit
81f1bc5c70
@ -20,8 +20,9 @@
|
|||||||
#define HAS_LED LED_BUILTIN // white LED on board
|
#define HAS_LED LED_BUILTIN // white LED on board
|
||||||
#define HAS_BUTTON KEY_BUILTIN // button "PROG" on board
|
#define HAS_BUTTON KEY_BUILTIN // button "PROG" on board
|
||||||
|
|
||||||
//#define BAT_MEASURE_ADC ADC2_GPIO13_CHANNEL // battery probe GPIO pin
|
#define BAT_MEASURE_ADC ADC2_GPIO13_CHANNEL // battery probe GPIO pin
|
||||||
//#define BAT_VOLTAGE_DIVIDER 4 // voltage divider 220k/100k on board
|
#define BAT_MEASURE_ADC_UNIT 2 // ADC 2
|
||||||
|
#define BAT_VOLTAGE_DIVIDER 2 // voltage divider 220k/100k on board
|
||||||
#define EXT_POWER_SW Vext // switches battery power, Vext control 0 = on / 1 = off
|
#define EXT_POWER_SW Vext // switches battery power, Vext control 0 = on / 1 = off
|
||||||
#define EXT_POWER_ON 0
|
#define EXT_POWER_ON 0
|
||||||
//#define EXT_POWER_OFF 1
|
//#define EXT_POWER_OFF 1
|
||||||
|
@ -49,16 +49,26 @@ esp_adc_cal_characteristics_t *adc_characs =
|
|||||||
(esp_adc_cal_characteristics_t *)calloc(
|
(esp_adc_cal_characteristics_t *)calloc(
|
||||||
1, sizeof(esp_adc_cal_characteristics_t));
|
1, sizeof(esp_adc_cal_characteristics_t));
|
||||||
|
|
||||||
|
#ifndef BAT_MEASURE_ADC_UNIT // ADC1
|
||||||
static const adc1_channel_t adc_channel = BAT_MEASURE_ADC;
|
static const adc1_channel_t adc_channel = BAT_MEASURE_ADC;
|
||||||
|
#else // ADC2
|
||||||
|
static const adc2_channel_t adc_channel = BAT_MEASURE_ADC;
|
||||||
|
#endif
|
||||||
static const adc_atten_t atten = ADC_ATTEN_DB_11;
|
static const adc_atten_t atten = ADC_ATTEN_DB_11;
|
||||||
static const adc_unit_t unit = ADC_UNIT_1;
|
static const adc_unit_t unit = ADC_UNIT_1;
|
||||||
#endif
|
|
||||||
|
#endif // BAT_MEASURE_ADC
|
||||||
|
|
||||||
void calibrate_voltage(void) {
|
void calibrate_voltage(void) {
|
||||||
#ifdef BAT_MEASURE_ADC
|
#ifdef BAT_MEASURE_ADC
|
||||||
// configure ADC
|
// configure ADC
|
||||||
|
#ifndef BAT_MEASURE_ADC_UNIT // ADC1
|
||||||
ESP_ERROR_CHECK(adc1_config_width(ADC_WIDTH_BIT_12));
|
ESP_ERROR_CHECK(adc1_config_width(ADC_WIDTH_BIT_12));
|
||||||
ESP_ERROR_CHECK(adc1_config_channel_atten(adc_channel, atten));
|
ESP_ERROR_CHECK(adc1_config_channel_atten(adc_channel, atten));
|
||||||
|
#else // ADC2
|
||||||
|
// ESP_ERROR_CHECK(adc2_config_width(ADC_WIDTH_BIT_12));
|
||||||
|
ESP_ERROR_CHECK(adc2_config_channel_atten(adc_channel, atten));
|
||||||
|
#endif
|
||||||
// calibrate ADC
|
// calibrate ADC
|
||||||
esp_adc_cal_value_t val_type = esp_adc_cal_characterize(
|
esp_adc_cal_value_t val_type = esp_adc_cal_characterize(
|
||||||
unit, atten, ADC_WIDTH_BIT_12, DEFAULT_VREF, adc_characs);
|
unit, atten, ADC_WIDTH_BIT_12, DEFAULT_VREF, adc_characs);
|
||||||
@ -75,7 +85,6 @@ void calibrate_voltage(void) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t getBattLevel() {
|
uint8_t getBattLevel() {
|
||||||
/*
|
/*
|
||||||
return values:
|
return values:
|
||||||
@ -102,7 +111,6 @@ uint8_t getBattLevel() {
|
|||||||
|
|
||||||
// u1_t os_getBattLevel(void) { return getBattLevel(); };
|
// u1_t os_getBattLevel(void) { return getBattLevel(); };
|
||||||
|
|
||||||
|
|
||||||
uint16_t read_voltage() {
|
uint16_t read_voltage() {
|
||||||
|
|
||||||
uint16_t voltage = 0;
|
uint16_t voltage = 0;
|
||||||
@ -114,17 +122,23 @@ uint16_t read_voltage() {
|
|||||||
#ifdef BAT_MEASURE_ADC
|
#ifdef BAT_MEASURE_ADC
|
||||||
// multisample ADC
|
// multisample ADC
|
||||||
uint32_t adc_reading = 0;
|
uint32_t adc_reading = 0;
|
||||||
|
int adc_buf = 0;
|
||||||
for (int i = 0; i < NO_OF_SAMPLES; i++) {
|
for (int i = 0; i < NO_OF_SAMPLES; i++) {
|
||||||
|
#ifndef BAT_MEASURE_ADC_UNIT // ADC1
|
||||||
adc_reading += adc1_get_raw(adc_channel);
|
adc_reading += adc1_get_raw(adc_channel);
|
||||||
|
#else // ADC2
|
||||||
|
ESP_ERROR_CHECK(adc2_get_raw(adc_channel, ADC_WIDTH_BIT_12, &adc_buf));
|
||||||
|
adc_reading += adc_buf;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
adc_reading /= NO_OF_SAMPLES;
|
adc_reading /= NO_OF_SAMPLES;
|
||||||
// Convert ADC reading to voltage in mV
|
// Convert ADC reading to voltage in mV
|
||||||
voltage = esp_adc_cal_raw_to_voltage(adc_reading, adc_characs);
|
voltage = esp_adc_cal_raw_to_voltage(adc_reading, adc_characs);
|
||||||
#endif
|
#endif // BAT_MEASURE_ADC
|
||||||
|
|
||||||
#ifdef BAT_VOLTAGE_DIVIDER
|
#ifdef BAT_VOLTAGE_DIVIDER
|
||||||
voltage *= BAT_VOLTAGE_DIVIDER;
|
voltage *= BAT_VOLTAGE_DIVIDER;
|
||||||
#endif
|
#endif // BAT_VOLTAGE_DIVIDER
|
||||||
|
|
||||||
#endif // HAS_PMU
|
#endif // HAS_PMU
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user