搜索
bottom↓
回复: 28

18B20,数码管,串口中断总是打断数码管显示,怎么解决?

[复制链接]

出0入0汤圆

发表于 2021-1-8 20:08:50 | 显示全部楼层 |阅读模式
51单片机,18B20测温,tm167数码管显示,串口传送温度,但是数码管总是间断的显现闪了一下,18B20测温我屏蔽串口中断了,怎么解决数码管的闪烁?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入22汤圆

发表于 2021-1-8 20:25:57 来自手机 | 显示全部楼层
一般我都是中断里面做显示的。

出200入2554汤圆

发表于 2021-1-8 21:30:05 | 显示全部楼层
别说用 TM1637 了,就是直接用 IO 扫描带点阵,都可以做到和 18B20 并用,无闪烁。
重新规划一下各种任务的时间先后,而不是一味靠中断帮你解决前后台,就可以很稳定。

读 18B20 -> 更新 TM1637 -> 阻塞式串口发包,这么个流程都不需要用到中断

出0入0汤圆

 楼主| 发表于 2021-1-8 22:12:55 | 显示全部楼层
t3486784401 发表于 2021-1-8 21:30
别说用 TM1637 了,就是直接用 IO 扫描带点阵,都可以做到和 18B20 并用,无闪烁。
重新规划一下各种任务的 ...

串口是不定时接受上位机的查询,返回温度值,有突发性

出0入0汤圆

发表于 2021-1-8 22:51:25 | 显示全部楼层
9547818 发表于 2021-1-8 22:12
串口是不定时接受上位机的查询,返回温度值,有突发性

做个标记,看看怎么解决掉的。

出0入0汤圆

发表于 2021-1-8 22:54:45 | 显示全部楼层
都用了驱动芯片了,还会闪?都不需要程序扫描就能驱动的了,看看程序是不是哪里关了显示或者清了显示吧,即使定时扫描都能做到跟18b20不冲突的何况还用了专用芯片

出0入25汤圆

发表于 2021-1-8 23:20:33 | 显示全部楼层
软件模拟1-Wire总线访问18B20比较耗时,这应该是程序主要时间开销。
串口开中断,收发分别加环形缓冲区。在访问18B20的时候就不用屏蔽串口中断,等18B20处理完了,再处理串口请求。

主循环:读18B20 -> 显示 -> 处理串口请求

出0入25汤圆

发表于 2021-1-8 23:24:01 | 显示全部楼层
9547818 发表于 2021-1-8 22:12
串口是不定时接受上位机的查询,返回温度值,有突发性

也许你的这个应用,下位机做成定时主动上传数据,而不是交互式更简单。

出0入0汤圆

发表于 2021-1-9 01:15:24 | 显示全部楼层
hecat 发表于 2021-1-8 23:20
软件模拟1-Wire总线访问18B20比较耗时,这应该是程序主要时间开销。
串口开中断,收发分别加环形缓冲区。在 ...

专用的芯片驱动了,数码管即使不送数据也是不会闪的,这里闪的原因是程序的问题,肯定不是显示部分的问题,因为18B20转换时间比较长,以前使用都是读取数据,然后启动转换,中间干其他事情过几百毫秒回来再读数据再启动转换,如此循环,这里不会有多少的时间开销的

出0入25汤圆

发表于 2021-1-9 14:52:20 | 显示全部楼层
JY-MCU 发表于 2021-1-9 01:15
专用的芯片驱动了,数码管即使不送数据也是不会闪的,这里闪的原因是程序的问题,肯定不是显示部分的问题 ...

如果单纯分析数码管闪的问题,的确是程序的问题。

闪一般情况是,重新初始化了驱动芯片,或者送了空白显示数据,引起短暂黑屏,后来又有了正确数据,显示又正常了。

出0入0汤圆

 楼主| 发表于 2021-1-9 15:48:08 | 显示全部楼层
hecat 发表于 2021-1-9 14:52
如果单纯分析数码管闪的问题,的确是程序的问题。

闪一般情况是,重新初始化了驱动芯片,或者送了空白显 ...

恩 我感觉是串口中断打断了显示程序。在上位机不发询问的时候,显示很正常。

出50入4汤圆

发表于 2021-1-9 16:19:25 | 显示全部楼层
我猜
1:显示放在中断里
2: delay() 太多,时间太长

出0入134汤圆

发表于 2021-1-9 16:50:58 | 显示全部楼层
第一步先把程序中的delay去掉,当然可能不有简单的删除,需要修改程序逻辑

出0入4汤圆

