将24位2的Compliment(MSB优先)值转换为电压

时间:2015-02-25 20:37:44

标签: c++ arduino spi 24-bit

我有一个ADC(AD7767)用于测量差分信号。来自ADC的数据是2的补码MSB前24位值。我想将此值转换为电压。使用的参考电压是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

2 个答案:

答案 0 :(得分:1)

问题在于你正在使用的长型。 它是整数1,结果小于1,结果为0。 使用花车你会有:

(结果* 0x5)= 110101100010101001 = 219,305

maxValue = 0x7FFFFF = 8,388,607

结果= 219,305 / 8,388,607 = 0.026 [伏特]

答案 1 :(得分:1)

Yu尝试将一个分数存储到一个长整数中。结果将始终为零。您需要将其中一个操作数转换为double并将结果存储为double。