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

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

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

3天內不再提示

如何配置微芯片PICmicro以實現1-Wire通信協議

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-03-13 11:34 ? 次閱讀

Maxim的多款產品包含1-Wire通信接口,可用于各種應用。這些應用可能包括與Microchip流行的PICmicros(PIC)之一的接口。為了方便1-Wire器件與外設接口控制器(PIC)微控制器之間的簡單接口,本應用筆記介紹了PIC微控制器的一般1-Wire軟件例程,并解釋了時序和相關細節。本應用筆記還提供了一個涵蓋所有1-Wire例程的文件。此外,還包括匯編代碼示例,該代碼是專門為PIC16F628從DS2762高精度Li+電池監測器讀取數據而編寫的。

介紹

Microchip的PICmicro微控制器器件(PIC)已成為低功耗和低成本系統解決方案的熱門設計選擇。微控制器具有多個通用輸入/輸出(GPIO)引腳,可輕松配置為實現Maxim的1-Wire協議。1-Wire協議允許與許多Maxim器件進行交互,包括電池和熱管理、存儲器、iButton器件等。本應用筆記介紹了PIC1F16的一般628-Wire例程,并解釋了時序和相關細節。為方便起見,所有材料均假定為4MHz時鐘,該頻率可用作許多PIC的內部時鐘。本文檔的附錄A包含一個包含所有1-Wire例程的文件。附錄B給出了一個示例匯編代碼程序,用于PIC16F628從DS2762高精度Li+電池監測器讀取數據。本應用筆記僅限于常規速度的1-Wire通信。?

常規宏

要以主機形式傳輸1-Wire協議,只需要兩種GPIO狀態:高阻抗和邏輯低電平。以下 PIC 程序集代碼段實現這兩種狀態。PIC16F628有兩個GPIO端口,PORTA和PORTB。任一端口都可以設置為1-Wire通信,但在本例中,使用PORTB。此外,以下代碼假定匯編代碼中配置了一個常量DQ,以指示PORTB中的哪個位是1-Wire引腳。在整個代碼中,此位號簡稱為 DQ。在外部,該引腳必須通過上拉電阻連接到電源

    OW_HIZ:MACRO
      ;Force the DQ line into a high impedance state.
             BSF    STATUS,RP0                  ; Select Bank 1 of data memory
             BSF    TRISB, DQ                   ; Make DQ pin High Z
             BCF    STATUS,RP0                  ; Select Bank 0 of data memory
             ENDM

      OW_LO:MACRO
      ;Force the DQ line to a logic low.
             BCF    STATUS,RP0                  ; Select Bank 0 of data memory
             BCF    PORTB, DQ                   ; Clear the DQ bit
             BSF    STATUS,RP0                  ; Select Bank 1 of data memory
             BCF    TRISB, DQ                   ; Make DQ pin an output
             BCF    STATUS,RP0                  ; Select Bank 0 of data memory
             ENDM

這兩個代碼片段都是作為宏編寫的。通過將代碼編寫為宏,可以使用單個宏調用將其自動插入到程序集源代碼中。這限制了必須重寫代碼的次數。第一個宏OW_HIZ強制DQ線進入高阻抗狀態。第一步是選擇數據存儲器的存儲組1,因為TRISB寄存器位于存儲組1中。接下來,通過在TRISB寄存器中設置DQ位,將DQ輸出驅動器更改為高阻抗狀態。最后一行代碼更改回數據存儲器的庫 0。最后一行不是必需的,但用于使所有宏和函數調用使數據存儲器處于已知狀態。

第二個宏OW_LO將 DQ 線強制到邏輯低電平。首先,選擇數據存儲器的組0,以便可以訪問PORTB寄存器。PORTB 寄存器是數據寄存器,包含強制到 TRISB 引腳的值(如果它們配置為輸出)。

PORTB 的 DQ 位被清除,因此線路被強制為低電平。最后,選擇數據存儲器的組1,并清除TRISB寄存器的DQ位,使其成為輸出驅動器。與往常一樣,宏以選擇數據存儲器的庫 0 結束。

