DS18B20温度读取笔记1-复位函数

DS18B20主要性质:

全数字输入/输出单总线通信结构 (只占用一个IO口,而且在这个IO口上能挂接多个DS18B20)

内部温度为12bit分辨率,精度为正负0.5℃ (注意不要将精度和分辨率混为一谈)

12位分辨率的时候转换工作周期最长为750ms (算是比较慢的外设了,设计时要考虑多任务工作的要求)

可以使用寄生电源模式(可以再省掉VCC的线,这种模式下总共只要2根线就能工作,但是对IO口有特别要求)

工作温度范围为:-55℃至+125℃(理论值,实际工作温度小于此值)

内置唯一产品序列号,方便都器件联机工作(内部序列号还可以做他用,例如:用作加密的密钥)

 

封装:

TO-92封装为最常用(其他我没用过- -!)

引脚位为器件扁平面朝上,引脚朝向自己,左起依次为 GND - DQ - VCC

 

驱动步骤模块:

1. 复位:每次对DS18B20操作都要进行复位。复位操作为MCU将DS18B20单总线拉低至少480us,拉低后MCU应当释放单总线(拉高)然后置单总线引脚为输入状态。当DS18B20收到复位信号并且MCU释放了单总线后,延迟15至60uS后会回发一个回复信号(会拉低总线60至240uS)。具体时序图见下图:

DS18B20温度读取笔记1-复位函数

Reset函数伪代码:

DQ为单总线引脚

DQ_INPUT为单总线引脚设置为输入模式

DQ_OUTPUT为单总线引脚设置为输出模式

DQ_READ为读单总线引脚状态

DQ_L为单总线引脚输出低

DQ_H为单总线引脚输出高

delay_us(n):微秒延迟函数,n等于几就延迟多少微秒

uint32 count;循环计数器,用以等待回复信号,无符号32位整形变量。

 

uint8 Reset18b20(void)

{

    uint8 read;      //DQ引脚状态暂存

    uint8 err;       //err出错计数器

    DQ_L;            //拉低总线

    delay_us(520);   //延迟520微秒,时序上最低延迟480us就可以了,但是考虑到延迟可能有偏差所以稍稍

                     //延长延时用以确保可靠复位,只要保证能可靠复位此处延迟秒数可以自定(大于480)

    DQ_H;            //拉高释放总线并改为输入模式

    DQ_INPUT;

    delay(60);       //延迟60微秒

    for (count = 0; count < 65535; count++)  //count计数防止复位失败出错,如果MCU速度太快可以使用

    {                                        //更大的计数量

        if (DQ_READ == 0)                   //读引脚状态,如果拉低了则复位成功

        {

            read = 1;                        //复位成功,成功标志置1

            break;                           //退出循环

        }

    }

    DQ_OUTPUT;                               //设置引脚为输出并置高

    DQ_H;

    if (read == 0)                           //如果复位不成功了则出错变量增1

    {

        err += 1;

    }

    return err;                              //返回出错变量,外部判断如果为0则成功,不是0       

}                                            //

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章