将 24 位 2 的补语(MSB 在前)值转换为电压
Convert 24 bit 2's Compliment (MSB first) value to a voltage
我有一个 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
问题出在您使用的 long 类型上。
它是整数 1,结果小于 1,结果为 0。
使用花车你将拥有:
(结果 * 0x5) = 110101100010101001 = 219,305
最大值 = 0x7FFFFF = 8,388,607
结果 = 219,305 / 8,388,607 = 0.026 [伏特]
您正在尝试将分数存储到长整数中。结果将始终为零。您需要将其中一个操作数转换为 double 并将结果存储在 double 中。
我有一个 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
问题出在您使用的 long 类型上。 它是整数 1,结果小于 1,结果为 0。 使用花车你将拥有:
(结果 * 0x5) = 110101100010101001 = 219,305
最大值 = 0x7FFFFF = 8,388,607
结果 = 219,305 / 8,388,607 = 0.026 [伏特]
您正在尝试将分数存储到长整数中。结果将始终为零。您需要将其中一个操作数转换为 double 并将结果存储在 double 中。