[技术问答] 关于新唐N76E003采集热敏电阻AD值

[复制链接]
2394|14
 楼主| aa911 发表于 2019-1-30 18:08 | 显示全部楼层 |阅读模式
本帖最后由 aa911 于 2019-2-14 16:16 编辑

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

  11. void ntc_ADC()
  12. {

  13.         P12 = 0;


  14.         Enable_ADC_AIN7;                //PIN14
  15.    Timer0_Delay1ms(100);
  16.    data1 = GetResult();         
  17.    Timer0_Delay1ms(100);
  18.    data1 = GetResult();         

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


  20. }


QQ截图20190130180347.png
gaoyang9992006 发表于 2019-1-30 19:25 | 显示全部楼层
你确认一下,看看AIN的通道是否使能错误,你图上的跟你代码中的不是同一个啊。
heisexingqisi 发表于 2019-1-30 21:10 | 显示全部楼层
图上是0,代码里是7,另外管脚是哪个?
kongabc 发表于 2019-1-31 11:26 | 显示全部楼层
你的例程怎么跟我的不一样
 楼主| aa911 发表于 2019-2-14 11:04 | 显示全部楼层
gaoyang9992006 发表于 2019-1-30 19:25
你确认一下,看看AIN的通道是否使能错误,你图上的跟你代码中的不是同一个啊。 ...

我跳线到AIN7 了
 楼主| aa911 发表于 2019-2-14 11:05 | 显示全部楼层
heisexingqisi 发表于 2019-1-30 21:10
图上是0,代码里是7,另外管脚是哪个?

实际接到AIN7
 楼主| aa911 发表于 2019-2-14 11:05 | 显示全部楼层
kongabc 发表于 2019-1-31 11:26
你的例程怎么跟我的不一样

我修改过了
小S咯 发表于 2019-2-14 16:49 | 显示全部楼层
Enable_ADC_AIN7;                //PIN14
这句话后面加一个set_ADCS;语句试试
小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试试

 楼主| aa911 发表于 2019-2-14 17:56 | 显示全部楼层
小S咯 发表于 2019-2-14 16:49
Enable_ADC_AIN7;                //PIN14
这句话后面加一个set_ADCS;语句试试

GetResult函数里已经有set_ADCS;
heisexingqisi 发表于 2019-2-14 19:20 | 显示全部楼层
慢慢调试吧,反正我的挺好用的。
 楼主| aa911 发表于 2019-2-15 09:09 | 显示全部楼层
小S咯 发表于 2019-2-14 16:53
void ADC_Init(void)
{
        Enable_ADC_AIN0;

试了,ADval的值打印出来是0,可能是我哪出错了,谢谢你
 楼主| aa911 发表于 2019-2-15 09:52 | 显示全部楼层
aa911 发表于 2019-2-15 09:09
试了,ADval的值打印出来是0,可能是我哪出错了,谢谢你

打印出来的数据,一直波动。
0215.png
 楼主| aa911 发表于 2019-2-15 09:57 | 显示全部楼层
aa911 发表于 2019-2-15 09:52
打印出来的数据,一直波动。

用手捂住热敏电阻,数据没有明显变化。
 楼主| aa911 发表于 2019-2-15 17:23 | 显示全部楼层
数据打印出来是4095,超出了AD的采样范围,这个是为什么呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

69

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0