打印
[Kinetis]

菜鸟求助,关于K22F评估板AD程序输出问题

[复制链接]
1601|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 nolanpeers 于 2015-10-12 11:33 编辑

各位大神,我用的是FRDM-K22F板子。芯片是MK22FN512VLH12.用的是通道ADC0_SE12,16位。
16位,是不是,2的16次方是65536,则,模拟量精度就是3.3/(2的16次方)=0.05mv

程序如下:
    uint32_t adcValue = 0;               // ADC value

    float result_Value  = 0;            // result

    chnConfig.chnIdx     = (adc16_chn_t)ADC16_CHN;//    ADC16_CHN=kAdc16Chn12 = 12U,选择ADC0_SE12


    // Fetch the conversion value.                        //ADC16_INSTANCE=0, ADC16_CHN_GROUP=0
    adcValue = ADC16_DRV_GetConvValueSigned(ADC16_INSTANCE, ADC16_CHN_GROUP);//得到转换结果,ADC0_Rn

    // Show the current temperature value.
    PRINTF("\r\n ADC converted value: %ld\t", adcValue );

    result_Value = (float)((adcValue)*3.3);

    PRINTF("\r\n AD_value %lf",   resualt_Value  );


为何输出结果得不到浮点数?      结果如下图1,
而我将PRINTF("\r\n AD_value %lf",   resulat_Value  );改成PRINTF("\r\n AD_value %ld",   resulat_Value  );时,结果为如下图2:

请问大神我如何才能输出正确的浮点数?谢谢!

是不是,在读到的ADC0_Rn 乘以精度0.05,也就是 resualt_Value=adcValue*0.05就是最终的结果吗?我用的是3.3V的电压,还是 resualt_Value=adcValue*3.3?

11.bmp (516.55 KB )

图1

图1

12.bmp (282.17 KB )

图2

图2

相关帖子

沙发
FSL_TICS_Jeremy| | 2015-10-12 13:58 | 只看该作者
打不出浮点数,跟MCU是没有关系,跟你使用的IDE有关,你使用的IDE是多少啊?

使用特权

评论回复
板凳
nolanpeers|  楼主 | 2015-10-12 14:07 | 只看该作者
FSL_TICS_Jeremy 发表于 2015-10-12 13:58
打不出浮点数,跟MCU是没有关系,跟你使用的IDE有关,你使用的IDE是多少啊? ...

IDE?我用的开发环境是keil,开发板是FRDM-k22F。之前打印过浮点数,可以打印。但是这个却出不来浮点数

使用特权

评论回复
地板
FSL_TICS_Jeremy| | 2015-10-12 15:08 | 只看该作者
nolanpeers 发表于 2015-10-12 14:07
IDE?我用的开发环境是keil,开发板是FRDM-k22F。之前打印过浮点数,可以打印。但是这个却出不来浮点数 ...

OK, 你可以再debug的时候,看看要打印的浮点数是多少,然后你试试写代码直接打印此浮点数看看,看能否成功打印出来

使用特权

评论回复
5
nolanpeers|  楼主 | 2015-10-12 15:21 | 只看该作者
FSL_TICS_Jeremy 发表于 2015-10-12 15:08
OK, 你可以再debug的时候,看看要打印的浮点数是多少,然后你试试写代码直接打印此浮点数看看,看能否成 ...

我找到了问题,例子里的PRINTF貌似只能打印整形数,改成printf就可以打印了。不过我想问你一下,要想得到最终的转换值是不是直接把读到的ADC0_Rn寄存器中的值乘以3.3就行了?

使用特权

评论回复
6
FSL_TICS_Jeremy| | 2015-10-12 15:35 | 只看该作者
nolanpeers 发表于 2015-10-12 15:21
我找到了问题,例子里的PRINTF貌似只能打印整形数,改成printf就可以打印了。不过我想问你一下,要想得到 ...

你是说用这个值表示温度吗?

使用特权

评论回复
7
nolanpeers|  楼主 | 2015-10-12 16:02 | 只看该作者
本帖最后由 nolanpeers 于 2015-10-12 16:04 编辑
FSL_TICS_Jeremy 发表于 2015-10-12 15:35
你是说用这个值表示温度吗?

对的,我想的是寄存器的值代表的是转换后的,然后乘以3.3是不是就是实际值了,不过在电脑上显示的时候是需要转换后输出到电脑的。我的理解对吗?还是寄存器的值乘以精度0.05?


