在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

1-Wire總線的基本通信協議與多點測溫系統仿真實例分析

電子設計 ? 來源:今日電子 ? 作者:劉興賓 ? 2020-04-13 08:00 ? 次閱讀

1、1-Wire總線的基本通信協議

作為一種單主機多從機的總線系統,在一條1-Wire總線上可掛接的從器件數量幾乎不受限制。為了不引起邏輯上的沖突,所有從器件的1-Wire總線接口都是漏極開路的,因此在使用時必須對總線外加上拉電阻(一般取5kΩ左右)。主機對1-Wire總線的基本操作分為復位、讀和寫三種,其中所有的讀寫操作均為低位在前高位在后。復位、讀和寫是1-Wire總線通信的基礎,下面通過具體程序詳細介紹這3種操作的時序要求。(程序中DQ代表1-Wire總線,定義為P1.0,uchar定義為unsigned char)

1 1-Wire總線的復位

復位是1-Wire總線通信中最為重要的一種操作,在每次總線通信之前主機必須首先發送復位信號。如程序1.1所示,產生復位信號時主機首先將總線拉低480~960μs然后釋放,由于上拉電阻的存在,此時總線變為高電平。1-Wire總線器件在接收到有效跳變的15~60μs內會將總線拉低60~240μs,在此期間主機可以通過對DQ采樣來判斷是否有從器件掛接在當前總線上。函數Reset()的返回值為0表示有器件掛接在總線上,返回值為1表示沒有器件掛接在總線上。

程序1.1 總線復位

uchar Reset(void)

{

uchar tdq;

DQ=0; //主機拉低總線

delay480μs(); //等待480μs

DQ=1; //主機釋放總線

delay60μs(); //等待60μs

tdq=DQ; //主機對總線采樣

delay480μs(); //等待復位結束

return tdq; //返回采樣值

}

2、 1-Wire總線的寫操作

由于只有一條I/O線,主機1-Wire總線的寫操作只能逐位進行,連續寫8次即可寫入總線一個字節。如程序1.2所示,當MCS-51單片機時鐘頻率為12MHz時,程序中的語句_nop_();可以產生1μs的延時,調用此函數時需包含頭文件“intrins.h”。向1-Wire總線寫1bit至少需要60μs,同時還要保證兩次連續的寫操作有1μs以上的間隔。若待寫位wbit為0則主機拉低總線60μs然后釋放,寫0操作完成。若待寫位wbit為1,則主機拉低總線并在1~15μs內釋放,然后等待60μs,寫1操作完成。

程序1.2 向總線寫1bit

void Writebit(uchar wbit)

{

_nop_();

//保證兩次寫操作間隔1μs以上

DQ=0;

_nop_();

//保證主機拉低總線1μs以上

if(wbit)

{

//向總線寫1

DQ=1;

delay60μs();

}

else

{

//向總線寫0

delay60μs();

DQ=1;

}

}

3、 1-Wire總線的讀操作

與寫操作類似,主機對1-Wire總線的讀操作也只能逐位進行,連續讀8次,即可讀入主機一個字節。從1-Wire總線讀取1bit同樣至少需要60μs,同時也要保證兩次連續的讀操作間隔1μs以上。如程序1.3所示,從總線讀數據時,主機首先拉低總線1μs以上然后釋放,在釋放總線后的1~15μs內主機對總線的采樣值即為讀取到的數據。

程序1.3 從總線讀1bit

uchar Readbit()

{

uchar tdq;

_nop_();

//保證兩次連續寫操作間隔1μs以上

DQ=0;

_nop_();

//保證拉低總線的時間不少于1μs

DQ=1;

_nop_();

tdq=DQ;

//主機對總線采樣

delay60μs();

//等待讀操作結束

return tdq;

//返回讀取到的數據

}

數字溫度傳感器DS18B20

1 DS18B20的基本特性

