找回密码
 立即注册
查看: 99|回复: 12

8G1K08A的ADC2通道即P3.2引脚无法正常采集光敏分压信息(下拉电阻)

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-23 08:48:27
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2025-4-22 17:05:08 | 显示全部楼层 |阅读模式
ADC端口配置信息如下:

    P0M0 = P0M1 = 0x00;
    P1M0 = P1M1 = 0x00;
    P2M0 = P2M1 = 0x00;
    P3M0 = P3M1 = 0x00;
    P4M0 = P4M1 = 0x00;
    P5M0 = P5M1 = 0x00;                     //初始化,M0=0,M1=0,6组I/O统一配置为准双向模式

    P0 = P1 = P2 = P3 = P4 = P5 = 0xFF;    //bite位为1,高电平输出


    P0PU = P1PU = P2PU = P3PU = P4PU = P5PU = 0xFF; //手动启用内部的上拉电阻,功耗增加(5uA->100~500uA),输出高电平更加稳定,抗干扰能力增强,需权衡



       //ADC配置
      //ADC配置主要是使能ADC电源、开启初始化通道0、采集数据对齐方式、采集速率、输入端口模式
    ADC_CONTR = 0x80;                        // 使能ADC模块,1000 0000 第 7 位是电源开关 后四位选取ADC通道,同一时间只允许一个ADC通道启用,可以通过循环切换实现多路采集
    ADCCFG = 0x2F;                             // 设置ADC采样数据右对齐,频率750KHz,0010 1111 第 5 位置1右对齐;置0左对齐,后四位设定时钟速率—SYSclk/2/(speed+1),1111即为SYSclk/2/16

    //ADC I/O配置
        P3M1 |=0x04;                              //P3M1第 2 位置1,0000 0100
        P3M0 &=0xFB;                             //P3M0第 2 位置0,1111 1011 P3.2端口寄存器配置为[10],高阻输入模式,不改变其余端口配置
        P3PU &=~(1<<2);                        //手动关闭内部上拉电阻,可以视检测结果开启,但同时需修改ADC分压计算公式

        P5M1 |=0x20;                              //P5M1第 5 位置1,0010 0000
        P5M0 &=0xDF;                            //P5M0第 5 位置0,1101 1111 P5.5端口寄存器配置为[10],高阻输入模式,不改变其余端口配置
        P5PU =0xDF;                               //手动关闭内部上拉电阻 1101 1111,仅P5.5端口的上拉电阻被关闭    


ADC调用:
        light= 3.3-ADC_VRead(2);                                     //光敏分压采集
        vth=3.3-ADC_VRead(5);                                         //电位器分压采集



测试发现,ADC 5 即P5.5引脚采集分压正常,可正常从0V跳变至接近VCC(3.3v)
ADC 2 即P3.2引脚采集光敏分压异常,无论是光敏电阻还是光敏二极管均出现类似情形:

下拉电阻为75K, 光敏接vcc

未接通单片机时,分压正常(暗环境下光敏分压接近VCC)
接通单片机后
                     未上电前处在暗环境,上电后分压为2.8V
                     上电后给光照后,分压为0.13V
                     上电后,从光照环境重新转为暗环境,分压为0.36V,无法抬升至接近VCC水平

请求大佬解惑!!!





   
        


回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-22 17:08:00 | 显示全部楼层
针对您提到的STC8G1K08A的ADC2通道(P32引脚)无法正常采集光敏分压信息的问题,以下是一些可能的原因及解决方案,供您参考:

1. ADC配置问题
ADC通道选择:确保ADC2通道已正确配置为输入模式,并且已选择为当前ADC转换的通道。可以通过检查ADCCONTR寄存器中的CHS2:CHS0位来确认。
ADC时钟配置:ADC的采样速率和转换精度与时钟配置密切相关。请检查ADCCONTR寄存器中的SPEED1:SPEED0位,确保时钟配置合理。通常,较高的时钟频率可以提高采样速率,但可能会降低转换精度。
ADC参考电压:确保ADC的参考电压(VREF)设置正确。如果使用内部参考电压,请检查VREF引脚是否连接了适当的去耦电容。

2. 引脚配置问题
P32引脚模式:虽然您已经将P3M0和P3M1配置为准双向模式,但ADC输入引脚通常需要配置为高阻输入模式(P3M0=0, P3M1=1),以避免外部电路对ADC采样的干扰。
上拉电阻配置:您已经启用了内部上拉电阻,但请注意,上拉电阻可能会影响光敏分压的测量结果。如果光敏电阻的阻值较低,上拉电阻可能会导致分压比偏离预期。建议尝试禁用上拉电阻(P3PU=0),观察是否有所改善。

3. 硬件电路问题
光敏电阻与下拉电阻的匹配:确保光敏电阻与下拉电阻的阻值匹配合理。如果光敏电阻的阻值范围较大,可能需要调整下拉电阻的阻值,以确保分压比在ADC的有效输入范围内。
电源稳定性:检查电源电压是否稳定,尤其是ADC参考电压。电源噪声或波动可能会影响ADC的采样精度。
信号滤波:在光敏电阻与ADC输入引脚之间添加适当的滤波电容(如0.1μF),以滤除高频噪声,提高采样稳定性。

