找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2198|回复: 31
打印 上一主题 下一主题
收起左侧

STC08G单片机在ADC过程电压异常

  [复制链接]
跳转到指定楼层
楼主
最近小弟采用I/O复用方式进行ADC,结果出现ADC过程电压跃落情况,急需求解。谢谢!

ADC异常波型.png (1.52 MB, 下载次数: 134)

电压异常波型

电压异常波型

ADC原理图.png (655.64 KB, 下载次数: 147)

ADC原理图.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:688692 发表于 2022-8-25 15:08 | 只看该作者
刚好遇到了,STC技术告知的解决办法:在ADC脚对地接一颗103电容。
http://www.51hei.com/bbs/forum.p ... p;page=1#pid1105080
回复

使用道具 举报

板凳
ID:123289 发表于 2022-8-25 15:39 | 只看该作者
说明一下,P55与P54的电压由谁提供。
这个图在P55、P54做AD时,无外界提供电压,AD采样接近0。
P55、P54做IO时,则是示波器的图形。
而且又不批出,黄线是谁的波形,蓝线是谁的波形。在什么情况下的波形。
全靠别人猜。
沟通表达能力差。
回复

使用道具 举报

地板
ID:41656 发表于 2022-8-25 16:03 | 只看该作者
没明白你是怎么复用的不说明清除不好说
回复

使用道具 举报

5#
ID:1034262 发表于 2022-8-25 16:19 | 只看该作者
没看明白,你说下你的操作过程。
回复

使用道具 举报

6#
ID:213173 发表于 2022-8-25 16:29 | 只看该作者
ADC端口复用受外部硬件条件限制,也就是在ADC采样时段其他外部硬件呈高阻,不影响ADC采样电压。从你的图看不出你要怎么复用。
回复

使用道具 举报

7#
ID:1034948 发表于 2022-8-25 19:14 | 只看该作者
你这个怎么要I/O口呀,上面I/O的电压要固定一个值才行。
回复

使用道具 举报

8#
ID:59202 发表于 2022-8-25 23:06 | 只看该作者
你这个问题描述的也太简单了吧,哪个口是adc输入,哪个口是IO口,实现的功能和出现的现象等都应该描述清楚才好解决啊
回复

使用道具 举报

9#
ID:466997 发表于 2022-8-26 14:14 | 只看该作者
上图中在ADC过程,P5.5是稳定输出高电平,P5.4进行AD转换(输入口)。通过AD转化实现温度检测。
回复

使用道具 举报

10#
ID:624769 发表于 2022-8-26 15:29 | 只看该作者
STC8G  那么多产品中, 我还真没找到 可以用 P5.4 测AD的型号, 所以,连示波器都用上了, 不能先看看 产品规格书么?
回复

使用道具 举报

11#
ID:624769 发表于 2022-8-26 16:26 | 只看该作者
j1ason 发表于 2022-8-26 14:14
上图中在ADC过程,P5.5是稳定输出高电平,P5.4进行AD转换(输入口)。通过AD转化实现温度检测。

P5.5 是不可能稳定输出高电平的,你要稳定的话,只能 10K电阻的另一头接VCC,把P5.5 开漏模式 输出稳定的低电平 才有可能实现“稳定”
回复

使用道具 举报

12#
ID:1034262 发表于 2022-8-26 16:28 | 只看该作者
一般建议NTC接地,这样用什么问题吗?P5.5要设置为推挽输出。
回复

使用道具 举报

13#
ID:401564 发表于 2022-8-26 17:18 | 只看该作者
1,为什么要这么操作?
2,代码上传
回复

使用道具 举报

14#
ID:401564 发表于 2022-8-27 00:21 | 只看该作者
188610329 发表于 2022-8-26 15:29
STC8G  那么多产品中, 我还真没找到 可以用 P5.4 测AD的型号, 所以,连示波器都用上了, 不能先看看 产品 ...

STC8G1K08A
每个IO都有ADC功能,一块二一片,性价比还是蛮可以的
就是抗干扰不怎么好,我DIY一个太阳能路灯,只是LED灯的线架在220V上而已,有时候开日光灯,这板子就复位了,我还打了20个板子,准备回家用呢......有点后悔了,当初应该用PIC12F615的
回复

使用道具 举报

15#
ID:59202 发表于 2022-8-28 19:38 | 只看该作者
P5.5接稳定高电平,那为啥不直接接到电源呢,不知咋想的。IO口输出是经过了内部的输出电路的,不管输出高、低电平都会受到输出电路内阻的影响,拿来作为AD的参考电压很不合适啊
回复

使用道具 举报