● 采用1-Wire總線接口,可以方便實現多點測溫。

● 與主機連接方便,除5kΩ的總線上拉電阻外無須其他額外器件。

電源電壓范圍為3.0~5.5V,與3.3V和5V數字系統均可很好地兼容。

● 測量范圍為-55~+125℃,分辨率為9~12位可編程

● 通過編程可設置溫度報警上下限,設置值掉電不丟失。

● 內部集成了用于器件尋址的64bit光刻ROM編碼。

2 DS18B20中的存儲器

在DS18B20中共有三種存儲器,分別是ROM、RAM、EEPROM,每種存儲器都有其特定的功能,可查閱相關資料

3 1-Wire總線ROM功能命令

在DS18B20內部光刻了一個長度為64bit的ROM編碼,這個編碼是器件的身份識別標志。當總線上掛接著多個DS18B20時可以通過ROM編碼對特定器件進行操作。ROM功能命令是針對器件的ROM編碼進行操作的命令,共有5個,長度均為8bit(1Byte)。

①讀ROM(33H)

當掛接在總線上的1-Wire總線器件接收到此命令時,會在主機讀操作的配合下將自身的ROM編碼按由低位到高位的順序依次發送給主機。總線上掛接有多個DS18B20時,此命令會使所有器件同時向主機傳送自身的ROM編碼,這將導致數據的沖突。

②匹配ROM(55H)

主機在發送完此命令后,必須緊接著發送一個64bit的ROM編碼,與此ROM編碼匹配的從器件會響應主機的后續命令,而其他從器件則處于等待狀態。該命令主要用于選擇總線上的特定器件進行訪問。

③跳過ROM(CCH)

發送此命令后,主機不必提供ROM編碼即可對從器件進行訪問。與讀ROM命令類似,該命令同樣只適用于單節點的1-Wire總線系統,當總線上有多個器件掛接時會引起數據的沖突。

④查找ROM(F0H)

當主機不知道總線上器件的ROM編碼時,可以使用此命令并配合特定的算法查找出總線上從器件的數量和各個從器件的ROM編碼。

⑤報警查找(ECH)

此命令用于查找總線上滿足報警條件的DS18B20,通過報警查找命令并配合特定的查找算法,可以查找出總線上滿足報警條件的器件數目和各個器件的ROM編碼。

4 、DS18B20器件功能命令

與1-Wire總線相關的命令分為ROM功能命令和器件功能命令兩種,ROM功能命令具有通用性,不僅適用于DS18B20也適用于其他具有1-Wire總線接口的器件,主要用于器件的識別與尋址;器件功能命令具有專用性,它們與器件的具體功能緊密相關。下面是DS18B20的器件功能命令。

①啟動溫度轉換(44H)

該命令發送完成后,主機可以通過調用Readbit()函數判斷溫度轉換是否完成,若Readbit()的返回值為0則表示轉換正在進行,若Readbit()的返回值為1則表示轉換完成。

②讀RAM(BEH)

該命令發送完成后,主機可以通過調用Readbit()函數將DS18B20中RAM的內容從低位到高位依次讀出。

③寫RAM(4EH)

該命令發出后,主機隨后寫入1-Wire總線的3字節將依次被存儲到DS18B20的報警上限、報警下限和配置寄存器中。

④復制RAM(48H)

該命令會將DS18B20的報警上限、報警下限和配置寄存器中的內容復制到EEPROM中。該命令發出后,主機可以通過調用Readbit()函數判斷復制操作是否完成,若Readbit()的返回值為1,則表示復制操作完成。

⑤回讀EEPROM(B8H)

該命令會將存儲在EEPROM中的報警上限、報警下限和配置寄器的內容回讀到RAM中,主機可以通過調用Readbit()函數判斷回讀操作是否完成,若Readbit()的返回值為1則表示回讀操作完成。DS18B20在上電時會自動進行一次回讀操作。

