基于tinyAVR和Nokia3310 LCD的溫度繪圖儀
摘要:采用14引腳封裝的tinyAVR單片機、廣泛應用于手機中的液晶顯示模塊Nokia3310 LCD和深受歡迎的單總線3引腳數(shù)字溫度傳感器DS18B 20,構(gòu)建了一款具備實用性和趣味性的,既可讀數(shù)、又可讀圖的雙模式溫度繪圖儀。
關(guān)鍵詞:tinyAVR單片機;Nokia3310 LCD溫度繪圖儀;數(shù)字溫度傳感器
1 溫度繪圖儀介紹
溫度繪圖儀采用溫度傳感器和LCD顯示屏,以攝氏度和華氏度為刻度顯示環(huán)境溫度,同時也能顯示傳感器測量和記錄下來的最低溫度值和最高溫度值。圖1為溫度繪圖儀的方框圖。利用一個Nokia3310 LCD模塊來顯示讀數(shù),一個按鈕開關(guān)用來切換屏幕顯示模式。第一種模式
為讀數(shù)模式,交替顯示攝氏溫度值和華氏溫度讀數(shù);第二種模式為繪圖模式,顯示一張由本系統(tǒng)繪制的,溫度隨時間變化的函數(shù)曲線圖。本系統(tǒng)利用一節(jié)1.5 V干電池供電。
2 Nokia3310 LCD模塊簡介
Nokia3310的液晶顯示模塊是一種小巧的圖形式LCD模塊,在多種嵌入式系統(tǒng)的開發(fā)中被廣泛應用。它與多種單片機的連接方便,應用非常廣泛。這種LCD模塊的大小為38 mm×35 mm,有效顯示面積為30 mm×22mm,顯示分辨率為84×48。該模塊是利用一片專用控制器/驅(qū)動器芯片PCD8544設(shè)計的,能夠驅(qū)動和顯示48行84列的圖像,可以通過標準的SPI總線方便地與外界接口。其他重要特性如下:
◆只需要一個外圍元件,在VOUT和GND之間連接一個1~10μF的電容;
◆功耗很低,適用于電池供電系統(tǒng);
◆電源電壓范圍:2.7~3.3 V;
◆工作溫度范圍:-25~70℃。
2.1 Nokia3310 LCD的接口信號
Nokia3310 LCD模塊通過SPI總線與單片機連接,許多tinyAVR單片機都有這種接口。不過也有少數(shù)型號tinyAVR單片機沒有這種接口,或是把這種接口用于與單片機的其他外圍器件通信。這并不意味著,這種LCD模塊就不能與此類單片機對接使用,可以采取軟件方式來模擬實現(xiàn)SPI軟接口。以這種方式,可以在任何一種單片機的任何通用I/O引腳上連接該LCD模塊。SPI軟接口最少需要4條I/O引腳。圖2是Nokia3310 LCD模塊引腳功能圖。下面詳述一下各條引腳的功能。
Nokia3310 LCD模塊的引腳有:
◆VCC:電源輸入端。連接穩(wěn)壓電源(2.7~3.3 V)。
◆SCK:串行時鐘輸入端。速率為0~4 Mbps,連接 單片機I/O引腳。
◆SDI:串行數(shù)據(jù)輸入端。連接單片機I/O引腳。
◆D/C:數(shù)據(jù)/命令模式選擇端。連接單片機I/O引腳。
◆SCE:片選端??梢赃B接到單片機I/O引腳,或者接地(表示總是選中該LCD),可根據(jù)具體情況設(shè)置。
◆GND:接地引腳。
◆VouT:VLCD端,通過10μF的電容接地。
◆RST:控制器PCD8544的復位端。連接單片機I/O引腳。
2.2 PCD8544功能描述
PCD8544是一個低功耗CMOS的LCD控制器/驅(qū)動器,用于驅(qū)動48行84列的圖形式LCD顯示屏。該型號在單一芯片之內(nèi)就可以實現(xiàn)LCD顯示器所需的全部功能,包括片載的LCD供電和偏壓發(fā)生器,它不僅功耗低而且所需外圍元件少。
3 設(shè)計原理
本項目的目標是設(shè)計一個用攝氏和華氏顯示環(huán)境溫度的溫度顯示系統(tǒng),并且能夠顯示最低溫度和最高溫度值;該系統(tǒng)能夠按照時間記錄溫度的變化;系統(tǒng)應選擇電池供電,以方便攜帶或安裝在任意位置。
溫度繪圖儀的電路原理圖如圖3所示。由于系統(tǒng)中采用了Nokia3310 LCD模塊,它需要的電源電壓為2.7~3.3 V。系統(tǒng)的電源電路中采用了一片DC-DC升壓型電壓轉(zhuǎn)換器TPS61070(即為開關(guān)式直流穩(wěn)壓器)提供一個3.3 V的直流電源,因此可以選用一節(jié)1.5 V干電池供電。電池被連接到SL3(2針)插口上。由于沒有極性保護電路,電池安裝時需要特別注意。Nokia3310 LCD模塊通過SPI總線連接到SL1(8針)插口上。
系統(tǒng)中最重要的元器件是溫度傳感器,對于該器件有以下幾種選擇:熱敏電阻、熱電偶或帶隙半導體傳感器。其中半導體傳感器是最容易實施的。
半導體傳感器種類很多,有的直接輸出與溫度成比例的模擬電壓,有的直接輸出攝氏或華氏溫度的數(shù)值。這里選用了一種單總線溫度傳感器DS18B20,它把溫度轉(zhuǎn)換為9位二進制數(shù)字來表示攝氏溫度或者華氏溫度。溫度讀數(shù)的分辨率為0.5℃或0.9°F,測量范圍為-55~125 ℃,或者-67~257°F。該傳感器每次需要20 ms的轉(zhuǎn)換時間。詳細資料可以參考DS18B20的技術(shù)手冊。
轉(zhuǎn)換后的溫度值可以從單線接口讀出,在圖3中,SL2安裝在DS18B20傳感器上的插口。電路設(shè)有4個按鈕開關(guān)S1~S4,不過在這個項目中只用到1個開關(guān)。這個電路采用了貼片封裝的tiny44單片機ATtiny 24/44/84-SSU,它具有14條引腳和4 KB程序存儲器。
每當接通電源或者復位時,單片機將初始化顯示器,并查詢DS18B20傳感器,顯示華氏和攝氏溫度。同時保存檢測到的溫度最低值和最高值。用戶可以隨時按下開關(guān),系統(tǒng)會切換到另一種顯示模式,顯示一張溫度隨時間變化的曲線。系統(tǒng)連續(xù)地讀取溫度值,但是每隔10 min才保存一次溫度讀數(shù),并繪制在顯示屏上。系統(tǒng)可以保存最多40個讀數(shù),因此可以顯示最近400 min內(nèi)的溫度變化情況。保存在緩沖存儲區(qū)中的讀數(shù)不停地被替換,以便保留新值和沖掉舊值。
4 硬件電路的搭建
線路主要布在元件面(頂面),在焊接面(底面)只有很少的跳線。溫度繪圖儀電路板的元件面和焊接面分別如圖4和圖5所示。焊接TPS610 70芯片非常關(guān)鍵,需要特別小心。從焊接穩(wěn)壓器芯片及其外圍元件開始,以便在安裝其他元件之前,測試TPS61070的輸出電壓。溫度繪圖儀顯示屏的不同顯示模式如圖6和圖7所示。
5 C語言程序設(shè)計
這里提供給大家經(jīng)過編譯的利用C語言編寫的源代碼程序(軟件集成開發(fā)環(huán)境為WinAVR,C語言編譯器為AVR-GCC)。程序需要運行在1 MHz的時鐘頻率下。
采用編程器STK500在ISP編程模式給單片機燒寫程序。單總線溫度傳感器DS18B20是通過單總線接口完成讀/寫功能的,這種總線接口在單片機上是利用軟件模擬來實現(xiàn)的??梢詤⒖紲囟葌鞲衅鞯氖褂檬謨砸垣@取它的各種命令。這里僅僅對源程序代碼中較重要的部分作如下注釋:
在ds1820_read函數(shù)中讀取DS18B20,經(jīng)過必要的處理后,返回一個10倍于實際攝氏溫度值的數(shù)值。無限循環(huán)構(gòu)成程序的主體,其操作模式主要有兩種:第一種模式是以攝氏度和華氏度交替顯示當前溫度值,同時顯示最大值和最小值;另一種模式是用圖形方式顯示溫度的變化。曲線圖的繪制采用了graph1函數(shù),它是通過提取數(shù)組data的數(shù)值繪制像素點的。Setlcd函數(shù)用于在LCD屏幕上繪制坐標軸。S4開關(guān)(連接單片機PA1引腳)用于切換上述兩種模式。從繪圖模式到溫度模式的相互切換并不會刪除狀態(tài)信息。程序代碼的其他部分用于處理LCD的初始化和繪圖算法。
6 獨立運行
溫度繪圖儀采用一節(jié)或兩節(jié)5號或7號規(guī)格的干電池,可以是堿性電池,或者可充電的鎳氫或鎳鎘電池。一旦接通電源后,顯示器開始顯示溫度值??墒褂瞄_關(guān)在讀數(shù)模式和繪圖模式之間切換。