将 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:aka Vref
(result * 0x5) = 110101100010101001
(result * 0x5) / maxValue = 0
Yu正试图将一个分数存储到一个long中。结果将始终为零。您需要将其中一个操作数强制转换为double,并将结果存储在double中。
问题出在您使用的long类型中。它是整数1,当结果小于1时,结果为0。使用浮点数:
(结果*0x5)=110101100010101001=219305
最大值=0x7FFFFF=8388607
结果=219305/8388607=0.026[伏特]
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 隐式转换运算符与模板构造函数 - 谁应该优先考虑?
- 将 24 位 2 的补充(MSB 优先)值转换为电压
- 如何强制转换优先于其他转换
- 用户定义的转换运算符优先,以 G++ 而不是 CLak++编译
- 在c++中优先使用隐式转换操作符