无线温度检测课件_第1页
无线温度检测课件_第2页
无线温度检测课件_第3页
无线温度检测课件_第4页
无线温度检测课件_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ZigBee网络原理与应用李曙英2015.2.28ZigBee网络原理与应用1无线温度检测实例:协调器建立网络,终端节点加入网络,终端节点周期性的采集温度数据并发送给协调器,协调器将收到的温度值用串口送PC机显示与上个实例的区别?无线温度检测实例:协调器建立网络,终端节点加入网络,终端节点2-3-ADCCC2530的ADC支持多达14位的模拟数字转换,具有多达12位的有效数字位。它包括一个模拟多路转换器,具有多达8个各自可配置的通道,一个参考电压发生器。转换结果通过DMA写入存储器。ADC特征ADC输入ADC转换-3-ADCCC2530的ADC支持多达14位的模拟数字-4-ADC特征可选的抽取率,设置了7~12位的分辨率。8个独立的输入通道,可接收单端或差分信号。参考电压可选为内部单端、外部单端、外部差分或AVDD5。产生中断请求。转换结束时的DMA触发。温度传感器输入。电池测量功能。-4-ADC特征可选的抽取率,设置了7~12位的分辨率。-5-ADC输入ADC的输入是通过端口0来实现的。输入引脚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来实现的。输入引-6-

ADC输入ADCCON2寄存器----定义ADC的序列转换位名称复位R/W描述7:6SREF[1:0]00R/W选择参考电压用于序列转换00:内部参考电压01:AIN7引脚上的外部参考电压10:AVDD5引脚11:AIN6-AIN7差分输入外部参考电压5:4SDIV01R/W为包含在转换序列内的通道设置抽取率,抽取率也决定完成转换需要的时间和分辨率00:64抽取率(7位有效数字位)01:128抽取率(9位有效数字位)10:256抽取率(10位有效数字位)11:512抽取率(12位有效数字位)3:0SCH0000R/W序列通道选择,选择序列结束,一个序列可以是从AIN0到AIN7(SCH<=7)也可以从差分输入AIN0-AIN1到AIN6-AIN7(8<=SCH<=11)。对于其它设置,只能执行单个转换。当读取的时侯,这些位将代表有转换进行的通道号码。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单个值转换位名称复位R/W描述7:6EREF[1:0]00R/W选择用于额外转换的参考电压00:内部参考电压01:AIN7引脚上的外部参考电压10:AVDD5引脚11:AIN6-AIN7差分输入外部参考电压5:4EDIV00R/W设置用于额外转换的抽取率。抽取率也决定可完成转换需要的时间和分辨率00:64抽取率(7位有效数字位)01:128抽取率(9位有效数字位)10:256抽取率(10位有效数字位)11:512抽取率(12位有效数字位)3:0ECH0000R/W单个通道选择。选择写ADCCON3触发的单个转换所在的通道号码。当单个转换完成,该位自动清除。0000:AIN00001:AIN10010:AIN20011:AIN30100:AIN40101:AIN10110:AIN60111:AIN71000:AIN0-AIN11001:AIN2-AIN31010:AIN4-AIN51011:AIN6-AIN71100:GND1101:正电压参考1110:温度传感器1111:VDD/3//单次转换,参考电压为电源电压,对P0.7进行采样12位分辨率ADCCON3=0xb7;-7-ADC输入ADCCON3寄存器-----定义ADC-8-ADC输入除了输入引脚AIN0-AIN7,片上温度传感器的输出也可以选择作为ADC的输入,用于温度测量。通过配置寄存器TR0寄存器和ATEST寄存器可以获得片上温度

TR0寄存器位名称复位R/W描述7:1--0000000R0保留0ADCTM0R/W设置为1来连接温度传感器到SOC_ADC。也可参见ATEST寄存器描述来使能温度传感器-8-ADC输入除了输入引脚AIN0-AIN7,片上温度-9-ADC输入除了输入引脚AIN0-AIN7,片上温度传感器的输出也可以选择作为ADC的输入,用于温度测量。通过配置寄存器TR0寄存器和ATEST寄存器可以获得片上温度

