找回密码
 立即注册
查看: 150|回复: 8

ADC不准 | 已解决,ADC的电源打开后要加延时等电源稳定

[复制链接]

该用户从未签到

2

主题

7

回帖

24

积分

新手上路

积分
24
发表于 2024-3-13 11:09:19 来自手机 | 显示全部楼层 |阅读模式
STC8H8K64U,利用BGV1.19V反推VREF+电压,实际3.3V,测量值为4.6V,严重不准。
#define CPUIDBASE 0xfde0
#define VREE_ADDR (*(unsigned int volatile xdata *)(CPUIDBASE+0x07))

unsigned int VCCTest(void){
int BGV;  
    int res;
    int vcc;

    P0M0 = 0x00;
    P0M1 = 0x00;
    P_SW2 |= 0x80;
    BGV = (int)VREE_ADDR;
    ADCTIM = 0x3f;                             
    P_SW2 &= 0x7f;
    ADCCFG = 0x2f;                              
    ADC_CONTR = 0x8f;                           
    ADC_CONTR |= 0x40;                        
    _nop_();
    _nop_();
    while (!(ADC_CONTR & 0x20));               
    ADC_CONTR &= ~0x20;                        
    res = (ADC_RES*256)+ADC_RESL;            
    printf("H=%d  L=%d   res=%d BGV=%d\r\n",(unsigned int)ADC_RES,(unsigned int)ADC_RESL,res,BGV);
    vcc = (int)(4096L * BGV / res);            
    printf("VCC=%d\r\n",vcc);
return vcc;
  
}
回复 送花

使用道具 举报

该用户从未签到

46

主题

2934

回帖

6617

积分

超级版主

积分
6617
发表于 2024-3-13 11:39:49 | 显示全部楼层

STC的12位ADC的精度是12.5bit,帧的能秒杀很多厂家的12位ADC。

你的VREF接到哪里?
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 97 天

    [LV.6]常住居民II

    9

    主题

    556

    回帖

    817

    积分

    高级会员

    积分
    817
    发表于 2024-3-13 11:51:15 | 显示全部楼层
    不至于差这么多吧。
    BGV、ADC_RES和ADC_RESL分别是多少啊?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    回帖

    24

    积分

    新手上路

    积分
    24
     楼主| 发表于 2024-3-13 11:55:12 来自手机 | 显示全部楼层
    21cnsound 发表于 2024-3-13 11:51
    不至于差这么多吧。
    BGV、ADC_RES和ADC_RESL分别是多少啊?

    原因找到了,ADC上电没有延时
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    回帖

    24

    积分

    新手上路

    积分
    24
     楼主| 发表于 2024-3-13 11:56:42 来自手机 | 显示全部楼层
    但是测P1.0电压还是不准,差0.3V
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    回帖

    24

    积分

    新手上路

    积分
    24
     楼主| 发表于 2024-3-13 12:00:51 来自手机 | 显示全部楼层
    int vin;
    #define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)
    P1M0 = 0x00;                                //ÉèÖÃP1.0ΪADC¿Ú
    P1M1 = 0x01;
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //ÉèÖÃADCÄÚ²¿Ê±Ðò
    P_SW2 &= 0x7f;
    ADCCFG = 0x2f;                              //ÉèÖÃADCʱÖÓΪϵͳʱÖÓ/2/16
    ADC_CONTR = 0x80;
    delay(10);                       //ADCÉϵ粢ÑÓʱ,ʹÄÜADCÄ£¿é
                            
    ADC_CONTR |= 0x40;                      //Æô¶¯ADת»»
    _nop_();
    _nop_();
    while (!(ADC_CONTR & 0x20));            //²éѯADCÍê³É±êÖ¾
    ADC_CONTR &= ~0x20;                     //ÇåÍê³É±êÖ¾
    //ADCCFG = 0x20; //ÉèÖýá¹ûÓÒ¶ÔÆë
    vin=(int)((ADC_RES*256+ADC_RESL)/4096.00*330*2);        //Result=256*Vin/Vcc;                 //·µ»ØADC½á¹û
    battle_val=(int)vin;
    printf("H=%d  L=%d\r\n",(unsigned int)ADC_RES,(unsigned int)ADC_RESL);
    printf("µç³Øµçѹ=%dV\n",(int)vin);
    ADC_CONTR=0;                     //ÇåÍê³É±êÖ¾
    if(vin<450) return 0;
    if(vin<500) return 1;
    //VCCTest();
    return 2;
    测P1.0电压,始终小个0.15V左右
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    1 小时前
  • 签到天数: 61 天

    [LV.6]常住居民II

    3

    主题

    555

    回帖

    758

    积分

    高级会员

    积分
    758
    发表于 2024-3-13 12:02:59 | 显示全部楼层
    学习下
    回复 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    回帖

    24

    积分

    新手上路

    积分
    24
     楼主| 发表于 2024-3-13 12:04:02 来自手机 | 显示全部楼层
    int vin;
    #define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)
    P1M0 = 0x00;   
    P1M1 = 0x01;
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;         
    P_SW2 &= 0x7f;
    ADCCFG = 0x2f;                  
    ADC_CONTR = 0x80;
    delay(10);                    
                           
    ADC_CONTR |= 0x40;                  
    _nop_();
    _nop_();
    while (!(ADC_CONTR & 0x20));           
    ADC_CONTR &= ~0x20;                    
    //ADCCFG = 0x20;
    vin=(int)((ADC_RES*256+ADC_RESL)/4096.00*330*2);       
    battle_val=(int)vin;
    printf("H=%d  L=%d\r\n",(unsigned int)ADC_RES,(unsigned int)ADC_RESL);
    printf("µç³Øµçѹ=%dV\n",(int)vin);
    ADC_CONTR=0;      
    if(vin<450) return 0;
    if(vin<500) return 1;
    return 2;
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 156 天

    [LV.7]常住居民III

    5

    主题

    73

    回帖

    827

    积分

    高级会员

    积分
    827
    发表于 2024-4-14 10:00:24 | 显示全部楼层
    你的电源可能不干净,可以用一个压定稳好的LDO稳压块接上去,这样一般都会很准。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-5 11:04 , Processed in 0.093763 second(s), 60 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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