This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我正在使用基于 SPI 的加速计、并尝试对所有采样数据运行一个函数。 在之前的测试中、我能够读取所有数据并将其保存到内存中、但当我尝试对数据运行函数时、我们的值中出现的数据是意外的。 实际上、我们已验证数据输入正确、但对数据的数学改变不一致 (此时、我们只是将当前采样值与一段时间内所有其他采样值之和相加)。
我的问题:
数据是十六进制2补码。 使用此数据添加二进制补码的最佳方法是什么? 微控制器是否以不同的方式处理我们看不到的数据?
目前我们正在存储在一个整数中。 该整数可能不够大、但考虑到我与其他工程师讨论过的内容、我们也要改用16位整数。 现在、我们将针对每个数据点使用2个字节、但我们的第一个字节包含对所有8位的访问、第二个字节仅包含对4个最高有效位[7:4]的访问、最后4个[3:0]是"保留"、意味着我们无法访问它们。 我们目前正在努力合并数据字节、现在我们先前已经丢弃了一个数据字节并牺牲了速度精度。 现在我们可以提高当前使用可获得的2个字节的准确度。 这也有助于知道数据也是左对齐的、以防对二人的称赞有任何影响。 实验室测试用例并不接近此时会导致溢出的情况。 过去、我们会保存数据并在 Excel 中运行数学运算、从而得到期望值。
这里的类型存在一些混淆。 "整数"可能是16位、因此移动到"16位整数"可能没有变化。
目前尚不清楚何处"我们现在将使用每个数据点2个字节、但我们的第一个字节包括对所有8位的访问、第二个字节仅包括对4个最高有效位[7:4]的访问、最后4个[3:0]是"保留"、意味着我们无法访问它们。 "来自。 这是从加速计返回的吗? 您能告诉我们您正在使用的加速计吗? 您能否分享一个展示该问题的小示例?
我怀疑在根据您的2个 SPI 字节创建16位整数时会出现问题。
数据肯定不仅仅是一个字节、而是一次接收到一个字节。 该值应存储到"unsigned char"类型的对象中。 则可以将其与另一个字节进行组合。
关键是防止编译器将字节通过符号扩展为 int。 即使没有专门将其转换为 int、它也可以这样做。
Analog Devices 中的 ADXL373。 见第35和36页。 我们仅使用 x 轴。
来自离心机的示例数据:
0c.
0c.
0C....
然后、我们左移4位、因为我们只查看高字节。
0c0
0c0
0c0……
0C0 => 192LSB (十进制)
192/5=38 G
根据我们的 RPM 计算、我们以38G 的转速率旋转、因此我们看到了38G。
不起作用的实际代码会让我们无法猜测。 包括如何读取数据以及如何处理数据。
这一切都不能解释为什么应该出现求和值问题。