找回密码
 立即注册
查看: 296|回复: 5

STC8G2K64S4的10路AD采样,两种不同的代码,总有一路AD采样值不对且始终为零

[复制链接]

该用户从未签到

13

主题

40

回帖

194

积分

注册会员

积分
194
发表于 2023-7-25 11:21:11 | 显示全部楼层 |阅读模式
问题如下,两种不同的代码,每次都有固定的一路采样的AD值为零,但为零的如果单独采样则值是正确的
代码一如下,其问题是 ADC_N_L1采集的AD值始终为零,其实这个口的外部电压为电源电压一半,单独采样则AD是512

void ADC_ISR() interrupt 5
{        
        ADC_CONTR &=~ADC_FLAG;        //清除中断         

    if(AD_conver_ii == 0)
    {
                    ADC_ref_avg= (ADC_RES<<8)|ADC_RESL;
                        Ref_flg =1;  
                         ADC_CONTR = ADC_SELECTCHS0;
        }
    else        if(AD_conver_ii == 1)
    {
                    ADC_TEST= (ADC_RES<<8)|ADC_RESL;   
                        DC5v_flg =1;
                         ADC_CONTR = ADC_SELECTCHS1;
        }
    else        if(AD_conver_ii == 2)
    {
                    ADC_N_L1= (ADC_RES<<8)|ADC_RESL;   
                        L1N_flg =1;
                         ADC_CONTR = ADC_SELECTCHS2;
        }
    else        if(AD_conver_ii == 3)
    {
                    ADC_L1_L2 = (ADC_RES<<8)|ADC_RESL;  
                        L1L2_flg =1;
                         ADC_CONTR = ADC_SELECTCHS3;
        }
    else        if(AD_conver_ii == 4)
    {
                    ADC_L1_L3= (ADC_RES<<8)|ADC_RESL;  
                        L1L3_flg =1;
                         ADC_CONTR = ADC_SELECTCHS4;
        }
    else        if(AD_conver_ii == 5)
    {
                    ADC_BAT_V = (ADC_RES<<8)|ADC_RESL;  
                        Bat_v_flg =1;// 电池电压
                         ADC_CONTR = ADC_SELECTCHS5;
        }  
    else if(AD_conver_ii == 6)
    {         
                         ADC_BAT_I =(ADC_RES<<8)|ADC_RESL;  
                        Bat_i_flg =0;// 充电电流  
                         ADC_CONTR = ADC_SELECTCHS6;
        }
        else if(AD_conver_ii == 7)  
        {  
                        ADC_BUS=(ADC_RES<<8)|ADC_RESL;
                        Vbus_flg =1;//        母线电压
                        ADC_CONTR = ADC_SELECTCHS7;
        }
        else if(AD_conver_ii == 8)  
        {
                        ADC_AC_OUT=(ADC_RES<<8)|ADC_RESL;
                        Inv_v_out =1;//        逆变电压
                        ADC_CONTR = ADC_SELECTCHS13;
        }
        else  
        {        
                ADC_AC_I_OUT=(ADC_RES<<8)|ADC_RESL;
                Inv_i_out =1;//  逆变电流   
                AD_finish =1;  
                ADC_CONTR = ADC_SELECTINNER;
        }

   AD_conver_ii =(AD_conver_ii +1)%10;

}


代码二问题是采集的芯片的内部参考信号源1.91V的AD值始终为零

