無線溫度檢測課件_第1頁
無線溫度檢測課件_第2頁
無線溫度檢測課件_第3頁
無線溫度檢測課件_第4頁
無線溫度檢測課件_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

ZigBee網(wǎng)絡(luò)原理與應(yīng)用李曙英2015.2.28ZigBee網(wǎng)絡(luò)原理與應(yīng)用1無線溫度檢測實例:協(xié)調(diào)器建立網(wǎng)絡(luò),終端節(jié)點加入網(wǎng)絡(luò),終端節(jié)點周期性的采集溫度數(shù)據(jù)并發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器將收到的溫度值用串口送PC機顯示與上個實例的區(qū)別?無線溫度檢測實例:協(xié)調(diào)器建立網(wǎng)絡(luò),終端節(jié)點加入網(wǎng)絡(luò),終端節(jié)點2-3-ADCCC2530的ADC支持多達14位的模擬數(shù)字轉(zhuǎn)換,具有多達12位的有效數(shù)字位。它包括一個模擬多路轉(zhuǎn)換器,具有多達8個各自可配置的通道,一個參考電壓發(fā)生器。轉(zhuǎn)換結(jié)果通過DMA寫入存儲器。ADC特征ADC輸入ADC轉(zhuǎn)換-3-ADCCC2530的ADC支持多達14位的模擬數(shù)字-4-ADC特征可選的抽取率,設(shè)置了7~12位的分辨率。8個獨立的輸入通道,可接收單端或差分信號。參考電壓可選為內(nèi)部單端、外部單端、外部差分或AVDD5。產(chǎn)生中斷請求。轉(zhuǎn)換結(jié)束時的DMA觸發(fā)。溫度傳感器輸入。電池測量功能。-4-ADC特征可選的抽取率,設(shè)置了7~12位的分辨率。-5-ADC輸入ADC的輸入是通過端口0來實現(xiàn)的。輸入引腳AIN0-AIN7是連接到ADC的。ADC輸入有兩種配置:單端輸入和差分輸入

單端電壓輸入AIN0到AIN7以通道號碼0到7表示。通道號碼8到11表示差分輸入,由AIN0-1、AIN2-3、AIN4-5和AIN6-7組成。通道號碼12到15分別表示GND、溫度傳感器和AVDD5/3。以上輸入方式在寄存器ADCCON2和寄存器ADCCON3中詳細配置。-5-ADC輸入ADC的輸入是通過端口0來實現(xiàn)的。輸入引-6-

ADC輸入ADCCON2寄存器----定義ADC的序列轉(zhuǎn)換位名稱復(fù)位R/W描述7:6SREF[1:0]00R/W選擇參考電壓用于序列轉(zhuǎn)換00:內(nèi)部參考電壓01:AIN7引腳上的外部參考電壓10:AVDD5引腳11:AIN6-AIN7差分輸入外部參考電壓5:4SDIV01R/W為包含在轉(zhuǎn)換序列內(nèi)的通道設(shè)置抽取率,抽取率也決定完成轉(zhuǎn)換需要的時間和分辨率00:64抽取率(7位有效數(shù)字位)01:128抽取率(9位有效數(shù)字位)10:256抽取率(10位有效數(shù)字位)11:512抽取率(12位有效數(shù)字位)3:0SCH0000R/W序列通道選擇,選擇序列結(jié)束,一個序列可以是從AIN0到AIN7(SCH<=7)也可以從差分輸入AIN0-AIN1到AIN6-AIN7(8<=SCH<=11)。對于其它設(shè)置,只能執(zhí)行單個轉(zhuǎn)換。當(dāng)讀取的時侯,這些位將代表有轉(zhuǎn)換進行的通道號碼。0000:AIN00001:AIN10010:AIN20011:AIN30100:AIN40101:AIN10110:AIN60111:AIN71000:AIN0-AIN11001:AIN2-AIN31010:AIN4-AIN51011:AIN6-AIN71100:GND1101:正電壓參考1110:溫度傳感器1111:VDD/3-6-ADC輸入ADCCON2寄存器----定義AD-7-ADC輸入ADCCON3寄存器-----定義ADC單個值轉(zhuǎn)換位名稱復(fù)位R/W描述7:6EREF[1:0]00R/W選擇用于額外轉(zhuǎn)換的參考電壓00:內(nèi)部參考電壓01:AIN7引腳上的外部參考電壓10:AVDD5引腳11:AIN6-AIN7差分輸入外部參考電壓5:4EDIV00R/W設(shè)置用于額外轉(zhuǎn)換的抽取率。抽取率也決定可完成轉(zhuǎn)換需要的時間和分辨率00:64抽取率(7位有效數(shù)字位)01:128抽取率(9位有效數(shù)字位)10:256抽取率(10位有效數(shù)字位)11:512抽取率(12位有效數(shù)字位)3:0ECH0000R/W單個通道選擇。選擇寫ADCCON3觸發(fā)的單個轉(zhuǎn)換所在的通道號碼。當(dāng)單個轉(zhuǎn)換完成,該位自動清除。0000:AIN00001:AIN10010:AIN20011:AIN30100:AIN40101:AIN10110:AIN60111:AIN71000:AIN0-AIN11001:AIN2-AIN31010:AIN4-AIN51011:AIN6-AIN71100:GND1101:正電壓參考1110:溫度傳感器1111:VDD/3//單次轉(zhuǎn)換,參考電壓為電源電壓,對P0.7進行采樣12位分辨率ADCCON3=0xb7;-7-ADC輸入ADCCON3寄存器-----定義ADC-8-ADC輸入除了輸入引腳AIN0-AIN7,片上溫度傳感器的輸出也可以選擇作為ADC的輸入,用于溫度測量。通過配置寄存器TR0寄存器和ATEST寄存器可以獲得片上溫度

