国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

DS18B20測量溫度

這篇具有很好參考價(jià)值的文章主要介紹了DS18B20測量溫度。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


一、DS18B20讀取溫度步驟

一般在使用DS18B20時(shí)會按照以下步驟進(jìn)行溫度轉(zhuǎn)換并讀?。?br> 1、主機(jī)發(fā)送復(fù)位脈沖
2、DS18B20響應(yīng)
3、發(fā)送0xCC命令跳過ROM命令
4、發(fā)送功能命令
5、發(fā)送功能命令0x44啟動溫度轉(zhuǎn)換
6、判斷溫度轉(zhuǎn)換是否完成(為讀取1Bit數(shù)據(jù)為1表示完成)
7、下一個(gè)初始化序列開始讀取溫度
8、然后按照序號1、2、3、4的順序執(zhí)行一遍,發(fā)送功能命令0xBE
9、讀取溫度
DS18B20測量溫度

DS18B20測量溫度

二、初始化復(fù)位時(shí)序

DS18B20測量溫度

/** 
 * @brief 開始時(shí)序
 * @param OneWire_TypeDef *pOneWire
 * @retval: 
 */
static uint8_t OneWire_StartPulse(OneWire_TypeDef * const pOneWire)
{
    HAL_GPIO_SetOutput(&pOneWire->DIO);//產(chǎn)生復(fù)位時(shí)序 >480us
    HAL_GPIO_Low(&pOneWire->DIO);
    Delay_us(500);
    HAL_GPIO_SetInput(&pOneWire->DIO);//等待讀取應(yīng)答信號 等待時(shí)間15us~60us
    for (uint8_t i = 0; i <= 60; i++)
    {
        if (HAL_GPIO_Read(&pOneWire->DIO) == 0)
        {
            break;
        }
        if(i == 60)
        {
            return 1;
        }
        Delay_us(1);
    }
    for (uint8_t i = 0; i <= 240; i++)//等待DS18B20釋放總線 應(yīng)答時(shí)間60us~240us
    {
        if (HAL_GPIO_Read(&pOneWire->DIO) == 1)
        {
            break;
        }
        if(i == 240)
        {
            return 2;
        }
        Delay_us(1);
    }
    return 0;
}

2.發(fā)送一個(gè)字節(jié)

從圖中可以看到發(fā)送邏輯0為拉低總線60~120us,邏輯1為拉低總線后拉高總線整個(gè)時(shí)序要大于60us。
DS18B20測量溫度

/** 
 * @brief 發(fā)送一個(gè)字節(jié)數(shù)據(jù)
 * @param OneWire_TypeDef *pOneWire
 * @param uint8_t dat
 * @retval: 
 */
static void OneWire_SendByte(OneWire_TypeDef * const pOneWire, uint8_t dat)
{
    HAL_GPIO_SetOutput(&pOneWire->DIO);
    for (uint8_t i = 0; i < 8; i++)
    {
        HAL_GPIO_Low(&pOneWire->DIO);
        Delay_us(10);
        if (dat & 0x01)//發(fā)送1 時(shí)序?yàn)槔?us~15us 然后釋放總線,時(shí)序大于60us
        {
            HAL_GPIO_High(&pOneWire->DIO);
            Delay_us(60);
        }
        else//發(fā)送0 時(shí)序是拉低60us~120us 然后釋放總線要大于1us,時(shí)序大于60us
        {
            Delay_us(60);
            HAL_GPIO_High(&pOneWire->DIO);
            Delay_us(5);
        }
        dat >>= 1;
    }    
}

二、讀取數(shù)據(jù)

DS18B20測量溫度

1、讀取一個(gè)Bit

從圖中可以看到主機(jī)拉低總線1~15us后釋放總線,然后主機(jī)讀取總線數(shù)據(jù)。

/** 
 * @brief 接收一個(gè)位數(shù)據(jù)
 * @param OneWire_TypeDef *pOneWire
 * @retval: 
 */
static uint8_t OneWire_ReadBit(OneWire_TypeDef * const pOneWire)
{
    uint8_t Bit = 0;
    HAL_GPIO_SetOutput(&pOneWire->DIO);//讀取時(shí)序 主機(jī)將總線拉低1~15us,然后釋放總線,在15us后讀取數(shù)據(jù),時(shí)序大于60us
    HAL_GPIO_Low(&pOneWire->DIO);
    Delay_us(5);
    HAL_GPIO_SetInput(&pOneWire->DIO);
    Delay_us(10);
    Bit = HAL_GPIO_Read(&pOneWire->DIO);
    Delay_us(60);
    return Bit;
}

2、讀取一個(gè)字節(jié)

讀取一個(gè)字節(jié)數(shù)據(jù)將讀一個(gè)Bit循環(huán)8次就可以了。文章來源地址http://www.zghlxwxcb.cn/news/detail-400292.html

