I2C總線在智能化振動(dòng)測(cè)試儀中的應(yīng)用
基于單片微處理器的智能化測(cè)試儀器日趨小型化、簡(jiǎn)約化,串行用戶接口I2C總線正在或已經(jīng)取代基于并行總線的接口方式,它無(wú)需地址總線、數(shù)據(jù)總線、控制總線,只通過(guò)兩條線就可以完成與單片微處理器的接口與數(shù)據(jù)交換,大大地簡(jiǎn)化了傳統(tǒng)接口方式的復(fù)雜性,充分地利用了單片微處理器的有限I/O資源.
串行用戶接口I2C總線
I2C總線一般包括數(shù)據(jù)線SDA和時(shí)鐘線SCL。與單片微處理器交換數(shù)據(jù)就是通過(guò)SDA來(lái)完成的,它的工作方式為雙向,既可以輸出數(shù)據(jù)給微處理器,也可以接受微處理器發(fā)送的數(shù)據(jù)、命令。串行時(shí)鐘SCL也是雙向的,作為控制方的單片微處理器,通過(guò)SCL發(fā)送時(shí)鐘信號(hào);作為受控制方的器件,也要按總線上的SCL信號(hào)發(fā)出或是接收SDA上的信號(hào)。具有I2C總線的器件,它的內(nèi)部輸出端一定是開(kāi)漏輸出或集電極開(kāi)路輸出方式。在信息傳輸時(shí),SCL為高電平期間,SDA上的信息必須保持穩(wěn)定不變,只有SCL為低電平期間,SDA上的信息才允許變化。同時(shí)SDA上信息的每一位都要和SCL上的時(shí)鐘脈沖相對(duì)應(yīng)。SCL沒(méi)有時(shí)鐘信號(hào),SDA信息將停止傳輸處于等待狀態(tài)。在I2C總線傳輸?shù)倪^(guò)程中,將兩種特定的狀態(tài)定義為起始信號(hào)、終止信號(hào),在SCL保持高電平期間,SDA由高電平向低電平變化,這種狀態(tài)稱之為起始信號(hào)。SCL保持高電平期間,SDA由低電平向高電平變化,稱之為終止信號(hào)。如圖1所示。
值得注意的是,SDA上傳輸?shù)拿總€(gè)字節(jié)必須是8位,首先傳輸最高有效位,每個(gè)字節(jié)傳輸后還必須跟隨一個(gè)應(yīng)答位,這時(shí)SCL保持高電平,在此期間在SDA端保持一個(gè)低電平信號(hào),完成應(yīng)答信號(hào)的輸出,數(shù)據(jù)傳輸中應(yīng)答信號(hào)是必須的。在整個(gè)傳輸?shù)倪^(guò)程中,傳輸字節(jié)的數(shù)目不受限制。
數(shù)據(jù)傳送的格式:I2C總線要求在起始信號(hào)的后面是尋址字節(jié),在尋址字節(jié)高7位是被控器的地址,第8位是信息傳輸方向位(R/W),“0”表示主控器發(fā)送,“1” 表示主控器接收。尋址字節(jié)的后面是數(shù)據(jù)字節(jié),每一個(gè)字節(jié)都必須要有應(yīng)答信號(hào),傳送結(jié)束后必須發(fā)終止信號(hào)。如圖2所示.
I2C技術(shù)在測(cè)振儀中的應(yīng)用
筆者所開(kāi)發(fā)的測(cè)振儀表中應(yīng)用了I2C技術(shù),單片微處理器采用AT89C2051單片機(jī)。AT89C2051是美國(guó)ATMEL公司采用CMOS工藝生產(chǎn)的20引腳8位單片機(jī),體積小,它與Intel公司MCS-51的指令和引腳兼容,內(nèi)置2k字節(jié)flash程序存儲(chǔ)器、128字節(jié)RAM、15根I/O線、2 個(gè)16位定時(shí)/計(jì)數(shù)器、5個(gè)向量二級(jí)中斷結(jié)構(gòu)、1個(gè)全雙向的串行口、并且內(nèi)含精密模擬比較器和片內(nèi)振蕩器。具有2.7V至5.5V的寬電壓工作范圍和高至24MHz的工作頻率,同時(shí)還具有加密陣列的二級(jí)程序存儲(chǔ)器加鎖、掉電和時(shí)鐘電路等。外圍接口芯片如A/D轉(zhuǎn)換器、實(shí)時(shí)時(shí)鐘、數(shù)據(jù)存儲(chǔ)器X24C16均是具有I2C技術(shù)結(jié)構(gòu)的器件,如圖3所示。
該測(cè)振儀表完全以單片機(jī)為主,完成振動(dòng)數(shù)據(jù)的處理,可實(shí)時(shí)測(cè)量、存儲(chǔ)振動(dòng)的速度均方根值及振動(dòng)的位移值。振動(dòng)傳感器使用磁電式速度傳感器。振動(dòng)信號(hào)前置處理電路完成振動(dòng)信號(hào)的調(diào)理、零位漂移的修正、自動(dòng)量程切換、低通濾波等處理。峰值提取與保持電路將振動(dòng)的位移峰-峰最大值檢出,并轉(zhuǎn)換為直流量送入串行A/D轉(zhuǎn)換器,送單片機(jī)處理。存儲(chǔ)芯片采用具有I2C總線結(jié)構(gòu)的非易失型存儲(chǔ)器E2PROM X24C16,被測(cè)的振動(dòng)數(shù)據(jù)由單片微處理器計(jì)算轉(zhuǎn)換工程量,輸出串行數(shù)據(jù)以字符的形式顯示在LCD液晶上,也可以通過(guò)標(biāo)準(zhǔn)RS-232C通訊接口將存儲(chǔ)的數(shù)據(jù)傳送至PC機(jī),按測(cè)量的時(shí)間進(jìn)行查詢處理。本測(cè)振儀表為電池供電,LCD液晶顯示、數(shù)據(jù)存儲(chǔ)器、通訊接口、A/D轉(zhuǎn)換器均以串行方式與單片微處理器交換數(shù)據(jù),有效地利用了接口資源。
雖然目前大量使用的8051內(nèi)核的單片微處理器,并不支持I2C總線結(jié)構(gòu),但仍然可以利用單片微處理器的普通I/O口來(lái)模擬I2C總線,通過(guò)軟件編程來(lái)實(shí)現(xiàn),但注意一定要按I2C總線的時(shí)序進(jìn)行。以下給出利用AT89C2051單片微處理器的普通I/O口來(lái)模擬I2C總線,控制X24C16的讀寫操作。
X24C16是一種具有2KB存儲(chǔ)容量的串行E2PROM,具有體積小、功耗低,可掉電保護(hù)等特點(diǎn)。當(dāng)要對(duì)X24C16的存儲(chǔ)單元寫入數(shù)據(jù)時(shí),每寫入一個(gè)字節(jié),所要操作的數(shù)據(jù)格式由3個(gè)字節(jié)組成,第1字節(jié)為:
第2字節(jié)為:
其中:1010碼是X24C16的器件地址,A7-A0是從地址,A10、A9、A8為X24C16的高位地址。第2字節(jié)是X24C16的低8位地址,第3字節(jié)是要寫入到X24C16的數(shù)據(jù),特別注意,每個(gè)字節(jié)后一定要跟一個(gè)應(yīng)答信號(hào)。(源程序詳見(jiàn)本刊網(wǎng)站,www.eaw.com.cn)
結(jié)語(yǔ)
I2C總線,由于連線少,結(jié)構(gòu)簡(jiǎn)單,與并行總線相比,大大地簡(jiǎn)化了儀表系統(tǒng)的硬件設(shè)計(jì),提高了可靠性。這是一種高性能的串行總線,正在獲得廣泛的工程應(yīng)用。與此同時(shí),基于串行用戶接口I2C總線的新型電子器件的出現(xiàn),也在推動(dòng)著I2C總線的應(yīng)用。對(duì)于不帶I2C總線接口的MCS-51系列單片微處理器,只要采用兩根通用I/O,并且嚴(yán)格按照I2C總線規(guī)程來(lái)模擬I2C總線,同樣可以使用帶I2C總線接口的器件來(lái)作為外擴(kuò)I/O口的接口電路?!?/P>
參考文獻(xiàn):
1. 吳金戊、沈慶陽(yáng)、郭庭吉,8051 單片機(jī)實(shí)踐與應(yīng)用,學(xué)苑出版社,1993
2. 賴麒文,8051 單片機(jī)C語(yǔ)言徹底應(yīng)用,科學(xué)出版社,2002
作者簡(jiǎn)介:
吳強(qiáng),南京師范大學(xué)數(shù)科院助教,主要從事計(jì)算機(jī)應(yīng)用及語(yǔ)言的教學(xué)、科研。
圖1 起始、終止信號(hào)時(shí)序
圖3 基于I2C總線串行控制的測(cè)振儀原理框圖
;************************************
; 向X24C16 寫入一字節(jié)數(shù)據(jù)子程序
;************************************
WR24: ACALL STA24 發(fā)起始信號(hào)
mov a,addwh 存儲(chǔ)單元地址高位
clr c
rlc a
orl a,#0a0h ; 器件碼1010
acall send 發(fā)送
mov a,addwl 存儲(chǔ)單元地址低8位
acall send
MOV A,DATA 數(shù)據(jù)在DATA中
acall send 發(fā)送
acall STOP 發(fā)終止信號(hào)
RET
;*************************
; 24C16 讀出子程序
;*************************
RD24: ACALL STA24
mov a,addrh
clr c
rlc a
orl a,#0A0h ; special code for read(0a1h)
acall send
mov a,addrl
acall send
acall sta24
mov a,#0A1h
acall send
acall read
mov data,a
acall stop
RET
;************************
; 啟動(dòng) 24C16(發(fā)I2C總線起始信號(hào))
;************************
STA24: setb scl
setb sda
nop
clr sda
nop
nop
nop
clr scl
nop
ret
;************************
; 24C16 關(guān)閉(發(fā)I2C總線終止信號(hào))
;************************
STOP: clr sda
nop
nop
setb scl
nop
nop
setb sda
nop
nop
nop
clr scl
nop
ret
;************************
; 24C16寫入
;************************
send: MOV R7,#08H
clr scl
lop: RLC A
mov sda,c
nop
nop
setb scl
nop
nop
clr scl
djnz r7,lop
setb sda 應(yīng)答信號(hào)
setb scl
nop
nop
lop1: mov c,sda
jc lop1
clr scl
ret
;***************************
; 按位讀出每一位
;***************************
READ: MOV R7,#08H
clr scl
RLP: nop
nop
setb scl
nop
mov c,sda
rlc a
nop
nop
clr scl
djnz r7,rlp
clr sda 應(yīng)答信號(hào)
nop
nop
setb scl
ret
評(píng)論