TR0寄存器位名稱復(fù)位R/W描述7:1--0000000R0保留0ADCTM0R/W設(shè)置為1來連接溫度傳感器到SOC_ADC。也可參見ATEST寄存器描述來使能溫度傳感器-8-ADC輸入除了輸入引腳AIN0-AIN7,片上溫度-9-ADC輸入除了輸入引腳AIN0-AIN7,片上溫度傳感器的輸出也可以選擇作為ADC的輸入,用于溫度測量。通過配置寄存器TR0寄存器和ATEST寄存器可以獲得片上溫度

ATEST寄存器位名稱復(fù)位R/W描述7:6--00R0保留5:0ATEST_CTRL[5:0]000000R/W控制模擬測試模式:000000:禁用000001:使能溫度傳感器。其它值保留-9-ADC輸入除了輸入引腳AIN0-AIN7,片上溫度-10-ADC轉(zhuǎn)換ATEST寄存器ADC的轉(zhuǎn)換分為ADC序列轉(zhuǎn)換和ADC單個轉(zhuǎn)換。ADC執(zhí)行一系列的轉(zhuǎn)換,并把轉(zhuǎn)換結(jié)果通過DMA移動到存儲器,不需要任何CPU的干預(yù)

ADC序列轉(zhuǎn)換與APCFG寄存器的設(shè)置有關(guān),APCFG為8位模擬輸入的I/O引腳設(shè)置,如果模擬I/O使能,每一個通道正常情況下應(yīng)是ADC序列的一部分。如果相應(yīng)的模擬I/O被禁用,將啟用差分輸入,處于差分的兩個引腳必須在APCFG寄存器中設(shè)置為模擬輸入引腳。ADCCON2.SCH寄存器位用于定義一個ADC序列轉(zhuǎn)換,它來自ADC輸入。如果ADCCON2.SCH設(shè)置為一個小于8的值,轉(zhuǎn)換序列來自AIN0-AIN7的每個通道上;當(dāng)ADCCON2.SCH設(shè)置為一個在8和12之間的值,序列包括差分輸入;當(dāng)ADCCON2.SCH大于或等于12,為單個ADC轉(zhuǎn)換。-10-ADC轉(zhuǎn)換ATEST寄存器ADC的轉(zhuǎn)換分為ADC-11-ADC轉(zhuǎn)換除了序列轉(zhuǎn)換,每個通道都可以進行ADC單個轉(zhuǎn)換,ADC單個轉(zhuǎn)換通過配置寄存器ADCCON3.SCH完成。當(dāng)通過寫ADCCON3觸發(fā)的一個單個轉(zhuǎn)換完成時,ADC將產(chǎn)生一個中斷。ADC的數(shù)字轉(zhuǎn)換結(jié)果可以通過設(shè)置寄存器ADCCON1獲得。

位名稱復(fù)位R/W描述7EOC0R/H0轉(zhuǎn)換結(jié)束。當(dāng)ADCH被獲取的時候清除。如果已讀取前一數(shù)據(jù)之前,完成一個新的轉(zhuǎn)換,EOC位仍然為高。0:轉(zhuǎn)換沒有完成1:轉(zhuǎn)換完成6ST0開始轉(zhuǎn)換。讀為1,直到轉(zhuǎn)換完成0:沒有轉(zhuǎn)換正在進行1:開始轉(zhuǎn)換序列如果ADCCON1.ATAEL=11沒有其它序列進行轉(zhuǎn)換5:4STSEL[1:0]11R/W1啟動選擇,選擇該事件,將啟動一個新的轉(zhuǎn)換序列。00:P2.0引腳的外部觸發(fā)01:全速,不等待觸發(fā)器10:定時器1通道0比較事件11:ADCCON1.ST=13:2RCTRL[1:0]00R/W控制16位隨機數(shù)發(fā)生器。操作完成自動清零。00:正常運行01:LFSR的時鐘一次10:保留11:停止。關(guān)閉隨機數(shù)發(fā)生器1:0--11R/W保留//開啟ADADCCON1=0x40;-11-ADC轉(zhuǎn)換除了序列轉(zhuǎn)換,每個通道都可以進行ADC-12-ADC轉(zhuǎn)換ADC的數(shù)字轉(zhuǎn)換結(jié)果存放在寄存器ADCH和ADCL中

