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