专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC 16f877 中关于10位AD转换问题
2019-03-25 19:09
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
PIC单片机
12273
8
1606
很奇怪,我转换出来的数字线性度很差,有一直上扬的趋势,我只用到了AD0,时钟是Fosc/32,单片机晶振4M, 为什么我得到的转换结果差这么多,直接加1V电压,转换的结果将近1.5V左右,请问是我哪里没用好?当我用其它Fosc/8时,转换结果更差?搞不明白?? 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
bluejb119
1楼-- · 2019-03-26 00:34
我再在是20ms采一次样,采样等待时间2ms
加载中...
szgaoju
2楼-- · 2019-03-26 05:30
我再在是20ms采一次样,采样等待时间2ms
一般不会轻易怀疑AD的问题,因为从行业上看PIC的片子信誉还是非常高的,呵呵,我以前用过的也不成问题
你用的是时间来使用AD,这可能就出一个问题,你的时间是不是足够长?
如果时间不够,那你的转换可能没有结束,所以,得到的值不正确
你从新写一个小程序,先验证一下你AD的使用方式正确与否
再一个可以看看数据手册,AD的性能能不能满足您的这个速率
如果不行,那只能用片外AD
加载中...
hzq23
3楼-- · 2019-03-26 08:59
我看一手册, 我现在用的是4M, 选择Fosc/32转换频率,那么TAD时间为8us ,转换一次10位,12TAD=96us可以完成,我20ms采样一次应该没问题呀,应该不是时间的问题
加载中...
freeaqi
4楼-- · 2019-03-26 14:07
精彩回答 2 元偷偷看……
加载中...
cinderella_lh
5楼-- · 2019-03-26 19:59
unsigned short ConvertAnalog(char ChannelNo)
{
switch(ChannelNo)
{
case 0:
ADCON0&=0xc7;
break;
case 1:
ADCON0|=0x08 ;
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
break;
}
ADON=1;
DelayUs(50);
ADGO=1;
while(ADGO);
return((unsigned short)((ADRESH&0x03)<<8)|ADRESL);//右对齐
}
还有就是我没用VREF+,和VREF-功能,用的是VDD,和VSS,当这个VDD不是5V,或有些偏差时,是不是会对结果有影响?
加载中...
xliqi2000
6楼-- · 2019-03-26 21:05
ADRESH&0x03 < <8
有点感觉这个不太安全
听说过有直接用VDD做参考源功能部件开启后被拉下来不准的,嘿嘿
最后还是外置一个参考电压吧
呵呵
加载中...
1
2
下一页
一周热门
更多
>
相关问题
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
单片机程序必知的几个寄存器
0个评论
单片机 矩阵式按键
0个评论
51单片机上移植C语言的printf()
0个评论
STC89C52MCU--软件实现系统复位
0个评论
单片机C语言程序该这样写!不是教科书上教的那样!转[]
0个评论
单片机并行I/O口(P0)硬件结构
0个评论
壹:单片机的内部资源
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
一般不会轻易怀疑AD的问题,因为从行业上看PIC的片子信誉还是非常高的,呵呵,我以前用过的也不成问题
你用的是时间来使用AD,这可能就出一个问题,你的时间是不是足够长?
如果时间不够,那你的转换可能没有结束,所以,得到的值不正确
你从新写一个小程序,先验证一下你AD的使用方式正确与否
再一个可以看看数据手册,AD的性能能不能满足您的这个速率
如果不行,那只能用片外AD
{
switch(ChannelNo)
{
case 0:
ADCON0&=0xc7;
break;
case 1:
ADCON0|=0x08 ;
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
break;
}
ADON=1;
DelayUs(50);
ADGO=1;
while(ADGO);
return((unsigned short)((ADRESH&0x03)<<8)|ADRESL);//右对齐
}
还有就是我没用VREF+,和VREF-功能,用的是VDD,和VSS,当这个VDD不是5V,或有些偏差时,是不是会对结果有影响?
有点感觉这个不太安全
听说过有直接用VDD做参考源功能部件开启后被拉下来不准的,嘿嘿
最后还是外置一个参考电压吧
呵呵
一周热门 更多>