位名稱復(fù)位R/W描述7:2ADC[5:0]000000RADC轉(zhuǎn)換結(jié)果低位部分1:0--00R0保留ADCLADC數(shù)據(jù)低位ADCHADC數(shù)據(jù)低高位位名稱復(fù)位R/W描述7:0ADC[13:6]0x00RADC轉(zhuǎn)換結(jié)構(gòu)高位部分//將轉(zhuǎn)換的結(jié)果從ADC:ADCH中取出放入到temp中temp[1]=ADCL;temp[0]=ADCH;-12-ADC轉(zhuǎn)換ADC的數(shù)字轉(zhuǎn)換結(jié)果存放在寄存器ADC-13-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述,將AVDD(3.3v)AD轉(zhuǎn)換,通過串口在PC機顯示結(jié)果

AD的初始化voidInitialAD(void){ //清EOC標(biāo)志

ADCH&=0X00; //P0.7端口模擬I/O使能

ADCCFG|=0X80; //單次轉(zhuǎn)換,參考電壓為電源電壓,對P07進行采樣12位分辨率

ADCCON3=0xb7; //停止A/D ADCCON1=0X30;

//啟動A/D ADCCON1|=0X40;}-13-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述,將AVDD(-14-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述,將AVDD(3.3v)AD轉(zhuǎn)換,通過串口在PC機顯示結(jié)果

頭文件、宏定義以及函數(shù)聲明#include"ioCC2530.h"#defineuintunsignedint//定義控制燈的端口#defineLED1P1_0#defineLED2P1_1chartemp[2];uintadc;floatnum;charadcdata[]="0.0V";//函數(shù)聲明voidDelay(uint);voidinitUARTtest(void);voidInitialAD(void);voidUartTX_Send_String(char*Data,intlen);-14-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述,將AVDD(-15-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述4.D.7,將AVDD(3.3v)AD轉(zhuǎn)換,通過串口在PC機顯示結(jié)果

主函數(shù)部分voidmain(void){ //P1控制LEDP1DIR=0x03;//關(guān)LEDLED1=1;LED2=1;//初始化串口initUARTtest();//初始化ADCInitialAD();while(1){//等待ADC轉(zhuǎn)換完成if(ADCCON1&0x80){LED1=0;temp[1]=ADCL;temp[0]=ADCH;//初始化ADInitialAD();//開始下一轉(zhuǎn)換ADCCON1|=0x40;//adc賦值adc|=(uint)temp[1];adc|=((uint)temp[0])<<8;//adc>>=2;if(adc&0x8000)adc=0;num=adc*3.3/8096;//定參考電壓為3.3V。14位精確度adcdata[1]=(char)(num)%10+48;adcdata[3]=(char)(num*10)%10+48;//串口送數(shù)包括空格UartTX_Send_String(adcdata,6);//完成數(shù)據(jù)處理Delay(30000);//LED1狀態(tài)改變LED1=~LED1;Delay(30000);}}}-15-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述4.D.7,將Zstack中ADC應(yīng)用協(xié)調(diào)器建立網(wǎng)絡(luò),終端節(jié)點加入網(wǎng)絡(luò),終端節(jié)點周期性的采集溫度數(shù)據(jù)并發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器將收到的溫度值用串口送PC機顯示協(xié)調(diào)器功能:建網(wǎng),接收數(shù)據(jù),向串口發(fā)數(shù)據(jù)終端節(jié)點功能:

Zstack中ADC應(yīng)用協(xié)調(diào)器建立網(wǎng)絡(luò),終端節(jié)點加入網(wǎng)絡(luò),16無線測溫----協(xié)調(diào)器編程1建網(wǎng)2用戶任務(wù):事件1:

接收數(shù)據(jù)----什么事件?SYS_EVENT_MSG下的

AF_INCOMING_MSG_CMD

事件2:向串口發(fā)數(shù)據(jù)----什么時候?

接收到數(shù)據(jù)后----事件2包含

在事件1內(nèi)

無線測溫----協(xié)調(diào)器編程1建網(wǎng)17無線測溫----協(xié)調(diào)器編程涉及:串口設(shè)置、初始化;----同上例

溫度數(shù)據(jù)存儲區(qū)無線測溫----協(xié)調(diào)器編程涉及:串口設(shè)置、初始化;----同18無線測溫----協(xié)調(diào)器編程特殊之處:數(shù)據(jù)傳遞一般會用數(shù)據(jù)包。

特點:命令頭+數(shù)據(jù)+命令尾

用結(jié)構(gòu)體構(gòu)建數(shù)據(jù)包本例中的溫度數(shù)據(jù):structRFRXBUF{unsignedcharHead;unsignedcharvalue[2];unsignedcharTail;}BUF;無線測溫----協(xié)調(diào)器編程特殊之處:數(shù)據(jù)傳遞一般會用數(shù)據(jù)包。19typedefunionh{uint8TEMP[4];structRFRXBUF{unsignedcharHead;unsignedcharvalue[2];unsignedcharTail;}BUF;}TEMPERATURE;typedefunionh20TEMPERATUREtemperature;//定義溫度數(shù)據(jù)包存儲區(qū)溫度數(shù)據(jù)包在終端、協(xié)調(diào)器之間傳遞,TEMPERATURE類要告知協(xié)調(diào)器、終端----怎么做?

加入Coordinator.h、Enddevice.h中

TEMPERATUREtemperature;21無線測溫----協(xié)調(diào)器編程事件1觸發(fā):CoordApp_ProcessEvent任務(wù)中caseAF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;無線測溫----協(xié)調(diào)器編程事件1觸發(fā):CoordApp_Pr22無線測溫----協(xié)調(diào)器編程voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){TEMPERATUREtemperature;switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(&temperature,pkt->cmd.Data,sizeof(temperature));//從消息隊列中讀數(shù)據(jù)HalUARTWrite(0,(uint8*)&temperature,sizeof(temperature));//數(shù)據(jù)送串口break;}}無線測溫----協(xié)調(diào)器編程voidGenericApp_M23無線測溫----終端編程1、加入網(wǎng)絡(luò)----同以前例2、周期性的將溫度傳感器上的電壓轉(zhuǎn)換成數(shù)字量—溫度值,再用無線發(fā)送給協(xié)調(diào)器無線測溫----終端編程1、加入網(wǎng)絡(luò)----同以前例24無線測溫----終端編程1片內(nèi)溫度傳感器//使能片內(nèi)溫度傳感器ATEST=0x01;//連上溫度傳感器TR0|=0x01;無線測溫----終端編程1片內(nèi)溫度傳感器25無線測溫----終端編程2、ADCADCIF=0;//清除ADC中斷

ADCCON3=(HAL_ADC_REF_115v|HAL_ADC_DEC_256|HAL_ADC_CHN_TEMP);while(!ADCIF);//等待AD轉(zhuǎn)換完成

ADCIF=0;value=ADCL;//讀取AD值

value|=((uint16)ADCH)<<8;value>>=4;無線測溫----終端編程2、ADC26數(shù)據(jù)發(fā)送voidGenericApp_SendTheMessage(void){uint8tvalue;TEMPERATUREtemperature;temperature.BUF.Head='&';tvalue=readTemp();temperature.BUF.value[0]=tvalue/10+'0';temperature.BUF.value[1]=tvalue%10+'0';temperature.BUF.Tail='C';

數(shù)據(jù)發(fā)送voidGenericApp_SendTheMes27afAddrType_tmy_DstAddr;my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;my_DstAddr.endPoint=GENERICAPP_ENDPOINT;my_DstAddr.addr.shortAddr=0x0000;AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,sizeof(temperature),(byte*)&temperature,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);HalLedBlink(HAL_LED_1,0,50,500);}afAddrType_tmy_DstAddr;28周期性觸發(fā)發(fā)送事件#defineSEND_DATA_EVENT0X01//定義事件//啟動事件caseZDO_STATE_CHANGE:GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);if(GenericApp_NwkState==DEV_END_DEVICE)osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);周期性觸發(fā)發(fā)送事件#defineSEND_DATA_EVE29//周期性工作if(events&SEND_DATA_EVENT){GenericApp_SendTheMessage();osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,1000);return(events^SEND_DATA_EVENT);}//周期性工作30無線測溫----終端編程程序結(jié)構(gòu)傳感器的操作為一個文件----Sensor.c,

涉及到的名稱常量定義----Sensor.h

無線測溫----終端編程程序結(jié)構(gòu)31無線測溫----終端編程Sensor.h#ifndefSENSOR_H#defineSENSOR_H#include<hal_types.h>externint8readTemp(void);#endif無線測溫----終端編程Sensor.h32無線測溫----終端編程----Sensor.c#include"Sensor.h"#include<ioCC2530.h>#defineHAL_ADC_REF_115v0X00//設(shè)置參考電壓為內(nèi)部參考電壓:00(7-6位)#defineHAL_ADC_DEC_2560X20//設(shè)置抽取率256:10(5-4位)#defineHAL_ADC_CHN_TEMP0X0e//序列通道選擇,1110:溫度傳感器(3-0位)無線測溫----終端編程----Sensor.c#inclu33無線測溫----終端編程----Sensor.cint8readTemp(void){staticuint16reference_voltage;staticuint8bCalibrate=TRUE;uint16value;int8temp;ATEST=0x01;TR0|=0x01;ADCIF=0;//清除ADC中斷

ADCCON3=(HAL_ADC_REF_115v|HAL_ADC_DEC_256|HAL_ADC_CHN_TEMP);

無線測溫----終端編程----Sensor.cint8r34while(!ADCIF);//等待AD轉(zhuǎn)換完成ADCIF=0;value=ADCL;//讀取AD值

value|=((uint16)ADCH)<<8;value>>=4;while(!ADCIF);//等待AD轉(zhuǎn)換完成35if(bCalibrate)//記錄第一次讀取的溫度值,為后面校正用

{reference_voltage=value;bCalibrate=FALSE;}temp=22+((value-reference_voltage)/4);returntemp;}if(bCalibrate)36無線溫度檢測課件37ZigBee網(wǎng)絡(luò)原理與應(yīng)用李曙英2015.2.28ZigBee網(wǎng)絡(luò)原理與應(yīng)用38無線溫度檢測實例:協(xié)調(diào)器建立網(wǎng)絡(luò),終端節(jié)點加入網(wǎng)絡(luò),終端節(jié)點周期性的采集溫度數(shù)據(jù)并發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器將收到的溫度值用串口送PC機顯示與上個實例的區(qū)別?無線溫度檢測實例:協(xié)調(diào)器建立網(wǎng)絡(luò),終端節(jié)點加入網(wǎng)絡(luò),終端節(jié)點39-40-ADCCC2530的ADC支持多達14位的模擬數(shù)字轉(zhuǎn)換,具有多達12位的有效數(shù)字位。它包括一個模擬多路轉(zhuǎn)換器,具有多達8個各自可配置的通道,一個參考電壓發(fā)生器。轉(zhuǎn)換結(jié)果通過DMA寫入存儲器。ADC特征ADC輸入ADC轉(zhuǎn)換-3-ADCCC2530的ADC支持多達14位的模擬數(shù)字-41-ADC特征可選的抽取率,設(shè)置了7~12位的分辨率。8個獨立的輸入通道,可接收單端或差分信號。參考電壓可選為內(nèi)部單端、外部單端、外部差分或AVDD5。產(chǎn)生中斷請求。轉(zhuǎn)換結(jié)束時的DMA觸發(fā)。溫度傳感器輸入。電池測量功能。-4-ADC特征可選的抽取率,設(shè)置了7~12位的分辨率。-42-ADC輸入ADC的輸入是通過端口0來實現(xiàn)的。輸入引腳AIN0-AIN7是連接到ADC的。ADC輸入有兩種配置:單端輸入和差分輸入

