基于ZigBee的数据采集与无线传输实验_第1页
基于ZigBee的数据采集与无线传输实验_第2页
基于ZigBee的数据采集与无线传输实验_第3页
基于ZigBee的数据采集与无线传输实验_第4页
基于ZigBee的数据采集与无线传输实验_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

第 1 页 / 共 16 页2016-2017 学年第二学期课程实验报告课程名称:无线传感网络实验名称: 基于 ZigBee 的数据采集与无线传输实验姓名 班级 学号同组同学出勤、表现得分 25% 25实验课表现操作结果得分 25% 25实验报告得分 50% 实验总分实验目的了解ZigBee的工作原理和技术特点,利用CC2530芯片开发一个简单的ZigBee组网通信实验。实验内容以小组为单位,利用CC2530芯片部署无线传感网络实验,分别设计 采集节点、汇聚节点的程序,采集节点采集温度信息,并通过无线信道传输给汇聚节点。汇聚节点再将温度数据通过串口传输给上位机(PC 机)。要求自己设计通信协议,实现上位机对监控区域的定时和实时温度数据采集。实验过程中遇到的问题以及如何解决的?(可以写多条,是否认真填写将影响实验成绩)在实验过程中我遇到了1、 能接收后遇到很多的噪声干扰并且不能接收自己发送的信息2、 接收到自己的信息后仍然有很多的噪声干扰出现了很多的乱码3、 接收自己的信息也被转换成乱码4、 遇到了选择性接收上的技术问题第 2 页 / 共 16 页5、 温度的 acsii 码转换错误通过.的方式,我解决了这个问题。1、 修改了接收代码并确认发送代码没毛病2、 尝试修改信道3、 检查到接收子程序有问题并修改了4、 老师建议我们使用选择性接收5、 通过组员合作研究讨论并上网查找解决没有问题的情况下,是否有创新思路(或多做哪些工作)。好像并没有实验代码如下:发送代码:/* 文 件 名: main.c* 作 者: Andy* 修 订: 2013-01-08* 版 本: 1.0* 描 述: 设置串口调试助手波特率: 115200bps 8N1* 串口调试助手给 CC2530 发字符串时,开发板会返回接收到的字符串*/#include #include #include #include /#define DISABLE_ALL_INTERRUPTS() (IEN0 = IEN1 = IEN2 = 0x00)/三个char rf_rx_buf128;void rf_send( char *pbuf , int len);void rf_receive_isr();typedef unsigned char uchar;typedef unsigned int uint;#define UART0_RX 1#define UART0_TX 2#define SIZE 51char RxBuf;char UartState;uchar count;char RxDataSIZE; /存储发送字符串void InitClock(void) CLKCONCMD /设置系统时钟源为 32MHZ 晶振第 3 页 / 共 16 页while(CLKCONSTA /等待晶振稳定 CLKCONCMD /设置系统主时钟频率为 32MHZ/* 名 称: InitSensor()* 功 能: 温度传感器初始化函数* 入口参数: 无* 出口参数: 无*/void InitSensor(void) /DISABLE_ALL_INTERRUPTS(); /关闭所有中断 InitClock(); /设置系统主时钟为 32M TR0=0x01; /设置为 1 来连接温度传感器到 SOC_ADCATEST=0x01; /使能温度传感 /* 名 称: GetTemperature()* 功 能: 获取温度传感器 AD 值* 入口参数: 无* 出口参数: 通过计算返回实际的温度值*/float GetTemperature(void) uint value; ADCCON3 = (0x3E); /选择 1.25V 为参考电压;14 位分辨率;对片内温度传感器采样ADCCON1 |= 0x30; /选择 ADC 的启动模式为手动ADCCON1 |= 0x40; /启动 AD 转化 while(!(ADCCON1 /等待 AD 转换完成 value = ADCL 4; /ADCL 寄存器低 2 位无效 value |= (uint)ADCH) 4);return (value-1367.5)/4.5-5; /根据 AD 值,计算出实际的温度,芯片手册有错,温度系数应该是 4.5 /进行温度校正,这里减去 5(不同芯片根据具体情况校正)/* 名 称: DelayMS()* 功 能: 以毫秒为单位延时* 入口参数: msec 延时参数,值越大,延时越久* 出口参数: 无第 4 页 / 共 16 页*/void DelayMS(uint msec) uint i,j;for (i=0; imsec; i+)for (j=0; j1070; j+);/* 名 称: InitUart()* 功 能: 串口初始化函数* 入口参数: 无* 出口参数: 无*/void InitUart(void) PERCFG = 0x00; /外设控制寄存器 USART 0 的 IO 位置:0 为 P0 口位置 1 P0SEL = 0x0c; /P0_2,P0_3 用作串口(外设功能)P2DIR /P0 优先作为 UART0U0CSR |= 0x80; /设置为 UART 方式U0GCR |= 11; U0BAUD |= 216; /波特率设为 115200UTX0IF = 0; /UART0 TX 中断标志初始置位 0U0CSR |= 0x40; /允许接收 IEN0 |= 0x84; /开总中断允许接收中断 /* 名 称: UartSendString()* 功 能: 串口发送函数* 入口参数: Data:发送缓冲区 len:发送长度* 出口参数: 无*/void UartSendString(char *Data, int len)uint i;for(i=0; ilen; i+)U0DBUF = *Data+;while(UTX0IF = 0);UTX0IF = 0;第 5 页 / 共 16 页/以下是 RF 初始化和发送与接收void rf_init() TXPOWER = 0xD5; / 发射功率为 1dBm/FRMCTRL0 |= (0x20 | 0x40); /* AUTO_ACK | AUTO_CRC */CCACTRL0 = 0xF8; / 推荐值 smartRF 软件生成FRMFILT0 = 0x0c; / 静止接收过滤,即接收所有数据包FSCAL1 = 0x00; / 推荐值 smartRF 软件生成TXFILTCFG = 0x09;AGCCTRL1 = 0x15;/AGCCTRL2 = 0xFE;/TXFILTCFG = 0x09; / 推荐值 smartRF 软件生成FREQCTRL = 0x09; / 选择通道 11RFIRQM0 |= (16); / 使能 RF 数据包接收中断IEN2 |= (10); / 使能 RF 中断RFST = 0xED; / 清除 RF 接收缓冲区 ISFLUSHRXRFST = 0xE3; / RF 接收使能 ISRXON void rf_send( char *pbuf , int len)RFST = 0xE3; / RF 接收使能 ISRXONwhile( FSMSTAT1 / 等待发送状态不活跃 并且 没有接收到 SFDRFIRQM0 / 禁止接收数据包中断IEN2 / 清除 RF 全局中断RFST = 0xEE; / 清除发送缓冲区 ISFLUSHTXRFIRQF1 = (11); / 清除发送完成标志/ 填充缓冲区 填充过程需要增加 2 字节,CRC 校验自动填充RFD = len + 2;for (int i = 0; i len; i+)RFD = *pbuf+;第 6 页 / 共 16 页RFST = 0xE9; / 发送数据包 ISTXONwhile (!(RFIRQF1 / 等待发送完成P0_0 = P0_0;RFIRQF1 = (11); / 清除发送完成标志位RFIRQM0 |= (16); / RX 接收中断IEN2 |= (10);/* 程序入口函数*/void main(void)/char i; / float AvgTemp; /char strTemp6;CLKCONCMD /设置系统时钟源为 32MHZ 晶振while(CLKCONSTA /等待晶振稳定为 32MCLKCONCMD /设置系统主时钟频率为 32MHZ InitUart(); /调用串口初始化函数 UartState = UART0_RX; /串口 0 默认处于接收模式memset(RxData, 0, SIZE);InitSensor(); rf_init(); float x = GetTemperature();char a10;sprintf(a, “%g“, x);char b15=“A C1:“;strcat(b,a);while(1)rf_send(b,20);DelayMS(20);/* if(UartState = UART0_TX) /发送状态 第 7 页 / 共 16 页U0CSR /禁止接收 AvgTemp = 0; for (i=0; i64; i+) AvgTemp += GetTemperature(); AvgTemp = AvgTemp/2; /每次累加后除 2 memset(strTemp, 0, 6);sprintf(strTemp,“%.02fn“, AvgTemp);/将浮点数转成字符串UartSendString(strTemp, 6); rf_send(strTemp , 5); DelayMS(1000); /延时/ UartSendString(RxData, count); /发送已记录的字符串。U0CSR |= 0x40; /允许接收 UartState = UART0_RX; /恢复到接收状态 count = 0; /计数清 0memset(RxData, 0, SIZE); /清空接收缓冲区 */接收代码:/* 文件名称:UART(Receive INT)_Ex.c* 功 能:CC253x 系列片上系统基础实验- UART(接收数据 中断方式)* 描 述:本实验使用 CC253x 系列片上系统的片内 USART 控制器,工作在 UART 模式下,通* 过 UART0 接收数据,采用中断方式。* 实验硬件: * 用 USB 电缆连接 SK-SmartRF05EB 上的 USB 接口与用户 PC 的 USB 接口。* 作 者:POWER* 日 期:2010-04-18*/* 包含头文件 */*/#include “ioCC2530.h“ / CC2530 的头文件,包含对 CC2530 的寄存器、中断向量等的定义#include “LCD.h“ / lcd 驱动头文件#include “stdio.h“ / C 语言标准输入/ 输出库头文件第 8 页 / 共 16 页/*/* 定义枚举类型 */*/enum SYSCLK_SRCXOSC_32MHz,RC_16MHz; / 定义系统时钟源( 主时钟源)枚举类型/*/* 函数名称:SystemClockSourceSelect* 功 能:选择系统时钟源(主时钟源)* 入口参数:source* XOSC_32MHz 32MHz 晶体振荡器* RC_16MHz 16MHz RC 振荡器* 出口参数:无* 返 回 值:无*/void SystemClockSourceSelect(enum SYSCLK_SRC source)unsigned char osc32k_bm = CLKCONCMD unsigned char _clkconcmd,_clkconsta;/*系统时钟源(主时钟源)选择 16MHz RC 振荡器,定时器 tick 设置为 16MHz,时钟速度设置为16MHzCLKCONCMD.OSC32Kb7不改变 32KHz 时钟源选择保持先前设置CLKCONCMD.OSCb6 = 1 系统时钟源( 主时钟源)选择 16MHz RC 振荡器CLKCONCMD.TICKSPDb5.b3 = 001 定时器 tick 设置为 16MHzCLKCONCMD.CLKSPDb2.b0 = 001 时钟速度设置为 16MHz*/if(source = RC_16MHz) /* CLKCONCMD.OSC32Kb7 */CLKCONCMD = (osc32k_bm) | /* CLKCONCMD.OSCb6 = 1 */(0x01 6) | /* CLKCONCMD.TICKSPDb5.b3 = 001 */ (0x01 3) | /* CLKCONCMD.CLKSPDb2.b0 = 001 */(0x01 0);/*系统时钟源(主时钟源)选择 32MHz 晶体振荡器,定时器 tick 设置为 32MHz,时钟速度设置为第 9 页 / 共 16 页32MHzCLKCONCMD.OSC32Kb7不改变 32KHz 时钟源选择保持先前设置CLKCONCMD.OSCb6 = 0 系统时钟源( 主时钟源)选择 32MHz 晶体振荡器CLKCONCMD.TICKSPDb5.b3 = 000 定时器 tick 设置为 32MHzCLKCONCMD.CLKSPDb2.b0 = 000 时钟速度设置为 32MHz*/ else if(source = XOSC_32MHz)CLKCONCMD = (osc32k_bm /*| (0x006) | (0x003) | (0x00 0)*/);/* 等待所选择的系统时钟源 (主时钟源)稳定 */_clkconcmd = CLKCONCMD; / 读取时钟控制寄存器 CLKCONCMDdo_clkconsta = CLKCONSTA; / 读取时钟状态寄存器 CLKCONSTAwhile(_clkconsta != _clkconcmd); / 直到 CLKCONSTA 寄存器的值与 CLKCONCMD 寄存/ 器的值一致,说明所选择的系统时钟源 (主/ 时钟源)已经稳定 /* 函数名称:InitUART0* 功 能:UART0 初始化* P0.2 RX * P0.3 TX* 波特率:57600* 数据位:8* 停止位:1* 奇偶校验:无* 入口参数:无* 出口参数:无* 返 回 值:无*/void InitUART0(void)/* 片内外设引脚位置采用上电复位默认值,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论