0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DS18B20驱动程序调试总结

TopSemic嵌入式 来源:TopSemic嵌入式 作者:TopSemic嵌入式 2022-04-03 09:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

DS18B20是一款精度比较好的温度传感器,最重要的是它通过一根导线,既完成通讯,又给芯片供电,在MCU引脚数量比较紧张的时候,确实是个不错的选择。这颗芯片看起来简单,但真正让它跑起来,从里面读出温度数据可没有想象的那么容易。这不,群里的Ryan Wang同学就被折磨得不行。难能可贵的是,在王同学终于搞定它之后,无私地分享出心得和代码。如果你觉得这篇文章能帮到更多的同学,就帮忙转发,或点个在看吧。

通过CUBE使能TIM2定时器,Clock Source使用internal Clock,MCU主频为32Mhz,故Prescaler=32-1=31,Counter Mode为UP,这里注意Counter Period 官方手册要求最低为1,经测试设置为2时,定时器更为准确。

完成以上配置后,需要在程序手动调整和增加功能代码:

1. Cube配置TIM2定时器的基础上,在程序编写delay_us(uint16_t us)函数,delay_us的精确度将直接影响DS18B20温度数据的读取结果。本程序使用了HAL库(CUBE勾选配置)

voiddelay_us(uint16_tus)
{
/*中断会打断微秒延时函数,
*但计数器计数不会停
*防止计数器增加到65535之后重新开始计数
*/
uint16_tdiffer=50000-us;

HAL_TIM_Base_Start(&htim2);
__HAL_TIM_SET_COUNTER(&htim2,differ);

while(differ<50000)
    {
        differ=__HAL_TIM_GET_COUNTER(&htim2);
    }

    HAL_TIM_Base_Stop(&htim2);
}

2. 注意程序工程中DS18B20.H的定义,及DS18B20.C文件,(同文件夹下附件)其内部函数定义根据DS18B20官方手册进行操作,DS18B20为one wire 通讯,对时序的要求相对严格,DS18B20的数据通讯通过DS18B20的data管脚进行单片机通讯,主要流程为:

1.DS18B20初始化

2.DS18B20接入自检

3.DS18B20写0xcc(SKIP ROM)

4.写0x44(通知传感器进行温度数据采集与转换)

5.DS18B2再次初始化

6.DS18B20再次接入自检

7.DS18B20写0xcc(SKIP ROM)(倒序即0011 0011,如下图左)

8.DS18B20写0xbe(通知传感器进行数传)(倒序0111 1101,下图右)

9.DS18B20读一个字节

10.DS18B20再读一个字节

11.数据的预处理

ee6209e8-b18b-11ec-aa7f-dac502259ad0.png

3. 以上每步操作都需要微秒级延时等待,参考DS18B20官方手册关于“DS18B20初始化与check”,“写0”,“写1”,“读0”,“读1”的具体时序要求,注意针对不同MCU的主频配置,在保证1微秒延时准确的前提下,具体的微秒延时将有所调整;特别注意在读时序时的延时,针对32MHZ的本机,在DS18B20.C中已做延时调整(参考正点原子DS18B20试验(72MHZ),使用示波器抓取各个阶段波形,结合DS18B20手册,对比调试,)若时序不对,则读数一直为0或者85。着重理解DS18B20_data管脚的输入和输出模式,拉高和拉低(如DS18B20标准电路要求在data管脚接上拉电阻,那么在管脚IN和OUT模式下,如未人为拉高或拉低,则管脚电平会自动拉高)。

ee826b48-b18b-11ec-aa7f-dac502259ad0.png

eea28ffe-b18b-11ec-aa7f-dac502259ad0.png

eeb6b9a2-b18b-11ec-aa7f-dac502259ad0.png

4. 传感器选用DS18B20,因外部封装种类繁多,在此不放链接。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    462

    文章

    53550

    浏览量

    459266
  • 温度传感器
    +关注

    关注

    48

    文章

    3109

    浏览量

    162472
  • 定时器
    +关注

    关注

    23

    文章

    3361

    浏览量

    121756

原文标题:DS18B20驱动程序调试总结

