【发布时间】:2015-11-13 21:44:05
【问题描述】:
我正在使用模数转换器读取 0 到 3.3V 的电压值。 ADC 提供从 0x00 到 0x0FFF(0 到 4095)的输出。我想用两位小数打印电压读数。我已经阅读了许多答案,但我尝试过的都没有奏效。这是我的代码:
uint32_t pui32ADC0Value[1]; // ADC0 data value
double D0v; // Decimal value
// Read value from ADC
ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value);
// Convert to decimal
D0v = (double)pui32ADC0Value[0] / 4095 * 3.3;
// Print to console
UART0printf("\n\r> D0 = %.2d V", D0v);
我得到的输出是:D0 = ERROR2d V
pui32ADC0Value 打印没有任何问题并给出预期值,所以我知道它正在工作。
这个错误是什么意思?
注意:UART0printf 是我正在使用的 TIVA TM4C 微控制器上的预定义 UART 功能。
更新:我错误地认为UART0printf 与printf 相同,因为我之前曾将它用于%u、%s 和%x。但是对于数字,它只支持%c、%i 和%u。我正在重新编写我的代码,如果我没有得到任何地方,我会更新。
更新 2: 我可以做这样的事情吗?我知道它会错误地四舍五入...
uint32_t pui32ADC0Value[1]; // ADC0 data value
uint32_t D0v[2]; // Decimal value
// Read value from ADC
ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value);
// Convert to decimal
for ( int i = 0; i <= 2; i++){
D0v[i] = (pui32ADC0Value[0]/10^i) / 4096 * 3.3;
}
// Display the AIN0 (PE0) digital value on the console.
UART0printf("\n\r> D0 = %d.%d%d V", D0v[0],D0v[1],D0v[2]);
【问题讨论】:
-
什么是
UART0printf?您确定它支持与 C 的printf相同的格式字符串语法吗? -
为什么 uint32_t pui32ADC0Value[1]; ?而不是 uint32_t pui32ADC0Value; ??
-
@Nandu:我会冒险假设ADCSequenceDataGet 需要一个指向
uint32_t的指针,所以uint32_t[1]获得了免费的隐式转换。不过我认为这不是一个好主意。 -
这是来自 ADC 制造商。对 ADCSequenceDataGet 的调用只会得到数组的一个元素,所以我这样定义它。
-
好吧,我撒了谎,原来 UART0printf 与 printf 不同——它只支持 %d %i 和 %u... 这意味着我有一个不同的问题。我会关闭这个。