Преобразуйте 24-битное значение комплимента 2 (сначала старший бит) в напряжение

У меня есть АЦП (AD7767), который я использую для измерения дифференциального сигнала. Данные, поступающие от АЦП, представляют собой первое 24-битное значение дополнения 2 MSB. Я хочу преобразовать это значение в напряжение. Используемое опорное напряжение составляет 5 вольт. Я использую Arduino IDE. То, что у меня есть до сих пор, в основном это:

const long minValue = 0x800000;
const long maxValue = 0x7FFFFF;
signed long result = 0;
....
long voltage = (result * 0x5) / maxValue;
Serial.println(voltage);

Это печатает значение 0.

Какие значения:

result = 1010101101010101

0x5: он же Vref

(result * 0x5) = 110101100010101001
(result * 0x5) / maxValue = 0

person Aaru    schedule 25.02.2015    source источник
comment
В чем именно вопрос?   -  person Radiodef    schedule 25.02.2015
comment
stackoverflow.com/ questions/2916191/ могут вам помочь.   -  person Richard Chambers    schedule 26.02.2015
comment
Возможный дубликат Результат деления всегда равен нулю   -  person phuclv    schedule 22.07.2016


Ответы (2)


Ю пытается сохранить дробь в длинном. Результат всегда будет нулевым. Вам нужно привести один из операндов к удвоению и сохранить результат в двойном значении.

person user207421    schedule 25.02.2015

Проблема в длинном типе, который вы используете. Это целое число, и поскольку результат меньше 1, у вас есть 0 в результате. Используя поплавки, вы получите:

(результат * 0x5) = 110101100010101001 = 219 305

максимальное значение = 0x7FFFFF = 8 388 607

Результат = 219 305 / 8 388 607 = 0,026 [Вольт]

person Andrey Derevyanko    schedule 25.02.2015