发表于 2021-1-9 16:59:21 | 显示全部楼层
9547818 发表于 2021-1-9 15:48
恩 我感觉是串口中断打断了显示程序。在上位机不发询问的时候,显示很正常。 ...

你多久送一次显示?
使用了专用显示驱动芯片时,不用太频繁送显示的

出0入0汤圆

发表于 2021-1-9 19:47:03 | 显示全部楼层
串口中断后,不要马上返回温度,而是先用变量标记已经收到查询请求,这样占用的时间会非常短。
然后,在循环程序里执行完显示后,再判断有没有这个标记,有的话再从串口返回温度。这样就是顺序执行了,不会过长时间中断。

出0入4汤圆

发表于 2021-1-10 06:01:07 | 显示全部楼层
51去掉发送时WHILE等待

出0入0汤圆

 楼主| 发表于 2021-1-19 17:49:04 | 显示全部楼层
经过实验,显示闪烁,包括通讯过程中的温度跳变,都是18B20采集温度受到串口中断影响,采集温度值错误所致,琢磨了几天,把18B20局部屏蔽中断,全部屏蔽中断都试了,效果很差,全部屏蔽,温度不发生跳变,显示也稳定,但就是通讯有问题,上位机发1000个,下位机才回复400个,差的太大,串口中断无法预知的,怎么才能完美解决?想了很久都没有答案。求助

出0入0汤圆

发表于 2021-1-19 19:08:18 | 显示全部楼层
9547818 发表于 2021-1-19 17:49
经过实验,显示闪烁,包括通讯过程中的温度跳变,都是18B20采集温度受到串口中断影响,采集温度值错误所致 ...

先把串口收发中断做好,成功率达到100%;产生串口忙标志,如果忙(可以计算忙时间最好)就不处理18B20;等空闲处理18B20;显示的问题,定时0.1 -- 0.2S随便送送都不应该闪烁

出0入0汤圆

发表于 2021-1-19 21:41:27 | 显示全部楼层
确实如9楼所说的专用的芯片驱动了,数码管即使不送数据也是不会闪的。建议把程序分成几个模块先单独测试在一个个加上去。

出95入100汤圆

发表于 2021-1-19 23:50:57 | 显示全部楼层
读一下18b20的手册吧。详细的读一读,你会有收获的

出0入0汤圆

发表于 2021-1-27 10:12:15 | 显示全部楼层
更新数码管再慢一些,我觉得500ms就够了,测温时不屏蔽中断,只传递接收中断标志--然后空闲时再回复;降低18B20精度,测温的延时通过switch切换实现不要用delay();

出0入0汤圆

 楼主| 发表于 2021-2-14 20:39:40 | 显示全部楼层
hecat 发表于 2021-1-8 23:20
软件模拟1-Wire总线访问18B20比较耗时,这应该是程序主要时间开销。
串口开中断,收发分别加环形缓冲区。在 ...

如何增加“环形缓冲区”?

出0入25汤圆

发表于 2021-2-15 10:38:53 | 显示全部楼层
本帖最后由 hecat 于 2021-2-15 10:39 编辑

环形缓冲区,建一个数组作为串口的发送缓存。
串口正在发送时,后继要发送的数据先存缓冲区,发送函数可以立即返回,而不用等到串口发送完,省去等待时间。
串口发送完当前字符后,产生中断,接着发送缓冲区的数据,直到发完。

出0入0汤圆

发表于 2021-2-15 17:37:08 | 显示全部楼层
我也猜下:你的1820操作时阻塞中断了,并且时间不短,可能一个读写周期

出145入215汤圆

发表于 2021-3-23 17:36:19 来自手机 | 显示全部楼层
屏蔽串口了还闪烁?那就是模拟总线占用时间太多。除了复位操作占用时间长,其它读写操作占用很短的,还是程序逻辑有问题。

出0入0汤圆

发表于 2021-3-24 10:58:56 | 显示全部楼层
显示刷新不用很快的,18b20用中断,显示放在循环里不用精确定时扫描就行

出0入0汤圆

发表于 2021-3-24 10:59:57 | 显示全部楼层
dz20062008 发表于 2021-3-23 17:36
屏蔽串口了还闪烁?那就是模拟总线占用时间太多。除了复位操作占用时间长,其它读写操作占用很短的,还是程 ...

复位也不用占时间的,1820的时间占用可以忽略

出0入4汤圆

发表于 2021-3-24 13:30:49 来自手机 | 显示全部楼层
把18b20移植成状态机接入到中断里面 毫无压力

出0入4汤圆

发表于 2021-3-24 13:33:38 来自手机 | 显示全部楼层
如果这个都搞不定还需要努力努力了,这个可是基础。把18b20切成小块小块去做。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 06:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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