ad采样值超范围

goodperson 2013-04-03 10:14:24
单片机f020,
定义数组unsingned int xdata a[1024];存放数据
程序中将每次采样值存入数组中,采样值用右端对齐,
a=adc0&0xfff;
1024个数据采完后用printf("%u",a);观察采样值,有的正常(1V输入对应1600多),有几个值很大,30000多,不知怎么回事啊?
a[i]最大应该不会超过0xfff(4095)啊,怎么会有30000多的值呢,百思不解!
...全文
747 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodperson 2013-04-08
  • 打赏
  • 举报
回复
(具体在EMI0CF中设置,以前是EMI0CF=0x3f,今天改成EMI0CF=0x37)问题已经解决,但不知是什么原因,为什么全用外部64Kram不行,非要低4K用内部
goodperson 2013-04-08
  • 打赏
  • 举报
回复
1. 确认AD采样是否正常?正常 2. 确认单片机的RAM空间大小,是否够分配定义的数组大小(外加64K够了) 3 printf("%u",a); ‘a’是个数组名,打印的是个地址值,这地方敲错了,a[i]
ymm198606 2013-04-08
  • 打赏
  • 举报
回复
1. 确认AD采样是否正常? 2. 确认单片机的RAM空间大小,是否够分配定义的数组大小 3 printf("%u",a); ‘a’是个数组名,打印的是个地址值
lf_kyo 2013-04-07
  • 打赏
  • 举报
回复
如果每次存入数组的数据都有 a=adc0&0xfff;操作,那数组中的数据不可能大于4095。 你的程序是否有问题? 不知道f020是什么单片机,unsingned int xdata a[1024] 这个要申请1024*4=4096Byte的RAM,硬件资源够么? 改用unsingned short xdata a[100]试试?
goodperson 2013-04-07
  • 打赏
  • 举报
回复
因为以前都是用片内自带的4Kram作为采样数据存储,没出现过这种问题。想是不是我的片外ram的原因,(因为这次连续采样数据较多,且在写如USB前还用了20K缓存,因此加了一片外ram),想问题可能在这里,今天上午将ram设置成低于4K用片内,超出4K范围用片外ram(具体在EMI0CF中设置,以前是EMI0CF=0x3f,今天改成EMI0CF=0x37),以前设置是忽略片内4Kram,全部用片外64Kram。程序其他地方没动,问题竟然没了,虽然具体原因还不太清楚。
Kwolve 2013-04-06
  • 打赏
  • 举报
回复
转换前先将数据清0,然后在转换,转换失败或者超时的时候强制赋值0xFFF或者是0/
goodperson 2013-04-06
  • 打赏
  • 举报
回复
,如果用printf("%d",a[i]);那些大数字的位置就是负值,不知何解?
Dson2020 2013-04-05
  • 打赏
  • 举报
回复
应该看看是否溢出了
lbing7 2013-04-04
  • 打赏
  • 举报
回复
如果是溢出的话,那查一下看ADC允许接负的参考电压么?
goodperson 2013-04-04
  • 打赏
  • 举报
回复
操作没问题,按照例程,用定时器3定时采样产生中断,每次数据存入数组,到1024停止采样显示,发现有的数据很大(32768?40000多的都有),如果用printf("%u",a[i]);那些大数字的位置就是负值,不知何解?
dceacho 2013-04-04
  • 打赏
  • 举报
回复
32768?
net_friends 2013-04-04
  • 打赏
  • 举报
回复
操作有问题哦

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