16#
ID:491577 发表于 2022-8-28 22:08 | 只看该作者
Y_G_G 发表于 2022-8-27 00:21
STC8G1K08A
每个IO都有ADC功能,一块二一片,性价比还是蛮可以的
就是抗干扰不怎么好,我DIY一个太阳能路 ...

抗干扰与你的电路设计有关,你的STC单片机用了几个电容?多大容量的?
回复

使用道具 举报

17#
ID:688692 发表于 2022-8-29 09:58 | 只看该作者
Y_G_G 发表于 2022-8-27 00:21
STC8G1K08A
每个IO都有ADC功能,一块二一片,性价比还是蛮可以的
就是抗干扰不怎么好,我DIY一个太阳能路 ...

不至于这么惨吧,同样用STC8G1K08A-QFN 做了一个24V电源的监控处理板,没听用户反馈什么问题,带的是无刷电机。
回复

使用道具 举报

18#
ID:466997 发表于 2022-8-29 10:13 | 只看该作者
188610329 发表于 2022-8-26 15:29
STC8G  那么多产品中, 我还真没找到 可以用 P5.4 测AD的型号, 所以,连示波器都用上了, 不能先看看 产品 ...

STC8G1K08A是有这口的,并说明可以进行ADC的


回复

使用道具 举报

19#
ID:466997 发表于 2022-8-29 10:23 | 只看该作者
coody_sz 发表于 2022-8-26 16:28
一般建议NTC接地,这样用什么问题吗?P5.5要设置为推挽输出。

收到,另外,目前波形中P5.5已经是推挽输出模式的了
回复

使用道具 举报

20#
ID:879348 发表于 2022-8-29 10:29 | 只看该作者
程序问题,还得慢慢自己研究,那么多人用基本不会出现如此简单的错误
回复

使用道具 举报

21#
ID:466997 发表于 2022-8-29 10:33 | 只看该作者
xxxevery 发表于 2022-8-28 19:38
P5.5接稳定高电平,那为啥不直接接到电源呢,不知咋想的。IO口输出是经过了内部的输出电路的,不管输出高、 ...

理论上还是可以的
回复

使用道具 举报

22#
ID:466997 发表于 2022-8-29 10:38 | 只看该作者
Y_G_G 发表于 2022-8-26 17:18
1,为什么要这么操作?
2,代码上传