文章出处:【微信号:TopSemic,微信公众号:TopSemic嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    要做一个DS18B20的读取程序,单总线需要配置为输入或者输出,怎么配置好?

    目前要做一个DS18B20的读取程序,单总线需要配置为输入或者输出。怎么配置好
    发表于 11-18 06:30

    使用18b20软件包报错怎么解决?

    In file included from ../packages/ds18b20-latest/src/dallas_ds18b20_sensor_v1.c:12:0: C
    发表于 10-14 06:49

    zephyr设备驱动程序模型

        1:Zephyr 内核支持多种设备驱动程序驱动程序是否可用取决于board 和驱动程序。 Zephyr 设备模型为配置作为系统一部分的驱动程序提供了一致的设备模型。设备型号负
    的头像 发表于 07-29 10:34 481次阅读
    zephyr设备<b class='flag-5'>驱动程序</b>模型

    单片机实例项目:DS18B20温度传感器

    单片机实例项目:DS18B20温度传感器,推荐下载!
    发表于 06-03 20:59

    Linux环境再升级:PLIN驱动程序正式发布

    PLIN驱动程序现已正式发布,本文将展示如何安装PLIN驱动程序,以及如何在Linux环境下进行基本的PLIN通信操作,确保您能够快速掌握并应用这一新工具。
    的头像 发表于 04-21 15:29 798次阅读
    Linux环境再升级:PLIN<b class='flag-5'>驱动程序</b>正式发布

    血泪教训总结:Air780EPM的LuatOS二次开发——OneWire协议调试注意事项

    的OneWire通信,大幅提升项目开发效率。 一、LuatOS 及 OneWire 说明   LuatOS 支持 OneWire 通信协议,本文以 DS18B20 温度传感器和 Air780EPM 搭配
    的头像 发表于 03-20 17:52 913次阅读
    血泪教训<b class='flag-5'>总结</b>:Air780EPM的LuatOS二次开发——OneWire协议<b class='flag-5'>调试</b>注意事项

    最佳实践指南:Air780EPM的LuatOS二次开发——OneWire协议调试的注意事项

    在物联网设备开发中,精准且稳定的数据传输是构建智能系统的核心。 一、LuatOS 及 OneWire 说明   LuatOS 支持 OneWire 通信协议,本文以 DS18B20 温度传感器
    的头像 发表于 03-17 16:57 580次阅读
    最佳实践指南:Air780EPM的LuatOS二次开发——OneWire协议<b class='flag-5'>调试</b>的注意事项

    基于FPGA的DS18B20数字温度传感器测温实例

    本文将使用三段式状态机(Moore型)的写法来对DS18B20进行测温操作,以便了解DS18B20和熟悉三段式状态机的写法。
    的头像 发表于 03-17 11:06 2101次阅读
    基于FPGA的<b class='flag-5'>DS18B20</b>数字温度传感器测温实例

    DS18B20实时温度传感器中文资料

    DS18B20 是一种单总线数字温度传感器,它被广泛应用于各种领域,例如气象监测、室内温度控制、工业自动化等。DS18B20 采用了单总线接口(One-Wire Interface),这意味着可以通过单个引脚与微控制器通信,大大简化了连接和布线
    发表于 02-28 17:02 5次下载

    AN3761-KSZ DSA驱动程序的使用

    电子发烧友网站提供《AN3761-KSZ DSA驱动程序的使用.pdf》资料免费下载
    发表于 01-22 16:28 0次下载
    AN3761-KSZ DSA<b class='flag-5'>驱动程序</b>的使用

    摩尔线程发布图形显卡驱动程序v280.90.2

    1月20日,摩尔线程发布最新图形显卡驱动程序v280.90.2。
    的头像 发表于 01-21 10:07 898次阅读

    基于FPGA的温度传感器(ds18b20)驱动设计

    本篇主要讨论基于FPGA的温度传感器(ds18b20驱动设计---第一版 设计实现:利用FPGA驱动DS18b20,读取到温度数值显示到数码管上。 首先介绍
    的头像 发表于 01-16 14:08 2073次阅读
    基于FPGA的温度传感器(<b class='flag-5'>ds18b20</b>)<b class='flag-5'>驱动</b>设计

    【正点原子STM32H7R3开发套件试用体验】DS18B20、DHT11温湿度采集

    错误。 检测到 DS18B20 后,开始读取温度,显示在 LCD,每隔 100ms 读取并显示,串口发送温度值。 LED0 闪烁,指示程序运行状态。 代码 #include \"
    发表于 01-01 11:16

    《DNESP32S3使用指南-IDF版_V1.6》第二十九章 DS18B20实验

    DS18B20的通信,并把从温度传感器得到的温度显示在LCD上。本章分为如下几个小节:29.1 DS18B20简介29.2 硬件设计29.3 程序设计29.4 下载验证 29.1 DS18B
    发表于 12-25 09:43

    DS8007有相关的单片机例程或者sdk驱动程序吗?求分享

    请问DS8007有相关的单片机例程或者sdk驱动程序吗?
    发表于 12-19 07:13