找回密码
 立即注册
查看: 84|回复: 6

STC8G2K64S4的AD改用STC8H8K64U后结果出现问题了

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-04-30 09:47:55
已绑定手机

3

主题

5

回帖

29

积分

新手上路

积分
29
发表于 2026-4-15 08:12:39 | 显示全部楼层 |阅读模式
void InitADC(void)//STC8H8K64U
{
    // P1.4、P1.5 设为模拟输入(禁止数字功能)
    P1M0 &= 0xcf;
    P1M1 |= 0x30;
    P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG  = 0x2f;   // 设置ADC时钟为系统时钟/2/16 设置结果右对齐
    // ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x80;                           //使能ADC模块
    ADC_CONTR |= 0x40;                          //启动AD转换       
}
u16 Get_ADCResult(u8 ch)//STC8H8K64U
{
    u16 adc;
    u8 i;
    if(ch > 7)
    {
        return 4096;    // 通道 0~7 有效
    }
    ADC_CONTR = 0x80 | ch;   // 选择通道 + 保持ADC上电
    ADC_CONTR |= 0x40;       // 启动转换
    // 等待转换完成(超时)
    for(i=0; i<250; i++)
    {
        if(ADC_CONTR & 0x20) // 判断完成标志
        {
            ADC_CONTR &= ~0x20; // 清除标志
            // STC8G 默认 12 位右对齐,直接读取即可
            adc = (u16)ADC_RES << 8 | ADC_RESL;
                        adc>>=2;//转成10位
            return adc;
        }
    }
    return 4096;
}
这个是STC8H8K64U的AD程序,转换成10位后,和STC8G2K64S4相差很大。怎么解决

void InitADC(void)//STC8G2K64S4
{
    // P1.2、P1.3 设为模拟输入(禁止数字功能)
    P1M0 &= 0xf3;
    P1M1 |= 0x0C;
    ADC_CONTR = 0x80;  // 打开 ADC 电源
    ADCCFG  = 0x20;   // 设置 ADC 时钟 = SYSCLK/32
}
u16 Get_ADCResult(u8 ch)//STC8G2K64S4
{
    u16 adc;
    u8 i;
    if(ch > 7)
    {
        return 4096;    // 通道 0~7 有效
    }
    ADC_CONTR = 0x80 | ch;   // 选择通道 + 保持ADC上电
    ADC_CONTR |= 0x40;       // 启动转换
    // 等待转换完成(超时)
    for(i=0; i<250; i++)
    {
        if(ADC_CONTR & 0x20) // 判断完成标志
        {
            ADC_CONTR &= ~0x20; // 清除标志
            adc = (u16)ADC_RES << 8 | ADC_RESL;
            return adc;
        }
    }
    return 4096;
}

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:107
  • 最近打卡:2026-04-30 14:22:38
已绑定手机

4

主题

272

回帖

6183

积分

论坛元老

积分
6183
发表于 2026-4-15 09:05:10 | 显示全部楼层
没看出来“相差很大”,建议提供具体数据:实际电压多少?参考电压多少?ADC值多少?
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-04-30 09:47:55
已绑定手机

3

主题

5

回帖

29

积分

新手上路

积分
29
发表于 2026-4-15 09:11:48 | 显示全部楼层
STC8H8K64U12位AD结果是0x753,转成10位是0x1D4 ,STC8G2K64S4 10位AD结果是0x2e0
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-04-30 09:47:55
已绑定手机

3

主题

5

回帖

29

积分

新手上路

积分
29
发表于 2026-4-15 09:13:04 | 显示全部楼层
参考电压都是电源电压
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-04-30 01:26:24
已绑定手机

22

主题

401

回帖

1816

积分

金牌会员

DIY玩家

积分
1816
发表于 2026-4-15 09:58:33 | 显示全部楼层
非同系列芯片根据产品定位
底层设计可能区别大
部分程序需修改
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:107
  • 最近打卡:2026-04-30 14:22:38
已绑定手机

4

主题

272

回帖

6183

积分

论坛元老

积分
6183
发表于 2026-4-15 13:21:43 | 显示全部楼层
你若要回复我,就点击我所在楼层的“回复”,我才会收到通知,否则是回复你自己。
你的数据看不出来哪个正确、哪个有问题,因为没给实际电压值。
你的程序也是有区别的,ADCCFG的分频有差异,有一个程序缺少ADCTIM,建议对比一下。
另外就是检查一下电路,看看信号到引脚的输出阻抗大不大,有没有加电容滤波。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-04-30 09:47:55
已绑定手机

3

主题

5

回帖

29

积分

新手上路

积分
29
发表于 2026-4-21 16:02:02 | 显示全部楼层
lcws*** 发表于 2026-4-15 13:21
你若要回复我,就点击我所在楼层的“回复”,我才会收到通知,否则是回复你自己。
你的数据看不出来哪个正 ...

ADCCFG的分频有差异,有一个程序缺少ADCTIM,这个影响不大。STC8H8K64U12位AD结果是0x753,转成10位是0x1D4 ,STC8G2K64S4 10位AD结果是0x2e0,0x2e0-0x1D4 =0x10c,相差太大了。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-5-1 10:31 , Processed in 0.114701 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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