我在写“第48讲 DAC数模转换实验-M3”程序的时候,用的串口输出数据,其中DAC为DAC输出值,DAC VAL为计算电压值, ADC VAL为ADC检测电压值。
但是在DAC等于2600和3800的时候出现了奇怪的数据,2600的时候电压达到2.9V,3800的时候达到3.6V。最高不是3.3V吗?怎么会出现这种情况呢?
另外发现好像
没作用?求助各位大佬解答~
下面是main函数里while循环的代码:
u8 KEY=0;
u16 vol=0;
u8 t=0;
u16 adcx,n,m;
float tmp;
while(1)
{
t++;
KEY=KEY_Scan(0);
if(KEY==KEY0_P)
{
if(vol<4000)
{
vol+=200;
}
DAC_SetChannel1Data(DAC_Align_12b_R, vol);
}
if(KEY==KEY1_P)
{
if(vol>=200)
{
vol-=200;
}
DAC_SetChannel1Data(DAC_Align_12b_R, vol);
}
if(t==100||(KEY==KEY0_P)||(KEY==KEY1_P))
{
printf("1111
");
adcx=DAC_GetDataOutputValue(DAC_Channel_1);
printf("DAC : %d
",adcx);
tmp=(float)adcx*(3.3/4096);
n=tmp;
tmp-=n;
tmp*=1000;
printf("DAC VAL: %d.%d
",n,(int)tmp);
adcx=Get_Average();
tmp=(float)adcx*(3.3/4096);
n=tmp;
m=(tmp-n)*1000;
printf("ADC VAL: %d.%d
",n,m);
t=0;
LED0=!LED0;
}
delay_ms(100);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
tmp=(float)adcx*(3.3/4096);
n=tmp;
tmp-=n;
tmp*=1000;
printf("DAC VAL: %d.%d ",n,(int)tmp);
这个算法是错的, 就拿3800来举例吧, 当adcx=3800时, tem= 3.0615..., 而tmp*=1000;之后, tmp=61, 但你应该打印出来的是3.061, 现在的方式打印出来的是3.61, “0”被偷走了?
建议你搜一下 printf的格式学习一下, 它是可以直接打印指定小数位的浮点小数, 不需要这样转换的, 直接用printf("DAC VAL: %.3f ",tmp) 即可
一周热门 更多>