unsigned char ADC_NTC(void)
{
unsigned char b;

P5M0 = 0X00;  
P5M1 = 0X20;
P_SW2 |= 0x80;  
ADCTIM = 0x3f;
P_SW2 &= 0x7f;
ADCCFG = 0x0f;   
ADC_CONTR = 0x85;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADC_CONTR |= 0x40;  
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();

while (!(ADC_CONTR & 0x20));  
ADC_CONTR &= ~0x20;
b = ADC_RES
由于电路设计需要
回复

使用道具 举报

23#
ID:401564 发表于 2022-8-29 11:29 | 只看该作者
cnos 发表于 2022-8-29 09:58
不至于这么惨吧,同样用STC8G1K08A-QFN 做了一个24V电源的监控处理板,没听用户反馈什么问题,带的是无刷 ...

跟硬件肯定是没有关系的了,估计是日光的镇流器,只有在开灯的时候有复位现象,连续开灯十几二十次就会有一次复位
同一块PCB板子,直接换上PIC12F615,搭线测试,开了半个小时,没有一次复位的
用于测试的程序很简单,首先排除程序的问题
就是什么功能都没有,就是开机之后,控制IO先低电平并延时0.5秒,然后,就是一直开灯,几行代码而已,ADC什么的都没有用
只要开机之后出现灭灯的,就是复位了
回复

使用道具 举报

24#
ID:47286 发表于 2022-8-29 13:53 | 只看该作者
Y_G_G 发表于 2022-8-29 11:29
跟硬件肯定是没有关系的了,估计是日光的镇流器,只有在开灯的时候有复位现象,连续开灯十几二十次就会有一 ...

8G1K稳定性好象是不好 我搞了个GPS时钟服务 因为8G1K 20PIN的有双串口就用这片子 超过2秒收不到GPS数据会报一下警告 大概稳定工作了半年 开始间隔报警 然后越来越频繁 我以为是GPS模块的问题 连模块带天线都换了一套也没什么用 换了8G1K片子正常工作了 然后过半年 又不行了 但重新刷一下程序 一点没动的程序 就又能稳定工作半年 应该不是电源的问题 这个模块12VDC和12v电池双供电 电源为主和电池为主都试过 一样
回复

使用道具 举报

25#
ID:1034262 发表于 2022-8-29 14:32 | 只看该作者
Y_G_G 发表于 2022-8-27 00:21
STC8G1K08A
每个IO都有ADC功能,一块二一片,性价比还是蛮可以的
就是抗干扰不怎么好,我DIY一个太阳能路 ...

你这种情况,属于电源问题,电源做好,不要有跌落,就不会复位,我用这个MCU做灯控也比较多,没发现你说的问题。
回复

使用道具 举报

26#
ID:1043216 发表于 2022-8-29 14:46 | 只看该作者
P5.5是稳定输出高电平,P5.4进行AD转换(输入口)。通过AD转化实现温度检测。
回复

使用道具 举报

27#
ID:59202 发表于 2022-8-29 15:36 | 只看该作者
楼主,理论上可行但如果不可控因素更多的话还是建议慎用,从你给的程序看完全就是测的P5.5的电压,这跟你前面描述的情况完全不符啊
http://www.51hei.com/bbs/forum.php?mod=redirect&goto=findpost&ptid=223192&pid=1105390

回复

使用道具 举报

28#
ID:213173 发表于 2022-8-29 15:53 | 只看该作者
j1ason 发表于 2022-8-29 10:38
unsigned char ADC_NTC(void)
{
unsigned char b;

楼主用STC8G1K08A的P5.5输出高电平,分压后供P5.4 ADC取样,这样用没有什么问题,但与 “I/O复用方式” 没有干系。所谓复用是指同一个I/O口同时或分时执行两个以上功能。出现异常波形当然是代码问题。
回复

使用道具 举报

29#
ID:401564 发表于 2022-8-29 21:12 | 只看该作者
coody_sz 发表于 2022-8-29 14:32
你这种情况,属于电源问题,电源做好,不要有跌落,就不会复位,我用这个MCU做灯控也比较多,没发现你说 ...

我觉得你可能没有认真看我的回复
回复

使用道具 举报

30#
ID:16671 发表于 2022-8-29 22:07 | 只看该作者
这么用2个IO??P5.5接VCC,试一下
回复

使用道具 举报

31#
ID:213173 发表于 2022-8-30 07:50 | 只看该作者
weqeq23 发表于 2022-8-29 14:46
P5.5是稳定输出高电平,P5.4进行AD转换(输入口)。通过AD转化实现温度检测。

这是基本条件和应用代码
  1. #define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)
  2. #define ADC_POWER   0x80                        //ADC power control dit (ADC电源控制位)1000 0000
  3. #define ADC_START   0x40                        //ADC start control dit (ADC启动控制位)0100 0000
  4. #define ADC_FLAG    0x20                        //ADC complete flag (ADC完成标志位)    0010 0000
  5. #define ADC_EPWMT   0x10                        //使能 PWM  实时触发 ADC               0001 0000


  6. P3M1 = 0x00;                                         //设置P3准双向
  7. P3M0 = 0x00;                                         //设置P3准双向
  8. P5M1 = 0x10;                                         //设置P5.4高阻0001 0000
  9. P5M0 = 0x20;                                         //设置P5.5推挽0010 0000

  10. /*------------------------
  11.   InitADC 初始化ADC
  12. -------------------------*/
  13. void Init_ADC()
  14. {        //ADC 控制器  电源  启动  完成  --   15通道模拟选择位
  15.         //ADC_CONTR    B7    B6    B5   B4   B3   B2   B1   B0
  16.         P_SW2 |= 0x80;                                        //打开设置开关
  17.         ADCTIM = 0x3f;                                        //设置 ADC 内部时序
  18.         P_SW2 &= 0x7f;                                        //关闭设置开关
  19.         ADCCFG = 0x27;                                        //设置ADC结果右对齐,速度为512系统时钟
  20.         ADC_RES=0;                                                //清除ADC_RES存储器以前的结果
  21.         ADC_RESL=0;
  22.         ADC_CONTR=ADC_POWER;                 //开启ADC电源
  23.         _nop_();_nop_();                                //上电延时
  24.         _nop_();_nop_();
  25. }
  26. /*----------------------------
  27.         读取ADC结果
  28. ----------------------------*/
  29. unsigned int GetADCResult(unsigned char CH)//ADC通道CH=4 (P5.4)
  30. {
  31.         ADC_CONTR=ADC_POWER|ADC_START|CH;//启动转换1100 1100
  32.         _nop_();_nop_();                                                //小延时
  33.         while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成标志置位 1010 0000
  34.         ADC_CONTR &=~ADC_FLAG;                        //清完成标志
  35.         return ADC_RES<<8|ADC_RESL;                //返回十位ADC结果
  36. }
复制代码
回复

使用道具 举报

32#
ID:466997 发表于 2022-8-31 15:10 | 只看该作者
感谢各位大神的帮忙,我认真思考,再调试
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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