打印
[PIC®/AVR®/dsPIC®产品]

PIC18F25K22的AD转换……

[复制链接]
1681|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Pace、|  楼主 | 2016-12-7 18:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Pace、 于 2016-12-12 00:02 编辑

电路是10K+10k(在常温下)的热敏电阻,返回的是ADRES寄存器的数据,在2.6V以下检测出来的数据都是好的,2.6V以上ADRES寄存器里的数据就开始乱了,,,,,,
沙发
JY-DX-JY| | 2016-12-9 17:16 | 只看该作者
检查参考源电压

使用特权

评论回复
板凳
GeekyGeek| | 2016-12-9 22:21 | 只看该作者
感觉不太像是参考电压的问题,
如果是参考电压有问题,2.6V以下,数据应该也有问题。

从现象来看,我怀疑是AD的设置有问题,感觉像是采样时间不够,就是从AD启动采样到数据准备好的这个采样时间。
这个时间是可以配置的,你可以设置到最大试试。

2.6V以上,电压高些,采样时间要多些,而你的设置偏少,造成采样不充分。所以数据有问题。

以上是我的推断,请酌情参考。你说数据开始乱了, 但没有讲清楚怎么个乱法,所以无法确定。

使用特权

评论回复
地板
XIEYUANBIN| | 2016-12-10 13:28 | 只看该作者
单片机AD口的数字输入没有关掉吧,

使用特权

评论回复
5
Pace、|  楼主 | 2016-12-11 10:27 | 只看该作者
XIEYUANBIN 发表于 2016-12-10 13:28
单片机AD口的数字输入没有关掉吧,

关掉了啊……

使用特权

评论回复
6
Pace、|  楼主 | 2016-12-11 10:37 | 只看该作者
GeekyGeek 发表于 2016-12-9 22:21
感觉不太像是参考电压的问题,
如果是参考电压有问题,2.6V以下,数据应该也有问题。

尝试了你的方法,把采样时间调到最大,但还是不行。数据在2.5V以上还是会乱。(ps:5V的参考电压,通过串口把'个''十''百'‘千’这四个数分别打印出来,在ADRES寄存器里得到的结果在510以下都是正确的,但超过510以后‘千’‘百’‘十’‘个’这四位数据都变成了和'ff'大小相当的数据)

使用特权

评论回复
7
GeekyGeek| | 2016-12-11 11:44 | 只看该作者
Pace、 发表于 2016-12-11 10:37
尝试了你的方法,把采样时间调到最大,但还是不行。数据在2.5V以上还是会乱。(ps:5V的参考电压,通过串 ...

程序问题?
你怎么串口怎么打印的?
贴出代码看看

使用特权

评论回复
8
Pace、|  楼主 | 2016-12-11 14:08 | 只看该作者
int convert()
{
        num++;
        int result;
        ADCON0bits.CHS=0x01;  
        GO_DONE=1;
        while(GO_DONE==1);
//        result=ADRESH;  
//        result= (result<<8)|ADRESL;
//        return (result>>6);
        return ADRES>>6;        
}

while(1)
        {       
                aver=convert();
                //shownum(aver,aver);
                if(num==20)
                {       
                        num=0;
                        TXREG=(aver/1000);
                        while(TRMT1==0);
                        TXREG=(aver/100%10);
                        while(TRMT1==0);
                        TXREG=(aver/10%10);
                        while(TRMT1==0);
                        TXREG=(aver%10);
                        while(TRMT1==0);
                        TXREG='\n';
                        while(TRMT1==0);
                }       
                delay_ms(1000);
        }
在int convert()函数里,被隐掉的那几行代码那样写不行吗????

使用特权

评论回复
9
Pace、|  楼主 | 2016-12-11 14:09 | 只看该作者
int convert()
{
        int result;
        ADCON0bits.CHS=0x01;  
        GO_DONE=1;
        while(GO_DONE==1);
//        result=ADRESH;  
//        result= (result<<8)|ADRESL;
//        return (result>>6);
        return ADRES>>6;        
}

while(1)
        {       
                aver=convert();
                //shownum(aver,aver);
                if(num==20)
                {       
                        num=0;
                        TXREG=(aver/1000);
                        while(TRMT1==0);
                        TXREG=(aver/100%10);
                        while(TRMT1==0);
                        TXREG=(aver/10%10);
                        while(TRMT1==0);
                        TXREG=(aver%10);
                        while(TRMT1==0);
                        TXREG='\n';
                        while(TRMT1==0);
                }       
                delay_ms(1000);
        }
在int convert()函数里,被引掉的那几行代码那样写不行吗????

使用特权

评论回复
10
Pace、|  楼主 | 2016-12-11 14:11 | 只看该作者
GeekyGeek 发表于 2016-12-11 11:44
程序问题?
你怎么串口怎么打印的?
贴出代码看看

贴出来了,问题是解决了 但不知道为什么那样写不行????

使用特权

评论回复
11
GeekyGeek| | 2016-12-12 12:47 | 只看该作者
你将result的数据类型改成unsigned int试试

使用特权

评论回复
12
Saefra| | 2016-12-12 13:41 | 只看该作者
能分享一下怎么解决的吗

使用特权

评论回复
13
Pace、|  楼主 | 2016-12-13 09:29 | 只看该作者
GeekyGeek 发表于 2016-12-12 12:47
你将result的数据类型改成unsigned int试试

懂了……大神

使用特权

评论回复
14
Pace、|  楼主 | 2016-12-13 09:51 | 只看该作者
Saefra 发表于 2016-12-12 13:41
能分享一下怎么解决的吗

int类型解析格式问题。。。。int类型占4个字节也就是32位,最大可以赋值为:2147483647。也就是0x7fffffff。在ADRESH里的数据赋值给result(int类型,不是unsigned int)然后左移8位,则ADRESH里的数据必须小于0xff,否则高位置1,就被解析成负数了。。。。。解决方法就是把定义一个无符号int 类型的变量保存这个数据。。。。。

使用特权

评论回复
15
Pace、|  楼主 | 2016-12-13 16:06 | 只看该作者
Pace、 发表于 2016-12-13 09:51
int类型解析格式问题。。。。int类型占4个字节也就是32位,最大可以赋值为:2147483647。也就是0x7ffffff ...

定义成 long类型 这样就不会溢出,PICC18编译器编译int类型的数据分配两个两个字节的空间。。。

使用特权

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

本版积分规则

个人签名:见此葫芦如见本人。。。。

6

主题

34

帖子

0

粉丝