基于DS18B20的瑞萨R7F0C80212温控器的简单实现
[复制链接]
首先说明一下: 这个温控器的实现是基于DS18B20 来实现的, 根据板子资源分布, 只有P0.2 口可以利用一下, 因为其他口都占了, 同时为了保证板子的干净美观, 本人实在不忍心在洞洞板区域进行焊接或者破坏原来电路板的连接(收藏癖),同时实现该温控器时 所有的连接线都是通过杜邦线和网线在 面包板连接的. 具体的电路整体展示如下: 再来一张: 电路原理图说明: 关于DS18B20的原理图,就不用给出了,不理解的可以度娘一下.电路具体是利用P0.2口模拟DS18B20温度传感器的时序,读取温度值,并与提前设置的数值进行比较,然后分别点亮或熄灭相应的灯(P03,P04),目前这2个引脚(P0.3 P0.4)连接了1个2路继电器模块,可以实现继电器输出。 DS18B20近照: 再来一张: 程序方面说明: 1.主要程序难点是DS18B20的驱动程序。由于对时序要求比较严格,因此花了很长的时间研究了一下延时程序(可以参考之前的帖子,关于精确定时的问题),最终驱动程序完成,得到的温度值与家里的DELI指针温度表比对,相差约1度,查看18B20的datasheet,得到数值误差偏大,不知道是不是DELI温度表的问题(温度计原来放在电脑散热口处,温度偏高,后来挪远了,测量温度误差在0.5度左右)。 附图是我暂停程序后,得到的温度数值,具体温度值是这个数值乘以0.0625,所以温度应该是439*0.0625=27.4375摄氏度,图中表显示28度多。
2.程序里使用了定时器功能,定时2s钟实现1次DS18B20的数据读取(因为DS18B20最大转换时间750ms,考虑这个,延时时间设置为2s),这样程序运行起来的时候继电器会每2S钟发生一次刷新。刷新时会影响继电器输出,这个是本程序目前的bug,还没有想好如何去解决这个问题。之前曾经考虑直接去循环DS18B20的读取数据程序,但是程序因为执行速度快,很快P0.3 P0.4的就会刷新,因为点亮的时间有限,最后在P0.3 P0.4端口操作语句里加入了延时函数,效果有所改善。只能等待高手指导了!!!
目前程序只是简单实现了温度的取值,比较,继电器输出。经测试功能基本正常。PS:本来是想传数据到上位机处理的,可惜芯片资源有限,最主要是我能力有限,哈哈,就等高手指导了!!! 视频如下:
程序代码:
|