找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2137|回复: 12
收起左侧

单片机AD结果送数码管显示,相邻的数字来回跳动显示,如何处理?

  [复制链接]
ID:686513 发表于 2022-3-5 12:16 | 显示全部楼层 |阅读模式
例如将0-1.25v电压送单片机的AD,数码管显示在两个数的临界点上时(如:在7-8的临界点上,数码管显示7或8 ,来回跳动),怎样处理跳动,使其显示几就是几,不再跳动!AD结果我试过求平均法并通过查表法显示,还是有跳动!
回复

使用道具 举报

ID:554500 发表于 2022-3-5 16:04 | 显示全部楼层
进行数字滤波,常用冒泡排序法
回复

使用道具 举报

ID:488334 发表于 2022-3-5 20:14 | 显示全部楼层
1、最终的AD值采用平均值,比如采集32次相加,最后取平均值。
2、软件上设置一个跳动余量,当前的AD平均值和上次的AD平均值对比,如果差值小于自己的设定的跳动余量,则不刷新AD值
3、设置数码管刷新时间,比如0.5秒刷新一次数码管。
总之有很多方法可以限制数码管频繁跳动,我一般都是把三种方式一起用
回复

使用道具 举报

ID:624769 发表于 2022-3-5 21:44 | 显示全部楼层
AD采样,必然是有跳动的,
但是,如果你认为他是稳定的,比如通过ADC测量室温,通常温度不会频繁变化。
此时,可以设置一个策略,比如: 17,18 度反复跳变 超过5次,则进入“迟钝状态”(即温度假想为 18 度,不再变动)只有当温度超过19,或者低于16,才再次进入“敏锐”状态。
回复

使用道具 举报

ID:401564 发表于 2022-3-5 22:42 | 显示全部楼层
ADC是一定会跳动的,这是绝对的,ADC本身就是有一个上下浮动的误差
2#已经给出正确的方法了
我这个代码你参考一下,是参考,不是照抄        float Bat_Voltage,i;
        Bat_Voltage=(float)1.19*1024/ADC_data_bat;                                                                //STC8G的内部参考电压为1.19V
        i=Bat_Voltage-Last_Voltage;                         //本次电压值和上次电压进行比较,Last_Voltage为全局变量
        i=fabs(i);
        if(i>0.05)                                                                                                                                //电压变化值超过0.05V才进行处理
        {
                Last_Voltage=Bat_Voltage;

处理;
}
回复

使用道具 举报

ID:686513 发表于 2022-3-8 16:27 | 显示全部楼层
Y_G_G 发表于 2022-3-5 22:42
ADC是一定会跳动的,这是绝对的,ADC本身就是有一个上下浮动的误差
2#已经给出正确的方法了
我这个代码你参 ...

Bat_Voltage=(float)1.19*1024/ADC_data_bat; 这个应该是反了吧?应该ADC数据/1024吧?Bat_Voltage=(float)1.19*ADC_data_bat/1024;
回复

使用道具 举报

ID:1008839 发表于 2022-3-8 16:33 | 显示全部楼层
很多原因会产生跳动啊
回复

使用道具 举报

ID:401564 发表于 2022-3-8 18:29 | 显示全部楼层
zhth1979 发表于 2022-3-8 16:27
Bat_Voltage=(float)1.19*1024/ADC_data_bat; 这个应该是反了吧?应该ADC数据/1024吧?Bat_Voltage=(floa ...

大哥,我不是说参考,不要照抄了吗?
我这个是通过内部参考电压来计算电源电源的,不是计算IO端口的电压呀
只想给你看一下怎么处理而已
要是我有话,我是不可能等上那么多天的,这几天的时间,我至少上网找相关资料一百遍了,至少改代码100次以上了
回复

使用道具 举报

ID:800866 发表于 2022-3-10 15:08 | 显示全部楼层
我这里说明一下我做AD采集时候的思路,你可以设置一个需要AD数据的间隔时间,时间越长,跳动越小,当然AD采集就不及时了,所以个时间可以根据实际情况而定;因为现在AD单次转换的速度都是比较快的,这样就是每一次想要AD数据的时候,在很短的时间内可以连续采集N次AD值,然后去掉最大值和最小值,然后再取平均数值,然后在和余量值比较(这个值可以自己多试几次,看看效果,取一个数就行),在余量之内,就不更新AD数据;超过余量值,就更新AD数据;
回复

使用道具 举报

ID:341453 发表于 2022-3-10 15:57 | 显示全部楼层
跳动是必然的,不过可以提高分辨率,例如提高采样结果到1.456,你只显示1.45,可以减少跳动出现。
回复

使用道具 举报

ID:1009505 发表于 2022-3-10 16:22 | 显示全部楼层
四舍五入?不要让范围波动?
回复

使用道具 举报

ID:415064 发表于 2022-3-10 16:47 | 显示全部楼层
窗口,在临界值附近时,变化必须大于多少才能显示
回复

使用道具 举报

ID:121859 发表于 2022-3-10 18:10 | 显示全部楼层
出现跳动是因为你AD检测的结果前后两次不同所致。要灵敏度,跳动是无法避免的,除非牺牲灵敏度。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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