将char转换为嵌入C中的浮动

use*_*388 1 c embedded

我正在PIC单片机上读取一个10位A/D转换器,并希望将该值平均超过几千个调用,并将平均值最终再次作为char.返回的值是16位字符.

我想做的事情如下:

float f = 0.0;

for (int i=0; i<5000; i++) {
    n = readADC(); // Returns a char, 0->1023
    f = f + (float)n;
}

f = f / 5000.0;
n = (char)f;
// Send n somewhere as the final char which is a mean of 5000 calls to the ADC.
Run Code Online (Sandbox Code Playgroud)

我得到了奇怪的价值,好像我没有正确地施展.我该如何解决这个问题?

unw*_*ind 5

如果你有一个最大1023(10位)的读数,并希望平均5000次(~13位),那么应该很清楚,用于平均的16位累加器(远)太小.

如果输入卡在1023,则5000次加法后的总和将为5000*1023 = 5115000,这显然不适合16位变量.甚至不是unsigned一个,最大值为65535,超过78 太少.

使用uint32_t的蓄电池总和.

还要考虑平均4096或8192值,因此可以通过右移12或13位来完成除法.