粪豆 发表于 2025-1-9 00:46:56

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

15W408AS和8H8K64的ADC 有什么不同么》??!
同样的分压按键结构15w408as 显示出来的结果很稳定 基本不跳动
但是8h8k64的结果 不停的跳动
使用开天斧三USB DMAADC串口绘图的结果   由左向右 key1key2 key3 key4
https://www.stcaimcu.com/data/attachment/forum/202501/09/175157uyodpoo73y7ns5s6.jpg


使用STC15W408ASlcd1602显示的话 key1到key4结果分别为69 75 151 108
https://www.stcaimcu.com/data/attachment/forum/202501/09/180320nadnazvoxoazfvio.jpg


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

粪豆 发表于 2025-1-9 09:03:19

有大神指导一下么!

梁工 发表于 2025-1-9 09:10:04

粪豆 发表于 2025-1-9 09:03
有大神指导一下么!
你要看一下STC8H系列手册的ADC章节,增加了一些寄存器。STC8系列的ADC比STC15系列的ADC性能要好得多。

粪豆 发表于 2025-1-9 09:12:18

梁工 发表于 2025-1-9 09:10
你要看一下STC8H系列手册的ADC章节,增加了一些寄存器。STC8系列的ADC比STC15系列的ADC性能要好得多。 ...
我这个精度要求不高 就是几个电阻分压。代码也基本是范例代码多的那些寄存器也都有了!<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;">//========================================================================
BYTE GetADCResult(BYTE ch)
{
                                ADC_CONTR = (ADC_CONTR & 0xF0)|ADC_START|ch;                      //ADC_CONTR = ADC_CONTR | 0x40 |ch= ADC_CONTR | 01000000|ch   代表ADC_START置1 //                                ADC_CONTR &= 0xf0;                                                //清空通道
                                _nop_();
      _nop_();
      _nop_();
      while (!(ADC_CONTR & ADC_FLAG));            //查询ADC完成标志 ADC_CONTR&ADC_FLAG=ADC_CONTR & 0x20=ADC_CONTR & 0010 0000用于检查ADC_CONTR寄存器中ADC_FLAG对应于0x20(二进制00100000)的位的状态。
      ADC_CONTR &= ~ADC_FLAG;                     //#define ADC_FLAG   0x20 //ADC_CONTR = ADC_CONTR & (~0x20)=ADC_CONTR& (~0010 0000)=ADC_CONTR& 1101 1111代表ADC_FLAG清零
                                return (ADC_RES<< 8 )|ADC_RESL;                                                        //右对齐,所以高位左移动8位加低八位; 读取ADC结果
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
    P1M0 = 0x00; P1M1 = 0xcb;//1.2 1.4 1.5 双向1.0 1.1 1.3 1.6 1.7 高祖

//    P_SW2 |= 0x80;                                                                                                                        //P_SW2 |= 0x80;相当于P_SW2 = P_SW2 | 0x80
    ADCTIM = 0x3f;                              //设置ADC内部时序 ADCTIM = 0x3f=0 01 11111
//    P_SW2 &= 0x7f;                                                                                                                        //P_SW2 &= 0x80;相当于P_SW2 = P_SW2 & 0x7F = P_SW2 &01111111
    ADCCFG = 0x20;                              //ADCCFG = 0x2f = 00 1 0 1111;RESFMT = 1第6位 0左对齐 1右对齐; 后四位设置ADC时钟为系统时钟/2/16
    ADC_CONTR = ADC_POWER;                           //使能ADC模块 ADC_CONTR = ADC_POWER=0x80=1000 0000
}</span></font></li></ol>

DebugLab 发表于 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电压和噪声

rm543 发表于 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数值跳动的范围,看看峰峰值大概多大。

粪豆 发表于 2025-1-9 12:52:31

rm543 发表于 2025-1-9 09:59
STC15是10位的ADC,STC8是12位的ADC。5V下10位的ADC分辨率一位是4.88mV,12位是1.22mV,有可能你的电路有大 ...

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


rm543 发表于 2025-1-9 13:18:35

把原理图和布局贴上来分析一下,我自己用一般是很稳的

粪豆 发表于 2025-1-9 13:37:08

rm543 发表于 2025-1-9 13:18
把原理图和布局贴上来分析一下,我自己用一般是很稳的



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




ADC1和ADC2都抖动。

rm543 发表于 2025-1-9 14:10:20

粪豆 发表于 2025-1-9 13:37
因为我对精度要求低,所以VREF直接接了VCC。
我拿开天斧三 短接了几个线,也是数据抖动。



接的按键分压是从哪里取电呢?
有试过直接在电路板上用两个电阻分压吗?
页: [1] 2
查看完整版本: 为什么15w408as的ADC能检测到 8h8k64的检测不到啊!