SO用户,
我正在尝试校准我正在读取ADC值的电阻式湿度传感器。 ADC输出8位值。我使用的Vref值为5V。
我校准的第一步是将数字除以255并乘以Vref值。 因此,校准值=(输出/ 255)* Vref。
现在,在VHDL中,我遇到了一些VHDL代码来划分两个数字。我已经划分了两个无符号数,所以这不应该是一个问题。它在这里; VHDL divide two unsigned numbers
现在,在我的VHDL文件中,我有8位ADC值(湿度),我已经定义了两个常量,max_val(11111111 = 255)和Vref(00000101 = 5)都是无符号的。 我首先使用无符号(湿度)将湿度转换为无符号,然后将此值和max_num值传递给除法函数。结果,我将它乘以Vref。
现在,我的问题是;
亲切的问候。
答案 0 :(得分:1)
我认为它应该除以256?或者使用255我认为您的结果几乎相似(请注意,最大距离介于255/256和255/255之间:= 0.00390625)。结果将是固定点数。乘以5:右移2 =乘以4然后加上这个数字(A * 5 = A * 4 + A),你的代码应该是这样的:
A_Multiply_4< = A&“00”;
A_Multiply_5< = A_Multiply_4 + A;
要从unsigned转换为std_logic_vector(我记得它存在于std_logic_1164中):
slv_array< = std_logic_vector(unsigned_number);
如果你想要除以255,我认为你应该将你的数字除以256并在班次后加一点数字:
1/255 = 1/256 + 1 / x
x = 2幂。移位器是最好的方式。
我尝试了1/3并且不得不对这种方法感到愉快。
P / s x = 2 ^ 16,你得到的两个案例之间的差异是5.9838388480392156862745098039216e-8。但我不认为你想要的数字超过8点。