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