找回密码
 立即注册
查看: 479|回复: 15

STC8G1K08A 用P55 ADC采集数据问题

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-01-29 13:40:57
已绑定手机

10

主题

29

回帖

146

积分

注册会员

积分
146
发表于 2025-12-13 20:36:05 | 显示全部楼层 |阅读模式
用 STC8G1K08A 用P55  ADC采集数据问题:
采集到数据跟理论值对不上,不知道啥原因,有碰到过类似问题吗?
实际电压是2.5V   采到数据如图:串口和逻辑分析仪一样,理论是0-5V   对应0-1024

但是我采集到的数据是十进制 33280 ;

十六进制0x82 0x00 ,4.92V电压到P55  显示十进制 46976     十六进值0xB7  0x80

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-01-29 13:40:57
已绑定手机

10

主题

29

回帖

146

积分

注册会员

积分
146
发表于 2025-12-13 20:37:12 | 显示全部楼层
截图202512132036585234.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-01-29 13:40:57
已绑定手机

10

主题

29

回帖

146

积分

注册会员

积分
146
发表于 2025-12-13 20:38:48 | 显示全部楼层
截图202512132038409738.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-01-29 13:40:57
已绑定手机

10

主题

29

回帖

146

积分

注册会员

积分
146
发表于 2025-12-13 20:40:15 | 显示全部楼层
截图202512132040119614.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-01-29 13:40:57
已绑定手机

10

主题

29

回帖

146

积分

注册会员

积分
146
发表于 2025-12-13 20:41:42 | 显示全部楼层
截图202512132041382029.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-01-29 13:40:57
已绑定手机

10

主题

29

回帖

146

积分

注册会员

积分
146
发表于 2025-12-13 20:42:36 | 显示全部楼层
截图202512132042337544.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:82
  • 最近打卡:2026-03-20 20:44:49
已绑定手机

4

主题

222

回帖

818

积分

高级会员

积分
818
发表于 2025-12-14 08:44:41 | 显示全部楼层
检查ADC初始化代码,看是左对齐还是右对齐。
检查ADC获取结果的代码,看有没有移位、乘系数的处理。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:616
  • 最近打卡:2026-03-21 07:41:25

30

主题

141

回帖

687

积分

高级会员

积分
687
发表于 2025-12-14 10:45:08 | 显示全部楼层
还有看看vref 是多少
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:724
  • 最近打卡:2026-03-18 07:56:47
已绑定手机

97

主题

7244

回帖

1万

积分

超级版主

积分
13791
发表于 2025-12-14 11:20:52 | 显示全部楼层
数据超出范围可能是对齐格式设置错误

截图202512141118172692.jpg

ADC结果直接拼接两个字节可以设置为右对齐,参考程序如下:
  1. ADCCFG=ADC_RESFMT;                //设置ADC转换结果右对齐,设置ADC时钟
  2.         ADC_CONTR=ADC_POWER;        //使能ADC
  3.         ADC_CONTR|=5;                        //设置ADC通道为ADC5
  4.         ADC_CONTR|=ADC_START;        //启动ADC
  5.         EADC=1;                                        //使能ADC中断
  6.         EA=1;                                        //使能总中断
  7. void ADC_Isr(void) interrupt 5
  8. {
  9.         ADC_CONTR&=~ADC_FLAG;
  10.         ADC_Value=ADC_RES;
  11.         ADC_Value<<=8;
  12.         ADC_Value|=ADC_RESL;
  13.         ADC_CONTR|=ADC_START;
  14. }
复制代码


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2026-01-29 13:40:57
已绑定手机

10

主题

29

回帖

146

积分

注册会员

积分
146
发表于 2025-12-14 15:04:14 | 显示全部楼层
lcws*** 发表于 2025-12-14 08:44
检查ADC初始化代码,看是左对齐还是右对齐。
检查ADC获取结果的代码,看有没有移位、乘系数的处理。 ...

// adc 初始化

void ADC_Init(void)
{   
                P_SW2 |= 0x80;         //打开
                ADCTIM = 0x3f;         //设置 ADC 内部时序
                P_SW2 &= 0x7f;         //关闭
                ADCCFG = 0x27;         //设置ADC结果右对齐,设置速度时钟
                ADC_RES=0;             //清除ADC_RES存储器以前的结果
                ADC_RESL=0;
                ADC_CONTR |= 0x80; //ADC 开启电源
                Delay_Ms(10);          //上电延时
}


//    读取ADC结果

u16 GetADCResult()
{
          ADC_CONTR = 0xC5 ;                      //启动转换选择通道    1100 0101(C5)P55脚   1100 1111(CF)  内部1.19V
                _nop_();
          _nop_();                                //小延时
                while (!(ADC_CONTR & ADC_FLAG));        //等待ADC转换完成标志置位 1010 0000
                ADC_CONTR &=~0x20;                      //清完成标志
                return ADC_RES << 8 | ADC_RESL;         //返回十位ADC结果
               
}
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-3-21 23:03 , Processed in 0.132907 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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