4. 软件问题
ADC采样时间:确保ADC采样时间足够长,以充分采集光敏分压信号。可以通过调整ADCCONTR寄存器中的SPEED1:SPEED0位来延长采样时间。
多次采样取平均:为了提高采样精度,可以多次采样并取平均值,以减少随机噪声的影响。

5. 调试建议
使用示波器:使用示波器观察P32引脚的电压波形,确认光敏分压信号是否符合预期。
逐步排查:从硬件电路到软件配置逐步排查问题,先确认硬件电路工作正常,再检查软件配置是否正确。

示例代码
以下是一个简单的ADC配置示例,供您参考:

```c
include "stc8g.h"

void ADCInit() {
    P3M0 = 0x00;  // P3口配置为准双向模式
    P3M1 = 0x04;  // P32配置为高阻输入模式
    P3PU = 0x00;  // 禁用P32上拉电阻

    ADCCONTR = 0x80;  // 打开ADC电源
    ADCCONTR |= 0x02; // 选择ADC2通道(P32)
    ADCCONTR |= 0x20; // 设置ADC时钟为系统时钟的1/2
    nop();
    nop();
}

unsigned int ADCRead() {
    ADCCONTR |= 0x08; // 启动ADC转换
    while (!(ADCCONTR & 0x10)); // 等待转换完成
    ADCCONTR &= ~0x10; // 清除转换完成标志
    return (ADCRES

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2025-4-22 20:57:10 | 显示全部楼层
STC8G系列-ADC相关程序.rar (341.32 KB, 下载次数: 1)

下载附件接压缩后,直接下载“ADC相关程序-STC8G1K08A-8PIN --> 02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言 --> ADC.hex”测试。


/*************        功能说明        **************
用户请先别修改程序, 直接下载"02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言"里的"ADC.hex"测试. 下载时选择主频11.0592MHZ。

测试时, 电脑的串口助手设置115200,8,n,1.


本程序演示4路ADC(P3.0 P3.2 P3.3 P5.4 P5.5)和bandgap查询采样,通过串口1(P3.1)发送给上位机,波特率115200,8,n,1.

0~3通道对应P3.0~P3.3, 4通道-->P5.4, 5通道-->P5.5, 15通道为内部1.19V基准电压做输入的ADC值.


******************************************/


回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-4-22 22:27:19 | 显示全部楼层
P32IE设置为0试一下
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2025-4-23 08:47:47 | 显示全部楼层
从代码上来看,似乎并没有问题。从我之前使用光敏电阻的情况来看,可能需要注意的是,遮挡光敏电阻进入暗环境的时候,需要完全遮挡(包括光敏电阻的周边及其底部,否则有一点点光也会出现不够暗的情况)。
同时,可以给P32到光敏电阻电压采集加个小开关,然后测一测接上去电压会不会有波动,如果没有波动,单片机端应该就没有什么很大的问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-23 08:48:27
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2025-4-23 08:48:27 | 显示全部楼层
Debu*** 发表于 2025-4-22 22:27
P32IE设置为0试一下

程序里没有用到P32中断,刚设置过了,依然无效

点评

[attachimg]94907[/attachimg]  详情 回复 发表于 2025-4-23 09:32
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-23 08:48:27
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2025-4-23 09:30:31 | 显示全部楼层
王*** 发表于 2025-4-23 08:47
从代码上来看,似乎并没有问题。从我之前使用光敏电阻的情况来看,可能需要注意的是,遮挡光敏电阻进入暗环 ...

P32引脚通路接上轻触开关
暗环境(以确保极暗)下,不接单片机,电压为3.2V,接近VCC,分压正确
按下轻触开关,电压立即跳至0.3V,与之前测试结果一致


点评

主循环持续给这个端口置1,并且切换到高阻模式试试,怀疑可能是其他什么地方给模式和端口状态改变了  详情 回复 发表于 2025-4-23 09:48
回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-4-23 09:32:42 | 显示全部楼层
紫*** 发表于 2025-4-23 08:48
程序里没有用到P32中断,刚设置过了,依然无效

截图202504230932393859.jpg
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2025-4-23 09:48:37 | 显示全部楼层
紫*** 发表于 2025-4-23 09:30
P32引脚通路接上轻触开关
暗环境(以确保极暗)下,不接单片机,电压为3.2V,接近VCC,分压正确
按下轻触 ...

主循环持续给这个端口置1,并且切换到高阻模式试试,怀疑可能是其他什么地方给模式和端口状态改变了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-23 08:48:27
已绑定手机

2

主题

7

回帖

36

积分

新手上路

积分
36
发表于 2025-4-23 10:54:33 | 显示全部楼层

不行啊哥,置零后依然无效

  //ADC I/O配置
        P3M1 |=0x04;                             //P3M1第 2 位置1,0000 0100
        P3M0 &=0xFB;                             //P3M0第 2 位置0,1111 1011 P3.2端口寄存器配置为[10],高阻输入模式,不改变其余端口配置
        P3PU &=~(1<<2);                          //手动关闭内部上拉电阻,可以视检测结果开启,但同时需修改ADC分压计算公式
        P3IE &=0xFB;
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 17:41 , Processed in 0.133387 second(s), 121 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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