單端電壓輸入AIN0到AIN7以通道號碼0到7表示。通道號碼8到11表示差分輸入,由AIN0-1、AIN2-3、AIN4-5和AIN6-7組成。通道號碼12到15分別表示GND、溫度傳感器和AVDD5/3。以上輸入方式在寄存器ADCCON2和寄存器ADCCON3中詳細配置。-5-ADC輸入ADC的輸入是通過端口0來實現(xiàn)的。輸入引-43-

ADC輸入ADCCON2寄存器----定義ADC的序列轉(zhuǎn)換位名稱復(fù)位R/W描述7:6SREF[1:0]00R/W選擇參考電壓用于序列轉(zhuǎn)換00:內(nèi)部參考電壓01:AIN7引腳上的外部參考電壓10:AVDD5引腳11:AIN6-AIN7差分輸入外部參考電壓5:4SDIV01R/W為包含在轉(zhuǎn)換序列內(nèi)的通道設(shè)置抽取率,抽取率也決定完成轉(zhuǎn)換需要的時間和分辨率00:64抽取率(7位有效數(shù)字位)01:128抽取率(9位有效數(shù)字位)10:256抽取率(10位有效數(shù)字位)11:512抽取率(12位有效數(shù)字位)3:0SCH0000R/W序列通道選擇,選擇序列結(jié)束,一個序列可以是從AIN0到AIN7(SCH<=7)也可以從差分輸入AIN0-AIN1到AIN6-AIN7(8<=SCH<=11)。對于其它設(shè)置,只能執(zhí)行單個轉(zhuǎn)換。當(dāng)讀取的時侯,這些位將代表有轉(zhuǎn)換進行的通道號碼。0000:AIN00001:AIN10010:AIN20011:AIN30100:AIN40101:AIN10110:AIN60111:AIN71000:AIN0-AIN11001:AIN2-AIN31010:AIN4-AIN51011:AIN6-AIN71100:GND1101:正電壓參考1110:溫度傳感器1111:VDD/3-6-ADC輸入ADCCON2寄存器----定義AD-44-ADC輸入ADCCON3寄存器-----定義ADC單個值轉(zhuǎn)換位名稱復(fù)位R/W描述7:6EREF[1:0]00R/W選擇用于額外轉(zhuǎn)換的參考電壓00:內(nèi)部參考電壓01:AIN7引腳上的外部參考電壓10:AVDD5引腳11:AIN6-AIN7差分輸入外部參考電壓5:4EDIV00R/W設(shè)置用于額外轉(zhuǎn)換的抽取率。抽取率也決定可完成轉(zhuǎn)換需要的時間和分辨率00:64抽取率(7位有效數(shù)字位)01:128抽取率(9位有效數(shù)字位)10:256抽取率(10位有效數(shù)字位)11:512抽取率(12位有效數(shù)字位)3:0ECH0000R/W單個通道選擇。選擇寫ADCCON3觸發(fā)的單個轉(zhuǎn)換所在的通道號碼。當(dāng)單個轉(zhuǎn)換完成,該位自動清除。0000:AIN00001:AIN10010:AIN20011:AIN30100:AIN40101:AIN10110:AIN60111:AIN71000:AIN0-AIN11001:AIN2-AIN31010:AIN4-AIN51011:AIN6-AIN71100:GND1101:正電壓參考1110:溫度傳感器1111:VDD/3//單次轉(zhuǎn)換,參考電壓為電源電壓,對P0.7進行采樣12位分辨率ADCCON3=0xb7;-7-ADC輸入ADCCON3寄存器-----定義ADC-45-ADC輸入除了輸入引腳AIN0-AIN7,片上溫度傳感器的輸出也可以選擇作為ADC的輸入,用于溫度測量。通過配置寄存器TR0寄存器和ATEST寄存器可以獲得片上溫度