1-Wire總線的基本通信協議與多點測溫系統仿真實例分析

5、 主機與DS18B20的通信流程

如圖1所示,主機通過1-Wire總線接口對DS18B20的每次訪問都以復位信號和ROM功能命令開始,訪問的結束位置是不確定的,這與具體的功能命令相關。圖中圓角矩形中的操作與主機發送的功能命令相對應,隨著功能命令的不同圓角矩形中的操作有時可以被省略。對總線上的DS18B20來說,復位信號意味著又一次通信的開始,器件對此的響應是拉低總線以告知主機自身的存在,然后準備接收ROM功能命令。

多點測溫系統仿真實例

DS18B20是一種比較廉價的溫度傳感器,其封封裝形式如圖2所示。在Proteus中包含有DS18B20的仿真模型,這使得相關程序的調試變得簡單方便。下面以一個實例介紹用Proteus仿真多點測溫系統的步驟。

① 繪制仿真原理圖

如圖3所示,在本實例中以單片機AT89C52和8個DS18B20構成了一個多點測溫系統。為了有足夠的空間存儲各個DS18B20的ROM編碼和溫度值,在實例中用一片8KB的SRAM芯片6116對單片機的RAM進行了擴展。

②設置DS18B20仿真模型的屬性

首先右擊選中protues編輯區中的DS18B20仿真模型然后再左擊,此時彈出如圖4所示的屬性設置對話框。其中,Family Code是器件的家族碼,對于DS18B20來說是28H。ROM Serial Number對應于器件的48bit序列號,格式為十六進制,在填寫過程中要保證同一條1-Wire總線上所有仿真模型的ROM Serial Number都不相同。Automatic SerializatiON設置為No時仿真模型將使用ROM Serial Number中的序列號,設置為Yes時模型的序列號將由仿真環境自動生成,在此設置為Yes,這樣可以免去手動修改ROM Serial Number的麻煩。Current Value中是仿真模型當前的溫度值。Cranularity中是單擊仿真模型的溫度值增減按鈕時溫度值的改變量,在此設置為1.1。其他選項保持默認即可。單擊OK按鈕,設置完成。

③編制源程序

