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

PIC18F85 AD转换问题

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

如题,单步走的时候,取值是准确度;全速的时候取出的值一直是 512 自己的想法测试在下面代码后面的注释:(具体是什么问题造成的呢?望指点)
void ADC_Initialize(void)         //初始化AD
{
    TRISF2 = 1;                       //Pin:RF2/AN7,设置成输入
    ADCON0 = 0x1d;              //enable adc 0x1d AN7通道
    ADCON1 = 0x00;              //参考电压AVss-AVDD (对后4位PCFG不理解不懂)
    ADCON2 = 0x21;              //0b00100001  0x21left: 左对齐,A/D 采集时间8 个 TAD,A/D 转换时钟FOSC/8;
}

uint16_t Get_ADValue(void)
{
    uint16_t temp = 0;
    //ADC_Initialize();               //之前看见有帖子说,每次转换之前初始化一次,结果好像有没有都没什么关系,至少于我的这个问题无用
    Delay_Nop(200);               //等待所要求的采集时间,循环200个Nop,这里可以不要么?也不知道具体要等多久
    Nop();
    ADCON0|=0x03;              // 主要是GO/DONE位置 1,启动转换
    while(ADCON0 & 0X02) Nop();     //等待转换完成

        temp = ADRESH;                //值取出来
        temp = (temp<<2);
        temp = (temp | (ADRESL&0x03));
        return temp;
}


沙发
JY-DX-JY| | 2016-12-12 14:47 | 只看该作者
是不是延时不够?

使用特权

评论回复
板凳
Saefra|  楼主 | 2016-12-12 17:09 | 只看该作者
JY-DX-JY 发表于 2016-12-12 14:47
是不是延时不够?

应该不是的,加延时后还是不行的。如下:
uint16_t Get_ADValue(void)
{
    uint16_t temp = 0;
    ADC_Initialize();
    Delay_Ms(3);
    Delay_Nop(200);
    Nop();
    ADCON0|=0x03;//&=~0X3C;
    while(ADCON0 & 0X02) Nop();
   
        temp = ADRESH;
        temp = (temp<<2);
        temp = (temp | (ADRESL&0x03));
        return temp;
}

使用特权

评论回复
地板
Saefra|  楼主 | 2016-12-12 17:11 | 只看该作者
有大神最近在活动吗?帮手看看呗~

使用特权

评论回复
5
Saefra|  楼主 | 2016-12-14 10:23 | 只看该作者
有木有推荐的大神啊?艾特一下呀~~~

使用特权

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

本版积分规则

3

主题

20

帖子

0

粉丝