ATEST寄存器位名称复位R/W描述7:6--00R0保留5:0ATEST_CTRL[5:0]000000R/W控制模拟测试模式:000000:禁用000001:使能温度传感器。其它值保留-9-ADC输入除了输入引脚AIN0-AIN7,片上温度-10-ADC转换ATEST寄存器ADC的转换分为ADC序列转换和ADC单个转换。ADC执行一系列的转换,并把转换结果通过DMA移动到存储器,不需要任何CPU的干预

ADC序列转换与APCFG寄存器的设置有关,APCFG为8位模拟输入的I/O引脚设置,如果模拟I/O使能,每一个通道正常情况下应是ADC序列的一部分。如果相应的模拟I/O被禁用,将启用差分输入,处于差分的两个引脚必须在APCFG寄存器中设置为模拟输入引脚。ADCCON2.SCH寄存器位用于定义一个ADC序列转换,它来自ADC输入。如果ADCCON2.SCH设置为一个小于8的值,转换序列来自AIN0-AIN7的每个通道上;当ADCCON2.SCH设置为一个在8和12之间的值,序列包括差分输入;当ADCCON2.SCH大于或等于12,为单个ADC转换。-10-ADC转换ATEST寄存器ADC的转换分为ADC-11-ADC转换除了序列转换,每个通道都可以进行ADC单个转换,ADC单个转换通过配置寄存器ADCCON3.SCH完成。当通过写ADCCON3触发的一个单个转换完成时,ADC将产生一个中断。ADC的数字转换结果可以通过设置寄存器ADCCON1获得。

位名称复位R/W描述7EOC0R/H0转换结束。当ADCH被获取的时候清除。如果已读取前一数据之前,完成一个新的转换,EOC位仍然为高。0:转换没有完成1:转换完成6ST0开始转换。读为1,直到转换完成0:没有转换正在进行1:开始转换序列如果ADCCON1.ATAEL=11没有其它序列进行转换5:4STSEL[1:0]11R/W1启动选择,选择该事件,将启动一个新的转换序列。00:P2.0引脚的外部触发01:全速,不等待触发器10:定时器1通道0比较事件11:ADCCON1.ST=13:2RCTRL[1:0]00R/W控制16位随机数发生器。操作完成自动清零。00:正常运行01:LFSR的时钟一次10:保留11:停止。关闭随机数发生器1:0--11R/W保留//开启ADADCCON1=0x40;-11-ADC转换除了序列转换,每个通道都可以进行ADC-12-ADC转换ADC的数字转换结果存放在寄存器ADCH和ADCL中

位名称复位R/W描述7:2ADC[5:0]000000RADC转换结果低位部分1:0--00R0保留ADCLADC数据低位ADCHADC数据低高位位名称复位R/W描述7:0ADC[13:6]0x00RADC转换结构高位部分//将转换的结果从ADC:ADCH中取出放入到temp中temp[1]=ADCL;temp[0]=ADCH;-12-ADC转换ADC的数字转换结果存放在寄存器ADC-13-ADC转换下述内容用于实现任务描述,将AVDD(3.3v)AD转换,通过串口在PC机显示结果