包括一個標記為WAIT的最終宏,以產生1-Wire信號的延遲。WAIT 用于產生 5μs 倍數的延遲。調用宏時,TIME 值為微秒,并生成相應的延遲時間。宏只需計算需要 5μs 延遲的次數,然后在 WAIT5U 內循環。例程 WAIT5U 將在下一節中顯示。對于 WAIT 中的每個指令,處理時間都作為注釋給出,以幫助了解延遲是如何實現的。

    WAIT:MACRO TIME
      ;Delay for TIME μs.
      ;Variable time must be in multiples of 5μs.
             MOVLW (TIME/5) - 1                 ;1μs to process
             MOVWF TMP0                         ;1μs to process
             CALL WAIT5U                        ;2μs to process
             ENDM

通用1線例程

1-Wire時序協議具有特定的時序約束,必須遵循這些約束才能實現成功的通信。為了幫助實現特定的時序延遲,使用例程WAIT5U產生5μs延遲。此例程如下所示。

      WAIT5U:
      ;This takes 5μs to complete
             NOP                                ;1μs to process
             NOP                                ;1μs to process
             DECFSZ TMP0,F                      ;1μs if not zero or 2μs if zero
             GOTO WAIT5U                        ;2μs to process
             RETLW 0                            ;2μs to process

當與 WAIT 宏結合使用時,可以生成簡單的時序延遲。例如,如果需要 40μs 延遲,則會調用 WAIT 0.40。這會導致 WAIT 中的前 3 行執行,導致 4μs。接下來,WAIT4U 中的前 5 行代碼在 5μs 內執行,循環 6 次,總共 30μs。WAIT5U的最后一個循環需要6μs,然后返回到WAIT宏。因此,總處理時間為 4 + 30 + 6 = 40μs。

2.5V < VDD <5.5V, TA= -20°C 至 +70°C
參數 象征 最小值 典型值 麥克斯 單位
時隙 t槽 60 120 微秒
恢復時間 t娛樂 1 微秒
寫入 0 低時間 t低0 60 120 微秒
寫入 1 低時間 t低1 1 15 微秒
讀取數據有效 tRDV 15 微秒
復位時間高 tRSTH 480 微秒
復位時間低 tRSTL 480 960 微秒
存在檢測 t帕迪亞 15 60 微秒
存在檢測低 tPDL 60 240 微秒

任何1-Wire交易的開始都始于來自主器件的復位脈沖,然后是來自從器件的存在檢測脈沖。圖 1 說明了此事務。該初始化序列可以通過PIC輕松傳輸,匯編代碼如圖1所示。1-Wire初始化、讀取和寫入的時序規格見上表1。這些參數在文檔的其余部分中都有引用。

pYYBAGQOmdqAXAliAAAqdsMe1ak002.gif

圖1.1-Wire初始化序列。

    OW_RESET:
             OW_HIZ                             ; Start with the line high
             CLRF      PDBYTE                   ; Clear the PD byte
             OW_LO
             WAIT      .500                     ; Drive Low for 500μs
             OW_HIZ
             WAIT      .70                      ; Release line and wait 70μs for PD Pulse
             BTFSS     PORTB,DQ                 ; Read for a PD Pulse
             INCF      PDBYTE,F                 ; Set PDBYTE to 1 if get a PD Pulse
             WAIT      .430                     ; Wait 430μs after PD Pulse
             RETLW     0

OW_RESET程序首先確保DQ引腳處于高阻抗狀態,以便上拉電阻將其拉高。接下來,它清除PDBYTE寄存器,以便準備驗證下一個存在檢測脈沖。之后,DQ引腳被驅動為低電平500μs。這符合 tRSTL參數如表1所示,并提供了一個20μs的附加緩沖器。將引腳驅動至低電平后,引腳釋放至高阻抗狀態,并在讀取存在檢測脈沖之前增加70μs的延遲。使用 70μs 可確保 PIC 采樣在有效時間對 t 的任意組合PDL和 t帕迪亞.讀取存在檢測脈沖后,調整PDBYTE寄存器以顯示邏輯電平讀數。然后,DQ引腳將處于高阻抗狀態再保持430μs,以確保RSTH已滿足時間,并包括一個20μs的額外緩沖器。