/** 
 * @brief 從OneWire讀取一個(gè)字節(jié) 
 * @param OneWire_TypeDef *pOneWire
 * @retval: 
 */
static uint8_t OneWire_ReadByte(OneWire_TypeDef * const pOneWire)
{
    uint8_t dat = 0;
    for (uint8_t i = 0; i < 8; i++)
    {
        dat >>= 1;
        dat |= OneWire_ReadBit(pOneWire);
    }
    return dat;
}

三、啟動溫度轉(zhuǎn)換

/** 
 * @brief 啟動一個(gè)溫度轉(zhuǎn)換
 * @param DS18B20_TypeDef *pDS18B20
 * @retval 0:成功 1:失敗
 */
uint8_t DS18B20_Convert(DS18B20_TypeDef * const pDS18B20)
{
    uint8_t result = 0;
    result = OneWire_StartPulse(&pDS18B20->DQ);
    if (result)
        return result;
    OneWire_SendByte(&pDS18B20->DQ, 0xCC);//發(fā)送跳過ROM命令
    OneWire_SendByte(&pDS18B20->DQ, 0x44);//發(fā)送轉(zhuǎn)換命令
    return 0;
}

四、判斷轉(zhuǎn)換完成

/** 
 * @brief 檢測溫度轉(zhuǎn)換是否完成
 * @param DS18B20_TypeDef *pDS18B20
 * @retval 0:轉(zhuǎn)換中 1:轉(zhuǎn)換完成
 */
uint8_t DS18B20_IsConvertFinish(DS18B20_TypeDef * const pDS18B20)
{
    return OneWire_ReadBit(&pDS18B20->DQ);
}

五、讀取溫度

/** 
 * @brief 讀取溫度值
 * @param DS18B20_TypeDef *pDS18B20
 * @param float *temperature 溫度值
 * @retval 0:成功 1:失敗
 */
uint8_t DS18B20_ReadTemperature(DS18B20_TypeDef * const pDS18B20, float *temperature)
{
    uint8_t result = 0;
    uint8_t TL,TM;
    result = OneWire_StartPulse(&pDS18B20->DQ);
    if (result)
        return result;
    OneWire_SendByte(&pDS18B20->DQ, 0xCC);//發(fā)送跳過ROM命令
    OneWire_SendByte(&pDS18B20->DQ, 0xBE);//發(fā)送讀取命令
    TL = OneWire_ReadByte(&pDS18B20->DQ);//讀取溫度高位
    TM = OneWire_ReadByte(&pDS18B20->DQ);//讀取溫度低位
    if ((TM & 0xF8) == 0)//正數(shù)
    {
        *temperature = ((int16_t)((TM << 8) | TL)) * 0.0625f;
    }
    else//負(fù)數(shù)
    {
        *temperature = -((~(int16_t)((TM << 8) | TL)) + 1) * 0.0625f;
    }
    return 0;
}

程序地址

