用AD7416+PIC16F84+PC機構建的測溫系統
摘要:全面系統地介紹帶I2C總線(xiàn)接口的10位數字溫度傳感器AD7416和RISC型8位單片機PIC16F84,以及與PC機通信的硬件接線(xiàn)方法和軟件算法設計,并且提供完整的PC端C程序和單片機端匯編語(yǔ)言程序。
關(guān)鍵詞:AD7416 PIC16F84 I2C總線(xiàn) 單片機
引言
在測量?jì)x器儀表中,溫度的檢測幾乎成為必不可少的部分。傳統的模擬溫度傳感器,如AD590,因外圍電路復雜、需調零等缺點(diǎn),給應用開(kāi)發(fā)帶來(lái)一些麻煩。利用數字溫度傳感器配合單片機來(lái)設計各種控制系統,越來(lái)越多受到業(yè)內人士的推崇。美國模擬器件公司生產(chǎn)的AD7416是一款功能較多的溫度器件,它在一個(gè)芯片上集成了I2C總線(xiàn)接口、溫度傳感器、10位數摸轉換器和窗口門(mén)限溫度控制器等功能。它與其它數字溫度傳感器相比具有體積小、編程簡(jiǎn)單等優(yōu)點(diǎn)。
在本文介紹的溫度檢測系統中,其前端溫度檢測應用的是AD7416,控制器應用的是PIC16F84,將探測到的溫度上傳到上位機(PC機)。由于PIC16F84單片機是一款廉價(jià)的低端型號,其內部沒(méi)有配置I2C接口和UART接口等外圍模塊,因此需要利用虛擬技術(shù)來(lái)模擬I2C和UART的功能,分別與下位器件AD7416和上位機進(jìn)行通信。文后提供了完整的算法設計和程序清單。在此程序基礎上稍加改動(dòng)也可以適用于其它PIC單片機,甚至是其它廠(chǎng)家的單片機,來(lái)實(shí)現同樣的功能。故本文具有比較廣泛的啟發(fā)性和實(shí)用價(jià)值。
1 硬件簡(jiǎn)介
硬件接線(xiàn)圖如圖1所示,前端電路主要由1片10位串行數字溫度傳感器AD7416和1片RISC型PIC16F84微控制器組成,上位機由PC兼容機擔當。不過(guò),上位機不是必須的,圖1中給出了可選的相連PC的串行接口。通過(guò)該串口,可把檢測到的現場(chǎng)溫度值上傳到PC機,以便進(jìn)行實(shí)時(shí)處理、存儲和監控。
硬件引腳連接關(guān)系如表1所列,其中列出了各引腳的功能。利用PIC16F84端口A(yíng)的2條引腳與AD7416連接;利用端口B的3條引腳在前端電路與PC機之間傳送信息,也可以直接傳輸給LED數碼管驅動(dòng)電路以供顯示。
表1 三者相互連接的對應關(guān)系
AD7416 | PIC16F84 | PC接口 |
SDA SCL | PORT A,0 PORT A,1 | |
PORT B,0 PORT B,1 PORT B,2 | SDATA SCLK SYNC |
PIC16F84單片機與PC機的通信接口選用并行打印口,通信方式選用串行同步方式。其中,并行打印口既可以是25芯的D型插口,也可以是36芯的Centronics連接器,如圖2所示。串行同步方式通信的信號時(shí)序如圖3所示。
1.2 AD7416簡(jiǎn)介
AD7416是一個(gè)帶有溫度超限功能的10位串行數字溫度傳感器,采用8引腳的SOIC或μSOIC封裝。其內部結構如圖4所示,引腳布局如圖5所示,引腳功能如表2所列。
表2 引腳功能說(shuō)明
引腳名稱(chēng) | 引腳序號 | 引腳類(lèi)型 | 功 能 說(shuō) 明 |
SDA | 1 | I/O | I2C總線(xiàn)串行數據輸入/輸出傳送線(xiàn)(開(kāi)漏型) |
SCL | 2 | I | I/C總線(xiàn)串行時(shí)鐘線(xiàn)(開(kāi)漏型) |
OTI | 3 | O | 溫度超限指示腳,低電平有效(開(kāi)漏型) |
GND | 4 | - | 電源接地腳 |
A2~A0 | 5~7 | I | 串行總線(xiàn)地址低3位連線(xiàn)編程腳 |
VDD | 8 | - | 電源正極,工作電壓范圍2.7V~5.5V |
AD7416具有如下特點(diǎn):10位溫度至數字轉換器;超溫指示端為低電平有效的漏極開(kāi)路型輸出腳,可以實(shí)現“線(xiàn)與”接線(xiàn)方式;I2C兼容的串行接口;可選的串行總線(xiàn)地址,允許在單一總線(xiàn)上連接多達8個(gè)AD7416;低功耗節電方式(典型2mA);400ms更新速率;55℃~+125℃溫度測量范圍。
AD7416有5個(gè)內部寄存器。其中4個(gè)是數字寄存器,一個(gè)是地址指針寄存器。地址指針寄存器是一個(gè)8位寄存器,用于存放指定4個(gè)數據寄存器的地址碼。對AD7416每一次串行寫(xiě)操作的第一個(gè)數據字節是數據寄存器的地址碼,這就是隨后的數據字節要寫(xiě)入的地址。其實(shí),地址指針寄存器只需最低兩位(記作P1和P0)用來(lái)選擇數據寄存器,如表3所列。
表3 4個(gè)數據寄存器的地址分配
P1 | P0 | 數據寄存器 |
0 | 0 | 溫度值寄存器(只讀) |
0 | 1 | 配置寄存器(可讀/寫(xiě)) |
1 | 0 | THYST寄存器(可讀/寫(xiě)) |
1 | 1 | TOTI寄存器(可讀/寫(xiě)) |
溫度值寄存器是一個(gè)16位只讀寄存器,其高10位以2的補碼格式儲存由模數轉換器產(chǎn)生的10位溫度測量讀數;配置寄存器是一個(gè)8位讀/寫(xiě)寄存器,用來(lái)設置AD7416的工作方式;THYST回滯溫控點(diǎn)設置寄存器是一個(gè)16位的讀/寫(xiě)寄存器,其高9位存儲以2的補碼格式表示下限溫控點(diǎn)設定值;TOTI上限溫控點(diǎn)設置寄存器一個(gè)16位讀/寫(xiě)寄存器,其高9位存儲以2的補碼格式表示上限溫控點(diǎn)設定值。AD7416上電時(shí)地址指針指向溫度值寄存器,2個(gè)溫控點(diǎn)分別指定TOTI=80℃和THYST=75℃。這樣的缺省設置使得AD7416可以獨立用作一個(gè)恒溫控制器,而不需要與串行總線(xiàn)連接以及受控于其它主控器件。
圖3
表4 溫度值寄存器16位布局
D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 | D7 | D6 | D5~D0 |
B9 | B8 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | 未用 |
表5 溫度數據格式
溫度/℃ | 數字量輸出B9B0 | 溫度/℃ | 數字量輸出B9~B0 |
-128 | 10 0000 0000 | +0.25 | 00 0000 0001 |
-100 | 10 01111 0000 | +25 | 0 0011 00100 |
-25 | 11 1001 1100 | +100 | 0 1100 10000 |
-0.25 | 11 1111 1111 | +125 | 0 1111 10100 |
0 | 00 0000 0000 | +127 | 0 1111 11100 |
為了避免在噪聲環(huán)境下的誤觸發(fā),AD7416內部集成了一個(gè)故障排隊計數器。假若故障排隊值設定為4,則必須連續4次(400ms)周期性地測量溫度值大于TOTI或者小于THYST預定值,OTI端才送出有效電平。該條件只要不滿(mǎn)足,排隊計數器就會(huì )被自動(dòng)復位,OTI端也就不會(huì )錯誤地輸出有效電平,從而抑制了噪聲干擾。
1.3 PIC16F84簡(jiǎn)介
PIC16F84是18引腳CMOS工藝的RISC微控制器,只有35條指令并且全部指令均為統一長(cháng)度14位。它有114KB的片內Flash程序存儲器,368KB的通用寄存器和648KB的E2PROM數據存儲器。它有13個(gè)通用I/O引腳。每個(gè)引腳有吸納25mA或輸出20mA的能力。PIC16F84還有一個(gè)8位的定時(shí)器/計數器和一個(gè)自帶PC時(shí)鐘源的看門(mén)狗監視器。
2 軟件簡(jiǎn)介
為本應用項目開(kāi)發(fā)的軟件程序,可以對AD7416內部的寄存器編程,以及從這些數據寄存器讀取溫度值。PIC16F84扮演著(zhù)上傳下達的角色,單片機端的軟件程序采用了匯編語(yǔ)言。AD7416一側的通信程序,將利用并行端口RA來(lái)模擬I2C總線(xiàn)協(xié)議,控制AD7416的工作方式,并且讀取它的溫度測量值。PC機一側的通信程序,將利用并行端口RB來(lái)連接PC的并行打印機口,把所收集到的溫度上傳給PC機,PC機端的軟件程序采用的是C語(yǔ)言。
整個(gè)軟件采用了模塊化的程序設計方法。為了實(shí)現PIC16F84和AD7416之間I2C協(xié)議之下的串行通信,編寫(xiě)了一些專(zhuān)用子程序。這些子程序段包括:符號定義、PIC16F84的端口初始化、啟動(dòng)信號時(shí)序產(chǎn)生、停止信號時(shí)序產(chǎn)生、發(fā)送字節、讀取字節、讀取溫度、向PC機串行被動(dòng)發(fā)送等。具體程序見(jiàn)網(wǎng)站www.dpj.com.cn中的程序段0~程序段8。其中兩個(gè)比較復雜的程序段還給出了流程圖,如圖7和圖8所示。
2.1 采集溫度數據
在發(fā)送字節子程序SENDBYTE被調用以后,AD7416就作好了提供溫度數據的準備。從AD7416中讀取溫度數據,既可以1字節形式,也可以2字節形式。以2字節形式會(huì )更加精確,在本例中采用的就是2字節形式。這2個(gè)字節被讀取后,保存到用戶(hù)定義的2個(gè)寄存器HIHGBYTE和LOWBYTE內,之后用戶(hù)再轉移給其它外部器件或設備,以便作進(jìn)一步地分析等處理。READBYTE子程序的功能相似于SENDBYE子程序的功能。不過(guò),對于讀取過(guò)程,需要檢測SDATA線(xiàn)的狀態(tài),并且LOWBYTE寄存器也要作相應改動(dòng)。
2個(gè)字節的讀取過(guò)程需要主控器(即PIC16F84),在每個(gè)字節的讀取之后分別輸出不同的應答(ACK)信號電平。為了利用同一個(gè)數據讀取程序,提供2種不同的ACK信號電平,需要查看ACKSTAUS寄存器的bit1,由該位的狀態(tài)決定所需ACK信號脈沖的類(lèi)型。
2.2 通過(guò)打印口向PC機上傳數據
PC機的打印口提供了一種從PIC單片機到PC機傳送數據的簡(jiǎn)易途徑,以便在PC機上進(jìn)行數據的記錄和監測等處理。由于對打印機端口功能的討論超出了本文的關(guān)注范圍,因此文中只涉及一些必要的相關(guān)內容。隨后所介紹的僅是一個(gè)如何以最少連線(xiàn)(僅需要3條)實(shí)現溫度數據傳送給PC機的簡(jiǎn)明范例。單片機其它的I/O端口引腳還可以留作它用。單片機向PC機每次傳送16位的溫度值,并且是以高位(MSB)開(kāi)始傳送的。PC機與單片機之間的三條接口連接,分別定義為SYNC(串行同步)、SDATA(串行數據)和SCLK(串行時(shí)鐘)。
當PIC16F84從AD7416讀取一次溫度測量結果,它將把SYNC線(xiàn)電平拉低以通知PC機,并且開(kāi)始一個(gè)計數器的遞減過(guò)程。如果在該計數器遞減到0之前,還沒(méi)有檢測到來(lái)自PC機時(shí)鐘的(SCLK)上升沿,則將SYNC電平恢復到高電平,以中止本次數據的發(fā)送。這種設計方法允許在未連接PC機,或PC機端軟件沒(méi)有運行時(shí),仍然能令PIC16F84繼續讀取溫度數據。
當PIC16F84檢測到SCLK的上升沿時(shí),就利用溫度數據的最高位(MSB)來(lái)設置SDATA。隨后繼續監視SCLK線(xiàn),并且當該線(xiàn)變低時(shí),一個(gè)用戶(hù)定義的位計數器減1。再等待另一個(gè)SCLK上升沿,以便繼續發(fā)送后續數據,直到16位數據全部發(fā)送完畢。在發(fā)送完后,將SCLK線(xiàn)拉高以告知PC機此發(fā)送過(guò)程結束。
圖7和圖8
3 程序清單
程序清單包括完整的單片機端匯編語(yǔ)言程序和PC機端的C高級語(yǔ)言程序。詳見(jiàn)網(wǎng)站www.dpj.com.cn。
結語(yǔ)
可以說(shuō),本文提供了一個(gè)具有借鑒意義的溫度檢測系統的軟硬件開(kāi)發(fā)參考模型。在此基礎上,如果PC機端軟件利用VB或VC設計成圖形界面就更方便于用戶(hù)操作。如果利用PIC16F84的其它I/O端口引腳再擴展幾條I2C總線(xiàn),并且每條總線(xiàn)上掛接1~8片AD7416,則可以形成一個(gè)更加完善的分布式多點(diǎn)溫度檢測系統。
總之,采用數字溫度傳感器,可以使設計者完全 打破傳統的設計模式(傳感器+ADC),從而大大簡(jiǎn)化了設計方案,提高了電路的可靠性。
評論