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

下载本文档

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

文档简介

1、 基于 Zig ee 的数据采集与无线 传输实验 作者: 日期: 2 6-2017 学年第二学期 课程实验报告 课程名称 : 无线传感网络 实验名称: 基于 ZigB e 的数据采集与无线传输实验 姓名 班级 学号 同组同学 实验课表现 出勤、表现得分 25% 2 实验报告 实验总分 操作结果得分 5% 5 得分 0% 实验目的 了解Zi ee的工作原理和技术特点 ,利用 C25芯片开发一个简单的 Zi Bee组网通信实验。 实验内容 以小组为单位 ,利用CC2530芯片部署无线传感网络实验,分别设计 采集节点、 汇聚节点 的程序 ,采集 节点 采集温度信息, 并通过无线信道传输给汇聚节点。

2、汇聚节点再将温度数据通过串口传输给上位机 ( P 实验过程中遇到的问题以及如何解决的?(可以写多条 ,是否认真填写将影响实验成绩 ) 在实验过程中我遇到了 1、能接收后遇到很多的噪声干扰并且不能接收自己发送的信息 2、接收到自己的信息后仍然有很多的噪声干扰出现了很多的乱码 3、接收自己的信息也被转换成乱码 4、遇到了选择性接收上的技术问题 5、温度的 ac ii 码转换错误 通过 . 的方式,我解决了这个问题。 1、修改了接收代码并确认发送代码没毛病 2、尝试修改信道 3、检查到接收子程序有问题并修改了 4、老师建议我们使用选择性接收 5、通过组员合作研究讨论并上网查找解决 没有问题的情况下,

3、是否有创新思路(或多做哪些工作) 。 好像并没有 实验代码如下: 发送代码: /* * * * * * * * * * * * * 文 件 名: ain c * 作 者: Andy * 修订: 2 13-01- 8 版本: 1.0 描述: 设置串口调试助手波特率: 11200bps 8N * 串口调试助手给 CC253 发字符串时 ,开发板会返回接收到的字符串 * */ #include #inc ude # cl de #inc ude / fne IBLEAL_IN ERRUPTS() (IEN0 = IEN1 = N2 = 0 0)/三个 cha rf rx_ uf 28; vod rf

4、_en( car * buf , en); voi rf_ e eive_i (); pde uns g d h chr; t pe f unsigned iuint; #d ine UA T R def ne UART0_T d f ne SIZ 1 cha xBuf ; char UartSt te; uhar c un; har RData S ;/存储发送字符串 void Ini Clok(v ) CO MD /设置系统时钟源为32MHZ 晶振 hle(C KCONSTA x0); CKCO MD = x47; /等待晶振稳定 /设置系统主时钟频率为 MZ / * 功 入口参数: 无

5、出口参数 : 无 称: InitSen r() 能: 温度传感器初始化函数 * oid t n r(vo d) /关闭所有中断 /DISABLE_ LL_I ERUPTS( ); /设置系统主时钟为 2 /设置为 1 来连接温度传感器到 /使能温度传感 IiClck(); TR 0 x0; TEST0 x01; SC_AD 称: GetTe per ture() 能 : 获取温度传感器 AD 值 /* 功 入口参数 : 无 出口参数 : 通过计算返回实际的温度值 * * float etTemperature( oi ) int lue; /选择 1.25V 为参考电压 ;14 位分辨率;对片

6、内温度 CON3 = (0 3E); 传感器采样 DCON1 |= 0 x0; ADCC 1 = x40; /选择 DC 的启动模式为手动 wh (!(ADCCON lue = A CL 4; /启动 AD 转化 / 等待 AD 转换完成 /DCL 寄存器低 2 位无效 value = (u nt) AD H) 4); return (value-136 .5)/45; /根据 AD 值 ,计算出实际的温度 ,芯片手册有错 ,温度系数应该 是 . / /进行温度校正 ,这里减去 5 (不同芯片根据具体情况 校正) /* * 称: D layS() 能: 以毫秒为单位延时 入口参数: m ec

7、延时参数 ,值越大 ,延时越久 出口参数 : */ vo d ayMS( i t msec) uint i,j ; for (i0; imsec ; i+) /* fr (j=0 ; 070; j+); 称: In tUart() 能 : 串口初始化函数 入口参数 : 无 出口参数 : 无 oid 置 * Ua t(vo ) ERCFG 0 x 0; 0SEL = 0 x0c ; 2DIR 0GCR |= 11;? U UD = 216; TX0I 0CSR |= /外设控制寄存器 UART 的 O位置:为 P0 口位 /P0_2, _用作串口 (外设功能) P优先作为 UA T0 设置为 U

8、A T 方式 /波特率设为 1 520 0; x40; IEN = 0 84; /* * 称: ar e dSt ing 能: 串口发送函数 入口参数: ata:发送缓冲区 出口参数 : 无 / R TX 中断标志初始置位 0 /允许接收 /开总中断允许接收中断 len:发送长度 * * */ oid Ua tSed tring (ch r * ata, int len) uint i ; for(i= ; ien; +) ); U0D F = * ata+; wl(TX0 = UX0 F 0; R初始化和发送与接收 id rf_init() /以下是 v TXPOWE /FRM TRL0 |

9、 CCACTRL0 = 0 x 5; (0 0 x8; 040); FRMF L 0 = 0 x0; / 发射功率为 dB AU / 推荐值 ma | A T _CRC tRF 软件生成 */ / 静止接收过滤, 即接收所有数据包 0 x ; TXFILTC G 0 x0; A T L1 = 015; /AGC TRL 0 E; FSCA1 / 推荐值 smartRF 软件生成 / FLTFG = 0 x0; / 推荐值 smartR软件生成 FEC L 009; / 选择通道 1 RF QM |= (1 6); IEN2 | (0); / 使能 RF 数据包接收中断 / 使能 RF 中断 F

10、ST = xED; RFT = xE3; / 清除 RF 接收缓冲区 ISFLUSHR / R接收使能 ISXON void f_sen ( ar * buf , i n) R ST = 0 xE3; / RF 接收使能 ISRXON whi e( FS S 1 / 等待发送状态不活跃 并且 没有接收 FIRQM0 IEN / 禁止接收数据包中断 / 清除 RF 全局中断 FS RFQ1 = xE; 11); / 清除发送缓冲区 IS L SHTX 清除发送完成标志 填充缓冲区 RFD = len or (int i = 0; FD = *pbuf+; 填充过程需要增加 2 字节, 2; i

11、l n; i+) R 校验自动填充 F = 0 xE9; whi (!(RFIRQF1 (11) ); 0 = P _0; / 发送数据包 IST ON / 等待发送完成 FIRQF (11); / 清除发送完成标志位 F Q | IE2 = (1 ); 1 ); / RX 接收中断 /* * * * 程序入口函数 v * id m in(vo d) /ch / r i; lot Av Tem; /char tT p ; CLKCON M /设置系统时钟源为 2MHZ while(CL ONSA /等待晶振稳定为 3 /设置系统主时钟频率为 2M InitUart () ; UartState

12、 = UART0_RX ; mems t( R ata, 0, I it ens r(); rf_ni(); /调用串口初始化函数 /串口 0 默认处于接收模式 SIZ ); ture(); loat x = etTempe char a 0; sprn (a, g, x); cr b15=A C1: strca (,a); while( ) r _ e d(b,20); D l yM (20); 文件名称 :UART(Re eiv IN) _E.c * 功能:CC2 x 系列片上系统基础实验 - ART(接收数据 中断方式 ) if(UartSt te = ART0_ X)/发送状态 U0

13、S x4;禁止接收 vgTemp = 0; (i=0; i 4; i+) vgTemp = G tTempe tur( ); Av Temp gTe /2;/每次累加后除2 meset(s rTemp, 0, 6); s rin f(st Temp, %.02f n, Avgemp);/将浮点数转成字符串 artSend tring(str e p, 6); 延时 /发送已记录的字符串。 /允许接收 /恢复到接收状态 计数清 0 /清空接收缓冲区 rf_send( trTe p , 5); elay (1000); / UartSendS n( RxData, oun ); U0CSR = 0

14、 x4; artSta e = UART0_RX ; count = 0; memset(R D ta, , SIZE ); * 接收代码: /*过 A T0 接收数据 ,采用中断方式。 * 描 述:本实验使用 C 25x 系列片上系统的片内 USART 控制器 ,工作在 UART 模式下 ,通 * * * * * * * 实验硬件 : 用 USB 电缆连接 K SmartRF05E上的 U B 接口与用户 P的 B 接口。 * 作者: O ER 日期:2 004-18 */ / 包含头文件 /* #inc de ioCC 5 0.h #i lude CD.h #in lude stdo.h

15、/ CC253 的头文件 ,包含对 C2530 的寄存器、中断向量等的定义 / lcd 驱动头文件 / C 语言标准输入输出库头文件 /* */ /* 定义枚举类型 */ /* * * * * * * enum SYS LK_SR OS _3MHz,RC_16 z; 型 */ / 定义系统时钟源(主时钟源)枚举类 */ * * * * * * * * * * * * * 函数名称 : ystemC ckSourceSelect * 功 能:选择系统时钟源(主时钟源 ) * 入口参数: sou c *X SC_32MHz 32MHz 晶体振荡器 *C_1MHz16MHz RC 振荡器 * 出口参

16、数:无 * 返 回 值 :无 */ void SytmCocSourSelect(enum S C K_SR s rce) n i e car osc32 _bm = CLKCO MD * 系统时钟源 (主时钟源)选择 16MHz RC 振荡器,定时器 tik 设置为 16MH ,时钟速度设置为 6M z LCNMD.OSC32Kb7 不改变2KH 时钟源选择保持先前设置 CLKC NCM .OSCb6 = 1系统时钟源 (主时钟源 )选择 Mz RC 振荡器 CLK ONCMD. CK PDb5. = 00 定时器 tck 设置为 16MHz CLKCONCM .CKSDb2.b 001 时

17、钟速度设置为 16MHz * (so rce = RC 16 z) CLKC NCMD SC32 b7 */ L CMD = ( s32 bm) | /* CLKCONCMD.OSC 6 = 1 */ (0 x01 6) | /* C C CMD TIC PD .b 001 * ( 01 3) | /* LKCONC D.LKSPD 2.b = 1 * ( 01 0); /* 系统时钟源 为 3 Hz (主时钟源 )选择 MHz 晶体振荡器 ,定时器 k 设置为 2MHz 时钟速度设置 CKONCMD OSC32Kb7 不改变 CLKCONCMD.OSC 6 = 0 CKCONCMD. CK

18、PDb5 .b3 CL C MD. LKSPD b2.b0 / 32KH 时钟源选择保持先前设置 系统时钟源 (主时钟源 )选择 32M = 000 定时器 ick 设置为 z 0 时钟速度设置为 32 z 晶体振荡器 else (sourc = XO C_32MHz) 0 x 06) | (0 x00 3) | (0 x00 0)/); C O MD = ( osc32k / / 等待所选择的系统时钟源 (主时钟源 )稳定 */ _clkcon md = CLKC NM;/ 读取时钟控制寄存器 CLKCON D d clk onsta CKCON T;/ 读取时钟状态寄存器 CLCOSTA

19、while(_cl con t != _ lkc ncmd); 直到 C C S A 寄存器的值与 CLKCONCMD 寄存 / 器的值一致 ,说明所选择的系统时钟源(主 / 时钟源 )已经稳定 /* * * * * * * * * * * * * 函数名称 :In tAR 0 * 功能:UAR 0 初始化 * P0 2 RX *P0. X *波特率: 5 600 * 数据位 :8 * 停止位 :1 * 奇偶校验 : 无 入口参数 : 无 出口参数:无 返 回 值 :无 void InitUART0(voi ) /* 片内外设引脚位置采用上电复位默认值 ,即 PERC寄存器采用默认值* / P

20、0.2X 0.3TX P0.4 T .5R / /* UART0 相关引脚初始化 PSL |= (0 x01 2) (x01 3); P.2和 P0作为片内外设 I/O /* 0 口外设优先级采用上电复位默认值 ,即 I寄存器采用默认值 */ 第一优先级: ART0 第二优先级 :USART1 第三优先级 :Timer1 */ /* U RT0 波特率设置 */ / 波特率 :57 0 当使用 32 晶体振荡器作为系统时钟时,要获得5700 波特率需要如下设置 : UxBAUD.BA D_M 216 UxGCR.BAUD_E = 10 该设置误差为 .03 */ U0BAU 16; U0GCR

21、 = 1 ; /* S RT 模式选择 */ 0CSR = x80; / UR模式 / UART0 配置 */ U0UCR | 0 x80; / 进行 USAT 清除 * 以下配置参数采用上电复位默认值 : 硬件流控:无 奇偶校验位(第 9 位):奇校验 第 9 位数据使能:否 奇偶校验使能:否 停止位:个 停止位电平:高电平 起始位电平 :低电平 */ * 用於发送的位顺序采用上电复位默认值,即0R 寄存器采用上电复位默认值 */ /* LSB 先发送 */ UXIF 0;/ 清零 UAR RX 中断标志 UC |= (01 ) ; / 使能接收器 URX0 E = ;/ 使能 ART0 中

22、断 har r _r _buf 6; ch r p u 1; /* * * * * * * * * * * * * * * * 函数名称: U T0Se B te * 功 能: AR 发送一个字节 * 入口参数 :c * 出口参数:无 * 返 回 值:无 id UAR 0SendBte(unigned har c) UDBUF = c; / 将要发送的 1 字节数据写入 0DBUF hile ( !UTX0IF);/ 等待 TX 中断标志 ,即 UDBF 就绪 0IF = 0; / 清零 TX 中断标志 / * * * 函数名称 :AR 0Sn Stri g 功能: UART 发送一个字符串

23、入口参数:无 * 出口参数:无 返 回 值 :无 v d U T0S ndSt i g( car *str) wh (1) if(*s r = 0) re ; / 遇到结束符,退出 URT0S dByte(* tr+); / 发送一字节 vod r _ini () TX W= 0D5; 发射功率为 1dBm /FRMCT L0 |= (020 | 0 x40); /* AUTO_AC AU CR * CA TRL0 = 0 xF8; FRMFILT0 = 0 x0 ; FSCAL = x00; TXF LTCFG = x0; AGCCTRL1 = x 5; / GCRL2 =0F; /TXFI

24、L CFG = 09; FEQCTR = 009; RI M0 |= (1 ); IEN2 |= (10); FST = 0 xED; RST = 0E; / 推荐值 smartR软件生成 / 静止接收过滤,即接收所有数据包 / 推荐值 smar RF 软件生成 / 推荐值 smar RF 软件生成 / 选择通道 11 / 使能 RF 数据包接收中断 / 使能 RF 中断 清除接收缓冲区 S HRX oid rf_ ece ve_ s( ) it rf_ xle = 0; char r1 = 0; ha crc ok ; c ar *rf_rx_buf; r rx_ en = RFD - 2;

25、 f_r _len for ( t i = 0; i rf x_len; i+) rf_ _b = RF; r0 = R D 3; c c_ok RFD; / 长度去除两字节附加结果 / 连续读取接收缓冲区内容 / 读取 RSSI 结果 / 读取 CR 校验结果 BIT7 / R 接收使能 IS O / 清除接收缓冲区 RFST = ED; if( cr _o i s rl n( f rx_buf); ) if(rf_rx_b fi :) strcat(rf_rx_b f, n); UART S dS r ng ( r _rx_buf ); / / 串口发送 / Uar edtr n (r,

26、1); / se / /Uar n St ng( CR Er r,9); / /unig d lon rc_cout ;/ 累计接收到的字节计数 / uns gne long rc _charA_count = 0; / 累计接收到的字符 计数 /* * * * * * * * * * * * * 函数名称: URX0_ISR * 功能:ART RX 中断服务函数 入口参数:无 * 出口参数 : 无 * 返 回 值:无 * # raga v ctor=RF_VE TO itrr pt voi rf_isr(v id) usiged cha e; P2_0 = P2 ; / LED 翻转 提示作

27、用 e = A; EA = 0; 接收到一个完整的数据包 if ( FIRQF0 S CN =0 x03; RFIRQF0 A = e; /* 函数名称: main 功能 :mai函数入口 * 入口参数:无 * 出口参数:无 / 清除 R中断标志 / 清除 RF 接收完成数据包中断 * * * * * * */ * 返 回 值:无 v id ma( vod) ar s1 ; ha rcv_co nt 16 ; Syste ClockS u 时钟源) ceSelec (XOSC_ 2MHz ); 选择 32 Hz 晶体振荡器作为系统时钟源 (主 H lLcd n t(); / LCD 初始化 a

28、lLc_W_Cl ar( ); / 清屏 /* 在 LD 上显示相关信息 * HalLc Wr t Str g(CC 53 URT0 Recv, H LLCDLIE_1); H L Writ rin( 76 -1- , H L_LCD_ INE_3); HalLcd_ W_Wai Us(500); IitUART0 (); / UAR 0初始化 rf int() rf_ cei e_is( ); E = 1; / 使能全局中断 ch rcvchar _count16 ; /* 在 LCD 上显示从 ART0 累计接收到的字节数量以及字符 的数量 */ whi e(1) spri tf(s, x%0 X , rcv_ ount); HalLcdrtetrig(cha *)s, HAL_ CD_LIN _4); / 累计接收 (字节) sritf(s,0 x%0X,rcv_ h rA_ ount); HlLcdWiteString(ch )s, HAL_L DLE5); / 累计接收字符? 本次实验的体会 (可以写多条 ,是否认真填写将影响实验成绩 ) 通过本实验 ,我理解 /了解/熟悉了 . CC253 是用

温馨提示

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

评论

0/150

提交评论