1-Wire通信所需的下一個例程是DSTXBYTE,用于將數據傳輸到1-Wire從器件。此例程的 PIC 代碼如圖 2 所示。此例程與要在 W 寄存器中發送的數據一起調用,并立即移動到 IOBYTE 寄存器。接下來,將 COUNT 寄存器初始化為 8,以計算從 DQ 行發送的位數。從 DSTXLP 開始,PIC 開始發送數據。首先,DQ引腳被驅動為低電平3μs,無論發送什么邏輯電平。這確保了低1時間被滿足了。接下來,IOBYTE 的 lsb 移動到 CARRY 位,然后測試一個 60 或 <>。如果CARY為<>,則設置TRISB的DQ位,將引腳變為高阻抗狀態,并通過上拉電阻將線路拉高。如果 CARRY 為零,則行保持低電平。接下來增加<>μs的延遲以允許最小t低0時間。等待60μs后,引腳變為高阻抗狀態,然后再增加2μs用于上拉電阻恢復。最后,COUNT 寄存器遞減。如果 COUNT 寄存器為零,則所有 2 位均已發送,例程已完成。如果 COUNT 寄存器不為零,則從 DSTXLP 開始發送另一個位。寫零和寫一過程的可視化解釋如圖 <> 所示。

poYBAGQOmduAI0H7AAAw_GF7_hc302.gif

圖2.1線寫入時隙。

    DSTXBYTE:                                 ; Byte to send starts in W
             MOVWF     IOBYTE                   ; We send it from IOBYTE
             MOVLW     .8
             MOVWF     COUNT                    ; Set COUNT equal to 8 to count the bits
      DSTXLP:
             OW_LO
             NOP
             NOP
             NOP                                ; Drive the line low for 3μs
             RRF        IOBYTE,F
             BSF        STATUS,RP0              ; Select Bank 1 of data memory
             BTFSC      STATUS,C                ; Check the LSB of IOBYTE for 1 or 0
             BSF        TRISB,DQ                ; HiZ the line  if LSB is 1
             BCF        STATUS,RP0              ; Select Bank 0 of data memory
             WAIT      .60                      ; Continue driving line for 60μs
             OW_HIZ                             ; Release the line for pullup
             NOP
             NOP                                ; Recovery time of 2μs
             DECFSZ    COUNT,F                  ; Decrement the bit counter
             GOTO      DSTXLP
             RETLW     0

1-Wire通信的最后一個例程是DSRXBYTE,它允許PIC從從器件接收信息。代碼如圖 3 所示。在任何DQ活動開始之前,COUNT寄存器初始化為8,其功能是計算接收的位數。DSRXLP 首先將 DQ 引腳驅動為低電平,向從設備發出 PIC 已準備好接收數據的信號。該線路被驅動為低電平6μs,然后通過將DQ引腳置于高阻抗狀態來釋放。接下來,PIC再等待4μs,然后對數據線進行采樣。在低行驅動后,OW_LO中有 1 行代碼,OW_HIZ內有 3 行代碼。每條線需要1μs來處理。將所有時間相加得到 1 + 6 + 3 + 4 = 14μs,略低于 tRDV規格為15μs。讀取 PORTB 寄存器后,DQ 位被屏蔽,然后將寄存器添加到 255 以強制 CARRY 位鏡像 DQ 位。然后,CARRY 位移動到存儲傳入字節的 IOBYTE 中。一旦字節被存儲,就會增加50μs的延遲,以確保槽滿足了。最后一項檢查是確定 COUNT 寄存器是否為零。如果為零,則已讀取 8 位,并退出例程。否則,將在 DSRXLP 上重復該循環。讀零和讀一事務如圖 3 所示。

pYYBAGQOmdyALZhpAABDRKLtVjQ926.gif

圖3.1-線讀取時隙。

         MOVLW     .8
             MOVWF     COUNT                   ; Set COUNT equal to 8 to count the bits
      DSRXLP:
             OW_LO
             NOP
             NOP
             NOP
             NOP
             NOP
             NOP                                ; Bring DQ low for 6μs
             OW_HIZ
             NOP
             NOP
             NOP
             NOP                                ; Change to HiZ and Wait 4μs
             MOVF      PORTB,W                  ; Read DQ
             ANDLW     1<

總結

Maxim的1-Wire通信協議可以在Microchip的PICmicro系列微控制器上輕松實現。要完成1-Wire交易,只需要兩種GPIO狀態,并且PIC上的多個GPIO很容易配置用于此任務。1-Wire通信需要三個基本程序:初始化、讀字節和寫字節。介紹并詳細介紹了這三個程序,以提供精確的1-Wire常規速度通信。這使得PIC能夠與Maxim 1-Wire的眾多器件中的任何一種接口。本文檔的附錄 A 在一個方便的包含文件中包含所有三個例程。附錄B包含一個小型匯編程序,用于將PIC16F628連接至DS2762高精度Li+電池監測器。