主機是通過Reset()、Readbit()、Writebit()三種基本操作與1-Wire總線進行通信的,只要這三個函數的時序準確,那么對于有一定C語言編程基礎的用戶來說程序其他部分的編寫將不是難事,按照前面介紹的流程向總線發送功能命令并進行相應讀寫操作即可。多點測溫系統編程的難點在于器件的查找,系統上電時主機首先要查找總線上掛接著多少個1-Wire器件并將各個器件的ROM編碼讀入單片機的RAM中,這需要一套復雜的算法,限于篇幅關于此算法在此不再詳述。本仿真實例大體工作過程如圖3右下角注釋部分所示,“查找總線上所有器件的ROM編碼并存儲”這一步可以由uchar B20ReadROM(uchar B20ROM[]函數完成,該函數的返回值是查找到的器件數目,各個器件的ROM編碼將存儲在二維數組B20ROM[]中。

“統一開始溫度轉換”的通信流程為:發送復位信號;發送跳過ROM(CCH)命令;發送啟動溫度轉換(44H)命令。

“逐器件讀取溫度值”的通信流程為:發送復位信號;發送匹配ROM(55H)命令;發送第i(i=0~7)個器件的ROM編碼;發送讀RAM(BEH)命令;讀取2字節,其中低字節在前,高字節在后,讀取到的值符合溫度值數據格式。

④在Proteus中添加監視變量

為了檢驗程序運行的正確與否,通常的做法是將運行結果通過單片機的UART接口輸出到虛擬終端上,這種方法的缺點是會占用一定的單片機資源,在此介紹另外一種程序調試技巧——監視變量。在Proteus的運行狀態下點擊Debug→Watch Window會彈出監視窗口(Watch Window),然后按下Alt+A鍵會彈出如圖5所示的添加存儲器條目對話框(Add Memory Item)。所謂監視變量也就是監視相應存儲單元中的內容,圖5中

Memory用于選擇待監視變量所在的存儲器;Name用于填寫變量名稱,為了含義清晰該名稱最好與源程序中定義的變量名稱一致;Address用于填寫待監視變量的地址;Data Type和Display Fomat用于設置數據格式和顯示格式。設置完成后單擊Add按鈕即可添加一個監視變量。在本實例中將測量到的溫度值轉化成ACSLL碼字符串的格式存儲在二維數組TempBuffer中,因此Data Type選擇為ASCLLZ STring,Watch Window的最終結果如圖6所示。Value一欄中顯示的即為8個DS18B20測量到的溫度值,單擊仿真模型的溫度增減按鈕溫度值的改變會自動映射在Watch Window中。

圖6中TempBuffer[i](i=0~7)的地址在Keil中可以按以下步驟得到:

● 單擊Keil工具欄中的按鈕,進入調試狀態。

● 通過View→Output Window菜單調出Keil的Output Window,并選中Command標簽

● 在Output Window的命令輸入區輸入TempBuffer[i]然后回車即可得到TempBuffer[i]的地址,在本實例中i=0~7。對于非數組類型的變量在輸入時需要在變量名前加取地址符號&,如圖7所示。

責任編輯:gt


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 協議
    +關注

    關注

    2

    文章

    606

    瀏覽量

    39291
  • 仿真
    +關注

    關注

    50

    文章

    4114

    瀏覽量

    133826
  • 總線
    +關注

    關注

    10

    文章

    2898

    瀏覽量

    88254
收藏 人收藏

    評論

    相關推薦

    基于DS2432的USB口1-Wire總線適配器的設計

    通信協議的要求,保證USB口與l-Wire器件正常、安全地通信。  晶體振蕩器電路主要由X1構成,在整個系統中非常重要,可保證DS2490S
    發表于 07-11 07:24

    基于C++模板技術的1-wire總線編程

    這是一個比較簡單的 1-wire 總線 C++ 模板庫。這個庫由 4 個部分組成:11-wire 協議鏈路層接口類:ow_t定義了
    發表于 11-22 23:40

    1-wire總線的基本原理

    1-wire總線的基本原理:1-wire總線是Maxim 全資子公司,Dallas 的一項專有技術與目前多數標準串行數據通信方式,如S
    發表于 09-26 16:57 ?55次下載

    1-wire總線的基本原理

    1-wire總線的基本原理 1-wire總線是Maxim 全資子公司Dallas 的一項專有技術與目前多數標準串行數據通信方式如SP
    發表于 02-05 17:58 ?79次下載

    使用PIC讀寫1-wire EEPROM DS2430的實例

    使用PIC讀寫1-wire EEPROM DS2430的實例程序 ;--------------------------------------------------------------------;; 1-wire d
    發表于 01-16 11:29 ?1502次閱讀

    什么是1-Wire

    什么是1-Wire 定義:單線(加地線)通信協議1-Wire®串行存儲器產品通過單線連接為你的產品添加存儲器!
    發表于 04-20 23:22 ?3528次閱讀
    什么是<b class='flag-5'>1-Wire</b>

    用軟件實現1-Wire通信

    摘要:在沒有專用總線主機(如DS2480B、DS2490)的情況下,微處理器可以輕松地產生1-Wire時序信號。本應用筆記給出了一個采用‘C’語言編寫、支持標準速率的1-Wire主機通信
    發表于 05-08 12:02 ?2330次閱讀
    用軟件實現<b class='flag-5'>1-Wire</b><b class='flag-5'>通信</b>

    1-Wire器件與8051系列單片機的軟件接口

    摘 要:分析1-Wire總線的硬件結構和通信協議,結合實際應用設計了1-Wire器件與8051系列單片機的軟件接口。 關鍵詞:
    發表于 05-17 12:40 ?2072次閱讀
    <b class='flag-5'>1-Wire</b>器件與8051系列單片機的軟件接口

    DS1820單總線(1-wire)數字溫度傳感器

      DS1820是美國DALLAS公司生產的一種單總線(1-wire)數字溫度傳感器,采用1-wire總線通信協議。具有獨特的單
    發表于 12-09 11:35 ?3821次閱讀
    DS1820單<b class='flag-5'>總線</b>(<b class='flag-5'>1-wire</b>)數字溫度傳感器

    孕龍科技發布最新總線協議分析模塊1-Wire組件

    孕龍科技發布最新總線協議分析模塊 1-Wire (Advanced)。 1-Wire 組件用于遠程控制,常見于儲存器、加密儲存器、溫度傳感器
    發表于 05-30 16:35 ?1058次閱讀

    1-Wire總線主機

    Abstract: Communication with 1-Wire slave devices requires a 1-Wire master. There are numerous ways
    發表于 10-19 17:02 ?53次下載

    1-Wire通信協議的工作原理及優勢介紹

    了解1-Wire?通信協議的工作原理及其相對于其他類型串行通信的優勢、常見實施配置,以及主流的1-Wire應用
    的頭像 發表于 10-09 04:10 ?7073次閱讀

    通過調節上拉電阻來提高1-wire總線器件的驅動能力

    Dallas公司生產的集成電路中,廣泛應用了1-wire總線。主機只需1根連線就可以把一個或數個1-wire總線器件連接起來,實現有效可靠的
    的頭像 發表于 05-05 09:53 ?4130次閱讀
    通過調節上拉電阻來提高<b class='flag-5'>1-wire</b><b class='flag-5'>總線</b>器件的驅動能力

    可靠的長線1-Wire網絡指南

    1-Wire協議最初設計用于通過短連接與附近設備進行通信1-Wire也是在單個微處理器端口引腳上增加輔助存儲器的一種方式。后來開發的方法將1-Wi
    的頭像 發表于 03-01 14:21 ?1967次閱讀
    可靠的長線<b class='flag-5'>1-Wire</b>網絡指南

    使用UART實現1-Wire總線主控

    本應用筆記解釋了如何使用微處理器的UART實現1-Wire總線主機。它包括對所需電氣接口、UART配置以及UART和1-Wire信號之間的時序關系的說明。此外,它還參考了UART 1-Wire
    的頭像 發表于 03-29 11:28 ?4126次閱讀
    使用UART實現<b class='flag-5'>1-Wire</b><b class='flag-5'>總線</b>主控
    主站蜘蛛池模板: 亚洲欧美天堂网| 国产午夜毛片一区二区三区| 四虎永久在线免费观看| 亚洲免费在线观看| 成人深夜视频| 色淫阁色九九| 在线视频影院| 国产精品漂亮美女在线观看| 免费一级欧美片在线观免看| 色宅男| 淫欲高三| 狠狠色噜噜狠狠狠狠米奇777| 六月丁香激情综合成人| 久久99爱爱| 手机看片国产免费久久网| 在线看片国产| 国产精品久久久亚洲| 精品国产免费人成高清| 欧美一级在线观看播放| 涩999| 天天噜天天射| 特级片网站| 午夜婷婷网| 亚洲伦理一区二区三区| 综合伊人| 在线观看免费视频网站色| 国产成人精品一区| 玖玖国产在线观看| 男男宿舍高h炒肉bl| 性满足久久久久久久久| 69日本xxⅹxxxxx19| free性乌克兰高清videos| 欧洲三级网站| 国产性猛交xx乱| 57pao强力打造免费高清高速| 草逼网址| 亚洲人成网i8禁止| 欧美不卡视频| 国产成人精品曰本亚洲78| 99热免费| 亚洲成人网在线观看|