Что сразу линвинус
, как поговаривал ваш герой, отбросьте всё невозможное и самый простой ответ будет правильным.
судя по всему у вас включён режим 16в (13 бит в регистре конфигурации)
8.6.2.1 Configuration Register (address = 00h) [reset = 399Fh]
BRNG: Bus Voltage Range
Bit 13 0 = 16V FSR
1 = 32V FSR (default value)
а то что врёт это не страшно, просто значение регистра помножте на поправочный коэффициент и будет точно.
с обычным резистивным делителем напряжения и АЦП вы бы делали тоже самое.
например у меня в STM32 вот так,
//adc 12-разрядный 2^12=4096-1
#define BLDC_ADC_maxAdcBits 4095.0f // Using Float for clarity
//максимальное напряжение которое принимает ADC 3.3в
#define BLDC_ADC_maxVolts 3.3f // Using Float for clarity
//напряжение на один разряд
#define BLDC_ADC_voltsPerBit (BLDC_ADC_maxVolts / BLDC_ADC_maxAdcBits)
//поправочный коэффициент, 13.24 - реальное напряжение, 2298 реальное значение которое выдаёт ADC при этом напряжении
//BATT_DIV = 13.24/((3.3/4095)*2298)
#define BATT_DIV 7.14954f
Vbatt = adc1_sample * BLDC_ADC_voltsPerBit * BATT_DIV;
Добавлено спустя 1 час 21 минуту 19 секунд:посмотрел код библиотеки, конечно ошибиться там очень сложно
думаю значение 00 регистра прояснило было ситуацию