本篇應(yīng)用筆記目的是演示如何使用PC并口構(gòu)建一種快速、簡單和經(jīng)濟(jì)的2-Wire(與I2C兼容)接口。本片應(yīng)用筆記專門為接收或者訂購Dallas Semiconductor器件樣片且意識到他們需要與2線設(shè)備通信的用戶編寫。雖然存在好多解決方案,在本篇筆記中給出的方案不需要微處理器、固件,也不存在購買芯片的困難。而是通過Windows 95/98軟件,幫助解決同時調(diào)試硬件和軟件的困難。在給出的軟件的同時,也給出幾個調(diào)試工具,能夠使硬件快速工作運行。
既然硬件并不與PC接口,不需要作標(biāo)準(zhǔn)的聲明。雖然給出的硬件和軟件一起構(gòu)建和測試,用戶使用有一定的風(fēng)險。確保再三地檢查所有的連接和電源電壓,因為電源直接連接到PC的并口電路。Dallas Semiconductor/Maxim對可能引起的損害不負(fù)任何責(zé)任。本解決方案僅用于評估目的,不是用于產(chǎn)品或者發(fā)行品。雖然現(xiàn)在的軟件僅適用于Win95/98,將來的版本會支持Win NT。
為什么使用并口,而不是串口或者USB?
在本篇應(yīng)用筆記中選擇并口作為接口是因為目標(biāo)是建造一種快速、簡單和經(jīng)濟(jì)的接口。這個并行接口是基于74HC05邏輯芯片和一些無源元件。另外一個方面,串口解決方案需要一個微處理器、固件、編程器或者系統(tǒng)可編程、電平轉(zhuǎn)換、晶體以及更多的無源器件。同樣地,USB除了工作量大的軟件和固件投入外,也需要相當(dāng)數(shù)目的硬件。而且調(diào)試USB硬件經(jīng)常需要昂貴的協(xié)議分析儀。因此,根據(jù)我們的目標(biāo),很明顯地選擇并口。然而在作出最終決定時,必須分析缺點以確保這些缺點是可容忍的。
并口最大的缺點是它的未來。更多的PC制造商放棄了并口和串口,轉(zhuǎn)而支持USB。并口的另外一個缺點是大多數(shù)的配置需要在PC的BIOS里設(shè)置。這意味著在PC和硬件之間不能建立通信時,PC必須重新啟動才能進(jìn)入BIOS工具(通常在啟動時按F1或者DEL鍵)設(shè)置并口配置。在工程或者評估環(huán)境中,中斷不會花費太多時間,而一旦投入到市場中大量的支持將成為問題。雖然更大的麻煩是PC之間的差異。因為并口是遺留硬件,好多年來一直在發(fā)展變化和改進(jìn)。然而,在設(shè)計硬件時,要使硬件能夠工作在老版本和新版本的并口上。這樣在設(shè)計接口硬件時必須作個假設(shè)(定時和電氣)。最后,另外一個缺點是操作系統(tǒng),在Windows NT系統(tǒng)中,需要設(shè)備驅(qū)動程序。Windows NT不允許用戶程序直接讀/寫硬件寄存器。在軟件方面如果購買驅(qū)動程序的話是非常昂貴的。
幸運的是,在評估環(huán)境中使用Windows 95和Windows 98并不是很麻煩,一旦軟件修正以支持Windows NT則不必在意這個話題。
硬件
圖1給出了并行2線接口原理圖。很容易獲得所有的元器件??墒褂帽碣N元件或者直插元件構(gòu)建接口。
圖1. 2線并口接口
該接口基于一個74HC05芯片構(gòu)建,在原理圖中以U1表示。74HC05包含六個集電極開路輸出的反相器 。在本應(yīng)用中該芯片具有好幾個功能。首先,它為PC并口電路與下一級電路提供隔離功能。同時將并口的TTL信號轉(zhuǎn)成2線接口需要的集電極開路輸出。集電極開路輸出需要連接雙向SDA信號到一個專門的并口輸入引腳和一個專門的并口輸出引腳(與使用一個并口雙向引腳的情形相反,這通常需要用戶設(shè)置PC BIOS)。
既然2線接口的SCL信號對芯片來說為僅輸入(不實現(xiàn)時鐘擴(kuò)展),可使用并口的D0產(chǎn)生SCL (PC DB-25連接器的引腳2),配置為輸出。 D0連接到74HC05反相器(U1E)的一個輸入。然而,一些并口可能不能輸出足夠高的電壓,反相器無法判斷電壓為高電平,所以電阻R3用作上拉電阻使接口對PC之間的差異不敏感。同樣地,為補(bǔ)償這種差異,電容C4作為一個空的元件包括進(jìn)去,如果與帶有噪聲的PC并口連接時可將C4安裝上去。對大多數(shù)應(yīng)用不需要該電容,但是如果PCB正在構(gòu)建,并不影響,至少包括電容的封裝。最后,反相器U1E的輸出為SCL。因為輸出為漏極開路,需要上拉電阻R1實現(xiàn)高電平邏輯。
另外一個方面SDA信號是雙向。使用一個輸入引腳(PC DB-25連接器引腳12)和一個輸出引腳(D1,PC DB-25連接器引腳3)實現(xiàn)雙向工作。從PC到2線設(shè)備的通信由產(chǎn)生SCL信號的同樣電路實現(xiàn)。并口的輸出D1連接到另外74HC05 (U1)的另一個反相器的輸入(U1A)。再強(qiáng)調(diào)一次,為保證并口高電平邏輯足夠高,反相器能夠正確判斷,上拉電阻R4將信號D1電平上拉到VCC。同樣地,電容C5作為一個空的元件,在遇到噪聲的并口時可安裝用以濾波。反相器的輸出為漏極開路,需要R2實現(xiàn)高電平邏輯。
使用并口的一個輸入引腳(引腳12)和74HC05反相器(U1B)實現(xiàn)從2線設(shè)備到PC的SDA通信。應(yīng)該指出的是,為使設(shè)備能夠與PC通信,應(yīng)用軟件必須使D1為低電平,這樣反相器的輸出釋放SDA,允許2線設(shè)備控制SDA。反相器U1B的輸入監(jiān)視SDA。反相器的輸出通過R6上拉到VCC,R6負(fù)責(zé)判定高電平邏輯。串聯(lián)電阻R5用作沖突狀態(tài)下的保護(hù)。在這個例子中不需要串聯(lián)電阻,因為并口的引腳12僅用作輸入。如果使用并口引腳作為輸入輸出,在并口輸出高電平電壓且外部將高電平電壓加入到并口上時這個電阻變得非常重要。即使應(yīng)用軟件沒有導(dǎo)致沖突,可能另外一個程序也要在一段時間內(nèi)訪問該端口(例如,操作系統(tǒng)周期性搜索打印機(jī))。
僅需要74HC05六個反相器中的三個用于實現(xiàn)2線通信,其余三個反相器并未沒用。為避免浪費,原理圖也包括了一個可選的電路,使用兩個未使用的門驅(qū)動LED,可在軟件控制下開啟或者關(guān)閉。并口引腳17為輸出引腳,用于控制反相器U1C和U1D,并行提供足夠的拉電流驅(qū)動各種LED。電阻R7,與R3、R4一樣,使反相器輸入具有足夠高的電壓,確保高電平邏輯。電阻R8是LED限流電阻,用于控制LED的亮度。有趣的是,并口引腳17,對PC內(nèi)部有反相器。對引腳17寫0將轉(zhuǎn)化成高電平,在到達(dá)DB25之前。高電平輸入到U1C和U1D引起輸出低電平,打開LED。
其余沒有用到的反相器輸入應(yīng)當(dāng)連接到GND,輸出高阻以防止沖突。
電容C1和C2用于電源電壓的旁路,盡量靠近PCB上電源。同樣地,去藕電容C3應(yīng)該盡可能靠近74HC05的VCC和GND放置。
當(dāng)連接SCL和SDA到2線設(shè)備時,應(yīng)確保接口地與2線設(shè)備地共地。如果接口的SCL和SDA連接到包含2線設(shè)備的電路時,注意R1和R2與應(yīng)用電路2線上拉電阻并聯(lián)。如果你計劃在電路內(nèi)與2線設(shè)備連接,可適當(dāng)調(diào)整R1和R2,如果應(yīng)用電路已經(jīng)有SDA和SCL上拉電阻,可去掉R1和R2。
最后,在原理圖中給出的,陰型DB25接口用在接口原型中。在原理圖中給出了制造商和器件型號以及陽型DB25電纜。取決于電源,很容易使用陽型DB25連接器和DB25陽型到陰型電纜。
并口寄存器
PC與接口之間的通信使用三個寄存器中的四位實現(xiàn)(表1)。并口(LPT1)缺省基地址為378h。其余的兩個可能地址為3BCh和278h?;刂窞?位數(shù)據(jù)字節(jié)的地址。該字節(jié)包含控制引腳D7-D0的位,最低有效位(LSB)為D0。在數(shù)據(jù)字節(jié)后面、基地址 + 1處的字節(jié)為狀態(tài)字節(jié)。在給出的原理圖中,狀態(tài)字節(jié)的第5位(位0為LSB)為SDA的輸入。狀態(tài)字節(jié)位5的讀數(shù)指示SDA的狀態(tài)(通過U1B的倒相)。在執(zhí)行讀操作之前,確保數(shù)據(jù)字節(jié)中的D1寫為低電平使得反相器U1A為高阻,允許反相器U1B檢測SDA的狀態(tài)。狀態(tài)字節(jié)之后基地址 + 2處的字節(jié)為控制字節(jié)。我們感興趣的是控制字節(jié)的位3 (位0為LSB)。位3通過PC內(nèi)部的反相器,然后輸出到PC的DB25接口的引腳17。該位使能LED或者使LED無效。讀寫該位的例子后面的章節(jié)給出。
校驗和調(diào)試硬件
一旦硬件完成構(gòu)建,首先對硬件做仔細(xì)檢查。在連接到PC或者電源之前,確保所有的連接是安全的、正確的,且沒有短路存在。確保VCC沒有連接到地。一旦執(zhí)行這些防范措施后,連接5V電源到該接口(不要連接并口電纜)。如果電源有電流讀數(shù),確保電流不超過10mA到15mA。如果出現(xiàn)更大的電流,再三檢查所有連接。
確保芯片連接正確,再次檢查可能用到的極性電容的極性,比如C1。另一個可能導(dǎo)致大工作電流是不正確的上拉電阻的阻值,比如使用470Ω代替4.7kΩ電阻會導(dǎo)致電流增大。
如果一切都正常,連接并口電纜。由于上拉電阻的存在,電流稍微發(fā)生變化。到此你可以試試附送的軟件,或者根據(jù)下一部分學(xué)會如何使用微軟的調(diào)試工具直接讀寫并口寄存器,這樣可以校驗或者調(diào)試硬件。使用Debug Microsoft Windows 95和98和DOS工具Debug讀寫并口寄存器。雖然Windows NT包含Debug工具,但是操作系統(tǒng)不允許直接訪問硬件。在NT使用Debug對硬件不會有任何效果。為運行Debug,單擊Sart菜單選擇Run命令..在編輯框輸入Debug。帶“-”提示符的DOS窗口出現(xiàn)。圖2給出了Debug的屏幕截圖。很容易使用Debug。例如,讀字節(jié)地址378h,在提示符“-”后輸入:
i 378
結(jié)果是從指定地址中讀出兩個數(shù)字(一個字節(jié))十六進(jìn)制數(shù)??墒褂肈ebug寫存儲器。例如,將00h寫入378h,輸入以下然后回車:
o 378 00
建議小心使用Debug,僅可、訪問已知的寄存器。訪問其他的寄存器會可能導(dǎo)致未知或者不希望的副效果。鍵入q退出Debug,鍵入?尋求幫助。
這里給出使用Debug校驗/條是硬件的例子(使用缺省的LPT地址)。圖2的Debug屏幕截圖給出了這些例子。
-i 378 讀數(shù)據(jù)字節(jié)。
-o 378 00 數(shù)據(jù)字節(jié)寫為00h。SDA和SCL輸出高電平。
-i 378 讀數(shù)據(jù)字節(jié)。這會返回00,因為剛寫入00。
-o 378 01 使SCL低電平,SDA高電平。
-o 378 02 使SDA低電平,SCL高電平。
-o 378 03 使SDA和SCL輸出低電平。
-o 378 00 在執(zhí)行下列命令時確保SDA為高電平。
-i 379 這返回SDA的狀態(tài)。如果位5為0,則SDA為高電平,如果位5為1,SDA為低電平。注意
到要讀入SDA的值,數(shù)據(jù)字節(jié)應(yīng)首先寫入0,
這樣反相器(U1A)會釋放SDA。如果外部沒有將SDA拉低,位5讀入為0。
-o 378 02 使SDA為低電平。
-i 379 讀SDA狀態(tài),這時位5讀入為1。
為將LED開啟和關(guān)閉。建議控制字節(jié)中未使用的的位保持不變??赏ㄟ^讀寄存器,然后使用與或者或操作設(shè)置清除位3。注意PC內(nèi)部有反相器。
-i 37A 讀控制字節(jié)??煽吹饺缙聊唤貓D所示,PC返回0C
(當(dāng)前LED關(guān)閉)。為打開LED,位3必須清除。
可用F7h與上控制字節(jié)的讀數(shù)。對于讀數(shù)0C,清除位3
得到04。將其寫入控制字節(jié)會開啟LED。
-o 37A 04 開啟LED
圖2. Debug屏幕截圖
并口軟件工具
圖3給出了并口軟件的屏幕截圖,該軟件專為本篇應(yīng)用程序中的硬件設(shè)計。
屏幕截圖可能與所下載的程序稍微有出入,因為軟件有可能改進(jìn)了或者增添了功能。
圖3. 并口工具屏幕截圖
軟件缺省的LPT地址為378h。如果發(fā)現(xiàn)軟件不能與硬件通信,可以選擇不同端口的地址。最容易判斷軟件是否與硬件通信的方法是單擊LED On和LED Off按鈕。如果成功,單擊Test按鈕,它控制D1 (U1A),從U1B讀入值。讀數(shù)結(jié)果會顯示在狀態(tài)欄里。
忽略同步脈沖。如果你希望使用示波器捕捉2線通信,可以使能同步脈沖,將示波器探針放到DB25的引腳17上,作為觸發(fā)器。
到此,可以準(zhǔn)備與你已連接的2線設(shè)備通信了。確保設(shè)備的SDA,SCL和GND連接到硬件上。確保74HC05的VCC盡可能等于設(shè)備的VCC。
有兩種方法可以與設(shè)備通信,首先需要確保軟件知道2線設(shè)備從地址通信。軟件缺省地址為A0 (hex),這恰好為數(shù)字電壓表的地址,雖然這常取決于設(shè)備地址引腳,如果有許多的話。要改變2線設(shè)備地址,在編輯框中鍵入地址,單擊“Change”。如果不知道2線設(shè)備的地址,請檢查設(shè)備數(shù)據(jù)資料。
最容易讀寫一個或者兩個字節(jié)設(shè)備寄存器的方法是使用軟件中的“One and Two Byte Reads/Writes”部分。該部分適合對設(shè)備編程/配置,因為2線設(shè)備中所有細(xì)節(jié)(start,stop,ACK,NACK,等)自動隱藏。只需要輸入需要的存儲器地址去讀或者讀或者寫。如果希望寫,用需要的數(shù)據(jù)填充“DATA”域。
與設(shè)備通信的另外一種方法是用“2-Wire Functions”部分,如果需要學(xué)習(xí)2線設(shè)備協(xié)議,這部分功能很適合。在演示例子之前,需要解釋幾個按鈕的含義?!癝end Write”按鈕是用2線地址從2線地址域,將LSB (R/W位)屏蔽為0,然后發(fā)送8位。“Send Read”按鈕是用同樣的2線地址,但是將LSB (R/W位)屏蔽為1,指示下一步將進(jìn)行讀操作。8位數(shù)據(jù)發(fā)送。“Bus Reset”按鈕在SCL輸出9個時鐘周期,重新設(shè)置2線設(shè)備總線。
例子(使用缺省的從地址):
寫存儲器地址7Fh到01h。
Start
Send Write
Data [7F]
Data [01]
Stop
讀存儲器地址7Fh (一個字節(jié))。
Start
Send Write
Data [7F]
Start - 通常稱作重新讀。
Send Read
這里使用Rd w/NACK - Rd w/NACK是因為僅讀1個字節(jié)。
Stop
讀存儲器地址F0h和F1h (多個字節(jié)讀)。
Start
Send Write
Data [F0]
Start
Send Read
Rd w/ACK - 如果超過2字節(jié)需要讀,命令會重復(fù)。
Rd w/NACK - 最后的讀必須是w/NACK。
Stop
結(jié)論
本篇應(yīng)用筆記描述了如何使用PC并口構(gòu)建一個簡單、經(jīng)濟(jì)和快速的2線接口。除了原理圖外,還提供軟件幫助構(gòu)建硬件。一旦硬件構(gòu)建完畢,軟件可立即用于與Dallas Semiconductor 2線設(shè)備通信,不需要寫任何軟件。
審核編輯:郭婷
-
示波器
+關(guān)注
關(guān)注
113文章
6164瀏覽量
184315 -
接口
+關(guān)注
關(guān)注
33文章
8447瀏覽量
150722 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
1995瀏覽量
61012
發(fā)布評論請先 登錄
相關(guān)推薦
評論