打印
[国产单片机]

采样值超范围

[复制链接]
1256|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flog|  楼主 | 2013-4-3 22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机f020,
定义数组unsingned int xdata a[1024];存放数据
程序中将每次采样值存入数组中,采样值用右端对齐,
a=adc0&0xfff;
1024个数据采完后用printf("%u",a);观察采样值,有的正常(1V输入对应1600多),有几个值很大,30000多,不知怎么回事啊?
a[i]最大应该不会超过0xfff(4095)啊,怎么会有30000多的值呢,百思不解!

相关帖子

沙发
McuPlayer| | 2013-4-4 09:22 | 只看该作者
1、芯片说型号的时候,别太简化了,首先应该叫被人知道你用的是哪个IC厂家的
2、ADC转换时候,外面有干扰,会导致数据畸形,此时可用数字滤波等方法筛除畸形数据

使用特权

评论回复
板凳
flog|  楼主 | 2013-4-4 22:25 | 只看该作者
单片机型号Silabs-C8051F020,我的这个不能滤波,要分析采样数据的波形。我输入用信号源给的1V2KHZ的方波,要观察采样的波形。大的值出现在应该为0的地方,如果用rintf("%u",a【i】);那些地方就是负数

使用特权

评论回复
地板
McuPlayer| | 2013-4-5 08:36 | 只看该作者
假设你用的是Keil的编译器,假设你用的是unsigned int类型
符号位置,在最高位,即bit15
a[i] = adc0 & 0xfff;
这一条计算后,不可能出现负数,因为符号位被强制置0了

使用特权

评论回复
5
flog|  楼主 | 2013-4-6 19:06 | 只看该作者
这就是我的困惑所在啊!

使用特权

评论回复
6
flog|  楼主 | 2013-4-7 18:55 | 只看该作者
因为以前都是用片内自带的4Kram作为采样数据存储,没出现过这种问题。想是不是我的片外ram的原因,(因为这次连续采样数据较多,且在写如USB前还用了20K缓存,因此加了一片外ram),想问题可能在这里,今天上午将ram设置成低于4K用片内,超出4K范围用片外ram(具体在EMI0CF中设置,以前是EMI0CF=0x3f,今天改成EMI0CF=0x37),以前设置是忽略片内4Kram,全部用片外64Kram。程序其他地方没动,问题竟然没了,虽然具体原因还不太清楚。

使用特权

评论回复
7
McuPlayer| | 2013-4-7 21:27 | 只看该作者
用示波器,观察下,数据线和地址线的setup时间和hold时间

使用特权

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

本版积分规则

4

主题

9

帖子

0

粉丝