TR0寄存器位名稱復(fù)位R/W描述7:1--0000000R0保留0ADCTM0R/W設(shè)置為1來連接溫度傳感器到SOC_ADC。也可參見ATEST寄存器描述來使能溫度傳感器-8-ADC輸入除了輸入引腳AIN0-AIN7,片上溫度-46-ADC輸入除了輸入引腳AIN0-AIN7,片上溫度傳感器的輸出也可以選擇作為ADC的輸入,用于溫度測量。通過配置寄存器TR0寄存器和ATEST寄存器可以獲得片上溫度

ATEST寄存器位名稱復(fù)位R/W描述7:6--00R0保留5:0ATEST_CTRL[5:0]000000R/W控制模擬測試模式:000000:禁用000001:使能溫度傳感器。其它值保留-9-ADC輸入除了輸入引腳AIN0-AIN7,片上溫度-47-ADC轉(zhuǎn)換ATEST寄存器ADC的轉(zhuǎn)換分為ADC序列轉(zhuǎn)換和ADC單個轉(zhuǎn)換。ADC執(zhí)行一系列的轉(zhuǎn)換,并把轉(zhuǎn)換結(jié)果通過DMA移動到存儲器,不需要任何CPU的干預(yù)

ADC序列轉(zhuǎn)換與APCFG寄存器的設(shè)置有關(guān),APCFG為8位模擬輸入的I/O引腳設(shè)置,如果模擬I/O使能,每一個通道正常情況下應(yīng)是ADC序列的一部分。如果相應(yīng)的模擬I/O被禁用,將啟用差分輸入,處于差分的兩個引腳必須在APCFG寄存器中設(shè)置為模擬輸入引腳。ADCCON2.SCH寄存器位用于定義一個ADC序列轉(zhuǎn)換,它來自ADC輸入。如果ADCCON2.SCH設(shè)置為一個小于8的值,轉(zhuǎn)換序列來自AIN0-AIN7的每個通道上;當(dāng)ADCCON2.SCH設(shè)置為一個在8和12之間的值,序列包括差分輸入;當(dāng)ADCCON2.SCH大于或等于12,為單個ADC轉(zhuǎn)換。-10-ADC轉(zhuǎn)換ATEST寄存器ADC的轉(zhuǎn)換分為ADC-48-ADC轉(zhuǎn)換除了序列轉(zhuǎn)換,每個通道都可以進行ADC單個轉(zhuǎn)換,ADC單個轉(zhuǎn)換通過配置寄存器ADCCON3.SCH完成。當(dāng)通過寫ADCCON3觸發(fā)的一個單個轉(zhuǎn)換完成時,ADC將產(chǎn)生一個中斷。ADC的數(shù)字轉(zhuǎn)換結(jié)果可以通過設(shè)置寄存器ADCCON1獲得。