AD的初始化voidInitialAD(void){ //清EOC标志

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

ADCCFG|=0X80; //单次转换,参考电压为电源电压,对P07进行采样12位分辨率

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

//启动A/D ADCCON1|=0X40;}-13-ADC转换下述内容用于实现任务描述,将AVDD(-14-ADC转换下述内容用于实现任务描述,将AVDD(3.3v)AD转换,通过串口在PC机显示结果

头文件、宏定义以及函数声明#include"ioCC2530.h"#defineuintunsignedint//定义控制灯的端口#defineLED1P1_0#defineLED2P1_1chartemp[2];uintadc;floatnum;charadcdata[]="0.0V";//函数声明voidDelay(uint);voidinitUARTtest(void);voidInitialAD(void);voidUartTX_Send_String(char*Data,intlen);-14-ADC转换下述内容用于实现任务描述,将AVDD(-15-ADC转换下述内容用于实现任务描述4.D.7,将AVDD(3.3v)AD转换,通过串口在PC机显示结果

主函数部分voidmain(void){ //P1控制LEDP1DIR=0x03;//关LEDLED1=1;LED2=1;//初始化串口initUARTtest();//初始化ADCInitialAD();while(1){//等待ADC转换完成if(ADCCON1&0x80){LED1=0;temp[1]=ADCL;temp[0]=ADCH;//初始化ADInitialAD();//开始下一转换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;//串口送数包括空格UartTX_Send_String(adcdata,6);//完成数据处理Delay(30000);//LED1状态改变LED1=~LED1;Delay(30000);}}}-15-ADC转换下述内容用于实现任务描述4.D.7,将Zstack中ADC应用协调器建立网络,终端节点加入网络,终端节点周期性的采集温度数据并发送给协调器,协调器将收到的温度值用串口送PC机显示协调器功能:建网,接收数据,向串口发数据终端节点功能:

Zstack中ADC应用协调器建立网络,终端节点加入网络,16无线测温----协调器编程1建网2用户任务:事件1:

接收数据----什么事件?SYS_EVENT_MSG下的

AF_INCOMING_MSG_CMD

事件2:向串口发数据----什么时候?

接收到数据后----事件2包含

在事件1内

无线测温----协调器编程1建网17无线测温----协调器编程涉及:串口设置、初始化;----同上例

温度数据存储区无线测温----协调器编程涉及:串口设置、初始化;----同18无线测温----协调器编程特殊之处:数据传递一般会用数据包。

特点:命令头+数据+命令尾

用结构体构建数据包本例中的温度数据:structRFRXBUF{unsignedcharHead;unsignedcharvalue[2];unsignedcharTail;}BUF;无线测温----协调器编程特殊之处:数据传递一般会用数据包。19typedefunionh{uint8TEMP[4];structRFRXBUF{unsignedcharHead;unsignedcharvalue[2];unsignedcharTail;}BUF;}TEMPERATURE;typedefunionh20TEMPERATUREtemperature;//定义温度数据包存储区温度数据包在终端、协调器之间传递,TEMPERATURE类要告知协调器、终端----怎么做?

加入Coordinator.h、Enddevice.h中

TEMPERATUREtemperature;21无线测温----协调器编程事件1触发:CoordApp_ProcessEvent任务中caseAF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;无线测温----协调器编程事件1触发:CoordApp_Pr22无线测温----协调器编程voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){TEMPERATUREtemperature;switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(&temperature,pkt->cmd.Data,sizeof(temperature));//从消息队列中读数据HalUARTWrite(0,(uint8*)&temperature,sizeof(temperature));//数据送串口break;}}无线测温----协调器编程voidGenericApp_M23无线测温----终端编程1、加入网络----同以前例2、周期性的将温度传感器上的电压转换成数字量—温度值,再用无线发送给协调器无线测温----终端编程1、加入网络----同以前例24无线测温----终端编程1片内温度传感器//使能片内温度传感器ATEST=0x01;//连上温度传感器TR0|=0x01;无线测温----终端编程1片内温度传感器25无线测温----终端编程2、ADCADCIF=0;//清除ADC中断

ADCCON3=(HAL_ADC_REF_115v|HAL_ADC_DEC_256|HAL_ADC_CHN_TEMP);while(!ADCIF);//等待AD转换完成

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

value|=((uint16)ADCH)<<8;value>>=4;无线测温----终端编程2、ADC26数据发送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';

数据发送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周期性触发发送事件#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);周期性触发发送事件#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无线测温----终端编程程序结构传感器的操作为一个文件----Sensor.c,

涉及到的名称常量定义----Sensor.h

无线测温----终端编程程序结构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//设置参考电压为内部参考电压:00(7-6位)#defineHAL_ADC_DEC_2560X20//设置抽取率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转换完成ADCIF=0;value=ADCL;//读取AD值

value|=((uint16)ADCH)<<8;value>>=4;while(!ADCIF);//等待AD转换完成35if(bCalibrate)//记录第一次读取的温度值,为后面校正用

{reference_voltage=value;bCalibrate=FALSE;}temp=22+((value-reference_voltage)/4);returntemp;}if(bCalibrate)36无线温度检测课件37ZigBee网络原理与应用李曙英2015.2.28ZigBee网络原理与应用38无线温度检测实例:协调器建立网络,终端节点加入网络,终端节点周期性的采集温度数据并发送给协调器,协调器将收到的温度值用串口送PC机显示与上个实例的区别?无线温度检测实例:协调器建立网络,终端节点加入网络,终端节点39-40-ADCCC2530的ADC支持多达14位的模拟数字转换,具有多达12位的有效数字位。它包括一个模拟多路转换器,具有多达8个各自可配置的通道,一个参考电压发生器。转换结果通过DMA写入存储器。ADC特征ADC输入ADC转换-3-ADCCC2530的ADC支持多达14位的模拟数字-41-ADC特征可选的抽取率,设置了7~12位的分辨率。8个独立的输入通道,可接收单端或差分信号。参考电压可选为内部单端、外部单端、外部差分或AVDD5。产生中断请求。转换结束时的DMA触发。温度传感器输入。电池测量功能。-4-ADC特征可选的抽取率,设置了7~12位的分辨率。-42-ADC输入ADC的输入是通过端口0来实现的。输入引脚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来实现的。输入引-43-

ADC输入ADCCON2寄存器----定义ADC的序列转换位名称复位R/W描述7:6SREF[1:0]00R/W选择参考电压用于序列转换00:内部参考电压01:AIN7引脚上的外部参考电压10:AVDD5引脚11:AIN6-AIN7差分输入外部参考电压5:4SDIV01R/W为包含在转换序列内的通道设置抽取率,抽取率也决定完成转换需要的时间和分辨率00:64抽取率(7位有效数字位)01:128抽取率(9位有效数字位)10:256抽取率(10位有效数字位)11:512抽取率(12位有效数字位)3:0SCH0000R/W序列通道选择,选择序列结束,一个序列可以是从AIN0到AIN7(SCH<=7)也可以从差分输入AIN0-AIN1到AIN6-AIN7(8<=SCH<=11)。对于其它设置,只能执行单个转换。当读取的时侯,这些位将代表有转换进行的通道号码。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单个值转换位名称复位R/W描述7:6EREF[1:0]00R/W选择用于额外转换的参考电压00:内部参考电压01:AIN7引脚上的外部参考电压10:AVDD5引脚11:AIN6-AIN7差分输入外部参考电压5:4EDIV00R/W设置用于额外转换的抽取率。抽取率也决定可完成转换需要的时间和分辨率00:64抽取率(7位有效数字位)01:128抽取率(9位有效数字位)10:256抽取率(10位有效数字位)11:512抽取率(12位有效数字位)3:0ECH0000R/W单个通道选择。选择写ADCCON3触发的单个转换所在的通道号码。当单个转换完成,该位自动清除。0000:AIN00001:AIN10010:AIN20011:AIN30100:AIN40101:AIN10110:AIN60111:AIN71000:AIN0-AIN11001:AIN2-AIN31010:AIN4-AIN51011:AIN6-AIN71100:GND1101:正电压参考1110:温度传感器1111:VDD/3//单次转换,参考电压为电源电压,对P0.7进行采样12位分辨率ADCCON3=0xb7;-7-ADC输入ADCCON3寄存器-----定义ADC-45-ADC输入除了输入引脚AIN0-AIN7,片上温度传感器的输出也可以选择作为ADC的输入,用于温度测量。通过配置寄存器TR0寄存器和ATEST寄存器可以获得片上温度

TR0寄存器位名称复位R/W描述7:1--0000000R0保留0ADCTM0R/W设置为1来连接温度传感器到SOC_ADC。也可参见ATEST寄存器描述来使能温度传感器-8-ADC输入除了输入引脚AIN0-AIN7,片上温度-46-ADC输入除了输入引脚AIN0-AIN7,片上温度传感器的输出也可以选择作为ADC的输入,用于温度测量。通过配置寄存器TR0寄存器和ATEST寄存器可以获得片上温度

ATEST寄存器位名称复位R/W描述7:6--00R0保留5:0ATEST_CTRL[5:0]000000R/W控制模拟测试模式:000000:禁用000001:使能温度传感器。其它值保留-9-ADC输入除了输入引脚AIN0-AIN7,片上温度-47-ADC转换ATEST寄存器ADC的转换分为ADC序列转换和ADC单个转换。ADC执行一系列的转换,并把转换结果通过DMA移动到存储器,不需要任何CPU的干预

ADC序列转换与APCFG寄存器的设置有关,APCFG为8位模拟输入的I/O引脚设置,如果模拟I/O使能,每一个通道正常情况下应是ADC序列的一部分。如果相应的模拟I/O被禁用,将启用差分输入,处于差分的两个引脚必须在APCFG寄存器中设置为模拟输入引脚。ADCCON2.SCH寄存器位用于定义一个ADC序列转换,它来自ADC输入。如果ADCCON2.SCH设置为一个小于8的值,转换序列来自AIN0-AIN7的每个通道上;当ADCCON2.SCH设置为一个在8和12之间的值,序列包括差分输入;当ADCCON2.SCH大于或等于12,为单个ADC转换。-10-ADC转换ATEST寄存器ADC的转换分为ADC-48-ADC转换除了序列转换,每个通道都可以进行ADC单个转换,ADC单个转换通过配置寄存器ADCCON3.SCH完成。当通过写ADCCON3触发的一个单个转换完成时,ADC将产生一个中断。ADC的数字转换结果可以通过设置寄存器ADCCON1获得。

位名称复位R/W描述7EOC0R/H0转换结束。当ADCH被获取的时候清除。如果已读取前一数据之前,完成一个新的转换,EOC位仍然为高。0:转换没有完成1:转换完成6ST0开始转换。读为1,直到转换完成0:没有转换正在进行1:开始转换序列如果ADCCON1.ATAEL=11没有其它序列进行转换5:4STSEL[1:0]11R/W1启动选择,选择该事件,将启动一个新的转换序列。00:P2.0引脚的外部触发01:全速,不等待触发器10:定时器1通道0比较事件11:ADCCON1.ST=13:2RCTRL[1:0]00R/W控制16位随机数发生器。操作完成自动清零。00:正常运行01:LFSR的时钟一次10:保留11:停止。关闭随机数发生器1:0--11R/W保留//开启ADADCCON1=0x40;-11-ADC转换除了序列转换,每个通道都可以进行ADC-49-ADC转换ADC的数字转换结果存放在寄存器ADCH和ADCL中

位名称复位R/W描述7:2ADC[5:0]000000RADC转换结果低位部分1:0--00R0保留ADCLADC数据低位ADCHADC数据低高位位名称复位R/W描述7:0ADC[13:6]0x00RADC转换结构高位部分//将转换的结果从ADC:ADCH中取出放入到temp中temp[1]=ADCL;temp[0]=ADCH;-12-ADC转换ADC的数字转换结果存放在寄存器ADC-50-ADC转换下述内容用于实现任务描述,将AVDD(3.3v)AD转换,通过串口在PC机显示结果

AD的初始化voidInitialAD(void){ //清EOC标志

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

ADCCFG|=0X80; //单次转换,参考电压为电源电压,对P07进行采样12位分辨率

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

//启动A/D ADCCON1|=0X40;}-13-ADC转换下述内容用于实现任务描述,将AVDD(-51-ADC转换下述内容用于实现任务描述,将AVDD(3.3v)AD转换,通过串口在PC机显示结果

头文件、宏定义以及函数声明#include"ioCC2530.h"#defineuintunsignedint//定义控制灯的端口#defineLED1P1_0#defineLED2P1_1chartemp[2];uintadc;floatnum;charadcdata[]="0.0V";//函数声明voidDelay(uint);voidinitUARTtest(void);voidInitialAD(void);voidUartTX_Send_String(char*Data,intlen);-14-ADC转换下述内容用于实现任务描述,将AVDD(-52-ADC转换下述内容用于实现任务描述4.D.7,将AVDD(3.3v)AD转换,通过串口在PC机显示结果

主函数部分voidmain(void){ //P1控制LEDP1DIR=0x03;//关LEDLED1=1;LED2=1;//初始化串口initUARTtest();//初始化ADCInitialAD();while(1){//等待ADC转换完成if(ADCCON1&0x80){LED1=0;temp[1]=ADCL;temp[0]=ADCH;//初始化ADInitialAD();//开始下一转换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;//串口送数包括空格UartTX_Send_String(adcdata,6);//完成数据处理Delay(30000);//LED1状态改变LED1=~LED1;Delay(30000);}}}-15-ADC转换下述内容用于实现任务描述4.D.7,将Zstack中ADC应用协调器建立网络,终端节点加入网络,终端节点周期性的采集温度数据并发送给协调器,协调器将收到的温度值用串口送PC机显示协调器功能:建网,接收数据,向串口发数据终端节点功能:

Zstack中ADC应用协调器建立网络,终端节点加入网络,53无线测温----协调器编程1建网2用户任务:事件1:

接收数据----什么事件?SYS_EVENT_MSG下的

AF_INCOMING_MSG_CMD

事件2:向串口发数据----什么时候?

接收到数据后----事件2包含

在事件1内

无线测温----协调器编程1建网54无线测温----协调器编程涉及:串口设置、初始化;----同上例

温度数据存储区无线测温----协调器编程涉及:串口设置、初始化;----同55无线测温----协调器编程特殊之处:数据传递一般会用数据包。

特点:命令头+数据+命令尾

用结构体构建数据包本例中的温度数据:structRFRXBUF{unsignedcharHead;unsignedcharvalue[2];unsignedcharTail;}BUF;无线测温----协调器编程特殊之处:数据传递一般会用数据包。56typedefunionh{uint8TEMP[4];structRFRXBUF{unsignedcharHead;unsignedcharvalue[2];unsignedcharTail;}BUF;}TEMPERATURE;typedefunionh57TEMPERATUREtemperature;//定义温度数据包存储区温度数据包在终端、协调器之间传递,TEMPERATURE类要告知协调器、终端----怎么做?

加入Coordinator.h、Enddevice.h中

TEMPERATUREtemperature;58无线测温----协调器编程事件1触发:CoordApp_ProcessEvent任务中caseAF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;无线测温----协调器编程事件1触发:CoordApp_Pr59无线测温----协调器编程voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){TEMPERATUREtemperature;switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(&temperature,pkt->cmd.Data,sizeof(temperature));//从消息队列中读数据HalUARTWrite(0,(uint8*)&temperature,sizeof(temperature));//数据送串口break;}}无线测温----协调器编程voidGenericApp_M60无线测温----终端编程1、加入网络----同以前例2、周期性的将温度传感器上的电压转换成数字量—温度值,再用无线发送给协调器无线测温----终端编程1、加入网络----同以前例61无线测温----终端编程1片内温度传感器//使能片内温度传感器ATEST=0x01;//连上温度传感器TR0|=0x01;无线测温----终端编程1片内温度传感器62无线测温----终端编程2、ADCADCIF=0;//清除ADC中断

ADCCON3=(HAL_ADC_REF_115v|HAL_ADC_DEC_256|HAL_ADC_CHN_TEMP);while(!ADCIF);//等待AD转换完成

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

value|=((uint16)ADCH)<<8;value>>=4;无线测温----终端编程2、ADC63数据发送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';

数据发送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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论