找回密码
 立即注册
查看: 1691|回复: 14

为什么15w408as的ADC能检测到 8h8k64的检测不到啊!

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-01-10 09:12:27
已绑定手机

5

主题

16

回帖

123

积分

注册会员

积分
123
发表于 2025-1-9 00:46:56 | 显示全部楼层 |阅读模式
15W408AS和8H8K64的ADC 有什么不同么》??!
同样的分压按键结构  15w408as 显示出来的结果  很稳定 基本不跳动
但是8h8k64的结果 不停的跳动
使用开天斧三USB DMAADC串口绘图的结果   由左向右 key1  key2 key3 key4



使用STC15W408AS  lcd1602显示的话 key1到key4结果分别为  69 75 151 108



使用开天斧三 0.96屏幕显示  key1到key4结果分别为  129~135 59~64  采集不到   72~80
截图202501090046532741.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-01-10 09:12:27
已绑定手机

5

主题

16

回帖

123

积分

注册会员

积分
123
发表于 2025-1-9 09:03:19 | 显示全部楼层
有大神指导一下么!

点评

你要看一下STC8H系列手册的ADC章节,增加了一些寄存器。  详情 回复 发表于 2025-1-9 09:10
回复 支持 反对

使用道具 举报 送花

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

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2025-1-9 09:10:04 | 显示全部楼层
粪*** 发表于 2025-1-9 09:03
有大神指导一下么!

你要看一下STC8H系列手册的ADC章节,增加了一些寄存器。STC8系列的ADC比STC15系列的ADC性能要好得多。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-01-10 09:12:27
已绑定手机

5

主题

16

回帖

123

积分

注册会员

积分
123
发表于 2025-1-9 09:12:18 | 显示全部楼层
梁*** 发表于 2025-1-9 09:10
你要看一下STC8H系列手册的ADC章节,增加了一些寄存器。STC8系列的ADC比STC15系列的ADC性能要好得多。 ...

我这个精度要求不高 就是几个电阻分压。代码也基本是范例代码多的那些寄存器也都有了!
  1. <ol class="code_ol_Tql" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; list-style-position: initial; list-style-image: initial; background-color: rgb(240, 240, 240);"><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; padding-left: 5px; list-style-position: initial; list-style-image: initial; border-left: 1px solid rgb(205, 205, 205) !important;"><font face="monospace"><span style="white-space: pre;">//========================================================================
  2. BYTE GetADCResult(BYTE ch)
  3. {
  4.                                 ADC_CONTR = (ADC_CONTR & 0xF0)|ADC_START|ch;                      //ADC_CONTR = ADC_CONTR | 0x40 |ch= ADC_CONTR | 01000000|ch   代表ADC_START置1 //                                ADC_CONTR &= 0xf0;                                                //清空通道
  5.                                 _nop_();
  6.         _nop_();
  7.         _nop_();
  8.         while (!(ADC_CONTR & ADC_FLAG));            //查询ADC完成标志 ADC_CONTR&ADC_FLAG=ADC_CONTR & 0x20=ADC_CONTR & 0010 0000  用于检查ADC_CONTR寄存器中ADC_FLAG对应于0x20(二进制00100000)的位的状态。
  9.         ADC_CONTR &= ~ADC_FLAG;                     //#define ADC_FLAG   0x20 //ADC_CONTR = ADC_CONTR & (~0x20)=ADC_CONTR  & (~0010 0000)=ADC_CONTR  & 1101 1111  代表ADC_FLAG清零
  10.                                 return (ADC_RES<< 8 )|ADC_RESL;                                                        //右对齐,所以高位左移动8位加低八位; 读取ADC结果
  11. }
  12. /*----------------------------
  13. 初始化ADC
  14. ----------------------------*/
  15. void InitADC()
  16. {
  17.     P1M0 = 0x00; P1M1 = 0xcb;  //1.2 1.4 1.5 双向  1.0 1.1 1.3 1.6 1.7 高祖
  18. //    P_SW2 |= 0x80;                                                                                                                        //P_SW2 |= 0x80;相当于P_SW2 = P_SW2 | 0x80
  19.     ADCTIM = 0x3f;                              //设置ADC内部时序 ADCTIM = 0x3f=0 01 11111
  20. //    P_SW2 &= 0x7f;                                                                                                                        //P_SW2 &= 0x80;相当于P_SW2 = P_SW2 & 0x7F = P_SW2 &01111111
  21.     ADCCFG = 0x20;                              //ADCCFG = 0x2f = 00 1 0 1111;  RESFMT = 1  第6位 0左对齐 1右对齐; 后四位  设置ADC时钟为系统时钟/2/16
  22.     ADC_CONTR = ADC_POWER;                           //使能ADC模块 ADC_CONTR = ADC_POWER=0x80=1000 0000
  23. }</span></font></li></ol>
复制代码
回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-1-9 09:20:13 | 显示全部楼层
8H8K64U有ADC DMA,我用DMA超采样到16位都特别稳定,您可以参考一下

https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=2537&pid=19963


注意接地,注意VREF电压和噪声,有独立AVCC的注意AVCC电压和噪声
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:45
  • 最近打卡:2025-04-28 09:23:48

3

主题

43

回帖

493

积分

中级会员

积分
493
发表于 2025-1-9 09:59:24 | 显示全部楼层
STC15是10位的ADC,STC8是12位的ADC。5V下10位的ADC分辨率一位是4.88mV,12位是1.22mV,有可能你的电路有大于1mV小于4mV的纹波或者噪声,导致10位的结果不跳动而12位的跳动。
可以观察一下ADC数值跳动的范围,看看峰峰值大概多大。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-01-10 09:12:27
已绑定手机

5

主题

16

回帖

123

积分

注册会员

积分
123
发表于 2025-1-9 12:52:31 | 显示全部楼层
rm5*** 发表于 2025-1-9 09:59
STC15是10位的ADC,STC8是12位的ADC。5V下10位的ADC分辨率一位是4.88mV,12位是1.22mV,有可能你的电路有大 ...

分辨率问题的话,为什么不按按键时候255这个值很稳定。
我也换AI8H1K08试了 那个也是10位的ADC,但是也是抖的和筛子一样
截图202501091252078112.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:45
  • 最近打卡:2025-04-28 09:23:48

3

主题

43

回帖

493

积分

中级会员

积分
493
发表于 2025-1-9 13:18:35 | 显示全部楼层
把原理图和布局贴上来分析一下,我自己用一般是很稳的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-01-10 09:12:27
已绑定手机

5

主题

16

回帖

123

积分

注册会员

积分
123
发表于 2025-1-9 13:37:08 | 显示全部楼层
rm5*** 发表于 2025-1-9 13:18
把原理图和布局贴上来分析一下,我自己用一般是很稳的



因为我对精度要求低,所以VREF直接接了VCC。
我拿开天斧三 短接了几个线,也是数据抖动。
截图202501091334033162.jpg

截图202501091333235135.jpg

ADC1和ADC2都抖动。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:45
  • 最近打卡:2025-04-28 09:23:48

3

主题

43

回帖

493

积分

中级会员

积分
493
发表于 2025-1-9 14:10:20 | 显示全部楼层
粪*** 发表于 2025-1-9 13:37
因为我对精度要求低,所以VREF直接接了VCC。
我拿开天斧三 短接了几个线,也是数据抖动。

接的按键分压是从哪里取电呢?
有试过直接在电路板上用两个电阻分压吗?
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:12 , Processed in 0.195439 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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