void ADC_ISR() interrupt 5
{        
        ADC_CONTR &=~0x20;        //清除中断         
    if(AD_conver_ii == 0)
    {
          ADC_BUS=(ADC_RES<<8)|ADC_RESL; //P16
      Vbus_flg =1;//        母线电压
          ADC_CONTR = 0xc7;
        }
    else if(AD_conver_ii == 1)
    {  
                ADC_AC_OUT=(ADC_RES<<8)|ADC_RESL;
                Inv_v_out =1;//        逆变电压
                 ADC_CONTR = 0xc1;
        }
    else if(AD_conver_ii == 2)
    {
            AD_L1N= (ADC_RES<<8)|ADC_RESL;   
                L1N_flg =1;
                 ADC_CONTR = 0xc2;
        }
    else if(AD_conver_ii == 3)
    {
            ADC_L1_L2 = (ADC_RES<<8)|ADC_RESL;  
                L1L2_flg =1;
                 ADC_CONTR = 0xc3;
        }
    else if(AD_conver_ii == 4)
    {
            ADC_L1_L3= (ADC_RES<<8)|ADC_RESL;  
                L1L3_flg =1;
                 ADC_CONTR = 0xc4;
        }
    else if(AD_conver_ii == 5)
    {
            ADC_BAT_V = (ADC_RES<<8)|ADC_RESL;  
                Bat_v_flg =1;// 电池电压
                 ADC_CONTR = 0xc5;
        }  
    else if(AD_conver_ii == 6)
    {         
                ADC_BAT_I =(ADC_RES<<8)|ADC_RESL;  
                Bat_i_flg =0;// 充电电流  
                 ADC_CONTR = 0xc0;
        }
        else if(AD_conver_ii == 7)  
        {  
                ADC_TEST= (ADC_RES<<8)|ADC_RESL;   
                DC5v_flg =1;
                ADC_CONTR = 0xcf;
        }
        else if(AD_conver_ii == 8)  
        {
                ADC_ref_avg= (ADC_RES<<8)|ADC_RESL;
                Ref_flg =1;
                ADC_CONTR = 0xcd;
        }
        else  
        {        
                ADC_AC_I_OUT=(ADC_RES<<8)|ADC_RESL;
                Inv_i_out =1;//  逆变电流   
                AD_finish =1;  
                ADC_CONTR = 0xc6;
        }

   AD_conver_ii =(AD_conver_ii +1)%10;

}


AD采取右对齐且MCU的时钟是30MHZ  AD基本配置如下

           ADCCFG = 0x00;  
        EAXSFR();        
        ADCTIM = 0xCF;           
        EAXRAM();  
        ADCCFG = 0x20;//右对齐  


        ADC_CONTR = ADC_POWER | AD_INNER;
         Delay_T3_nms(100);
         ADC_CONTR = ADC_POWER |ADC_START| AD_INNER;//先启动内部信号参考源1.91V   
        EADC=1;

谢谢!

回复 送花

使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:59
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2023-7-25 13:08:04 | 显示全部楼层
    用附件的例程试试

    16路ADC中断轮询采样-串口1返回结果.zip

    8.99 KB, 下载次数: 25

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    13

    主题

    40

    回帖

    194

    积分

    注册会员

    积分
    194
     楼主| 发表于 2023-7-25 14:07:55 | 显示全部楼层

    收到 谢谢
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    13

    主题

    40

    回帖

    194

    积分

    注册会员

    积分
    194
     楼主| 发表于 2023-7-25 14:43:52 | 显示全部楼层

    这个例子是可以的,为什么P1.2没有设置成高阻输入却是AD口?上电复位就是高阻输入?
    为什么我的例子却不可以 谢谢!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:59
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2023-7-25 19:06:36 | 显示全部楼层
    Inver1688 发表于 2023-7-25 14:43
    这个例子是可以的,为什么P1.2没有设置成高阻输入却是AD口?上电复位就是高阻输入?
    为什么我的例子却不 ...

    STC8系列开始,IO口除了P3.0,P3.1外,其它上电默认都是高阻输入模式。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    13

    主题

    40

    回帖

    194

    积分

    注册会员

    积分
    194
     楼主| 发表于 2023-7-26 14:30:16 | 显示全部楼层
    乘风飞扬 发表于 2023-7-25 19:06
    STC8系列开始,IO口除了P3.0,P3.1外,其它上电默认都是高阻输入模式。

    谢谢
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 21:42 , Processed in 0.066007 second(s), 52 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表