廉價的處理器可用作PC的RS-232端口與任何Maxim或Dallas 2線器件之間的接口。這允許操縱2線器件進行評估(在原型期間)或在某些測試過程中使用。應用筆記包含框圖和達拉斯FTP站點的鏈接,可在其中下載軟件和固件示例以實現應用筆記。它作為希望構建自己的界面的客戶提供參考,而不是作為成品呈現。
介紹
本應用筆記討論了如何構建廉價的微處理器電路,允許PC使用其串行端口與2線器件通信。除了提供硬件、固件和軟件設計以使PC能夠與IC通信的一般見解外,還介紹了完整的PIC微處理器參考設計,以展示如何圍繞2線器件構建PC應用。該參考設計包括完整的原理圖、固件和低級串行端口代碼C++以快速啟動任何希望集成2線器件的應用。原理圖、固件和軟件可以從達拉斯半導體的FTP站點下載。
概述
通常,當客戶提供與達拉斯半導體評估套件相關的反饋時,他們表示他們正在使用它們來評估達拉斯半導體的 IC,而無需在此過程中努力編寫軟件來練習零件。然而,在過去幾年中,一個趨勢似乎變得越來越普遍,即客戶在設計的原型設計階段使用評估套件與部件進行通信。在過去,這意味著既要使用達拉斯半導體公司為其使用的產品編寫的圖形用戶界面(GUI),也要使用DS9123串行端口適配器,這是一種與2線器件通信的緩慢方法。
本應用筆記旨在幫助希望構建自己的電路以促進PC和2線器件之間通信的客戶,并向他們展示如何生成特定于其應用的定制軟件。它分為四個部分,分別側重于硬件設計、固件、軟件,最后一部分提供分步演練,展示如何構建參考設計、對PIC進行編程以及開始為2線應用編寫定制軟件。
設計將PC連接到2線器件的硬件
首先,最好在開始工作之前明確定義正在設計的內容,這是硬件支持的。 從PC接收數據,然后將其中繼到2線設備。
有很多方法可以將數據從PC傳輸到外部硬件,那么為什么串行端口是許多應用的首選呢?首先,每臺PC上都有串口,RS232標準已經明確定義了訪問端口。此外,PC和微處理器都包含串行端口,因此與微處理器的通信非常簡單。這種標準化的其他三個顯著優點是PC將以相同的波特率發送數據,無論其處理能力如何,串行端口在大多數PC上通常是免費的,并且為串行端口編寫的軟件傾向于在所有Windows?操作系統平臺上工作。也可以通過從串行端口的I / O信號中竊取電源來寄生地為某些適配器供電;但是,對于參考設計來說,這是不可能的,因為它消耗太多的功率。這主要是由于該設計以相對較高的頻率(3.6864MHz)工作,這增加了超出寄生供電的功率要求。
選擇串行端口的主要缺點是它肯定需要一個微處理器將RS232數據格式轉換為2線協議,在這種情況下,可以使用其他一些I / O設備在不添加微處理器的情況下執行任務。此外,串行端口使用 ±12V 信號進行通信。這將需要一個IC將信號電平轉換為微處理器可以處理的水平。雖然可以以 115.2kbps >數據速率運行,但 PC 和微處理器都需要能夠以所選速度運行。通常,PC能夠支持所有標準波特率,但微處理器可能會在發送和接收數據的速度方面存在一些限制。
還有其他用于構建 PC 硬件的選項。除串行端口外,最常見的兩種是使用并行端口或通用輸入/輸出卡 (GPIO)。這兩個選項都存在必須處理才能成功使用它們的問題。并行端口不如串行端口標準。隨著時間的推移,并行端口有四個標準,并且有各種芯片組以不同的模式操作端口。最初的標準并行端口 (SPP) 是第一個標準,大多數 PC 都支持。問題是可能必須在運行應用程序的計算機的 BIOS 中啟用端口的 SPP 模式。此外,在并行端口上很難處理時序,因為它在很大程度上取決于所使用的計算機的速度。
GPIO 卡不是 PC 上的標準設備,因此必須單獨購買并在購買 PC 后安裝。此外,沒有GPIO卡標準,因此無法確保為一個卡編寫的軟件適用于多個系統。
另一個流行的選項是USB。USB的主要優點是能夠寄生為更大的電路供電,以及連接的帶寬。缺點是電路必須在5V的系統電壓下工作,并且固件和軟件變得更加復雜,因為它們現在必須能夠使用設備驅動程序進行通信。
由于串行端口用于與參考設計中的2線器件通信,因此需要解決三個主要問題,以實現PC和微處理器之間的通信。
什么將用于將RS232信號電平轉換為微處理器可以處理的水平?
微處理器是否有通用異步接收器發射器 (UART),或者是否會編寫軟件 UART?
如果使用硬件UART,哪些晶體頻率與微處理器的波特率發生器配合良好?
由于串行端口使用±12V信號進行通信,因此它們不能直接連接到微處理器。幸運的是,達拉斯半導體和Maxim都制造了幾個RS232電平轉換器芯片,將±12V信號轉換為0至5V或0至3V信號。DS100A、MAX232和MAX232最容易使用,3221%符合RS3223規范。DS232A為5V器件,將RS232信號電平轉換為0至5V信號,兩個Maxim芯片工作在3V至5.5V,具有一個(MAX3221)或兩個(MAX3223)串行通道。所有器件都支持高達120kbps的波特率。
UART用于在發送和接收數據時保持通信的定時。許多(但不是全部)微處理器都包含符合RS232標準的硬件UART。除了處理時序之外,硬件UART還處理從字節到位流的數據序列化,并且無需軟件干預即可發送/接收開始和停止控制位。上述所有問題都可以由軟件UART處理,但它通常必須以較慢的波特率處理,并且僅處理串行端口通信可能需要微處理器的很大一部分時間。傳統觀點認為,通常最好購買帶有硬件UART的微處理器。它允許高效的中斷驅動代碼來控制串行端口外設,它往往更可靠,并且由于RS232端口非常普遍,成本增加通常很小。
使用硬件UART時要考慮的重要一點是使用振蕩器或晶體,其頻率將與微處理器的波特率發生器配合使用。波特率發生器通常使用時鐘頻率除以 2 的冪來設置波特率。時鐘頻率為11.0592MHz的分數或倍數通常適用于此任務。選擇晶體頻率后,應使用微處理器數據表中的公式計算波特誤差。如果大于 3%,則可能無法在微處理器和 PC 之間建立通信。此外,使用電阻/電容(RC)時鐘源的微處理器很可能無法維持串行通信,因為工作頻率可能會漂移超過3%。由于波特率誤差將跟隨微處理器時鐘頻率的百分比變化,因此這與靜態波特率誤差為3%會帶來相同的問題。
一旦 PC 和微處理器通信,兩條集電極開路 I/O 線,上拉至 2 線器件的 V抄送與2線器件通信需要電平。PIC 參考設計使用兩個三態圖騰柱輸出,但它通過將信號驅動低電平或三態輸出來仿真集電極開路器件。此輸出與真正的集電極開路輸出之間的唯一區別是 V抄送2線器件的電平必須等于或低于Vcc PIC 電路的電平。如果不保持這種關系,輸入的電壓電平將違反PIC的輸入電平規范。
本節的其余部分重點介紹參考設計硬件的細節。圖1所示為參考設計電路的框圖。
圖1.參考設計的硬件框圖。
除了本節開頭的標準外,以下項目是本電路的設計目標:
Vcc范圍 3.0-5.5V
57600波特串行端口通信
在線可編程微處理器
電路必須能夠從軟件復位
便宜的組件
電路板應盡可能小
為了實現這些目標,之所以選擇 PIC16LF628 處理器,主要是因為其低電壓運行和低成本。其他理想的特性包括用于基于中斷的快速通信的硬件UART,允許精確吟游詩人速率的晶體輸入,并且采用小型20引腳173mil TSSOP封裝。
為了轉換RS232端口的信號電平,選擇MAX3223是因為當與單電源(232.3V至0.5V)一起使用時,MAX5信號電平可提供真正的RS20信號電平。此外,它還具有兩個通道,允許使用串行端口的DTR(數據終端就緒)信號來重置電路板。該器件還提供微型 3223 引腳 TSSOP 封裝。MAX<>和PIC可以采用相同的V工作電壓抄送電源,兩個芯片都將在3V至5.5V范圍內工作。這允許該板同時使用 3V 和 5V 2 線器件。
信號 RA0 和 RA1 用于與 2 線器件通信,上拉電阻連接到它們以用于集電極開路 2 線總線。 RB1 和 RB2 通過 MAX3223 連接到串行端口,MAX232 使用外部電容(未顯示)產生真正的 RS2 電平。其余 I/O 引腳用于位 I/O。它們可用于其他串行協議,或根據需要控制3223線器件上的其他數字輸入。這將在固件部分進行更深入的描述。框圖所示電路中最復雜的部分是復位電路。在PIC微處理器上,MCLR是低電平有效復位信號。NMOS的柵極連接到DTR信號,由MAX<>進行電平轉換。如果 NMOS 柵極處的 DTR 信號為高電平,則 NMOS 將接通,這將使 PIC 處于復位狀態。如果 DTR 信號在 NMOS 柵極處較低,它將釋放 MCLR 信號,這將允許 MCLR 信號自行調整為 V抄送在正常操作或 V聚丙烯如果PIC正在電路編程。肖特基二極管的存在是為了隔離V聚丙烯來自 V 的電源抄送在編程期間供電,當NMOS強制處理器復位時,電阻會限制二極管的通電流。盡管 MCLR 已連接到連接器,但在正常工作期間應斷開此引腳。它僅用于PIC的在線編程。
整個參考設計的完整原理圖和物料清單 (BOM) 可在達拉斯半導體的 FTP 站點上找到。本文檔的演練部分中提供了指向 FTP 站點上該位置的鏈接。
設計固件以與PC和2-Wire器件通信
手頭的任務是從RS232串行協議到2線協議的數據轉換,但還有其他事情需要考慮。首先,必須為2線主站發出啟動和停止總線命令,以建立與從器件的通信。此外,在特定應用程序中,要寫入或從特定設備讀取的數據量將有很大差異,設備地址以及通過在特定地址讀取和寫入執行的功能也會有很大差異。因此,編寫的固件不包含特定于設備的命令,并且它被設計為盡可能快地執行任何給定命令的低開銷協議。這允許軟件做出決策并控制應用程序流,而固件僅接收基本命令并執行它們。圖 2 顯示了參考設計使用的命令協議。
圖2.與 PIC 電路通信的串行端口命令
命令 | 發送的第一個字節 | 發送的第二個字節 | 返回的字節數 |
啟動(重新啟動) | A0h | 0x00,忽略 |
0xB0命令確認 0xFA命令失敗 |
寫入字節 | A1h | 數據 |
0xB1命令確認 0xFA命令失敗 |
讀取字節 | A2h |
確認 0x01 = 確認 0x00 = 納克 |
返回的第一個字節 = 返回的數據 返回 的第二個字節 0xB2 = 命令 Ack 0xFA = 失敗 |
停 | A3h | 0x00,忽略 |
0xA3命令確認 0xFA命令失敗 |
切換 SCL 9 次 | A4h | 0x00,忽略 |
0xA4命令確認 0xFA命令失敗 |
位 I/O 讀取 | 呃?h | 0x00,忽略 |
0x00讀取位清除0x01讀取位設置 0xFA命令失敗 |
位 I/O 寫入 | F?h |
0x00 清除位 0x01設置位 |
0xF0命令確認0xFA 命令失敗 |
?值 | ?指定一個未使用的針腳微處理器針腳。添加這部分命令處理器代碼是為了便于將該適配器用于其他非標準協議,例如DS17中的3位1867線移位寄存器。 |
被認為是2線通信必不可少和基本的項目是啟動(重新啟動)總線命令、停止總線命令、寫入數據字節、讀取帶確認的數據字節和讀取不確認的數據字節。固件支持其他三個項目。第一個是切換 SCL 九次的命令,如果在通信過程中檢測到錯誤,這對于重置 2 線總線很有用。最后兩個是位 I/O 讀取和寫入,它讀取 I/O 引腳的狀態或設置 I/O 引腳的狀態,具體取決于發出的命令。這些命令的存在是為了允許將PIC端口A和B上的剩余I/O信號用于設計人員可能需要的任何內容。
圖3顯示了與響應地址2x0的40線器件通信所需的順序。每個操作都要求 PC 向 PIC 發送兩個字節。一旦PIC收到第二個字節,它將開始處理它收到的數據。接收的第一個字節確定要執行的操作類型(啟動、發送數據等)。如果命令需要數據操作數,它將查看發送的第二個字節,否則忽略第二個命令字節。由于處理器期望每條指令有兩個字節,因此如果命令不需要第二個字節,則必須發送虛擬字節。如果 PIC 收到無效命令,它將返回 0xFA,這表示失敗。
圖3.示例2線寫和讀通信序列
發送啟動命令,將0x23寫入地址2x0的40-Wire器件,發送停止命令 | |||||
序# | 發送的第一個字節 | 發送第 2 個字節 | 返回的第一個字節 | 返回第 2 個字節 | 描述 |
1 | 0xA0 |
0x00 占位符 |
0xB0 命令確認 |
沒有 | 2線啟動 |
2 | 0xA1 |
0x40 數據 |
0xB1 命令確認 |
沒有 | 通過 0 線總線發送40x2(寫入地址。字節) |
3 | 0xA1 |
0x40 數據 |
0xB1 命令確認 |
沒有 | 通過0線總線發送23x2(數據到2線部分) |
4 | 0xA3 |
0x00 占位符 |
0xB3 命令確認 |
沒有 | 2線擋塊 |
發送啟動命令,從地址0x23的2線器件讀取0x40,發送停止命令 | |||||
順序 3 | 發送的第一個字節 | 發送第 2 個字節 | 返回的第一個字節 | 返回第 2 個字節 | 描述 |
1 | 0xA0 |
0x00 占位符 |
0xB0 命令確認 |
沒有 | 2線啟動 |
2 | 0xA1 |
0x41 數據 |
0xB1 命令確認 |
沒有 | 通過 0 線總線發送41x2(讀取地址。字節) |
3 | 0xA2 |
0x00 閱讀帶納克 |
0x23 數據 |
0xB2 命令確認 |
讀取帶納克 第1個字節0x23(來自2線部分的數據) 第2個字節0xB2(命令確認) |
4 | 0xA3 |
0x00 占位符 |
0xB3 命令確認 |
沒有 | 2線擋塊 |
始終返回至少一個值以確認命令已成功完成或失敗,在 2 線讀取字節操作的情況下,將同時返回數據字節和命令的確認。PIC 為每條指令返回的確認字節實際上是在通知軟件兩個項目都成功發生。首先,它確認 PIC 正在與 PC 通信。這在大多數時候可能看起來簡單可靠,但它確實提供了反饋,以通知用戶串行電纜斷開,或者尚未向應用板供電。其次,它驗證持續監控2線通信的PIC是否看到預期的確認。這意味著從PC到PIC或從PIC到2線器件的通信都不會中斷。
位 I/O 命令(0xE 和 0xF?)可用于將 I/O 引腳的狀態設置為輸出,也可以將引腳置于高阻抗狀態并將其讀取為輸入。由于本應用筆記不針對位I/O操作,因此在此結點不再深入討論。但是,命令協議包含在圖 2 中,而 ?識別特定I/O引腳的值如圖4所示。
圖4.位 I/O 讀寫地址
描述 | ?值 | Port Pin |
位 I/O 讀取(0xE? 位 I/O 寫入(0xF? |
1 | RA2 |
2 | RA3 | |
3 | RA4 | |
4 | RB0 | |
5 | RB3 | |
6 | RB4 | |
7 | RB5 | |
8 | RB6 | |
9 | RB7 | |
一個 | RA0 | |
B | RA1 |
為了實現上面討論的固件,構建了圖 5 中所示的程序流程。程序等待接收兩個命令字節,并在收到每個字節時對其進行驗證。一旦收到兩個有效字節,程序就會執行該命令。如果未收到兩個有效字節,固件將拒絕該命令,并返回錯誤代碼而不是命令確認。固件 (dsio.hex) 可在 FTP 站點上找到。
圖5.固件程序流程。
如果項目需要自定義固件,強烈建議將固件與PC軟件分開編寫和調試。這可以使用終端程序來模擬固件開發期間對PC的要求來完成。這允許分離問題,并且可以將調試時間保持在最短。
為PC編寫低級軟件以控制PIC
在編寫低級PC代碼以與PIC電路通信時,要努力實現的主要目標是使代碼可重用。這使得在提供PC通信代碼的初始工作完成后,將PIC電路與多個2線項目一起使用變得簡單。本節重點介紹將引用的“通信代碼”,該代碼允許PC與PIC的固件進行通信。這不應與GUI軟件開發人員生成的最終應用程序代碼混淆。下一節將集中介紹如何從頭開始構建應用程序(硬件和軟件)。此外,盡管可以在不涉及語言細節的情況下解決此主題,但將從C++的角度進行討論,因為它是所提供代碼的語言。
C++是一種非常強大的語言,它包含大量預定義的變量類型以及類,允許定義用戶定義的對象和變量。在這種情況下,代碼可重用的方式是編寫一個C++類來處理與PIC電路的所有通信。由于所有通信要求都包含在單個類中,因此該類的任何實例都能夠命令電路執行其任何功能。提供的類稱為 CdsPic,它包含在兩個文件中,DSPIC.cpp 和 DSPIC.h。
C++類初始化類的構造函數中的串行端口。初始化將打開 COM1,重置 PIC,然后等待 PIC 的串行端口初始化橫幅將 PIC 電路標識到 PC。如果 PIC“未找到”,構造函數將關閉 COM1,并嘗試 COM2,然后嘗試 COM3,最后嘗試 COM4。找到正確的端口后,它將退出構造函數,并且 DetectBoard() 函數將在調用時返回 true。如果在檢查所有四個端口后未找到 PIC,構造函數將退出,并且 DetectBoard() 函數在調用時將返回 false。如果函數返回 false,則由應用軟件來處理問題。
假設適配器被“找到”,那么只要類保持在范圍內,就可以調用該類的所有 2 線函數。這些函數包括 Start2W()、WriteSlave2W()、ReadSlave2W() 和 Stop2W()。此外,還有一個命令(ToggleSCL9x())對2線總線進行1次時鐘,可用于在任何傳輸過程中通信受到干擾時重置總線。為了與PIC的固件通信,這些命令調用多個例程通過串行端口讀取和寫入數據。這些例程存在于兩個附加文件中,DSIOLIB1.cpp 和 DSIOLIB<>.h。
一旦類離開作用域,通常當應用程序退出時,應用程序將釋放用于其變量的所有內存。這將調用 CdsPic 類的析構函數,析構函數將關閉串行端口。
由于2線例程是提供給客戶的,因此本應用筆記將不討論該實施例的大部分細節。應該提到的一件事是,包含的串行端口代碼僅適用于Windows的環境(Windows NT 3.1,Windows 95或任一的后續版本)。如果需要不同的編程語言或操作系統,則必須重寫通信軟件以適應操作系統和語言要求。最簡單的方法是查看提供的C++代碼,以查看在與固件通信時必須發送的內容和接收的內容。然后使用新軟件模擬交易。建立通信所需的串行端口設置為57600波特,1停止位和無奇偶校驗。
使用參考設計構建應用硬件和 PC 軟件
要基于 PIC 參考設計構建應用程序,需要完成四項任務。
使用 FTP 站點上提供的 dsio.hex 文件對 PIC16LF628 微處理器進行編程。使用Microchip提供的PICSTART Plus編程器或工程編程器(如BP Microsystems提供的編程器)。
構建詳細原理圖中顯示的電路,該原理圖可在FTP站點上找到。如果需要以后能夠更改固件,請確保有一種方法可以隔離 MCLR,V抄送、微處理器的 RB6 和 RB7。這些是用于對微處理器進行在線編程的引腳。如果使用PIC的表面貼裝版本,則對PIC進行在線編程可能比找到合適的適配器插座與編程器的插座配合使用更方便。
下載 FTP 站點上提供的C++代碼 (DSIOLIB1.cpp、DSIOLIB.h、DSPIC.cpp、DSPIC.h)。
編寫應用軟件。在項目中包括上面列出的四個文件,并在軟件頂部添加一個#include“DSPIC.h”指令。在全局空間中實例化 CdsPic 類的成員。它在全球空間中完成有兩個原因。它將允許程序的所有子例程訪問2線函數,并且只允許此類的單個實例進入應用程序。如果打開該類的第二個實例,它將無法打開由前一個實例控制的串行端口,因此它將無法與 PIC 通信。實例化類后,使用 BoardPresent() 成員函數確定串行端口是否已成功打開。如果檢測到電路板,請根據需要繼續調用CdsPic成員函數以執行2線功能,否則通知用戶未找到PIC電路。
生成了一個示例2線應用,可以從達拉斯半導體的FTP站點下載。它被稱為DS2W,它是一種通用的2線工具,允許用戶從Window的對話框界面與2線器件進行通信。該程序的 GUI 如下所示。
圖6.DS2W 的圖形用戶界面。
此應用程序的源代碼包含在FTP站點上,可用作示例,以幫助使用PIC電路進行開發。該代碼演示如何使用CdsPic類中提供的所有2線相關函數來構建基于Windows的應用程序。
此外,如果硬件是如上所述構建的,則可以下載并執行可執行的 DS2Wa.exe。
總結
本應用筆記提供了一組硬件、固件和軟件示例,可用于構建與2線器件通信的定制應用。該解決方案易于實現,只需使用提供的固件對PIC進行編程,構建電路以及調用通信軟件。為了幫助軟件開發,本文提供了一個2線接口程序示例,以演示如何將提供的通信軟件集成到最終應用中。如果只需要一個簡單的2線程序即可與2線器件手動通信,則可以下載并使用示例應用的可執行文件。
審核編輯:郭婷
-
usb
+關注
關注
60文章
7903瀏覽量
264056 -
微處理器
+關注
關注
11文章
2247瀏覽量
82331 -
GUI
+關注
關注
3文章
650瀏覽量
39553
發布評論請先 登錄
相關推薦
評論