打印
[技术问答]

关于新唐N76E003采集热敏电阻AD值

[复制链接]
1915|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aa911|  楼主 | 2019-1-30 18:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 aa911 于 2019-2-14 16:16 编辑

如题,看了新唐的ADC_Simple,但是得不到热敏电阻AD值,附上原理图,以及代码。原理图AIN0改为AIN7。PIN14(AIN7)是不是要改成输入模式呢?各位帮忙分析一下,谢谢了!
unsigned long GetResult(void)
{
        clr_ADCF;
        set_ADCS;
        while(ADCF == 0);
        temp_H=ADCRH;
        temp_L=ADCRL;
        ADCtemp=((temp_H<<4)|(temp_L&0x0F));
        return ADCtemp;
}

void ntc_ADC()
{

        P12 = 0;


        Enable_ADC_AIN7;                //PIN14
   Timer0_Delay1ms(100);
   data1 = GetResult();         
   Timer0_Delay1ms(100);
   data1 = GetResult();         

   printf ("\n ntc = %d", data1);


}


QQ截图20190130180347.png (20.13 KB )

QQ截图20190130180347.png
沙发
gaoyang9992006| | 2019-1-30 19:25 | 只看该作者
你确认一下,看看AIN的通道是否使能错误,你图上的跟你代码中的不是同一个啊。

使用特权

评论回复
板凳
heisexingqisi| | 2019-1-30 21:10 | 只看该作者
图上是0,代码里是7,另外管脚是哪个?

使用特权

评论回复
地板
kongabc| | 2019-1-31 11:26 | 只看该作者
你的例程怎么跟我的不一样

使用特权

评论回复
5
aa911|  楼主 | 2019-2-14 11:04 | 只看该作者
gaoyang9992006 发表于 2019-1-30 19:25
你确认一下,看看AIN的通道是否使能错误,你图上的跟你代码中的不是同一个啊。 ...

我跳线到AIN7 了

使用特权

评论回复
6
aa911|  楼主 | 2019-2-14 11:05 | 只看该作者
heisexingqisi 发表于 2019-1-30 21:10
图上是0,代码里是7,另外管脚是哪个?

实际接到AIN7

使用特权

评论回复
7
aa911|  楼主 | 2019-2-14 11:05 | 只看该作者
kongabc 发表于 2019-1-31 11:26
你的例程怎么跟我的不一样

我修改过了

使用特权

评论回复
8
小S咯| | 2019-2-14 16:49 | 只看该作者
Enable_ADC_AIN7;                //PIN14
这句话后面加一个set_ADCS;语句试试

使用特权

评论回复
9
小S咯| | 2019-2-14 16:53 | 只看该作者
void ADC_Init(void)
{
        Enable_ADC_AIN0;
        set_ADCS;
}


/*****************************************
*ÊäÈë ÎÞ
*Êä³ö ·µ»ØÒ»¸öADÖµ
*¹¦ÄÜ »ñÈ¡ADת»»µÄÖµ    ADCRHÕ¼8λ(4-11) ADCRLÕ¼4λ(0-3)
*******************************************/
static void ADC_Getval(void)
{
        u8 i,j;
        u16 val[5],temp;
        for(i=0;i<5;i++)
        {
    set_ADCS;
                if( ADCF==1 ){
                        val=(ADCRH*8+ADCRL);//µçѹ·Å´ó10±¶
                        clr_ADCF;
                }        
                _nop_();//ÑÓ³Ù1us  µÈ´ýADת»»½áÊø
        }
        //ÅÅÐò   È¡ÖмäÖµ
        for(i=0;i<5;i++){
                for(j=0;j<5-i-1;j++){
                        if(val>val[i+1]){
                                temp=val;
                                val=val[i+1];
                                val[i+1]=temp;
                        }
                }
        }
        ADval=val[2];
}


/*****************************************
*ÊäÈë ÎÞ
*Êä³ö ·µ»ØÒ»¸öADÖµ
*¹¦ÄÜ »ñÈ¡ADת»»µÄÖµ
*******************************************/
u16 Read_ADC(void)
{
        if(ad_tim>160){
                ad_tim=1;
                ADC_Getval();
        }
        return ADval;
}
ad_tim是定时器里自加的变量
这是我的代码,你改成7试试

使用特权

评论回复
10
aa911|  楼主 | 2019-2-14 17:56 | 只看该作者
小S咯 发表于 2019-2-14 16:49
Enable_ADC_AIN7;                //PIN14
这句话后面加一个set_ADCS;语句试试

GetResult函数里已经有set_ADCS;

使用特权

评论回复
11
heisexingqisi| | 2019-2-14 19:20 | 只看该作者
慢慢调试吧,反正我的挺好用的。

使用特权

评论回复
12
aa911|  楼主 | 2019-2-15 09:09 | 只看该作者
小S咯 发表于 2019-2-14 16:53
void ADC_Init(void)
{
        Enable_ADC_AIN0;

试了,ADval的值打印出来是0,可能是我哪出错了,谢谢你

使用特权

评论回复
13
aa911|  楼主 | 2019-2-15 09:52 | 只看该作者
aa911 发表于 2019-2-15 09:09
试了,ADval的值打印出来是0,可能是我哪出错了,谢谢你

打印出来的数据,一直波动。

0215.png (166.98 KB )

0215.png

使用特权

评论回复
14
aa911|  楼主 | 2019-2-15 09:57 | 只看该作者
aa911 发表于 2019-2-15 09:52
打印出来的数据,一直波动。

用手捂住热敏电阻,数据没有明显变化。

使用特权

评论回复
15
aa911|  楼主 | 2019-2-15 17:23 | 只看该作者
数据打印出来是4095,超出了AD的采样范围,这个是为什么呢?

使用特权

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

本版积分规则

13

主题

69

帖子

0

粉丝