位名稱復(fù)位R/W描述7EOC0R/H0轉(zhuǎn)換結(jié)束。當(dāng)ADCH被獲取的時候清除。如果已讀取前一數(shù)據(jù)之前,完成一個新的轉(zhuǎn)換,EOC位仍然為高。0:轉(zhuǎn)換沒有完成1:轉(zhuǎn)換完成6ST0開始轉(zhuǎn)換。讀為1,直到轉(zhuǎn)換完成0:沒有轉(zhuǎn)換正在進行1:開始轉(zhuǎn)換序列如果ADCCON1.ATAEL=11沒有其它序列進行轉(zhuǎn)換5:4STSEL[1:0]11R/W1啟動選擇,選擇該事件,將啟動一個新的轉(zhuǎn)換序列。00:P2.0引腳的外部觸發(fā)01:全速,不等待觸發(fā)器10:定時器1通道0比較事件11:ADCCON1.ST=13:2RCTRL[1:0]00R/W控制16位隨機數(shù)發(fā)生器。操作完成自動清零。00:正常運行01:LFSR的時鐘一次10:保留11:停止。關(guān)閉隨機數(shù)發(fā)生器1:0--11R/W保留//開啟ADADCCON1=0x40;-11-ADC轉(zhuǎn)換除了序列轉(zhuǎn)換,每個通道都可以進行ADC-49-ADC轉(zhuǎn)換ADC的數(shù)字轉(zhuǎn)換結(jié)果存放在寄存器ADCH和ADCL中