还有一个问题就是,为什么我在模拟输入脚上什么都不接,就是模拟量没有输入,我直接打印寄存器中的值,为什么出来是负数?

int32_t adcValue = 0;               // ADC value

    // Fetch the conversion value.取寄存器ADC0_rn的值
    adcValue = ADC16_DRV_GetConvValueSigned(ADC16_INSTANCE, ADC16_CHN_GROUP);
    // Show the current temperature value.
    printf("\r\n ADC0_Rn:  %ld\t", adcValue );

11.bmp (243.35 KB )

11.bmp

使用特权

评论回复
8
FSL_TICS_Jeremy| | 2015-10-12 17:20 | 只看该作者
nolanpeers 发表于 2015-10-12 16:02
对的,我想的是寄存器的值代表的是转换后的,然后乘以3.3是不是就是实际值了,不过在电脑上显示的时候是需 ...

采样结果变成温度是需要有个公式,具体可以参考此文档。
AN3031-Temperature Sensor for the HCS08 Microcontroller Family.pdf (134.54 KB)

使用特权

评论回复
9
nolanpeers|  楼主 | 2015-10-12 19:10 | 只看该作者
FSL_TICS_Jeremy 发表于 2015-10-12 17:20
采样结果变成温度是需要有个公式,具体可以参考此文档。

噢,这个呀!采集温度的我知道了。我先在就是自己做了个信号源,想做AD试验。然后用的是SE12通道,我什么都没接,然后寄存器出来的值就是负数了,想我上面的图片显示的,我不知道为啥?是我设计的参数不对,还是什么原因,我找不出来,求救!

使用特权

评论回复
10
李香兰| | 2015-10-12 20:18 | 只看该作者
打印浮点数的话,把浮点数转换成字符串吧

使用特权

评论回复
11
跟屁虫| | 2015-10-12 20:48 | 只看该作者
你单步调试的时候看看你想打印的浮点数和实际打印出的浮点数有什么区别

使用特权

评论回复
12
FSL_TICS_Jeremy| | 2015-10-13 08:34 | 只看该作者
nolanpeers 发表于 2015-10-12 19:10
噢,这个呀!采集温度的我知道了。我先在就是自己做了个信号源,想做AD试验。然后用的是SE12通道,我什么 ...

如果是单端采样的话,没有负数这么一说,采样得到值应在0~65535之间的。

使用特权

评论回复
13
nolanpeers|  楼主 | 2015-10-13 14:36 | 只看该作者
本帖最后由 nolanpeers 于 2015-10-13 14:38 编辑
FSL_TICS_Jeremy 发表于 2015-10-13 08:34
如果是单端采样的话,没有负数这么一说,采样得到值应在0~65535之间的。

可是我这里怎么是负数?F:\11.bmp我就用了SE12一路,16位,什么也没接?我想采集出来的应该是0呢?怎么弄啊?是不是有误差?

11.bmp (373.82 KB )

11.bmp

使用特权

评论回复
14
FSL_TICS_Jeremy| | 2015-10-13 14:53 | 只看该作者
你看参考手册中,关于采样结果的数据形式,你会发现只有选择差分时,才有符号位,换句话讲,负值只会出现在差分模式。

使用特权

评论回复
15
nolanpeers|  楼主 | 2015-10-15 11:19 | 只看该作者
FSL_TICS_Jeremy 发表于 2015-10-13 14:53
你看参考手册中,关于采样结果的数据形式,你会发现只有选择差分时,才有符号位,换句话讲,负值只会出现在 ...

大神,要让你失望了。我没弄出来,还是有负数。你能否给一个设置的例子。用通道SE12,16位单端输入的寄存器配置?谢谢!

使用特权

评论回复
16
FSL_TICS_Jeremy| | 2015-10-15 13:46 | 只看该作者
nolanpeers 发表于 2015-10-15 11:19
大神,要让你失望了。我没弄出来,还是有负数。你能否给一个设置的例子。用通道SE12,16位单端输入的寄存 ...

建议你用KDS+Processor Expert方式,实现图形化编程,选择你希望的ADC采样模式。
使用KDS方法可以参考此贴应用。
https://bbs.21ic.com/icview-844812-1-1.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

80

帖子

0

粉丝