




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
圖書分類號:密級:畢業(yè)設(shè)計(論文)基于AVR單片機和NRF905無線環(huán)境監(jiān)測系統(tǒng)設(shè)計DESIGNOFWIRELESSENVIRONMENTALMONITORINGSYSTEMBASEDONAVRSINGLECHIPMICROCOMPUTERANDNRF905學生學號20060501222學生姓名李寶學院名稱信電工程學院專業(yè)名稱信息電子科學與技術(shù)指導(dǎo)教師高玉芹2010年6月3日徐州工程學院學位論文原創(chuàng)性聲明本人鄭重聲明:所呈交的學位論文,是本人在導(dǎo)師的指導(dǎo)下,獨立進行研究工作所取得的成果。除文中已經(jīng)注明引用或參考的內(nèi)容外,本論文不含任何其他個人或集體已經(jīng)發(fā)表或撰寫過的作品或成果。對本文的研究做出重要貢獻的個人和集體,均已在文中以明確方式標注。本人完全意識到本聲明的法律結(jié)果由本人承擔。論文作者簽名:日期:年月日徐州工程學院學位論文版權(quán)協(xié)議書本人完全了解徐州工程學院關(guān)于收集、保存、使用學位論文的規(guī)定,即:本校學生在學習期間所完成的學位論文的知識產(chǎn)權(quán)歸徐州工程學院所擁有。徐州工程學院有權(quán)保留并向國家有關(guān)部門或機構(gòu)送交學位論文的紙本復(fù)印件和電子文檔拷貝,允許論文被查閱和借閱。徐州工程學院可以公布學位論文的全部或部分內(nèi)容,可以將本學位論文的全部或部分內(nèi)容提交至各類數(shù)據(jù)庫進行發(fā)布和檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學位論文。論文作者簽名:導(dǎo)師簽名:日期:年月日日期:年月日摘要本文提出了一種基于低功耗高性能Atmage16L單片機為主控器和射頻nRF905為無線收發(fā)模塊的無線環(huán)境系統(tǒng)監(jiān)測的總體設(shè)計方案和實現(xiàn)方法。系統(tǒng)設(shè)置了一個主機和兩個從機,通過無線通信方式,實現(xiàn)了兩個節(jié)點的環(huán)境監(jiān)測。主機通過從機預(yù)設(shè)的不同地址來實現(xiàn)區(qū)分兩個節(jié)點發(fā)送來的環(huán)境監(jiān)測數(shù)據(jù)。本設(shè)計采用nRF905射頻模塊為無線傳輸模塊,DS18B20為溫度傳感器模塊及HM1500為濕度傳感器模塊來實現(xiàn)了環(huán)境的溫濕度監(jiān)測。Atmage16L和nRF905之間通過高速串口SPI實現(xiàn)雙向通信,SPI支持高速數(shù)據(jù)傳輸,從而滿足了環(huán)境參數(shù)數(shù)據(jù)實時傳輸?shù)囊?,并且利用VB6.0企業(yè)版的MScomm控件編寫接收界面,通過串口實時顯示在PC機上。關(guān)鍵詞ATMEGA16L;nRF905;DS18B20;HM1500;無線環(huán)境監(jiān)測AbstractThisarticleproposedonekindWirelessEnvironmentalMontoringsystemoveralldesignplanandtherealizationmethodwhichbasedonthelow-powerhigh-performanceAtmega16LMCUandthewirelessmodulenRF905.ThesystemhasoneMasterandtwoSlaves,througnthewielesscommunicationtocometrueMontoringEnvironmentalintwodifferentplaces.TheMastercandistinguishthedataoftheEnvironmentfromtwodifferentplacesthroughthedifferentaddress.ThedesignusesnRF905asthewirelessreceivinganddispatchingmoduleandDS18B20asthetemperaturesensormoduleandHM1500asthehumiditysensor,thuscompliesthedesignofWirelessEnvironmentalMontoringsystem,includestemperatureandhumidity.ThedesigncancometurethedataofenvironmenttransmissionbetweenAtmega16LandnRF905whichusestheSPImouthrealizationtwo-waycommunication,SPIsupportsthehigh-speeddatatransmission,alsousetheMScommofVB6.0towriteainterface,itcandisplaythedataonPC’sscreen.KeywordsATMEGA16LnRF905DS18B20HM1500WirelessEnvironmentalMontoring目錄1緒論 11.1課題研究的背景 11.2開發(fā)意義 12系統(tǒng)總體設(shè)計 22.1系統(tǒng)的整體結(jié)構(gòu) 22.2系統(tǒng)的工作原理 22.3課題實現(xiàn)的功能 23系統(tǒng)硬件設(shè)計 43.1器件的選用 4中央處理器的選用 4無線發(fā)射芯片的選用 4溫度傳感器的選用 5濕度傳感器的選用 6顯示器的選用 63.2主機的硬件設(shè)計 6串行外設(shè)接口SPI 7單片射頻收發(fā)器nRF905 8通用同步和異步串行接收器和轉(zhuǎn)發(fā)器USART 113.3從機的硬件設(shè)計 12串行外設(shè)接口SPI 133.3.2單片射頻收發(fā)器nRF905 13字符型液晶顯示器LCD1602 13溫度傳感器DS18B20 16濕度傳感器HM1500 184系統(tǒng)軟件設(shè)計 214.1主機軟件設(shè)計 21主程序的設(shè)計 214.1.2SPI接口軟件的設(shè)計 224.1.3nRF905軟件的設(shè)計 234.1.4串口軟件的設(shè)計 244.2從機軟件設(shè)計 254.2.1主程序的設(shè)計 254.2.2SPI接口軟件設(shè)計 274.2.3nRF905軟件設(shè)計 274.2.4LCD1602軟件設(shè)計 274.2.5DS18b20軟件設(shè)計 274.2.6HM1500軟件設(shè)計 295PC機通信及數(shù)據(jù)處理顯示程序設(shè)計 305.1VB6.0特點 305.2MSComm控件 305.2.1MSComm控件的主要屬性、事件 315.3VB程序設(shè)計 315.3.1程序詳細設(shè)計 315.3.2系統(tǒng)界面 316調(diào)試 336.1液晶顯示器LCD1602設(shè)計過程中遇到的問題既解決方法 336.2串口設(shè)計過程中遇到的問題既解決方法 336.3nRF905設(shè)計過程中遇到的問題既解決方法 336.4DS18B20設(shè)計過程中遇到的問題既解決方法 346.5VB程序設(shè)計中遇到的問題與解決方法 34結(jié)論 35致謝 36參考文獻 37附錄 38附錄1英文翻譯 38附錄2硬件原理圖 54附錄3源程序代碼 711緒論1.1課題研究的背景在許多測控現(xiàn)場中,傳統(tǒng)的數(shù)據(jù)傳輸是通過有線電纜實現(xiàn)的。隨著射頻技術(shù)、集成電路的發(fā)展,無線通信功能的實現(xiàn)越來越容易,抗干擾能力也越來越強,因此,越來越多的場合采用了無線傳輸技術(shù)。無線數(shù)據(jù)傳輸相比于有線傳輸有許多優(yōu)點:一、是成本低,省去了大量的布線;二、是建網(wǎng)快捷,只需在每個終端連接無線數(shù)據(jù)傳輸模塊和架設(shè)適當高度的天線即可;三、是適應(yīng)性好,無線數(shù)據(jù)傳輸在一些特殊的應(yīng)用環(huán)境,比如遇到山地、湖泊、林區(qū)等特殊的地理環(huán)境或是移動物體等布線比較困難的應(yīng)用環(huán)境的時候,能解決因布線困難、電纜接插件松動、短路等帶來的問題;四、是擴展性好,采用有線傳輸方式,不能隨意移動,設(shè)備重新布局就要重新布線,但采用無線數(shù)據(jù)傳輸,只需將設(shè)備與無線數(shù)據(jù)傳輸模塊相連接就可以了;五、是設(shè)備維護容易,有線通信鏈路的維護需沿線路檢查,出現(xiàn)故障時,一般很難及時找出故障點,而采用無線數(shù)據(jù)傳輸方式只需維護數(shù)據(jù)傳輸模塊,出現(xiàn)故障時則能快速找出原因。通過環(huán)境監(jiān)測,提供代表環(huán)境質(zhì)量現(xiàn)狀的數(shù)據(jù),判斷環(huán)境質(zhì)量是否符合國家標準;評價環(huán)保設(shè)施的性能,為綜合防治對策提供基礎(chǔ)數(shù)據(jù),積累長期監(jiān)測資料,為研究環(huán)境容量,實施總量控制提供基礎(chǔ)數(shù)據(jù)。通過大量的監(jiān)測數(shù)據(jù),制定切實可行的環(huán)保法規(guī)和環(huán)境質(zhì)量標準。總之,環(huán)境監(jiān)測的作用是及時、準確、全面地反映環(huán)境質(zhì)量現(xiàn)狀及發(fā)展趨勢,為環(huán)境管理、環(huán)境規(guī)劃、環(huán)境科學研究提供依據(jù)。為了提高環(huán)境參數(shù)采集的自動化水平,提升效率,設(shè)計了無線環(huán)境監(jiān)測系統(tǒng)。本課題運用了傳感器技術(shù)、無線通信技術(shù)和單片機技術(shù),實現(xiàn)了對環(huán)境溫度、濕度等參數(shù)的檢測。它能夠?qū)崟r地與上位機進行無線通信,滿足對環(huán)境參數(shù)實時監(jiān)測的要求。1.2開發(fā)意義隨著經(jīng)濟高速發(fā)展,工業(yè)化的不斷推進,人們對生存的環(huán)境日益重視。為此,環(huán)境監(jiān)測已成為我們合理地利用環(huán)境資源、保護生態(tài)環(huán)境的工作重點。在許多情況下,傳統(tǒng)的環(huán)境監(jiān)測往往由于受到地理環(huán)境和工作內(nèi)容的限制,如山地、港口和開闊地等特殊地理環(huán)境,對有線網(wǎng)絡(luò)、有線傳輸?shù)牟季€工程帶來極大的不便,采用有線的施工周期將很長,甚至根本無法實現(xiàn)。這時,采用無線無線環(huán)境監(jiān)測可以擺脫線纜的束縛,有安裝周期短、維護方便、擴容能力強,迅速收回成本的優(yōu)點。本文將無線技術(shù)運用到環(huán)境監(jiān)測中,提出了一種利用低功耗高性能Atmage16L單片機為主控器,nrf905射頻模塊為無線傳輸模塊,DS18B20為溫度傳感器模塊及HM1500為濕度傳感器模塊,實現(xiàn)無線環(huán)境監(jiān)測系統(tǒng)的設(shè)計。2系統(tǒng)總體設(shè)計2.1系統(tǒng)的整體結(jié)構(gòu)本系統(tǒng)包含一臺主機和兩臺從機。系統(tǒng)的總體結(jié)構(gòu)框圖見圖2-1。NRF905NRF905單片機溫濕度溫濕度NRF905NRF905單片機PC從機1PCNRF905NRF905單片機主機溫濕度溫濕度從機2圖2-1系統(tǒng)整體結(jié)構(gòu)框圖2.2系統(tǒng)的工作原理本設(shè)計中主機和從機之間是通過通過單片射頻收發(fā)器nRF905完成互相通信的。每個從機都有唯一一個地址,主機通過輪流發(fā)送從機的地址來實現(xiàn)接收對應(yīng)的從機的環(huán)境數(shù)據(jù),并把參數(shù)通過串口實時顯示在VB6.0企業(yè)版MSCom控件編寫的界面上。從機接收主機發(fā)送來的地址,判斷是否和自己的地址匹配,如果匹配則把采集到的環(huán)境參數(shù)發(fā)送給主機,再繼續(xù)接收和判斷主機發(fā)送來的地址。2.3課題實現(xiàn)的功能一、完成DS18B20、HM1500、LCD1602、單片射頻收發(fā)器nFR905、串口和單片機的硬件連接;二、完成溫度傳感器DS18B20測量溫度的子程序設(shè)計;三、完成HM1500濕度采集的子程序設(shè)計。四、完成將采集的溫度值和濕度值送字符型液晶顯示器LCD1602上顯示的子程序設(shè)計;五、完成兩個節(jié)點的單片射頻收發(fā)器nFR905無線收發(fā)數(shù)據(jù)的子程序設(shè)計;六、完成將單片射頻收發(fā)器nFR905接收的溫度值和濕度值通過串口發(fā)送到PC機的子程序設(shè)計;七、完成PC機串行通信及數(shù)據(jù)處理顯示程序的設(shè)計;八、完成主程序設(shè)計,將各子程序連起來。3系統(tǒng)硬件設(shè)計3.1器件的選用本系統(tǒng)設(shè)計的器件較多,包括主控芯片、溫度傳感器、濕度傳感器、顯示器及無線收發(fā)模塊。各器件選擇的余地也很廣,所以慎重選擇器件很重要,其直接影響到系統(tǒng)的整體性能和設(shè)計的最終結(jié)果。中央處理器的選用由于無線收發(fā)芯片nRF905提供SPI口并且工作電壓為1.9~3.6V,因此選用有SPI接口功能的低功耗單片機。ATMEGA16L有工作于主機/從機模式的SPI串行接口,所以不需要進行軟件模擬SPI口,可工作于低壓狀態(tài),工作電壓為2.7~5.5V。ATMEGA16L是Atmel公司的高性能、低功耗的8位AVR微處理器。先進的RISC結(jié)構(gòu),非易失性程序和數(shù)據(jù)存儲器,16K字節(jié)的系統(tǒng)內(nèi)可編程Flash,擦寫壽命10,000次,512字節(jié)的EEPROM擦寫壽命100,000次,1K字節(jié)的片內(nèi)SRAM可以對鎖定位進行編程以實現(xiàn)用戶程序的加密。JTAG接口(與IEEE1149.1標準兼容),符合JTAG標準的邊界掃描功能,支持擴展的片內(nèi)調(diào)試功能,通過JTAG接口實現(xiàn)對Flash、EEPROM、熔絲位和鎖定位的編程。兩個具有獨立預(yù)分頻器和比較器功能的8位定時器/計數(shù)器,一個具有預(yù)分頻器、比較功能和捕捉功能的16位定時器/計數(shù)器,具有獨立振蕩器的實時計數(shù)器RTC。四通道PWM,8路10位ADC8個單端通道,TQFP封裝的7個差分通道,2個具有可編程增益(1x,10x,或200x)的差分通道。面向字節(jié)的兩線接口,兩個可編程的串行USART,可工作于主機/從機模式的SPI串行接口,具有獨立片內(nèi)振蕩器的可編程看門狗定時器,片內(nèi)模擬比較器。上電復(fù)位以及可編程的掉電檢測,片內(nèi)經(jīng)過標定的RC振蕩器,片內(nèi)/片外中斷源。6種睡眠模式,空閑模式、ADC噪聲抑制模式、省電模式、掉電模式、Standby模式以及擴展的Standby模式。兼于以上優(yōu)點,選用ATMEGA16L單片機為中央處理器。無線發(fā)射芯片的選用隨著射頻電子技術(shù)的發(fā)展,無線收發(fā)芯片的集成度、性能都大幅度提高,芯片的種類和數(shù)量比較多,性能也各有特色。目前,世界各大芯片制造商研制開發(fā)出了各種新型射頻芯片,使短距離無線通信裝置的設(shè)計開發(fā)趨于容易、便捷、周期短、成本低。生產(chǎn)此類芯片的廠家主要有Nordic、XEMICS、TI、Maxim、Chipcon等。此類產(chǎn)品收發(fā)合一,工作頻率一般為國際通用的ISM頻段,無需申請許可證,采用低發(fā)射功率、高接收靈敏度的設(shè)計,使用時對周圍干擾很小,調(diào)制方式大多為ASK、FSK,傳輸速率為幾K到幾百Kbit/s,傳輸距離受環(huán)境影響,一般在幾十米到數(shù)百米。選擇無線收發(fā)芯片時,應(yīng)考慮以下幾個因素:一、芯片的數(shù)據(jù)傳輸是否需要進行曼徹斯特編碼及傳輸速度;二、芯片所需的外圍元件數(shù)量;三、功耗;四、發(fā)射功率;五、芯片的封裝和管腳數(shù)。nRF905是挪威NordicVLSI公司推出的單片射頻收發(fā)器,工作電壓為1.9~3.6V,32引腳QFN封裝(5×5mm),工作于433/868/915MHz三個ISM(工業(yè)、科學和醫(yī)學)頻道,頻道之間的轉(zhuǎn)換時間小于650us。nRF905由頻率合成器、接收解調(diào)器、功率放大器、晶體振蕩器和調(diào)制器組成,不需外加聲表濾波器。ShockBurstTM工作模式,自動處理字頭和CRC(循環(huán)冗余碼校驗),使用SPI接口與微控制器通信,配置非常方便。此外,其功耗非常低,以-10dBm的輸出功率發(fā)射時電流只有11mA,工作于接收模式時的電流為12.5mA,內(nèi)建空閑模式與關(guān)機模式,易于實現(xiàn)節(jié)能。nRF905適合點對點的數(shù)據(jù)傳輸,內(nèi)置了CRC糾檢錯硬件電路和協(xié)議,提高了系統(tǒng)的可靠性,且不再需要用軟件對傳輸數(shù)據(jù)進行差錯控制編碼,簡化了軟件編程,適合在工業(yè)現(xiàn)場使用。靈敏度高,數(shù)據(jù)傳輸速率為50Kbps,低功耗,體積小。本論文設(shè)計的數(shù)據(jù)采集系統(tǒng)通過無線收發(fā)模塊傳輸現(xiàn)場采集數(shù)據(jù),對數(shù)據(jù)傳輸?shù)目煽啃砸筝^高。綜合考慮以上因素,采用nRF905為無線收發(fā)模塊。溫度傳感器的選用隨著溫度傳感器智能化、集成化技術(shù)的進步,數(shù)字式溫度傳感器也得到了快速發(fā)展,世界上許多公司推出了新型的數(shù)字溫度傳感器系列,這些產(chǎn)品的出現(xiàn)極大的豐富了設(shè)計工程師的選擇對象。在如此眾多的產(chǎn)品中選擇出合適的器件,應(yīng)該把握以下幾點:外圍電路應(yīng)該盡量簡單;測溫的精度、分辨率要合適,以便減少不必要的電路和軟件開發(fā)成本;溫度傳感器采用的總線負載能力如何,能否滿足多點測溫的需要;占用MCU的I/O引腳數(shù)情況如何,因為MCU的系統(tǒng)資源非常寶貴,輸入通道有限,多點溫度測量時,如果測量的點數(shù)超過了輸入通道時,就要添加多路復(fù)用器,這將增加成本和開發(fā)時間,應(yīng)盡量節(jié)約;與MCU的通信協(xié)議應(yīng)盡量簡單,溫度測量的軟件開發(fā)難度、成本要盡量小。DS18B20是美國Dallas半導(dǎo)體公司的新一代數(shù)字式溫度傳感器,它具有獨特的單總線接口方式,即允許在一條信號線上掛接數(shù)十甚至上百個數(shù)字式傳感器,從而使測溫裝置與各傳感器的接口變得十分簡單,克服了模擬式傳感器與微機接口時需要的A/D轉(zhuǎn)換器及其它復(fù)雜外圍電路的缺點,而且,可以通過總線供電,由它組成的溫度測控系統(tǒng)非常方便,而且成本低、體積小、可靠性高。DS18B20的測溫范圍。最高分辨率可達0.0625℃,由于每一個DS18B20出廠時都刻有唯一的一個序列號并存入其ROM中,因此CPU可用簡單的通信協(xié)議就可以識別,從而節(jié)省了大量的引線和邏輯電路。一、適用于低速測控場合,測控對象越多越顯出其優(yōu)越性;二、性價比高,硬件施工、維修方便,抗干擾性能好;三、具有CRC校驗功能,可靠性高;四、軟件設(shè)計規(guī)范,系統(tǒng)簡明直觀,易于掌握。由于DS18B20獨特的單總線接口方式在多點測溫時有明顯的優(yōu)勢,占用MCU的I/O引腳資源少,和MCU的通信協(xié)議比較簡單,成本較低,傳輸距離遠。所以,選用DS18B20做為溫度測量的傳感器。濕度傳感器的選用目前市場上的濕度傳感器濕度傳感器,分為電阻式和電容式兩種,產(chǎn)品的基本形式都為在基片涂覆感濕材料形成感濕膜。空氣中的水蒸汽吸附于感濕材料后,元件的阻抗、介質(zhì)常數(shù)發(fā)生很大的變化,從而制成濕敏元件。國內(nèi)市場上出現(xiàn)了不少國內(nèi)外濕度傳感器產(chǎn)品,電容式濕敏元件較為多見,感濕材料種類主要為高分子聚合物,氯化鋰和金屬氧化物。電阻式濕度傳感器與電容式相比,構(gòu)造簡單,比較容易實現(xiàn)大量生產(chǎn)與低價位。不必像電容式傳感器一樣要考慮引線間的容量,因此可以把傳感器隨意拉伸,設(shè)計自由度較大。特性由于是對數(shù)變化,如不進行對數(shù)轉(zhuǎn)換等的處理,將不能得到線性特征。低濕范圍由于電阻較高難以檢出。另外容易受到干擾影響。電容式濕度傳感器一般來說,可以檢知從0%rh開始的低濕。電容值比較接近線性,不需要對數(shù)變化。溫度特性與電阻式相比較?。?.05~0.1%rh/℃左右),在一般用途上不需要溫度補償。但是如果用引線延長傳感器的話,電容值會變化,因此不適合延長傳感器單體。還有組裝進裝置內(nèi)的話,因為通過引線而改變位置比較困難,所以設(shè)計自由度較小。變化量比較小,但微小的電容變化會導(dǎo)致很大的誤差。因此廉價的傳感器偏差較大。綜合以上因素,本設(shè)計選擇了Humirel公司濕度傳感器HM1500,它具有小尺寸,不受水浸影響,全互換性,高可靠性及長期穩(wěn)定性,典型輸出1-4V(對應(yīng)0-100%,5VDC供電),極低的溫度依賴性,良好的性線度等特點。顯示器的選用液晶顯示器(LCD)具有功耗低、體積小、重量輕、超薄、無輻射、低閃爍等許多其他顯示器無法比擬的優(yōu)點,最為重要的是LCD可實現(xiàn)很多字符組合的顯示,人機界面相當友好,近年來被廣泛用于單片機控制的智能儀器、儀表和低功耗電子產(chǎn)品中,故選用LCD。本設(shè)計選用LCD1602顯示器,LCD1602字符型液晶顯示采用與日立公司的HD44780兼容的LCD控制器構(gòu)成的2*16字符型液晶顯示模塊。3.2主機的硬件設(shè)計根據(jù)上一節(jié)系統(tǒng)總體設(shè)計方案構(gòu)想,系統(tǒng)的主機硬件包括單片機Atmega16L與nrf905通信的串行外設(shè)接口SPI及單片機Atmega16L與PC的通用同步和異步串行接收器和轉(zhuǎn)發(fā)器USART,結(jié)構(gòu)框圖見圖3-1。NRF905單片機MAX232PCNRF905單片機MAX232PC圖3-1主機原理圖串行外設(shè)接口SPI串行外設(shè)接口SPI允許ATMEGA16L和外設(shè)或其他AVR器件進行高速的同步數(shù)據(jù)傳輸。ATMEGA16LSPI的特點如下:(1)全雙工,3線同步數(shù)據(jù)傳輸;(2)主機或從機操作;(3)LSB首先發(fā)送或MSB首先發(fā)送;(4)7種可編程的比特率;(5)傳輸結(jié)束中斷標志;(6)寫碰撞標志檢測;(7)可以從閑置模式喚醒;(8)作為主機時具有倍速模式(CK/2)。系統(tǒng)包括兩個移位寄存器和一個主機時鐘發(fā)生器。通過將需要的從機的SS引腳拉低,主機啟動一次通訊過程。主機和從機將需要發(fā)送的數(shù)據(jù)放入相應(yīng)的移位寄存器。主機在SCK引腳上產(chǎn)生時鐘脈沖以交換數(shù)據(jù)。主機的數(shù)據(jù)從主機的MOSI移出,從從機的MOSI移入;從機的數(shù)據(jù)從從機的MISO移出,從主機的MISO移入。主機通過將從機的SS拉高實現(xiàn)與從機的同步。SPI系統(tǒng)的發(fā)送方向只有一個緩沖器,而在接收方向有兩個緩沖器。也就是說,在發(fā)送時一定要等到移位過程全部結(jié)束后才能對SPI數(shù)據(jù)寄存器執(zhí)行寫操作。而在接收數(shù)據(jù)時,需要在下一個字符移位過程結(jié)束之前通過訪問SPI數(shù)據(jù)寄存器讀取當前接收到的字符。否則第一個字節(jié)將丟失。工作于SPI從機模式時,控制邏輯對SCK引腳的輸入信號進行采樣。為了保證對時鐘信號的正確采樣,SPI時鐘不能超過fosc/4。SPI使能后,MOSI、MISO、SCK和SS引腳的數(shù)據(jù)方向?qū)⒆詣舆M行配置,詳見表3-1。表3-1SPI引腳重載單片射頻收發(fā)器nRF90芯片結(jié)構(gòu)nRF905片內(nèi)集成了電源管理、晶體振蕩器、低噪聲放大器、頻率合成器功率、放大器等模塊,曼徹斯特編碼/解碼由片內(nèi)硬件完成,無需用戶對數(shù)據(jù)進行曼徹斯特編碼,因此使用非常方便。nRF905的詳細結(jié)構(gòu)見圖3-2。圖3-2nRF905的詳細結(jié)構(gòu)圖nRF905引腳介紹表3-2nRF905引腳管腳名稱管腳功能說明1TRX_CE數(shù)字出入使能芯片發(fā)射或接收2PWR_UP數(shù)字輸出芯片上電3uPCLK時鐘輸出由晶振震蕩器分頻的輸出時鐘4VDD電源電源(+3VDC)5VSS電源地(ov)6CD數(shù)字輸出載波檢測續(xù)表3-2管腳名稱管腳功能說明7AM數(shù)字輸出地址匹配8DR數(shù)字輸出接收或發(fā)射數(shù)據(jù)完成9VSS電源地(ov)10MISOSPI接口SPI輸出11MOSISPI接口SPI輸入12SCKSPI時鐘SPI時鐘13CSNSPI使能SPI使能14XC1模擬輸入晶振震蕩器1腳/外部時鐘輸入腳15XC2模擬輸出晶振震蕩器2腳16VSS電源地(ov)17VDD電源電源(+3VDC)18VSS電源地(ov)19VDD_PA電源輸出給nRF905功率放大器提供的+1.8v電源20ANT1射頻輸出天線接口121ANT2射頻輸出天線接口222VSS電源地(ov)23IREF模擬輸入?yún)⒖茧娏?4VSS電源地(ov)25VDD電源電源(+3vDC)26VSS電源地(ov)27VSS電源地(ov)28VSS電源地(ov)29VSS電源地(ov)30VSS電源地(ov)31DVDD_1V2電源de藕和的低電壓正數(shù)字電源輸出32TX_EN數(shù)字輸入TX_EN=“1”TX模式;TX_EN=“0”RX模式工作模式nRF905有兩種工作模式和兩種節(jié)能模式。兩種工作模式分別ShockBurstTM接收模式和ShockBurstTM發(fā)送模式,兩種節(jié)能模式分別是關(guān)機模式和空閑模式。nRF905的工作模式由TRX_CE、TX_EN和PWR_UP三個引腳決定,詳見表3-3。表3-3nRF905的工作模式ShockBustTM模式與射頻數(shù)據(jù)包有關(guān)的高速信號處理都在nRF905片內(nèi)進行,數(shù)據(jù)速率由微控制器配置的SPI接口決定,數(shù)據(jù)在微控制器中低速處理,但在nRF905中高速發(fā)送,因此中間有很長時間的空閑,這很有利于節(jié)能。由于nRF905工作于ShockBurstTM模式,因此使用低速的微控制器也能得到很高的射頻數(shù)據(jù)發(fā)射速率。在ShockBurstTM接收模式下,當一個包含正確地址和數(shù)據(jù)的數(shù)據(jù)包被接收到后,地址匹配(AM)和數(shù)據(jù)準備好(DR)兩引腳通知微控制器。在ShockBurstTM發(fā)送模式,nRF905自動產(chǎn)生字頭和CRC校驗碼,當發(fā)送過程完成后,數(shù)據(jù)準備好引腳通知微處理器數(shù)據(jù)發(fā)射完畢。由以上分析可知,nRF905的ShockBurstTM收發(fā)模式有利于節(jié)約存儲器和微控制器資源,同時也減小了編寫程序的時間。下面具體詳細分析nRF905的發(fā)送流程和接收流程。一、發(fā)送流程
典型的nRF905發(fā)送流程分以下幾步:(1)當微控制器有數(shù)據(jù)要發(fā)送時,通過SPI接口,按時序把接收機的地址和要發(fā)送的數(shù)據(jù)送傳給nRF905,SPI接口的速率在通信協(xié)議和器件配置時確定;(2)微控制器置高TRX_CE和TX_EN,激發(fā)nRF905的ShockBurstTM發(fā)送模式;(3)nRF905的ShockBurstTM發(fā)送:1)射頻寄存器自動開啟;2)數(shù)據(jù)打包(加字頭和CRC校驗碼);3)發(fā)送數(shù)據(jù)包;4)當數(shù)據(jù)發(fā)送完成,數(shù)據(jù)準備好引腳被置高。(5)AUTO_RETRAN被置高,nRF905不斷重發(fā),直到TRX_CE被置低;(6)當TRX_CE被置低,nRF905發(fā)送過程完成,自動進入空閑模式。ShockBurstTM工作模式保證,一旦發(fā)送數(shù)據(jù)的過程開始,無論TRX_EN和TX_EN引腳是高或低,發(fā)送過程都會被處理完。只有在前一個數(shù)據(jù)包被發(fā)送完畢,nRF905才能接受下一個發(fā)送數(shù)據(jù)包。二、接收流程(1)當TRX_CE為高、TX_EN為低時,nRF905進入ShockBurstTM接收模式;(2)650us后,nRF905不斷監(jiān)測,等待接收數(shù)據(jù);(3)當nRF905檢測到同一頻段的載波時,載波檢測引腳被置高;(4)當接收到一個相匹配的地址,地址匹配引腳被置高;(5)當一個正確的數(shù)據(jù)包接收完畢,nRF905自動移去字頭、地址和CRC校驗位,然后把數(shù)據(jù)準備好引腳置高;(6)微控制器把TRX_CE置低,nRF905進入空閑模式;(7)微控制器通過SPI口,以一定的速率把數(shù)據(jù)移到微控制器內(nèi);(8)當所有的數(shù)據(jù)接收完畢,nRF905把數(shù)據(jù)準備好引腳和地址匹配引腳置低;(9)nRF905此時可以進入ShockBurstTM接收模式、ShockBurstTM發(fā)送模式或關(guān)機模式。當正在接收一個數(shù)據(jù)包時,TRX_CE或TX_EN引腳的狀態(tài)發(fā)生改變,nRF905立即把其工作模式改變,數(shù)據(jù)包則丟失。當微處理器接到地址匹配引腳的信號之后,其就知道nRF905正在接收數(shù)據(jù)包,其可以決定是讓nRF905繼續(xù)接收該數(shù)據(jù)包還是進入另一個工作模式。3單片機與nRF905的硬件連接原理圖單片機與nRF905的接口電路很重要。nRF905內(nèi)部有5個寄存器:狀態(tài)寄存器、配置寄存器、發(fā)射地址寄存器、發(fā)射數(shù)據(jù)寄存器和接收數(shù)據(jù)寄存器。除了對寄存器讀寫外,還需對nRF905工作模式的切換進行控制。主機的單片機與nRF905的硬件連接圖見圖3-3。圖3-3單片機與nRF905的硬件連接圖(主機)詳細電路圖見附錄2。通用同步和異步串行接收器和轉(zhuǎn)發(fā)器USARTATMEGA16L單片機的通用同步和異步串行接收器和轉(zhuǎn)發(fā)器(USART)是一個高度靈活的串行通訊設(shè)備。主要特點為:(1)全雙工操作(獨立的串行接收和發(fā)送寄存器);(2)異步或同步操作;(3)主機或從機提供時鐘的同步操作;(4)高精度的波特率發(fā)生器;(5)支持5,6,7,8,或9個數(shù)據(jù)位和1個或2個停止位;(6)硬件支持的奇偶校驗操作;(7)數(shù)據(jù)過速檢測;(8)幀錯誤檢測;(9)噪聲濾波,包括錯誤的起始位檢測,以及數(shù)字低通濾波器;(10)三個獨立的中斷:發(fā)送結(jié)束中斷,發(fā)送數(shù)據(jù)寄存器空中斷,以及接收結(jié)束中斷;(11)多處理器通訊模式;(12)倍速異步通訊模式。USART的初始化進行通信之前首先要對USART進行初始化。初始化過程通常包括波特率的設(shè)定,幀結(jié)構(gòu)的設(shè)定,以及根據(jù)需要使能接收器或發(fā)送器。對于中斷驅(qū)動的USART操作,在初始化時首先要清零全局中斷標志位(全局中斷被屏蔽)。訪問UBRRH/UCSRC寄存器UBRRH與寄存器UCSRC共用I/O地址。因此訪問該地址時需注意以下問題。一、寫訪問當在該地址執(zhí)行寫訪問時,USART寄存器選擇位(URSEL)控制被寫入的寄存器。若URSEL為0,對UBRRH值更新;若URSEL為1,對UCSRC設(shè)置更新。二、讀訪問對UBRRH或UCSRC寄存器的讀訪問則較為復(fù)雜。但在大多數(shù)應(yīng)用中,基本不需要讀這些寄存器。讀訪問由時序控制。一旦返回UBRRH寄存器內(nèi)容則讀I/O地址。若寄存器地址在前一個系統(tǒng)時鐘周期中讀入,當前時鐘下對寄存器的讀入將返回UCSRC內(nèi)容中。注意,讀UCSRC的時鐘序列為自動工作。在讀操作中的中斷(例如禁止全局中斷)必須人為控制。對UBRRH內(nèi)容的讀操作不是自動完成,且當前一條指令沒有訪問該寄存器地址時,該寄存器作為普通寄存器使用。3.3從機的硬件設(shè)計根據(jù)上一節(jié)系統(tǒng)總體設(shè)計方案構(gòu)想,系統(tǒng)的從機硬件包括單片機Atmega16L與nrf905通信的串行外設(shè)接口SPI、顯示器LCD1602、溫度傳感器DS18b20及濕度傳感器HM1500,結(jié)構(gòu)框圖見圖3-4。NRF905溫度傳感器DS18b20單片機LCD1602NRF905溫度傳感器DS18b20單片機LCD1602濕度傳感器HM1500濕度傳感器HM1500圖3-4從機原理圖串行外設(shè)接口SPI同上文的主機相同。3.3.2單片射頻收發(fā)器nRF905同上文的主機相同,只是單片機與NRF905的硬件連接不同,從機的單片機與NRF905的硬件連接圖見圖3-5。圖3-5單片機與nRF905的硬件連接圖(從機)字符型液晶顯示器LCD1602.1標準字符型液晶顯示器LCD接口LCD1602字符型液晶顯示器采用與日立公司的HD44780兼容的LCD控制器構(gòu)成的2*16字符型液晶顯示模塊,是專用于顯示數(shù)字、字母、符號,字符型LCD液晶顯示模塊對外提供統(tǒng)一的接口標準。字符型液晶顯示模塊接口引腳定義見表3-4。表3-4字符型液晶顯示模塊接口引腳定義引腳編號引腳名稱引腳功能14~7D7~D0數(shù)據(jù)線6E片選信號,寫數(shù)據(jù)控制,下降沿觸發(fā)5R/W讀/寫方向控制信號,低電平為寫入,高電平為讀出4RS寄存器選擇信號:RS=0:指令寄存器寫入;忙標志讀?。坏刂芳拇嫫髯x取RS=1:數(shù)據(jù)寄存器讀/寫3V0驅(qū)動電壓調(diào)節(jié)2VDD+5V1VSS地線15V--背光電壓負端(GND)16V+背光電壓正端(+5V)顯示數(shù)據(jù)存儲器(DDRAM)LCD控制器的指令系統(tǒng)規(guī)定,在發(fā)送待顯示字符代碼的指令之前,先要送DDRAM的地址,實際上是待顯示的字符顯示位置。若LCD為雙行字符顯示,每行40個顯示位置,第一行地址為00H~27H;第二行地址為40H~67H。雙行顯示的DDRAM地址與顯示位置的對應(yīng)關(guān)系見表3-5。表3-5雙行顯示的DDRAM地址與顯示位置的對應(yīng)關(guān)系顯示位置1234567……3940DDRAMLine100H01H02H03H04H05H06H……26H27H地址Line240H41H42H43H44H45H46H……66H67HLCD顯示模塊的控制指令HD44780的數(shù)據(jù)線可以使用8位方式(D7~D0),也可以使用4位方式(D4~D0),由工作方式設(shè)置命令中的“DL”(D4)位決定。使用4位方式時,寫入(讀?。?shù)據(jù)分兩次完成,先寫入(讀?。?shù)據(jù)的高4位,接著寫入(讀取)數(shù)據(jù)的低4位。下面給出LCD控制命令的功能解釋。讀/寫方式下的光標和顯示模式設(shè)置命令:表3-6讀/寫方式下的光標和顯示模式設(shè)置命令D7D6D5D4D3D2D1D0000001I/DSI/D:表示地址計數(shù)器(AC)的變化方向,即光標移動的方向。I/D=1:AC自動加1,光標右移一個字符。I/D=0:AC自動減1,光標左移一個字符。S:顯示屏上畫面向左或向右全部移動一個字符位。S=1,I/D=1:當寫一個字符時,整屏顯示左移。S=1,I/D=0:當寫一個字符時,整屏顯示右移。顯示開關(guān)控制命令:表3-7顯示開關(guān)控制命令D7D6D5D4D3D2D1D000001DCBD:當D=0時,顯示關(guān)閉,DDRAM中數(shù)據(jù)保持不變。當D=1時,顯示DDRAM中的數(shù)據(jù)。C:當C=1時,顯示光標;C=0時,不顯示光標。B:當B=1時,光標所在字符閃爍;B=0時,光標不顯示。光標或顯示屏移動命令見表3-8。表3-8光標或顯示屏移動命令D7D6D5D4D3D2D1D00001S/CR/LXX具體含義如表3-9:表3-9光標命令的具體含義S/CR/L00光標左移,地址計數(shù)器減101光標右移,地址計數(shù)器加110顯示屏左移,光標跟隨顯示屏移動11顯示屏右移,光標跟隨顯示屏移動工作方式設(shè)置命令:表3-10工作方式設(shè)置命令D7D6D5D4D3D2D1D0001DLNFXXDL=0:數(shù)據(jù)線寬度為4位,DB7~DB4;DL=1:數(shù)據(jù)線寬度為8位。N=0:顯示1行;N=1:顯示2行;F=0:顯示5×7點陣;F=1:顯示5×10點陣。單片機與LCD1602的硬件連接原理圖本設(shè)計選用ATMEGA16L的PC口和PA口的PA1、PA2端口,LCD1602采用8位數(shù)據(jù)線工作方式。ATMEGA16LPC口與LCD1602的8位數(shù)據(jù)線連接,ATMEGA16LPC口的PA1、PA2端口分別與LCD1602的使能端口、讀\寫選擇端口、數(shù)據(jù)\命令選擇端口連接。硬件連線原理圖見圖3-6,LCDl602的RW選擇接地,詳細原理圖見附錄2。圖3-6單片機與LCD1602的硬件連接圖溫度傳感器DS18BDS18B20的特點、結(jié)構(gòu)及工作說明數(shù)字溫度傳感器DS18B20的測溫范圍為,精度為0.5℃,測量的溫度值用9~12位數(shù)字表示,最大轉(zhuǎn)換時間為750ms,溫度超標報警的上、下限值,DS18B20的轉(zhuǎn)換分辨率均可由用戶設(shè)定,并能長期保存。利用Dallas的單總線控制協(xié)議,和單線控制信號在總線上來實現(xiàn)數(shù)據(jù)的讀寫。DS18B20的另一特點是在沒有外部電源下操作的能力,電源由總線為高電平時DQ腳上的上拉電阻提供(寄生供電模式),此時腳接地。也可用傳統(tǒng)方式供電,即將外部電源接在腳上即可。電壓為3~5.5V。本設(shè)計中采用外部電源供電,電壓3V。DS18B20測溫原理圖見圖3-7。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用來向計數(shù)器1提供固定頻率的脈沖信號。高溫度系數(shù)晶振的振蕩頻率受溫度影響較大,隨溫度的變化而明顯改變,其產(chǎn)生的信號作為計數(shù)器2的脈沖輸入,用于控制閘門的關(guān)閉時間。初態(tài)時,計數(shù)器1和溫度寄存器被預(yù)置在與-55℃相對應(yīng)的一個基值上。計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行減法計數(shù),在計數(shù)器2控制的閘門時間到達之前,如果計數(shù)器1的預(yù)置值減到0,則溫度寄存器的值將作加1運算,與此同時,用于補償和修正測溫過程中非線性的斜率累加器將輸出一個與溫度變化相對應(yīng)的計數(shù)值,作為計數(shù)器1的新預(yù)置值,計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行計數(shù),如此循環(huán),直到計數(shù)器2控制的閘門時間到達亦即計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。在默認的配置中,DS18B20的測溫分辨率為,以12位有效數(shù)據(jù)表示,其中,高位的S表示符號位,其數(shù)據(jù)格式見表3-11所。本設(shè)計中測溫分辨率為。比較器斜率累加器比較器斜率累加器預(yù)置預(yù)置預(yù)置預(yù)置+1=0計數(shù)器低溫度+1=0計數(shù)器低溫度系數(shù)振蕩器溫度寄存器溫度寄存器=0計數(shù)器高溫度系數(shù)振蕩器=0計數(shù)器高溫度系數(shù)振蕩器停止停止圖3-7DS18B20方框圖表3-11數(shù)據(jù)格式低字節(jié)2^32^22^12^02^-12^-22^-32^-4高字節(jié)SSSSS2^62^52^DS18B20的數(shù)據(jù)處理DS18B20的高速暫存存儲器由9個字節(jié)組成,其分配見表3-12,當溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以2字節(jié)補碼形式存放到高速暫存存儲器的第0和第1個字節(jié)。單片機可通過單線接口讀取到該數(shù)據(jù),讀取時低位在前,高位在后。表3-12字節(jié)分配溫度低位溫度高位THTL配置保留保留保留8位CRC表3-13DS18B20溫度數(shù)據(jù)表表3-13所列是DS18B20溫度采集轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在DS18B20的兩個8bit的RAM中,二進制的前5位是符號位,如果測的溫度大于或等于0,這五位為0,只要將測得數(shù)值乘以0.0625即可得到實際溫度;如果溫度小于0,這五位為1,測的數(shù)值需要取反加1再乘以0.0625即可得到實際溫度。單片機與DS18B20的硬件連接原理圖單片機和DS18B20的硬件連接圖見圖3-8,DS18B20的單總線DQ與接單片機ATMEGA16L的PD0端口連接,另加一個上拉電阻。詳細原理圖見附錄2。圖3-8單片機和DS18B20的硬件連接圖濕度傳感器HM1500HM1500的特點、結(jié)構(gòu)及工作說明HM1500為OEM客戶提供了精確、可靠的測量方式。線性放大的電壓輸出可使傳感器與控制器相連。無需避光,無需防靜電,高濕后恢復(fù)時間短。HM1500具有以下突出優(yōu)點:一、體積小二、不受水浸影響三、完全互換性四、可靠性高、長期穩(wěn)定性好五、5VDC供電時0—100%RH對應(yīng)1—4VDC輸出六、55%RH時修正精度在±2%RH以內(nèi)七、溫度影響極小八、適于3~7V供電,比例于供電電壓九、高濕后迅速恢復(fù)十、耐化學腐蝕十一、響應(yīng)速度快HM1500模塊有三條線引出,引腳定義見表3-14。表3-14HM1500引腳定義引線顏色定義W1白地W2藍電源W3黃輸出其參考輸出電壓見表3-15。表3-15輸出電壓參考RH(%)Vout(mV)RH(%)Vout(mV)10132555248015146560260520160065273025173570286030186075299035199080312540211085326045223590340550236095355HM1500的數(shù)據(jù)處理由于HM1500是線性放大的電壓輸出可使傳感器,所以要通過AD轉(zhuǎn)換單片機才可以讀出濕度數(shù)值。本設(shè)計選擇了Atmega16L內(nèi)部自帶的ADC為數(shù)模轉(zhuǎn)換。用Atmega16L自帶的ADC作為AD轉(zhuǎn)換。這里只用它的端口PA0端口A做為A/D轉(zhuǎn)換器的模擬輸入端口,Atmega16L有一個10位的卓此逼近型ADC。ADC與一個8通道的模擬多路服用器連接,能對來自端口A的8路單端輸入電壓進行采樣。單端電壓輸入以0V為基準。單次轉(zhuǎn)換結(jié)果見式3.1。式(3.1)式中:——輸入電壓-——參考電壓ADC——轉(zhuǎn)換結(jié)果單片機與HM1500的硬件連接原理圖單片機和HM1500的硬件連接圖見圖3-9,HM1500電壓輸出口與接單片機ATMEGA16L的PA0端口連接,詳細原理圖見附錄2。圖3-9單片機和HM1500的硬件連接圖4系統(tǒng)軟件設(shè)計4.1主機軟件設(shè)計主程序的設(shè)計主機程序開始后先進行初始化設(shè)置,初始化的內(nèi)容包括nRF905初始化和串口初始化。然后置nRF905為發(fā)送狀態(tài),輪流發(fā)送多個從機的地址,發(fā)送一個地址后改為接收狀態(tài),nRF905判斷是否有接收數(shù)據(jù),沒有數(shù)據(jù)接收繼續(xù)查詢,有則接收對應(yīng)地址從機通過nRF905發(fā)送回來的環(huán)境數(shù)據(jù),單片機將接收的數(shù)據(jù)通過串口發(fā)送給PC機,顯示在VB編寫的界面上,直到一組數(shù)據(jù)接收完畢。繼續(xù)輪流發(fā)送從機的地址。主機程序流程圖見圖4-1。其主要程序如下:voidmain(){spi_init();//spi初始化uart_init(9600);//串口初始化波特率為9600nrf905_Init();//nrf905初始化while(1){nrf905_SendData(Address_1);發(fā)送節(jié)點一地址 _delay_ms(20); RfRecvProc();//接收節(jié)點一數(shù)據(jù)并處理 _delay_ms(20); nrf905_SendData(Address_2);發(fā)送節(jié)點二地址 _delay_ms(20); RfRecvProc();//接收節(jié)點二數(shù)據(jù)并處理 _delay_ms(20);}}開始開始NNRF905初始化串口初始化串口初始化置NRF905為發(fā)送狀態(tài)置NRF905為發(fā)送狀態(tài)置NRF905為發(fā)送狀態(tài)置NRF905為發(fā)送狀態(tài)調(diào)用ShockBust發(fā)送子程序調(diào)用ShockBust發(fā)送子程序調(diào)用ShockBust發(fā)送子程序調(diào)用ShockBust發(fā)送子程序發(fā)送節(jié)點2地址發(fā)送節(jié)點1地址發(fā)送節(jié)點2地址發(fā)送節(jié)點1地址置NRF905為接收狀態(tài)置NRF905為接收狀態(tài)置NRF905為接收狀態(tài)置NRF905為接收狀態(tài)NN有數(shù)據(jù)接收?有數(shù)據(jù)接收?NN有數(shù)據(jù)接收?有數(shù)據(jù)接收?YYY調(diào)用ShockBust接收子程序Y調(diào)用ShockBust接收子程序調(diào)用ShockBust接收子程序調(diào)用ShockBust接收子程序N接收完成?N接收完成?N接收完成?N接收完成?YYYY送PC機顯示送PC機顯示送PC機顯示送PC機顯示圖4-1主機程序流程圖4.1.2SPI接口軟件的設(shè)計本設(shè)計中SPI配置為主機模式,nRF905為從設(shè)備。ATMEGA16L的SPI工作模式應(yīng)設(shè)置為模式0。ATMEGA16L與nRF905同時進行雙向數(shù)據(jù)傳輸。ATMEGA16L配置為SPI主機時,SPI接口不自動控制SS引腳,由用戶軟件來控制。ATMEGA16L通過將從機的CSN引腳置低實現(xiàn)與從機的同步。SPI時鐘由寫入到SPI發(fā)送緩沖寄存器的數(shù)據(jù)啟動,SPIMISO引腳上的數(shù)據(jù)發(fā)送次序由寄存器SPCR的DORD位控制,置位時數(shù)據(jù)的LSB(最低位)首先發(fā)送,否則數(shù)據(jù)的MSB(最高位)首先發(fā)送。我們選擇先發(fā)送MSB,同時接收到的數(shù)據(jù)傳送到接收緩沖寄存器,CPU進行右對齊從接收緩沖器中讀取接收到的數(shù)據(jù)。應(yīng)該注意,當需要從nRF905中讀取多個數(shù)據(jù)時,即使nRF905并不需要ATMEGA16L串行輸出的數(shù)據(jù),每讀取一個數(shù)據(jù)前都要向SPI發(fā)送緩沖器寫一個數(shù)據(jù)以啟動SPI接口時鐘。以下是SPI口初始化程序:voidspi_init(void)//spi初始化{ PORTB|=(1<<MOSI)|(0<<MISO)|(1<<SCK)|(1<<SS);//設(shè)置MOSI和SCK、SS為輸出,其他為輸入 DDRB|=(1<<MOSI)|(1<<SCK)|(1<<SS); uchartemp; SPCR=0x51;//SPI允許,主機模式,MSB,極性方式00,1/16系統(tǒng)時鐘速率 SPSR=0x00;//setupSPI temp=SPSR;//!!! temp=SPDR;//清空SPI,和中斷標志,使SPI空閑}具體程序見附錄1。4.1.3nRF905軟件的設(shè)計由于ATMEGA16L單片機自身帶有SPI硬件通信接口可以直接和nRF905的SPI接口相連。根據(jù)讀寫時序編寫對應(yīng)的程序如下:ucharnrf905_SpiRW(ucharval)//spi讀寫程序{ uchartemp;SPDR=val; while((SPSR&(1<<SPIF))==0); temp=SPDR; returntemp;} }NRF905主要程序如下:voidnrf905_Init()//初始化nrf905voidnrf905_SetTxAddr(Tx_Address)//寫Tx地址voidnrf905_SetData()//寫Tx數(shù)據(jù)voidnrf905_SendData(Tx_Address)//發(fā)送TxBuf中的數(shù)據(jù)voidnrf905_ReadData()//讀出接收到的數(shù)據(jù)voidRfRecvProc(void)//接收處理詳細程序見附錄1。4.1.4串口軟件的設(shè)計一、初始化初始化操作包括波特率設(shè)置、數(shù)據(jù)格式和UCSRB寄存器設(shè)置。USART的波特率寄存器和降序計數(shù)器相連接,一起構(gòu)成可編程的預(yù)分頻器或波特率發(fā)生器。通過設(shè)置UCSRB寄存器,設(shè)置數(shù)據(jù)格式為8位數(shù)據(jù)位和1位停止位。通過設(shè)置寄存器,使能串口發(fā)送和接收,并響應(yīng)接收完成中斷。二、數(shù)據(jù)發(fā)送和接收數(shù)據(jù)發(fā)送采用查詢方式。置位UCSRB寄存器的發(fā)送允許位TXEN將使能的數(shù)據(jù)發(fā)送,將需要發(fā)送的數(shù)據(jù)加載到發(fā)送緩沖區(qū)將啟動數(shù)據(jù)發(fā)送,加載過程為CPU對USART寄存器的寫操作。發(fā)送數(shù)據(jù)時,按照幀格式在所需發(fā)送的數(shù)據(jù)前加上幀頭、幀長、幀標志,組幀發(fā)送。數(shù)據(jù)接收采用中斷方式。置位UCSRB寄存器的接收允許位TXEN將啟動USART的數(shù)據(jù)接收器,通過讀取UDR寄存器就可以獲得接收緩沖器的內(nèi)容。USART主要程序函數(shù)如下:voiduart_init(uintbaud)//初始化voiduart_sendB(uchardata)//發(fā)送字符voiduart_sendStr(char*s)//發(fā)送字符串程序流程圖見圖4-2,具體程序見附錄1。發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù)返回發(fā)送結(jié)束?NY開始圖4-2單片機的串口通信子程序流程圖4.2從機軟件設(shè)計4.2.1主程序的設(shè)計從機程序開始后首先進行初始化設(shè)置。初始化的內(nèi)容包括nRF905初始化、LCD1602的初始化、DS18B20初始化。然后調(diào)用DS18B20溫度采集子程序,數(shù)據(jù)處理后將采集的溫度值送LCD1602顯示并通過nRF905發(fā)送給主機,如此循環(huán)往復(fù)。從機程序流程圖見圖4-3。其程序如下:intmain(void){ LCD_init(); //初始化顯示ADC_init();//AD初始化Init_DS18b20(); //ds18b20初始化spi_init(); nrf905_Init(); LCD_write_string(0,0,"T="); LCD_write_string(0,1,"H="); while(1) { ReadTemp();//開啟溫度采集程序temp_to_str();//溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符 ad_do(); //開啟濕度轉(zhuǎn)換 LCD_write_string(4,0,TempBuffer); _delay_us(20); LCD_write_string(4,1,ad); _delay_ms(1);RecvProc();//接收發(fā)送處理 }}開始開始DS18b20初始化DS18b20初始化HM1500初始化HM1500初始化LCD1602初始化LCD1602初始化NRF905初始化NRF905初始化調(diào)用DS18b20子程序調(diào)用DS18b20子程序調(diào)用HM1500子程序調(diào)用HM1500子程序送LCD1602顯示送LCD1602顯示置NRF905為接收狀態(tài)置NRF905為接收狀態(tài)N地址正確?N地址正確?YY置NRF905為發(fā)送狀態(tài)置NRF905為發(fā)送狀態(tài)調(diào)用ShockBust發(fā)送子程序調(diào)用ShockBust發(fā)送子程序圖4-3從機程序流程圖4.2.2SPI接口軟件設(shè)計同上文的主機SPI接口軟件設(shè)計相同。4.2.3nRF905軟件設(shè)計同上文的主機NRF905軟件設(shè)計相同。4.2.4LCD1602軟件設(shè)計為了方便讀/寫控制,在程序中作了如下定義#defineRS_SETPORTA&=~(1<<1)//拉高數(shù)據(jù)/命令選擇。#defineRS_CLRPORTA&=~(1<<1)//拉低數(shù)據(jù)/命令選擇。#defineEN_SETPORTA&=~(1<<2)//拉高使能信號選擇。#defineEN_CLRPORTA&=~(1<<2)//拉低使能信號選擇。此外,用到每個功能模塊函數(shù)已在程序中定義,如下:voidLCD_write_command(unsignedcharcommand)//向Lcd發(fā)送寫命令程序voidLCD_write_data(unsignedchardata)//向Lcd發(fā)送寫數(shù)據(jù)程序voidLCD_set_xy(unsignedcharx,unsignedchary)//寫地址函數(shù)voidLCD_write_char(unsignedcharX,unsignedcharY,unsignedchardata)//指定地址寫字符voidLCD_write_string(unsignedcharX,unsignedcharY,unsignedchar*s)//指定地點寫字符串voidLCD_init(void)//液晶初始化程序流程圖見圖4-4,具體程序見附錄1。LCD初始化LCD初始化LCD清屏LCD清屏顯示字符串顯示字符串返回返回圖4-4LCD1602程序流程圖4.2.5DS18b20軟件設(shè)計首先DS18B20初始化,接著從機檢測DS18B20是否存在,如存在則跳過DS18B20的ROM,因為本程序中只接一個DS18B20,故不需要讀DS18B20的序列號和匹配DS18B20。如不存在繼續(xù)檢測。跳過ROM后調(diào)用溫度轉(zhuǎn)換函數(shù),然后讀溫度數(shù)據(jù),讀完溫度數(shù)據(jù)后處理溫度數(shù)據(jù),最后輸出溫度數(shù)據(jù)。程序流程圖見圖4-5。初始化初始化檢測DS18B20存在?轉(zhuǎn)換溫度讀溫度數(shù)據(jù)輸出數(shù)據(jù)返回跳過ROM溫度數(shù)據(jù)處理NY圖4-5DS18B20采集溫度流程圖其主要程序中的主要函數(shù)如下:Init_DS18b20(void)//DS18B20初始化voidDS18b20_write_byte(unsignedchardat)//寫18b20溫度uint8_tDS18b20_read_byte(void)//讀DS18b20溫度voidReadTemp(void)//讀取DS18b20當前溫度voidtemp_to_str()//溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符顯示詳細程序見附錄1。4.2.6HM1500軟件設(shè)計一、初始化初始化操作包括通道的選擇、數(shù)據(jù)的對齊方式的設(shè)置、電壓基準的設(shè)置、預(yù)分頻設(shè)置以及控制和狀態(tài)寄存器的初始化。其中通道選擇的是單通道通道0,參考電壓選擇的是AREF為基準電壓,轉(zhuǎn)換結(jié)果右對齊。二、數(shù)據(jù)處理先讀取低位數(shù)據(jù),把它存在一個申明好的變量中,再讀取高位變量,通過處理后加上低位數(shù)據(jù)即可。得到的結(jié)果是一個十六位的數(shù),還要通過處理才可以得到我們需要的十進制的數(shù)。其主要程序函數(shù)如下:voidADC_init(void)//AD初始化unsignedintmega16_ad()//讀取AD轉(zhuǎn)換值函數(shù)voidad_do()//數(shù)據(jù)處理程序流程圖見圖4-6。結(jié)束 開始轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換完成?結(jié)束開始轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換完成?處理數(shù)據(jù)NY圖4-6ADC流程圖5PC機通信及數(shù)據(jù)處理顯示程序設(shè)計開發(fā)環(huán)境基于VB6.0企業(yè)版,利用MScomm控件接收單片機發(fā)送的數(shù)據(jù),完成接收數(shù)據(jù)的顯示并通過Access寫入數(shù)據(jù)庫。5.1VB6.0特點VisualBasic6.0的主要功能與特點:一、易學易用的集成開發(fā)環(huán)境VB6.0為用戶設(shè)計界面、編寫代碼、調(diào)試程序、編譯程序和制作應(yīng)用程序安裝盤等提供了友好的集成開發(fā)環(huán)境。二、可視化上設(shè)計平臺采用傳統(tǒng)的程序設(shè)計語言編程時,一般需要通過編寫程序來設(shè)計應(yīng)用程序的界面(如界面的外觀、位置等),在設(shè)計過程中看不見界面的實際效果。而在VB6.0中,采用面向?qū)ο蟪绦蛟O(shè)計方法(Object-OrientedProgramming),把程序和數(shù)據(jù)封裝起來作為一個對象,每個對象都是可視的。程序員在界面設(shè)計的時候可以直接用VB6.0的工具箱在屏幕上“畫”出窗口、菜單、命令按鍵等不同類型的對象,并為每個對象設(shè)置屬性。程序員僅需要對要完成事件過程的對象進行編寫代碼,因而程序設(shè)計的效率可大大提高。三、事件驅(qū)動的編程機制面向過程的程序是由一個主程序和個子程序及函數(shù)組成的,程序運行時總是先從主程序開始,由主程序調(diào)用若干個子程序和函數(shù),程序員在編程時必須事先確定整個程序的執(zhí)行順序。而VB6.0事件驅(qū)動的編程是針對用戶觸發(fā)某個對象的相關(guān)事件進行編碼,從而達到處理、運算目的。每個事件都可以驅(qū)動一段程序的運行,程序員只要編寫響應(yīng)用戶動作的代碼,各個動作之間不一定有聯(lián)系。這樣的應(yīng)用程序代碼短,比較容易編寫與維護。四、結(jié)構(gòu)化的程序設(shè)計語言VB6.0具有豐富的數(shù)據(jù)類型,眾多的內(nèi)部函數(shù),是模塊化、結(jié)構(gòu)化程序設(shè)計語言,結(jié)構(gòu)清晰,簡單容易學習。五、強大的數(shù)據(jù)庫功能VB6.0利用數(shù)據(jù)控件可以訪問Access;Foxpro等多種數(shù)據(jù)庫系統(tǒng),也可以訪問Excel,Lotus1_2_3等多種電子表格。5.2MSComm控件串口通訊作為一種古老而又靈活的通訊方式,被廣泛地應(yīng)用于PC機間的通訊以及PC機和單片機之間的通訊之中。
提到串口通訊的編程,人們往往立刻想到C、匯編等對系統(tǒng)底層操作支持較好的編程語言以及大串繁瑣的代碼。
實際上,只要我們借助相關(guān)ActiveX控件的幫助,即使是在底層操作一向不被人看好的VB中,一樣能夠?qū)崿F(xiàn)串口通訊,甚至其實現(xiàn)方法和C、匯編相比,要更加快捷方便。在Visual
Basic中有一個名為Microsoft
Communication
Control(簡稱MSComm)的通訊控件。我們只要通過對此控件的屬性和事件進行相應(yīng)編程操作,就可以輕松地實現(xiàn)串口通訊。5.2.1MSComm控件的主要屬性、事件
一、MSComm的屬性由于MSComm控件屬性很多,在此僅介紹與實現(xiàn)串口通訊密切相關(guān)的核心屬性。Commport:設(shè)置通訊所占用的串口號。如設(shè)成1(默認值),表示對Com1進行操作。Setting:對串口通訊的相關(guān)參數(shù)。包括串口通訊的比特率,奇偶校驗,數(shù)據(jù)位長度、停止位等。其默認值
是“9600,N,8,1”,表示串口比特率是9600bit/s,不作奇偶校驗,8位數(shù)據(jù)位,1個停止位。Portopen:設(shè)置串口狀態(tài),值為True時打開串口,值為False時關(guān)閉串口。Input:從輸入寄存器讀取數(shù)據(jù),返回值為從串口讀取的數(shù)據(jù)內(nèi)容,同時輸入寄存器將被清空。Ouput:發(fā)送數(shù)據(jù)到輸出寄存器。InBufferCount:設(shè)置輸入寄存器所存儲的字符數(shù),當將其值設(shè)為0時,則輸入寄存器將被清空。InputMode:設(shè)置從輸入寄存器中讀取數(shù)據(jù)的形式。若值為0,則表示以文本形式讀??;值為1,則表示以二進制形式讀取。OutBufferCount:設(shè)置輸出寄存器所存儲的字符數(shù),當將其值設(shè)為0時,則輸出寄存器將被清空。RThreshold:設(shè)置在MSComm控件設(shè)置CommEvent屬性為comEvReceive并產(chǎn)生OnComm事件之前要接受的字符數(shù)。CommEvent屬性:返回最近的通訊事件或錯誤。通過對它具體屬性值的查詢,我們就可以獲得通訊事件和通訊錯誤的完整信息。當其值是comEvReceive時表示接收到數(shù)據(jù)。二、MSComm的事件除了公共事件之外,MSComm只有一個OnComm事件。當CommEvent屬性值變化時將發(fā)生OnComm事件,指示發(fā)生一個通訊事件或錯誤。當我們設(shè)置Rtheshold屬性值為0時,將使得捕獲comEvReceive事件無效。5.3VB程序設(shè)計5.3.1程序詳細設(shè)計VB程序詳細設(shè)計請見附錄1。5.3.2系統(tǒng)界面系統(tǒng)界面見圖5-1。圖5-1PC機接收溫度值軟件界面6調(diào)試6.1液晶顯示器LCD1602設(shè)計過程中遇到的問題既解決方法一、LCD不能正常顯示經(jīng)過對程序的調(diào)試和硬件電路的檢查,問題有如下幾個:(1)對單片機延時不熟悉,延時程序錯誤;(2)LCD1602背光設(shè)置不合適,字體看不清。解決方法如下:(1)查看ATMEGA16L相關(guān)資料,將資料與電路板相對照,熟悉芯片上每一個針腳的名稱,熟悉針腳的用法;(2)編寫小程序如發(fā)光二極管閃亮、跑馬燈等,利用AVRStudio進行程序的編輯、編譯、連接、調(diào)試,然后將HEX文件下載到單片機。二、LCD顯示器顯示的字符看不清楚經(jīng)過硬件電路的檢查,問題有如下:LCD對比度調(diào)節(jié)端電壓沒調(diào)好。解決方法如下:在LCD對比度調(diào)節(jié)端接一個10K的電位器,可在運行時調(diào)節(jié)背光到合適的亮度。6.2串口設(shè)計過程中遇到的問題既解決方法一、串口不能正常通信,通過檢查電路和程序發(fā)現(xiàn)問題如下:(1)電路RS232芯片焊接錯誤;(2)程序編寫不正確,比如波特率設(shè)置錯誤。解決方法如下:(1)重新焊接電路;(2)仔細
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育學會課題申報書范文
- 旅游文化課題申報書
- 員工與酒店合同范本
- 寫股權(quán)拍賣合同范本
- 品牌代招合同范本
- 代注冊工商合同范本
- 傳媒 科研課題申報書
- 公園租賃衣服合同范例
- 合伙辦學合同范本
- 知網(wǎng)查重課題申報書
- 物業(yè)服務(wù)行業(yè)禮儀培訓
- 22陳涉世家 司馬遷 公開課一等獎創(chuàng)新教學設(shè)計 度部編版初中語文九年級下冊
- 2021年飽和蒸汽及過熱蒸汽焓值表
- 《抗戰(zhàn)中的英雄人物》課件
- 外墻真石漆施工方案
- 森林防火安全生產(chǎn)工作
- 《服裝市場營銷》課件
- 【MOOC】實驗室安全學-武漢理工大學 中國大學慕課MOOC答案
- 網(wǎng)絡(luò)安全風險評估報告模板
- DB32T 2836-2015 雙孢蘑菇工廠化生產(chǎn)技術(shù)規(guī)程
- 蘋果種植養(yǎng)護培訓課件
評論
0/150
提交評論