位名稱復(fù)位R/W描述7:2ADC[5:0]000000RADC轉(zhuǎn)換結(jié)果低位部分1:0--00R0保留ADCLADC數(shù)據(jù)低位ADCHADC數(shù)據(jù)低高位位名稱復(fù)位R/W描述7:0ADC[13:6]0x00RADC轉(zhuǎn)換結(jié)構(gòu)高位部分//將轉(zhuǎn)換的結(jié)果從ADC:ADCH中取出放入到temp中temp[1]=ADCL;temp[0]=ADCH;-12-ADC轉(zhuǎn)換ADC的數(shù)字轉(zhuǎn)換結(jié)果存放在寄存器ADC-50-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述,將AVDD(3.3v)AD轉(zhuǎn)換,通過串口在PC機顯示結(jié)果

AD的初始化voidInitialAD(void){ //清EOC標(biāo)志

ADCH&=0X00; //P0.7端口模擬I/O使能

ADCCFG|=0X80; //單次轉(zhuǎn)換,參考電壓為電源電壓,對P07進行采樣12位分辨率

ADCCON3=0xb7; //停止A/D ADCCON1=0X30;

//啟動A/D ADCCON1|=0X40;}-13-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述,將AVDD(-51-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述,將AVDD(3.3v)AD轉(zhuǎn)換,通過串口在PC機顯示結(jié)果

頭文件、宏定義以及函數(shù)聲明#include"ioCC2530.h"#defineuintunsignedint//定義控制燈的端口#defineLED1P1_0#defineLED2P1_1chartemp[2];uintadc;floatnum;charadcdata[]="0.0V";//函數(shù)聲明voidDelay(uint);voidinitUARTtest(void);voidInitialAD(void);voidUartTX_Send_String(char*Data,intlen);-14-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述,將AVDD(-52-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述4.D.7,將AVDD(3.3v)AD轉(zhuǎn)換,通過串口在PC機顯示結(jié)果

主函數(shù)部分voidmain(void){ //P1控制LEDP1DIR=0x03;//關(guān)LEDLED1=1;LED2=1;//初始化串口initUARTtest();//初始化ADCInitialAD();while(1){//等待ADC轉(zhuǎn)換完成if(ADCCON1&0x80){LED1=0;temp[1]=ADCL;temp[0]=ADCH;//初始化ADInitialAD();//開始下一轉(zhuǎn)換ADCCON1|=0x40;//adc賦值adc|=(uint)temp[1];adc|=((uint)temp[0])<<8;//adc>>=2;if(adc&0x8000)adc=0;num=adc*3.3/8096;//定參考電壓為3.3V。14位精確度adcdata[1]=(char)(num)%10+48;adcdata[3]=(char)(num*10)%10+48;//串口送數(shù)包括空格UartTX_Send_String(adcdata,6);//完成數(shù)據(jù)處理Delay(30000);//LED1狀態(tài)改變LED1=~LED1;Delay(30000);}}}-15-ADC轉(zhuǎn)換下述內(nèi)容用于實現(xiàn)任務(wù)描述4.D.7,將Zstack中ADC應(yīng)用協(xié)調(diào)器建立網(wǎng)絡(luò),終端節(jié)點加入網(wǎng)絡(luò),終端節(jié)點周期性的采集溫度數(shù)據(jù)并發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器將收到的溫度值用串口送PC機顯示協(xié)調(diào)器功能:建網(wǎng),接收數(shù)據(jù),向串口發(fā)數(shù)據(jù)終端節(jié)點功能:

Zstack中ADC應(yīng)用協(xié)調(diào)器建立網(wǎng)絡(luò),終端節(jié)點加入網(wǎng)絡(luò),53無線測溫----協(xié)調(diào)器編程1建網(wǎng)2用戶任務(wù):事件1:

接收數(shù)據(jù)----什么事件?SYS_EVENT_MSG下的

AF_INCOMING_MSG_CMD

事件2:向串口發(fā)數(shù)據(jù)----什么時候?

接收到數(shù)據(jù)后----事件2包含

在事件1內(nèi)

無線測溫----協(xié)調(diào)器編程1建網(wǎng)54無線測溫----協(xié)調(diào)器編程涉及:串口設(shè)置、初始化;----同上例

溫度數(shù)據(jù)存儲區(qū)無線測溫----協(xié)調(diào)器編程涉及:串口設(shè)置、初始化;----同55無線測溫----協(xié)調(diào)器編程特殊之處:數(shù)據(jù)傳遞一般會用數(shù)據(jù)包。

特點:命令頭+數(shù)據(jù)+命令尾

用結(jié)構(gòu)體構(gòu)建數(shù)據(jù)包本例中的溫度數(shù)據(jù):structRFRXBUF{unsignedcharHead;unsignedcharvalue[2];unsignedcharTail;}BUF;無線測溫----協(xié)調(diào)器編程特殊之處:數(shù)據(jù)傳遞一般會用數(shù)據(jù)包。56typedefunionh{uint8TEMP[4];structRFRXBUF{unsignedcharHead;unsignedcharvalue[2];unsignedcharTail;}BUF;}TEMPERATURE;typedefunionh57TEMPERATUREtemperature;//定義溫度數(shù)據(jù)包存儲區(qū)溫度數(shù)據(jù)包在終端、協(xié)調(diào)器之間傳遞,TEMPERATURE類要告知協(xié)調(diào)器、終端----怎么做?

加入Coordinator.h、Enddevice.h中

TEMPERATUREtemperature;58無線測溫----協(xié)調(diào)器編程事件1觸發(fā):CoordApp_ProcessEvent任務(wù)中caseAF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;無線測溫----協(xié)調(diào)器編程事件1觸發(fā):CoordApp_Pr59無線測溫----協(xié)調(diào)器編程voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){TEMPERATUREtemperature;switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(&temperature,pkt->cmd.Data,sizeof(temperature));//從消息隊列中讀數(shù)據(jù)HalUARTWrite(0,(uint8*)&temperature,sizeof(temperature));//數(shù)據(jù)送串口break;}}無線測溫----協(xié)調(diào)器編程voidGenericApp_M60無線測溫----終端編程1、加入網(wǎng)絡(luò)----同以前例2、周期性的將溫度傳感器上的電壓轉(zhuǎn)換成數(shù)字量—溫度值,再用無線發(fā)送給協(xié)調(diào)器無線測溫----終端編程1、加入網(wǎng)絡(luò)----同以前例61無線測溫----終端編程1片內(nèi)溫度傳感器//使能片內(nèi)溫度傳感器ATEST=0x01;//連上溫度傳感器TR0|=0x01;無線測溫----終端編程1片內(nèi)溫度傳感器62無線測溫----終端編程2、ADCADCIF=0;//清除ADC中斷

ADCCON3=(HAL_ADC_REF_115v|HAL_ADC_DEC_256|HAL_ADC_CHN_TEMP);while(!ADCIF);//等待AD轉(zhuǎn)換完成

ADCIF=0;value=ADCL;//讀取AD值

value|=((uint16)ADCH)<<8;value>>=4;無線測溫----終端編程2、ADC63數(shù)據(jù)發(fā)送voidGenericApp_SendTheMessage(void){uint8tvalue;TEMPERATUREtemperature;temperature.BUF.Head='&';tvalue=readTemp();temperature.BUF.value[0]=tvalue/10+'0';temperature.BUF.value[1]=tvalue%10+'0';temperature.BUF.Tail='C';

數(shù)據(jù)發(fā)送voidGenericApp_SendTheMes64afAddrType_tmy_DstAddr;my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;my_DstAddr.endPoint=GENERICAPP_ENDPOINT;my_DstAddr.addr.shortAddr=0x0000;AF_DataRequest(&my_DstAddr,&Gen

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論