找回密码
 立即注册
查看: 878|回复: 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;
  
}
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

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

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 08:15:40
已绑定手机

13

主题

1257

回帖

2975

积分

金牌会员

积分
2975
发表于 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左右
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3190

回帖

4870

积分

论坛元老

积分
4870
发表于 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;
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-02 10:38:54

9

主题

193

回帖

556

积分

高级会员

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 14:59 , Processed in 0.123984 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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