DS18B20 与 单总线

学习链接:学习B站 up 主金善愚的DS18B20课程

一、单总线概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单总线芯片,在其内部的 ROM 中都编制好了唯一的序列号(64位)。

在这里插入图片描述
在这里插入图片描述
单总线芯片在应用时对时序的要求非常高。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、单总线的基本操作

在这里插入图片描述

在这里插入图片描述

三、DS18B20的主要性能

在这里插入图片描述
电源电压范围:3 — 5.5 V

测量温度范围为 —55 ℃ — +125 ℃

分辨率为 9 ~ 12 位 (包括1位符号位),可由编程决定具体位数。

四、DS18B20的典型电路连接

1、外部供电模式下的单只 DS18B20 芯片的电路连接
在这里插入图片描述
2、外部供电模式下的多只 DS18B20 芯片的电路连接
在这里插入图片描述

五、读取单总线器件的ROM码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

六、读取单总线器件的ROM码

在这里插入图片描述

结论:读取的温度传感器的前56位进行 CRC 校验,与最后一个字节不匹配,但读出来的温度正确。

校验方法:

方法一:

CRC校验网址,选择
在这里插入图片描述
方法二:

C语言编写好的 CRC 代码,参考网址Dallas器件DS18B20的CRC8(x8+x5+x4+1)校验码生成代码

#include <stdio.h>

typedef unsigned char uint8_t;

uint8_t dat[] = { 0x28,0xBD,0xE8,0x65,0x55,0x5F,0xE5 }; // 实际的DS18B20返回的值是7A。
 
uint8_t  CheckCrc()
{
    uint8_t crc = 0, i, j;
    for (i = 0; i < sizeof dat / sizeof dat[0] ; i++)
    {
        crc = crc ^ dat[i];
        for (j = 0; j < 8; j++)
        {
            if (crc & 0x01) crc = (crc >> 1) ^ 0x8C;
            else crc >>= 1;
        }
    }
    return crc;
} 

int main()
{
    printf("0x%x", CheckCrc()); // 输出校验码 16进制格式
    return 0;
}

运行代码后,输出 0x51,与实际的 DS18B20 返回的值一致,说明读取 64 位的ROM成功。

做个总结:实验了两个程序:一个是读取并显示一个 DS18B20 读取的温度数据,第二个是(单总线)读取并显示两(三)个DS18B20读取到的温度数据。使用的单片机是两个STC12C5A60S2和STM32F103ZET6,读取一个 DS18B20 在STC12C5A60S2上成功,读取多个没有成功(基本完全按照视频中的代码)。在 STM32F103ZET6 上读取多个 DS18B20 采集的温度,没有按照视频中的代码,下载的如下链接的代码:单总线读取并显示三个DS18B20的温度数据在LCD1602上,可以很容易改在串口上进行显示。因为该程序的代码和视频中的代码思路是基本一致的,所以我尝试将其部分代码移植到STC12C5A60S2上(按照视频中的步骤),但是,没有成功。现在也不想弄了,原因是耐不下来心了。

代码均上传至资料库(STC12C5A60S2 程序中的 ESP8266 联网部分可以使用)。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuechanba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值