xiaobendan 发表于 2026-5-7 07:15:20

突然想起来AI8051U那个ADC的IO口电压跳变的现象原因有肯能

是芯片的那个施密特功能产生的现象

就是说设为高阻态是失败的,取消施密特也是失败的。
但是其他的都能跑,或者至少8位模式能跑,32位也能正常输入输出和LCD显示,
就是ADC的结果一直不对,我用直接平均的方法把12位数据压缩成0-51显示,
结果是显示3-35,同样的代码在8位模式就正确显示0-51

神农鼎 发表于 2026-5-7 10:35:17





xiaobendan 发表于 2026-5-7 12:55:40

神农鼎 发表于 2026-5-7 10:35


不懂你老是发这些啥意思

神农鼎 发表于 2026-5-7 12:59:40

我也是不知道你咋那,ADC 大家都从我们的程序出发都对了,
您这查查硬件,再看看我们的实验箱程序不就搞定了 ?

深圳国芯人工智能有限公司-实验箱

xiaobendan 发表于 2026-5-7 13:07:33

神农鼎 发表于 2026-5-7 12:59
我也是不知道你咋那,ADC 大家都从我们的程序出发都对了,
您这查查硬件,再看看我们的实验箱程序不就搞定 ...
就是用试验箱的程序,但是它是轮询的,不是用的中断方式。
这个先不提
就那个电压跳变的问题,有没有硬件在手上,测试一下看看,
我发的一串数据就是用实验代码从下载工具软件里面复制的,能看出来数据的跳变。
就是目前高阻态设置是失败的,施密特关闭设置也是失败的。难道这个芯片是假货?

xiaobendan 发表于 2026-5-8 17:09:43

xiaobendan 发表于 2026-5-7 13:07
就是用试验箱的程序,但是它是轮询的,不是用的中断方式。
这个先不提
就那个电压跳变的问题,有没有硬件 ...

1060

wulin 发表于 2026-5-8 17:28:16

xiaobendan 发表于 2026-5-7 13:07
就是用试验箱的程序,但是它是轮询的,不是用的中断方式。
这个先不提
就那个电压跳变的问题,有没有硬件 ...

用于ADC输入的端口不做任何设置,芯片默认加电高阻。与内部施密特无关。此现象多为使用不当。上原理图看看。

xiaobendan 发表于 2026-5-8 17:44:54

wulin 发表于 2026-5-8 17:28
用于ADC输入的端口不做任何设置,芯片默认加电高阻。与内部施密特无关。此现象多为使用不当。上原理图看 ...

不用设置?
不需要设置为高祖态?

wulin 发表于 2026-5-8 22:37:45

xiaobendan 发表于 2026-5-8 17:44
不用设置?
不需要设置为高祖态?

按用户手册第1158页ADC基本操作示例程序稍做修改,下载到擎天柱AI8051核心板测试,缓慢旋转电位器,ADC结果在P2的LED显示完全正常,没有发现突跳现象。

#include "Ai8051U.H" //头文件见下载软件
#include "intrins.h" //使用_nop_()函数所必须要包含的头文件,


void Delay20ms(void)        //@12.000MHz
{
        unsigned char data i, j, k;

        i = 2;
        j = 56;
        k = 172;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void main()
{
        P_SW2 |= 0x80;            //允许访问扩展的特殊寄存器,XFR
        WTST = 0;               //设置取程序代码等待时间,
        CKCON = 0;                //设置访问片内的 xdata 速度,
        P0M0 = 0x00;P0M1 = 0x00;
        P1M0 = 0x00;P1M1 = 0x20;//设置 P1.5 为 ADC 口
        P2M0 = 0x00;P2M1 = 0x00;
        P3M0 = 0x00;P3M1 = 0x00;
        P4M0 = 0x00;P4M1 = 0x00;
        P5M0 = 0x00;P5M1 = 0x00;
        ADCTIM = 0x3f;            //设置 ADC 内部时序
        ADCCFG = 0x0f;            //设置 ADC 时钟为系统时钟/2/16/16
        Delay20ms();
        while (1)
        {
                ADC_CONTR=ADC_POWER|ADC_START|0x05;//启动转换1100 1000
                _nop_();_nop_();                   //小延时
                while (!(ADC_CONTR & ADC_FLAG));   //等待ADC转换完成标志置位 1010 0000
                ADC_CONTR &=~ADC_FLAG;             //清完成标志
                P2 = ~ADC_RES;                     //读取 ADC 结果
        }
}

xiaobendan 发表于 2026-5-9 07:28:16

wulin 发表于 2026-5-8 22:37
按用户手册第1158页ADC基本操作示例程序稍做修改,下载到擎天柱AI8051核心板测试,缓慢旋转电位器,ADC结 ...

难道设置P1M0这些也需要先 P_SW2 |= 0x80;?
你这是在32位模式?
我的主循环要显示LCD,比较慢,所以我用中断。
我之前发过从串口得到的数据,跳变是有的。
你能拍视频看下吗?
我要的芯片需要等两天才能到。
页: [1] 2
查看完整版本: 突然想起来AI8051U那个ADC的IO口电压跳变的现象原因有肯能