到了這里,關(guān)于DS18B20測量溫度的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32讀取DS18B20溫度,并在OLED上顯示

    STM32讀取DS18B20溫度,并在OLED上顯示

    部分代碼來源于網(wǎng)絡(luò),侵權(quán)刪 本文使用硬件:STM32F103C8T6最小系統(tǒng)板、IIC協(xié)議0.96寸OLED屏幕顯示、DS18B20傳感器 ?實(shí)現(xiàn)功能:在OLED上顯示出DS18B20采集到的溫度,精確到小數(shù)點(diǎn)后一位。 DS18B20.c DS18B20.h main.c 實(shí)物效果圖: 工程文件百度網(wǎng)盤鏈接:鏈接:https://pan.baidu.com/s/17QLXeaq2

    2024年02月15日
    瀏覽(18)
  • STM32CubeMX 讀取DS18B20溫度傳感器數(shù)據(jù)串口打印顯示

    STM32CubeMX 讀取DS18B20溫度傳感器數(shù)據(jù)串口打印顯示

    本文要做的所有工作標(biāo)題基本都包括了,讀取溫度傳感器的溫度數(shù)值,再通過串口打印到串口助手; 好多博主大神的教程我按步驟做了之后總是出現(xiàn)程序不報(bào)錯(cuò)并且檢測不到傳感器的情況,后來找到原因并且修改后調(diào)試正常。 我用的是普中科技的實(shí)驗(yàn)板,主控芯片為STM3210

    2024年02月05日
    瀏覽(20)
  • 通過stm32讀取DS18B20并在顯示屏上顯示溫度值(附源碼)

    通過stm32讀取DS18B20并在顯示屏上顯示溫度值(附源碼)

    使用stm32f103c8t6的芯片,在OLED顯示屏上顯示DS18B20的溫度值。 DS18B20 數(shù)字溫度計(jì)提供 9 位溫度讀數(shù),指示器件的溫度信息經(jīng)過單線接口送入 DS18B20 或從 DS18B20 送出, 因此從中央處理器到 DS18B20 僅需連接一條線。?讀、寫和完成溫度變換所需的電源可以由數(shù)據(jù)線本身提供而不需要外

    2024年02月15日
    瀏覽(24)
  • 【TB作品】MSP430單片機(jī) Proteus仿真 DS18B20溫度 LCD1602顯示器 溫度讀取與顯示

    【TB作品】MSP430單片機(jī) Proteus仿真 DS18B20溫度 LCD1602顯示器 溫度讀取與顯示

    效果圖如下: 首先,讓我們先來說說DS18B20集成電路。 ? DS18B20是一款采用OneWire通訊協(xié)議的集成電路,因此只需要一條線就可以與微控制器通訊。它不需要額外的電源,但是也有外部電源輸入端口。 ? OneWire設(shè)備具有64位的ROM代碼。如我們之前所說,這64位的前8位是家族代碼,中間

    2024年02月08日
    瀏覽(24)
  • DS18B20與單片機(jī)的通信、DS18B20采集溫度、MODBUS協(xié)議、練習(xí)框架

    DS18B20與單片機(jī)的通信、DS18B20采集溫度、MODBUS協(xié)議、練習(xí)框架

    單總線數(shù)字溫度計(jì) 異步的半雙工的串行通信 測量范圍從-55℃ ~ +125℃,增量值為0.5℃ 要用DS18B20采集溫度,就要實(shí)現(xiàn)與單片機(jī)之間的通信,因此有兩個(gè)問題 Bus master active low:主機(jī)執(zhí)行低電平 DS1820 active low:DS18B20執(zhí)行低電平 Both bus master and DS1820 active low:全都釋放低電平 Resis

    2024年04月16日
    瀏覽(26)
  • DS18B20溫度傳感器工作原理

    DS18B20溫度傳感器工作原理

    目錄 管腳描述 綜述 訪問DS18B20的事件序列 通信時(shí)序 VDD:電源引腳,當(dāng)采用寄生電源的時(shí)候,VDD必須連接到地 DQ:單總線運(yùn)用的數(shù)據(jù)輸入/輸出,當(dāng)采用寄生電源供電時(shí),同時(shí)向設(shè)備提供電源 GND:地 ①DS18B20片內(nèi)的ROM中都存在獨(dú)一無二的64位編碼,在后期通信時(shí),是用此編碼進(jìn)

    2024年02月09日
    瀏覽(21)
  • 【mcuclub】溫度傳感器DS18B20

    【mcuclub】溫度傳感器DS18B20

    ? ? VCC:外接供電電源輸入端。 DQ: 數(shù)字信號輸入/輸出端。 GND:電源地線 為什么接上拉電阻: 因?yàn)镈S18B20的數(shù)據(jù)口是漏極開路,如果不接上拉電阻,則只能輸出低電平和高阻態(tài),不能輸出高電平,因此需要外接上拉電阻,否則無法輸出1。DS18B20的工作電流約為1mA,VCC一般為

    2023年04月22日
    瀏覽(17)
  • DS18B20溫度傳感器——測試環(huán)境溫度及代碼

    DS18B20溫度傳感器——測試環(huán)境溫度及代碼

    醒醒!,還在睡呢,開始干代碼了! 單片機(jī)通過OneWire協(xié)議與DS18B20通信,最終測出環(huán)境溫度 OneWire 總線的硬件接口很簡單,只需要把 DS18B20 的數(shù)據(jù)引腳和單片機(jī)的一個(gè) IO 口接上 ? ? ?說明:GND接地,DQ單引線用于數(shù)據(jù)的輸入,VDD接電源正極(注意正負(fù)極不能接反) 通過編程,

    2024年02月09日
    瀏覽(22)
  • STM32——DS18B20溫度傳感器

    STM32——DS18B20溫度傳感器

    一、DS18B20介紹 (一)DS18B20技術(shù)性能特征 1、獨(dú)特的單總線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊,大大提高了系統(tǒng)的抗干擾性。 2、測溫范圍? -55°C~+125°C 3、支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,最多只

    2024年01月19日
    瀏覽(14)
  • Linux下ds18b20驅(qū)動開發(fā)獲取溫度

    Linux下ds18b20驅(qū)動開發(fā)獲取溫度

    對ds18b20不了解的可以查看這篇文章,講解的比較詳細(xì)的:STM32一線協(xié)議-DS18B20溫度傳感器采樣實(shí)現(xiàn) 源碼是根據(jù)上一屆學(xué)長的,想要參考的可以去拜訪一下gitee:代碼鏈接 (1)修改設(shè)備樹 在路徑 linux-imx/arch/arm/boot/dts/ 下修改設(shè)備樹 igkboard.dts : 主節(jié)點(diǎn): 從節(jié)點(diǎn): 在源碼路徑下

    2023年04月22日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包