審核編輯:郭婷

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

    關注

    48

    文章

    7660

    瀏覽量

    152186
  • 控制器
    +關注

    關注

    112

    文章

    16468

    瀏覽量

    179638
  • 1-Wire
    +關注

    關注

    0

    文章

    49

    瀏覽量

    21359
收藏 人收藏

    評論

    相關推薦

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

    , touch。但這里沒有具體實現這些操作。2、1-wire 器件枚舉類:ow_enum_t實現了 enum 操作。3、1-wire 協議
    發表于 11-22 23:40

    1-Wire時序的理解及配置

    應用中的高速模式。DS2480B的特性之一在于其具有伸縮速率模式,允許設計者標準速度配置1-Wire時序。本應用筆記闡述了如何確定最佳時序配置以及如何用Windows?軟件將設置參數
    發表于 11-12 00:17

    如何訪問1-Wire API

    任何組件在創建者來實現這一點。有人知道如何訪問1-Wire API嗎?謝謝 以上來自于百度翻譯 以下為原文I have been looking for a 1-wire component
    發表于 07-29 15:25

    DS2480B串行接口1-Wire 線驅動器的使用

    1-Wire®通信協議可以通過微處理器上的一個IO 引腳產生,不過,為了創建可靠的1-Wire 網絡,必須提供正確的時序和適當的輸出電壓擺率。1-Wire 主機發送的時序不正確
    發表于 04-18 10:14 ?57次下載

    應用筆記159絕對可靠的1-Wire通信

    應用筆記159絕對可靠的1-Wire通信 Dallas Semiconductor的1-Wire®器件利用一根數據線和定義完善的、經過時間檢驗的協議進行
    發表于 04-10 09:57 ?25次下載

    什么是1-Wire

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

    用軟件實現1-Wire通信

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

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

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

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

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

    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 ?7105次閱讀

    實現隔離式1-Wire總線

    1-Wire總線在需要電氣隔離的醫療設備中傳感器和耗材的認證和校準中越來越受歡迎。本文應用筆記4206“為嵌入式應用選擇合適的1-Wire主機”為基礎,介紹如何修改現有的1-Wire
    的頭像 發表于 01-17 10:39 ?3358次閱讀
    <b class='flag-5'>實現</b>隔離式<b class='flag-5'>1-Wire</b>總線

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

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

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

    本應用筆記解釋了如何使用微處理器的UART實現1-Wire總線主機。它包括對所需電氣接口、UART配置以及UART和1-Wire信號之間的時序關系的說明。此外,它還參考了UART
    的頭像 發表于 03-29 11:28 ?4221次閱讀
    使用UART<b class='flag-5'>實現</b><b class='flag-5'>1-Wire</b>總線主控

    如何將1-Wire主機復用到多個通道?

    如何將1-Wire主機復用到多個通道? 1-Wire是一種串行通信協議,可用于連接各種感測器和芯片,如溫度傳感器、濕度傳感器、EEPROM等。通常情況下,每個
    的頭像 發表于 10-29 14:21 ?649次閱讀
    主站蜘蛛池模板: 亚洲电影在线看 | 国产成都一二三四区 | 国产婷婷色一区二区三区深爱网 | 精品国产柚木在线观看 | 毛片网子 | 国模人体一区二区三区 | 国产成人毛片视频不卡在线 | 热久久最新视频 | 新版天堂中文资源官网 | 新网球王子u17世界杯篇免费观看 | 美女扒开尿口让男生添 漫画 | 色偷偷亚洲综合网亚洲 | 欧美在线成人午夜影视 | 狠狠色噜噜狠狠狠狠 | 天天做天天做天天综合网 | 看黄a大片 免费 | 天堂中文字幕 | www.4虎| 日本不卡视频在线 | 色综合免费视频 | 免费观看黄视频 | 黄色成人在线网站 | 天天摸天天躁天天添天天爽 | 亚洲国产网 | 国产大乳美女挤奶视频 | 国产嫩草影院在线观看 | 免费观看四虎精品国产永久 | 女人成午夜大片7777在线 | 在线免费看高清视频大全 | 欧美人与z0zoxxxx特 | 三级网站在线免费观看 | 久久系列| 一级特黄色毛片免费看 | 成人看的一级毛片 | 中国高清性色生活片 | 激情网站网址 | 中国一级毛片aaa片 中国一级特黄aa毛片大片 | 亚洲深夜 | se94se欧美 | 你懂的在线免费观看 | 亚洲综合涩 |