我目前正在开发一个项目,该项目将使用热敏电阻作为温度传感器,并使用树莓派将这些信息显示在gui上。但是我目前仍然坚持模数转换。使用wavehare ad board中的示例代码我正在使用我设法获得显示的电压,但是我需要在我的分压器方程中使用这个vout来获得我的热敏电阻的电阻,我无法弄清楚如何实际上使用 32位整数iTemp 变量并正确转换它,使其成为控制台上显示的实际数字。目前,带有itemp的2条打印行打印出数字,如(1.186 391 V)。这是正确的,但我需要将其转换为实际数字,然后我可以插入我的分压器方程。 Ps:我在print语句中包含了代码的一部分。 任何帮助都会有很大的帮助。
代码:
while((ADS1256_Scan() == 0));
for (i = 0; i < ch_num; i++)
{
adc[i] = ADS1256_GetAdc(i);
volt[i] = (adc[i] * 100) / 167;
}
for (i = 0; i < ch_num; i++)
{
buf[0] = ((uint32_t)adc[i] >> 16) & 0xFF;
buf[1] = ((uint32_t)adc[i] >> 8) & 0xFF;
buf[2] = ((uint32_t)adc[i] >> 0) & 0xFF;
printf("%d=%02X%02X%02X, %8ld", (int)i, (int)buf[0],
(int)buf[1], (int)buf[2], (long)adc[i]);
iTemp = volt[i]; /* uV */
if (iTemp < 0)
{
iTemp = -iTemp;
printf(" (-%ld.%03ld %03ld V) \r\n", iTemp /1000000, (iTemp%1000000)/1000, iTemp%1000);
}
else
{
printf(" ( %ld.%03ld %03ld V) \r\n", iTemp /1000000, (iTemp%1000000)/1000, iTemp%1000);
}
}
//printf("\33[%dA", (int)ch_num);
bsp_DelayUS(100000);
}
bcm2835_spi_end();
bcm2835_close();
return 0;
}
答案 0 :(得分:0)
根据您的评论:iTemp = volt[i]; /* uV */
,iTemp读取是微伏的。
为了在等式中使用它,您需要做的就是将其转换为伏特(将其转换为double
或float
并乘以(1.0 / 1000000.0))。
double iTempV = (double)iTemp*1.0e-6;
或:
float iTempV = (float)iTemp*1.0e-6f;
我假设以下公式将A2D原始样本值转换为微电压:
adc[i] = ADS1256_GetAdc(i);
volt[i] = (adc[i] * 100) / 167;
我在GitHub中找到了以下项目:https://github.com/ecao1/SEADS-Rpi/blob/master/test_ver1.c以支持我的声明。