NHPT 发表于 2020-12-13 00:13:49

STC12C5608AD的AD使用问题


如图,我用STC12C5608AD芯片,做一个温度测量,电路上用MF58热敏与10K电阻分压,然后输入到单片机的P1.2口

现在的问题是,如果去掉R9这颗电阻,不连到单片机的AD输入口,那么IN这里的电压是2V多点,对应MF58的电阻查表可以得到温度约10度
把R9接上,信号输入到单片机的AD口,结果IN这里的电压变成3V多了

目前排除了硬件问题,这个分压电路肯定没有问题,在别的单片机上试了是正常的
单片机我换了三个,现象都一样

剩下就是软件的IO口配置问题
但P1.2这个端口的AD功能又是好的,我用液晶显示AD的采样结果,也的确是3V多点,和万用表测量结果一致
查手册,我的端口也配置成AD的输入模式了(P1M0和P1M1,分别是0x04和0x24,换成高阻输入也试过,未能解决)

目前就卡在这个地方,单片机的程序都是正常的,能正确采样电压,只是这个电压似乎受到了单片机AD输入管脚的影响
有没有老哥或者大佬遇到过这个问题?
问过其他人说有没有可能是AD内部有电阻分压了,但手册上也没说明

uint get_adc()
{
        uint adc;
        ADC_CONTR = 0xe2;
        delay_20us(10);
        ADC_CONTR = 0xea;
        delay_20us(10);
        while(!(ADC_CONTR&0x10));
        ADC_CONTR = 0xe2;
        delay_20us(10);
        adc = ADC_DATA;
        adc = adc<<2;
        adc = adc +ADC_LOW2;
        ADC_CONTR = 0x62;
        delay_20us(10);
        return(adc);
}

上面是AD函数,测试下来是可以正常运行的。
另外我也试过把AD口换到1.1或者1.3,还是出现这个问题。

weiwei4 发表于 2020-12-13 07:56:56

本帖最后由 weiwei4 于 2020-12-13 08:02 编辑

没用过
设置成开漏模式了也这样?
有没有可能是内部有弱上拉造成的呢?

NHPT 发表于 2020-12-13 10:18:40

weiwei4 发表于 2020-12-13 07:56
没用过
设置成开漏模式了也这样?
有没有可能是内部有弱上拉造成的呢?

早上体检去了,现在才回来看
高阻输入和开漏模式都试过,但现象是一样的
都是P1M0和P1M1配置,我也怀疑是不是单片机内部有其他连接,但是找的资料来看又没有
自己搞了两天了,实在找不到办法才来这看看有没有其他人遇到过

MYQQ2018 发表于 2020-12-13 11:16:54

遇到过类似的问题,不是这个型号,还有个相关的寄存器要配置一下,大概名字是P1ASF,手机查看手册不方便

NHPT 发表于 2020-12-13 11:34:03

MYQQ2018 发表于 2020-12-13 11:16
遇到过类似的问题,不是这个型号,还有个相关的寄存器要配置一下,大概名字是P1ASF,手机查看手册不方便 ...

嗯,我其实知道就是寄存器配置问题,但找了2天还是没找到具体哪里,目前还在找。。。

NHPT 发表于 2020-12-13 11:50:43

目前来看,应该就是IO端口寄存器没配置,但代码里面配置了P1M0和P1M1,实际上AD的端口好像依然是准双向模式

NHPT 发表于 2020-12-13 13:21:54

虽然不知道是为什么,但最后用了官方的示例程序终于配置成功了。。。
不知道是不是因为AD初始化程序的关系。。。
页: [1]
查看完整版本: STC12C5608AD的AD使用问题