紫气东 发表于 2025-4-22 17:05:08

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

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端口寄存器配置为,高阻输入模式,不改变其余端口配置
      P3PU &=~(1<<2);                        //手动关闭内部上拉电阻,可以视检测结果开启,但同时需修改ADC分压计算公式

      P5M1 |=0x20;                              //P5M1第 5 位置1,0010 0000
      P5M0 &=0xDF;                            //P5M0第 5 位置0,1101 1111 P5.5端口寄存器配置为,高阻输入模式,不改变其余端口配置
      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水平

请求大佬解惑!!!





   
      


国芯人工智能 发表于 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

[本文内容由国芯人工智能辅助生成,仅供参考]

梁工 发表于 2025-4-22 20:57:10



下载附件接压缩后,直接下载“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值.


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


DebugLab 发表于 2025-4-22 22:27:19

P32IE设置为0试一下

王昱顺 发表于 2025-4-23 08:47:47

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

紫气东 发表于 2025-4-23 08:48:27

DebugLab 发表于 2025-4-22 22:27
P32IE设置为0试一下

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

紫气东 发表于 2025-4-23 09:30:31

王昱顺 发表于 2025-4-23 08:47
从代码上来看,似乎并没有问题。从我之前使用光敏电阻的情况来看,可能需要注意的是,遮挡光敏电阻进入暗环 ...

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


DebugLab 发表于 2025-4-23 09:32:42

紫气东 发表于 2025-4-23 08:48
程序里没有用到P32中断,刚设置过了,依然无效


王昱顺 发表于 2025-4-23 09:48:37

紫气东 发表于 2025-4-23 09:30
P32引脚通路接上轻触开关
暗环境(以确保极暗)下,不接单片机,电压为3.2V,接近VCC,分压正确
按下轻触 ...

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

紫气东 发表于 2025-4-23 10:54:33

DebugLab 发表于 2025-4-23 09:32


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

//ADC I/O配置
        P3M1 |=0x04;                           //P3M1第 2 位置1,0000 0100
        P3M0 &=0xFB;                           //P3M0第 2 位置0,1111 1011 P3.2端口寄存器配置为,高阻输入模式,不改变其余端口配置
        P3PU &=~(1<<2);                        //手动关闭内部上拉电阻,可以视检测结果开启,但同时需修改ADC分压计算公式
        P3IE &=0xFB;
页: [1] 2
查看完整版本: 8G1K08A的ADC2通道即P3.2引脚无法正常采集光敏分压信息(下拉电阻)