• 實驗目的•了解 DS1820數字溫度傳感器特性 •掌握單片機基本功能的運用、簡單接口電路如鍵盤、 LED顯示電路或LCD顯示電路設計及其相應驅動軟件的編制軟、硬件系統的調試
• 實驗任務設計一個具有基于DS1820數字溫度傳感器的溫度檢測及顯示的系統。要求系統具有以下功能: • 兩路溫度檢測; • 具有顯示功能; • 具有用戶輸入功能; • 可通過輸入補償溫度設定校準; • 實驗原理 原理簡述:數字溫度傳感器DS1820把溫度信息轉換為數字格式;通過“1-線協議”,單片機獲取指定傳感器的數字溫度信息,并顯示到顯示設備上。通過鍵盤,單片機可根據程序指令實現更靈活的功能,如單點檢測、輪轉檢測、越限檢測等。基于DS1820數字溫度傳感器的溫度檢測及顯示的系統原理圖如圖1 | 圖 1 基于DS1820的溫度檢測系統框圖 |
• 硬件設計電路設計--單片機基本系統電路: | 圖 2 單片機基本系統電路原理圖 |
電路說明: 綜合考慮系統使用到的單片機內部存儲資源、系統處理信號的種類、處理數據的速度、系統的 I/O口開銷,以及系統的可擴展性能,本系統選用了ATMEL公司的8位低功耗,高性能CMOS單片機,芯片內集成有通用8位中央處理器(兼容標準MCS -51指令系統及80C51引腳結構)和4K/8K Bytes ISP Flash存儲單元(可實現在系統編程)。復位電路采用上電復位加按鍵復位的方式。采用無源晶體提供正弦振蕩信號為系統提供時鐘,其硬件原理圖如圖 2所示。 溫度檢測電路: 由于采用數字傳感器,電路不用考慮A/D轉換,只需設計指定某個I/O口作為與數字傳感器相連,電路原理圖如圖示。“1-線協議” 電路說明: DS18B20的數字溫度輸出通過 “ 一線 ” 總線( 1-Wire是被MAXIM公司收購的DALLAS公司新擁有的一種獨特的數字信號總線協議,它將獨特的 電源線和信號線復合在一起,僅使用一條口線;每個芯片唯一編碼,支持聯網尋址、零功耗等待等,是所需硬件連線最少的一種總線)這種獨特的方式,使多個 DS18B20方便地組建成傳感器網絡,為整個測量系統的建立和組合提供了更大可能性。 DS18B20可以設置成兩種供電方式,即數據總線供電方式和外部供電方式。采取數據總線供電方式可以節省一根導線,但由此帶來的缺點是完成溫度測量的時間較長;而采取外部供電方式則多用一根導線,但測量速度較快。本設計采用一總線2路溫度測量使用外部供電,如圖3所示。 鍵盤控制電路: 電路說明: 為了節約系統硬件開銷,設計方案中鍵盤模塊沒有采用ZLG7289或者ZLG7290等專用的鍵盤控制芯片。使用普通的行列掃描鍵盤的優點是沒有更多的外圍電路,缺點是如果軟件調試不當可能引起按鍵連擊,為系統的運行帶來不穩定。系統使用鍵盤電路為四行四列16個按鍵的行列掃描式鍵盤,其電路原理圖如圖4所示。 從圖中的硬件連接看來,鍵盤接口并沒有增加任何其他的附加驅動電路,而是直接和單片機的引腳相連。操作時直接用程序設置單片機相應的端口驅動按鍵。 顯示電路: 電路說明: 采用四位共陰極動態LED顯示單元。LED動態顯示的基本做法在于分時輪流選通數碼管的公共端,使得各數碼管輪流導通,在選通相應LED后,即在顯示字段上得到顯示的字型碼。這種方式不但能夠提高數碼管的發光效率,而且由于各個數碼管的字段線是并聯使用的,從而大大簡化了硬件線路。 動態掃描顯示接口是單片機系統中應用最為廣泛的一種顯示方式。其接口電路是把所有顯示器的 8個筆畫段a~dp同名端并聯在一起,而每一個顯示器的公共極COM是各自獨立地受I/O控制的。MPU向字段輸出口送出字型碼時,所有顯示器由于同名端并聯連接收到相同的字型碼,但究竟是哪個顯示器亮,則取決于COM端,而這一端是通過MPU對I/O編程控制的,所以就可以自行決定何時那一位顯示器被點亮了。這兒所說的動態就是在基于COM端選擇,可編程的基礎上,采用分時的方法輪流控制各個顯示器的COM端,使各個顯示器輪流點亮。 在輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫的 (約1ms),由于人眼的視覺暫留現象及發光二極管的速度足夠快,給人的視覺誤差就是一組穩定的顯示數據,如果做的足夠好是不會有閃爍感。 與液晶顯示器相比,動態 LED顯示單元具有軟件編寫簡單的優點。但是其功耗比LCD顯示大,為了達到最佳的顯示效果,硬件連接必須考慮段和位驅動的電路的設計;其次LED在顯示刷新率,顯示穩定性方面也不及LCD顯示。 在如圖 5的本設計方案中,使用的是四位共陰極LED顯示器。典型的硬件設計是使用74HC245提供段a~dp(圖中為PB1~PB8)的驅動,74LS139提供位COM1~COM4(圖中為LED1~LED4)的驅動。 使用雙向總線驅動器 74HC245作為段驅動,由于HC電路輸出電阻較大,外部可直接驅動而不需要限流電阻。位驅動使用2~4譯碼器,具有四個OC門輸出,輸出低電平有效,直接用來驅動四位公共陰極COM1~COM4。 • 軟件設計 1).軟件設計工具及調試環境 系統軟件采用 C語言開發,與匯編相比,使用C語言開發單片機軟件系統,具有程序的可讀性、易維護性和可移植性好,對硬件的控制能力強等特點。現代單片機集成大容量的程序存儲器一定程度上解決了部分C編譯器機器語言生成代碼效率低的缺點,解決代碼效率問題最重要的還是得靠編譯器性能得不斷提高。 KeilC51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發系統。 KeilC51軟件提供豐富的庫函數和功能強大的集成開發調試工具,全Windows界面。另外重要的一點,通過查看編譯后生成的匯編代碼,我們就能體會到KeilC51生成的目標代碼效率非常之高,多數語句生成的匯編代碼很緊湊,容易理解。在開發大型軟件時更能體現高級語言的優勢。C51中使用C語言編程與匯編語言編程相比,具有以下的優勢。匯編語言雖然有執行效率高的優點,但其可移植性和可讀性差,以及本身就是一種編程效率低下的低級語言,這些都使它的編程和維護極不方便,從而導致整個系統的可靠性也較差。而使用C語言進行單片機應用系統的開發,有著匯編語言不可比擬的優勢。 當前較好的C語言編譯系統的編譯效率已經基本達到中高級程序開發人員的水平,尤其是用于開發較為復雜的單片機應用系統時更具優勢。 2).主程序控制流程 在軟件的設計過程中,為了進一步提高軟件的透明度,作者將系統的一些功能菜單寫成子程序的形式供主程序(操作系統)調用。此程序中主要包括系統開始狀態等待,系統工作模式選擇,多通道工作模式操作,單通道工作模式操作,通過鍵盤輸入 -9.99~+9.99之間的誤差數據,通過鍵盤查詢和重置各通道的誤差量。 本文中詳細給出了操作子程序中部分功能模塊的流程圖,這樣有利于對系統工作的了解。 圖6給出了系統開始等待程序的流程圖,圖7中給出了系統工作模式選擇流程圖,圖8中給出了系統的主函數流程圖。 3).溫度檢測流程 DS18B20子程序是結合它的用戶使用資料編寫,主要完成的是初始化DS18B20,從DS18B20中讀出一個字節的數據,向DS18B20中寫入一個字節的數據,配置DS18B20包括警報溫度的上限和下限、溫度轉換的精度,讀出Scrachpad存儲器中的九個字節的數據,讀出Rom中的64位Code值,對讀出的Scrachpad數據進行CRC校驗,然后根據讀出的數據得到測量出的十進制溫度值。從DS18B20中讀出九個字節數據的流程圖如圖9所示。 DS18B20數據的CRC校驗。為了解決單總線串行傳輸數據可能引起的錯誤,DS18B20內部具有產生CRC校驗碼電路,這樣程序員可以通過對讀出的數據進行CRC校驗碼,并用這個校驗碼和獲得的數據的最后一個字節比較,若兩者相同則證明數據傳送沒有錯誤,從而驗證通信過程中數據傳輸的正確性,使采集溫度信號的可靠性得到保證。 本系統中 CRC校驗在程序中是通過查表來實現。CRC校驗數據表保存在程序代碼中的一個一維數組中。 CRC檢驗的求法。M為一個k位長的信息幀。P為n+1位預先確定的用來生成校驗碼的二進制序列其最高位和最低位必須為1,DS18B20中使用的序列為:P = 1 0011 0001。F為n位FCS,即校驗碼序列。T為k+n位被傳輸的幀。因為F是接在M信息幀之后的,因此T=M · 2 n (2 n 為2的n次方)中,M · 2 n 相當于M左移n位,后面添n個零。設M · 2 n 除以P的商和余數分別是Q和R,則有M · 2 n =P · Q+R即M · 2 n /P=Q+R/P若設T=M · 2 n +R,則T定能被整除。因為按模2的加減運算相當于異或運算,故有T/P=(M · 2 n +R)/P=(M · 2 n )/P+R/P =Q+R/P+R/P=Q這樣一來,校驗碼序列F就是M · 2 n 除以P的余數R。通過計算可以得到 256個用于CRC檢驗的數據。 4).鍵盤控制 鍵盤處理子程序主要完成的是通過特定的設置按鍵端口的狀態,并對端口狀態進行檢測,然后為按鍵設置特定的值,為主程序提供執行判決。需考慮多鍵按下和去抖動的問題。圖 10給出了鍵盤掃描的程序流程圖。 5).顯示控制: 系統硬件選擇的是四段共陰極 LED動態顯示,LED顯示子程序主要是完成對設定的LED段,并通過查七段碼表,使它顯示制定的圖樣。圖11中描述的是通過選定一段數碼管,顯示數據的程序流程圖。 6).數據處理 完成數據格式的轉換、保存;設置誤差值的補償等數據操作。根據不同的應用要求定制,在此不作強制定義。 • 思考題 1、LED動態顯示時顯示的亮度與什么物理量有關? 2、顯示刷新率(單位時間內顯示數據改變的次數)和顯示穩定性(閃爍感越小)之間的關系? 3、通過怎樣的方法解決顯示刷新率和顯示穩定性之間的關系? 4、你有什么好的硬件方案解決LED顯示的驅動(增加流過LED段的電流)問題,請給出電路圖? 5、LCD顯示和動態LED顯示的區別? 6、在單片機的RAM中,30H單元存放著一個無符號類型數據,請你通過編程得到這個數各位上的數字?如果是一個有符號數呢?如果是一個壓縮BCD編碼的數呢?
7、如果你使用的單片機系統沒有在線編程調試器(有程序燒寫器),你有什么樣的辦法在軟硬件聯調時,以最快的速度找出問題出在那個地方?
8、如果單片機的GPIO口線在硬件連接時已經連接到高電平或者低電平,在進行軟件編程時,你可以把這個口線用軟件進行置低或者置高嗎?
9、請你說說單片機和PC機的相似和差別,并就工業運用中單片機和PC機相比存在那些優勢和不足,并就這個談談單片機的生命力在哪兒?
10、請結合DS18B20的用戶資料,和相關的設計報告,說說單總線的通信協議?
|