通信新技术综合训练报告.docx
- 文档编号:27388527
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:67
- 大小:630.11KB
通信新技术综合训练报告.docx
《通信新技术综合训练报告.docx》由会员分享,可在线阅读,更多相关《通信新技术综合训练报告.docx(67页珍藏版)》请在冰豆网上搜索。
通信新技术综合训练报告
JIANGSUTEACHERSUNIVERSITYOFTECHNOLOGY
通信新技术综合训练报告
学院名称:
电气信息工程学院
专业:
通信工程
班级:
08通信
姓名:
学号:
指导老师:
贾中宁陶为戈宋伟
2011年10月
附件ADC及数据采集实验…………………………………………………………33
实验一Jennic-WSN开发环境
一、实验内容
1.熟悉基于JN5139芯片所设计的WSN开发板及其部件。
2.软件的安装于调试。
3.熟悉常用API接口函数。
二、实验原理
1.基于JN5139芯片所设计的WSN开发板,其部件如下:
U1:
JN5139系列Zigbee模块;
U2:
板载光照度传感器;
U3:
板载温湿度一体传感器;
J3:
外供电(5VDC)接口;
Swith:
供电开关;
J7:
编程与运行状态选择,左跳并给传感器板加电,则进入可编程状态,或者在加电的情况下,按住RESET按钮,左跳J7,然后放开RESET按钮,再右跳J7,也可进入可编程状态,退出可编程状态,只需要按一下RESET按钮即可;
J8:
Flash写保护跳选,编程与运行都跳选到RUN(右跳);
DB9:
RS232编程接口;
UART0:
串口0;
JP6:
模块所有管脚的引出排线(引脚编号如图1-4所示,功能如表1-1所示);
LCD:
液晶接口;
Power:
电源指示灯;
REST:
复位按键;
LED3,LED2,LED1,LED0:
可编程LED,分别对应DIO19、DIO18、DIO17、DIO16;
SW3,SW2,SW1,SW0:
可编程按键,分别对应DIO20、DIO11、DIO10、DIO9;
GND:
地。
2.软件的安装与调试
(1)建立开发环境
在光盘中找到software文件夹下的JN-SW-4031-SDK-Toolchain-v1.1.exe文件(或者在Jennic公司网站上获得该文件)并运行。
在安装过程中,最简单的方法是按默认设置安装。
(2)编写程序代码并进行下载与调试
编写代码完成后,可按Ctrl+F9快捷键或选择主菜单Build下的Build子菜单或点击图标建立可执行二进制代码文件。
若工程编译(Build)成功,则可在C:
\Jennic\cygwin\jennic\SDK\Application\test\JN5139_Build\Release目录下生成test.bin文件。
否则,出错信息会显示在信息窗口中,根据出错信息调试程序。
JennicJN51xxFlash可编程器是用来将编译好的二进制代码文件(*.bin)下载到JN51xx模块中的Flash芯片的代码下载工具,它通过串行总线与JN51xx模块相连。
JennicJN51xxFlash可编程器的用户界面如图1-18所示,它可以将*.bin文件下载到目标板或模块中,下载步骤如下:
①用串口线连接PC机和目标板或模块。
②运行Flash可编程器,选择PC机与目标板相连的串行通讯端口。
③将目标板上的J7跳线至编程(左侧)状态,给目标板上电,按一下RESET按钮后释放,再恢复J7跳线至右侧。
④在图1-18所示的Flash可编程界面上点击Browse按钮(图中①处)查找并选择要下载的目标文件。
⑤选择好目标文件后,点击Progrm按钮(图中②处)开始下载。
在下载的过程中会显示一个下载的进度条,如图1-19所示。
当下载完成后,将显示下载成功或错误,如图1-20所示下载成功对话框。
如果遇到错误,请尝试重新下载。
⑥成功下载后,关掉Flash可编程器再给目标板或模块上电、或按Reset按钮,则刚下载的代码自动运行。
(3)常用API接口函数介绍
应用程序初始化函数如下:
AppColdStart()
应用程序的入口,相当于标准C中的main函数,结点上电后将从这里开始执行应用程序。
该函数需要完成以下功能:
1.通过设置函数中的参数值来设置信道号(JZS_sConfig.u32Channel)和PANID(JZS_sConfig.u16PanId);2.调用函数JZS_u32InitSystem(TRUE)来初始化ZigBee协议栈;3.调用函数vInit()对用户的应用进程进行初始化,包括初始化按钮动作和程序变量,设定绑定等操作;4.调用bBosRun(TRUE)来启动操作系统BOS。
用户可根据具体的应用设计该函数。
AppWarmStart()
结点从内存供电的休眠模式唤醒的时候将进入这个函数。
启动后所有的内存数据都没有丢失。
如果设备不需要休眠唤醒功能,这个函数可以为空。
用户可根据具体的应用设计该函数。
一般情况下,该函数会调用AppColdStart()重新启动设备。
应用程序调用协议栈的函数如下:
JZS_u32InitSystem()
初始化JennicZigBee协议栈。
JZS_vStartStack()
设备将作为Coordinator、Router或者EndDevice启动。
如果是Coordinator将启动网络,如果是Router或者EndDevice将加入网络。
JZS_vStartNetwork()
手动控制Coordinate网络启动,相对于自动网络启动,使用该功能,需要设置JZS_sConfig.bAutoJoin=FALSE.该函数执行后,返回的协议栈事件为JZS_EVENT_NWK_STARTEDJZS_EVENT_FAILED_TO_START_NETWORK。
vAppSaveContexts()
保存网络参数以及用户的数据,如果你的应用是固定点的话,建议你进行网络参数的保存。
u16AppGetContextSize()
用来获取保存的网络参数以及用户数据的尺寸。
vAppGetContexts()
读取保存的网络参数的内容。
协议栈调用应用函数的函数如下:
JZA_boAppStart()
让用户可以在协议栈启动前定义endpoint的descriptor,通常开发人员应该在这个函数中调用JZS_vStartStack启动协议栈。
JZA_vStartEvent()
协议栈将通过这个函数反馈网络层的一些网络事件,比如网络启动成功、结点加入成功或者数据发送完成等。
JZA_vPeripheralEvent()
该函数主要用来处理外部的硬件中断,比如按钮、定时器、UART等。
JZA_vAppEventHandler()
BOS周期性地调用该函数处理硬件中断。
用户可以利用它进行网络状态的判断和按钮的检查等,也可以在这个函数中,写入自己的应用程序。
在设计该函数时,要尽可能地使其运行时间短,以便BOS调度其他活动事件。
JZA_vAppDefineTasks()
该函数用于向BOS注册自己的用户任务,一般很少使用该函数。
JZA_bAfMsgObject()
收到其他结点发送来的MSG帧的处理函数。
实验二GPIO及LCD使用实验
一、实验内容
1.运用基本的GPIO函数设计一个程序,分别通过各按键的切换对应的LED亮灭状态;
2.设计一个程序实现LED灯的逐次自动闪烁;
3.设计一个程序,按下按键SW0,LCD显示数据加1;如果按下按键SW1,LCD上显示的数据减一。
二、实验原理
1.GPIO的使用
Jennic模块具有21路通用GPIO口,可以通过软件方式进行设置,这些端口与其他外围电路公用一个端口。
对于GPIO操作首先要通过VAHI_DioSetDirectoin来进行GPIO
引脚的输入输出方向的设置,函数原型如下:
2.LED的使用
LED的驱动库文件提供了LED的控制方法,开放版中LED驱动电路如下:
对LED的操作,首先要进行LED的初始化。
调用LED初始化函数:
vLedInitFrd()对FFD开发板上的四个LED灯进行初始化;在调用LED灯控制函数:
vLedControl(LED,ON)控制相应的LED灯亮灭。
相应的函数如下:
3.按键开关的使用
按键驱动库提供了按键的控制方法:
在Button.h中宏定义了相应功能的函数.电路图如下
对于按键操作,首先要调用初始化函数:
vButtonInitFfd()初始化FFD开发板上的四个按
键,然后调用函数:
u8ButtonReadFfd()读取相应的按键状态相应的函数原型如下:
4.LCD的使用
5.BOS定时器的使用
为了消除按钮抖动对控制的影响,实验加入了一个人标识变量NextReadStart,利用BOS定时函数,使500ms后再次设置NextReadStart为真,通过这种方法可有效地消除按钮抖动的影响。
bBosCreateTimer()函数是一个处理软件定时器的BOSAPI函数,调用该函数可由BOS创建一个软件定时器,该定时器需要利用内部硬件滴答定时器(ticktimer)来实现。
当定时时间到,立即调用由bBosCreateTimer()指定的定时处理程序。
该函数的原型如下;
三、软件设计
1.程序流程图:
首先初始化函数LED和按键的初始化,建网成功,改变LED熄灭,表示建网成功。
再读取是否有按键按下,有点亮相应的LED灯
2.程序流程图:
程序从冷启动开始,初始化LED灯状态,建网建成后LED灯自动闪烁,当kong=0(表示方向向左)、LED=3 改变kong=1,当kong=1,且LED=0.改变kong=0;这样依次点亮LED灯再返回点亮LED灯,这样闪烁一直下去。
3程序流程图:
接通电源,程序初始化LCD和LED以及按键的初始化;建网成功后,初始化LCD函数,然后检测按键是否按下,检测到按键SW0按下,使LCD显示的数据加1,
调用LCD显示出来,当检测到SW1按下时使LCD显示数据减1,调用LCD显示处理后的数据。
四、实验结果与分析
1.分别按动按键LED0~LED3,可以控制相应灯的亮灭状态。
分析:
在程序中已经设定按键SW0~SW3分别对应于LED0~LED3,所以可以按动按键控制相应灯的亮灭。
2.网络建网成功后,LED0~LED3周期性的闪烁,周期为1秒。
分析:
程序中写入了LED依次加1并点亮,再经过延时程序,所以可以出现周期为1秒的闪烁。
3.按下按键SW0,LCD显示数据加1;按下按键SW1,LCD显示数据减1。
分析:
按动按键SW0和SW1时分别执行了一个自加1和自减1的函数,再经过LCD显示从而可以得出如上结果。
五、存在问题和解决方法
1.再设计设计性试验2,实现LED灯自动闪烁时,只能实现LED灯的按规定的方向依次点亮。
与我理想结果没有结果没有达到,后通过加入一个标志量,控制LED的来去方向,当kong=0(表示方向向左)、LED=3 改变kong=1,当kong=1,且LED=0.改变kong=0;这样依次点亮LED灯再返回点亮LED灯,这样才实现了跑马灯的效果。
其次在按键的时候,按键出现问题,后来讨论在知道是没有加入去抖动程序导致。
2.在设计LCD程序时,遇到的有LCD的调试问题,开始对LCD的写入字、位图、LCD能写64字符,32个汉字,且汉字必须送入要求的内存中,才可以写出正确的字,或则会出现乱码。
实验三简单点对点无线通信实验
一、实验内容
1.分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮/灭状态。
如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。
2.分别为Coordinator和EndDevice设计一个程序,其功能为:
按下Coordinator的SW0,某变量X(初始值0)显示在LCD上,同时将X发送给EndDevice,EndDevice收到该数据后进行数据处理(加1),等待1秒后再将其发送给Coordinator,Coordinator收到后将该值赋予X并显示在LCD上,同时再次发送给EndDevice,如此重复运行。
二、实验原理
1.主要分别为Coordinator和EndDevice设计一个程序,因为Coordinator的地址是固定不变的(0x0000),所以EndDevice向Coordinator发数据时,目标地址设置为0x0000。
但是当Coordinator向EndDevice发数据时,由于EndDevice地址不知道,因此我们要保存EndDevice地址,但EndDevice结点加入时,Coordinator会保存EndDevice的16位短地址。
从此来着直接可以进行通信。
2.Coordinator的BOS周期调用函数当检测按键按下,调用发送函数,将发送协议数据。
当EndDevice的MsgObject调用的函数JZA_bAfMsgObject(),接受数据处理相应的协议内容,点亮对应的LED灯。
相反一样。
三、软件设计
1.程序流程图
Coordinator建网,EndDevice结点加入成功后,两者进行通信。
按下中断SW0,发送数据0,当协调器接受到0时,点亮LED0灯,其他一样。
同样按下Coordinator的按键SW0~SW3,可以点亮EndDevice的LED0~LED3。
2.程序流程图:
按下Coordinator的SW0,某变量X(初始值30)显示在LCD上,同时将X发送给EndDevice,EndDevice收到该数据后进行数据处理(加1),等待1秒后再将其发送给Coordinator,Coordinator收到后将该值赋予X并显示在LCD上,同时再次发送给EndDevice,如此重复运行。
四、实验结果与分析
1.实验现象:
分别按动Coordinator的按键SW0~SW3,可以控制EndDevice的LED0~LED3的亮灭状态。
同样分别按动EndDevice的按键SW0~SW3,可以控制Coordinator的LED0~LED3的亮灭状态。
分析:
Coordinator建网,EndDevice结点加入成功后,两者进行通信。
按下中断SW0,发送数据0,当协调器接受到0时,点亮LED0灯,其他一样
2.实验现象:
接通电源,可以看到LCD上显示030;让后,LCD上数据会自动加1。
时间间隔1s(左右)。
五、存在问题和解决方法
1.第一问题:
设计好Coordinator和EndDevice,但接通电源后,结点加到别人的Coordinator,EndDevice控制了其他人的LED灯的亮灭。
经老师的告诉,因为大家的信道用了相同的信道,因此结点加到了别人那里。
改变信道后,实验圆满成功。
2.LCD的实验,主要在于是使用影子内存的处理,在实验时,显示存在问题。
30显示为030程序存在问题。
还没有找到解决措施。
实验四两个EndDevice之间的无线通信实验
一、实验内容
1.分别为Coordinator和EndDevice设计一个程序,其功能为:
Coordinator负责建立网络和分配短地址。
按下EndDeviceA的按钮SW0发送广播请求绑定信息,收到该信息的EndDeviceB的LED0闪烁,按下其按钮SW0则返回绑定应答信息,同时LED0处于点亮状态,EndDeviceA收到应答后LED0也处于点亮状态,表示双方绑定成功。
之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。
如果按下任何EndDevice的SW1则解除绑定,且LED1闪烁3秒。
2.分别为Coordinator和EndDevice设计一个程序,其功能为:
Coordinator负责建立网络和分配短地址及绑定的媒介。
按动EndDevice按钮SW0,向Coordinator发送绑定请求信息,LED0闪烁10秒,Coordinator收到该信息后记录其短地址并定时10秒,按动另外一个EndDevice的按钮SW0向Coordinator发送绑定应答信息,LED0闪烁5秒,在有效定时时间10秒内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个短地址发送给两个对应EndDevice,两个EndDevice收到短地址后分别点亮LED0(不再闪烁),若在规定时间内没有建立绑定关系,超时后灭LED0。
如果按下任何EndDevice的SW1则解除绑定,且LED1闪烁3秒。
绑定状态下按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。
二、实验原理
在基于JennicZigBee协议栈中,每个设备必须知道对方的16位短地址,才能进行直接通信,而16位短地址是在EndDevice或Router加入网络时由Coordinator动态分配的。
本次我们采用使用在使用afdeDataRequest()函数发送数据包时,将16位的目标地址设置为0xffff,将数据包以广播包的形式发送出去,按动EndDevice或Router按钮,调用afdeDataRequest()函数向Coordinator发送绑定请求信息,Coordinator收到该信息后记录其短地址并定时,按动另外一个结点的按钮使用afdeDataRequest()函数向Coordinator发送绑定应答信息,在有效定时时间内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个段地址发送给两个对应结点,两个结点收到短地址后便可以相互直接通信。
JZA_vZdpResponse()是一个协议栈调用应用程序的函数,当一个结点通过zdpNwkAddrReq()发送查找另一个结点的短地址后,匹配的结点发送的应答消息可通过请求者的协议栈调用JZA_vZdpResponse()处理
三、软件设计
1.程序流程图:
实验一流程图:
将网络成功节点加入成功后,改变灯的状态,发送广播包得形式获取对方地址,让人眼看到入网成功,按下EndDeviceA的按钮SW0发送广播请求绑定信息,收到该信息的EndDeviceB的LED0闪烁,按下其按钮SW0则返回绑定应答信息,同时LED0处于点亮状态,EndDeviceA收到应答后LED0也处于点亮状态,表示双方绑定成功。
如果按下任何EndDevice的SW1则解除绑定,且LED1闪烁3秒。
实验二流程图:
EndDeviceA向Coordinator发送数据,Coordinator保存EndDeviceA的地址;EndDeviceB向Coordinator发送数据,Coordinator保存EndDeviceB的地址;然后Coordinator分别将EndDeviceA地址给EndDeviceB,EndDeviceB的地址发给EndDeviceA,得到对方的地址,两者之间互相通信,可以绑定也可以解除绑定。
2.
四、实验结果与分析
1.按下EndDeviceA的按钮SW0,LED0闪烁。
EndDeviceB的LED0闪烁,按下其按钮SW0则LED0处于点亮状态,同时EndDeviceA的LED0也处于点亮状态。
之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。
如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。
2.按动EndDevice按钮SW0,LED0闪烁10秒,按动另外一个EndDevice的按钮SW0,LED0闪烁5秒,在有效定时时间10秒内,两个EndDevice分别点亮LED0(不再闪烁),之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。
如果按下任何EndDevice的SW1,则各EndDevice的LED0灭,且LED1闪烁3秒。
五、存在问题和解决方法
1.开始时不知道广播包怎么发送,后请才考原始程序了解到,两个EndDevice之间是如何等到对方的地址,开始实现LED的亮灭总是存在问题,后来解决是程序写错。
但是解决绑定的时候灯的效果不没有达到设计的效果,时间相差一点。
实验五DIO中断实验
一、实验内容
1.分别为Coordinator和EndDevice设计一个程序,运用DIO中断的方式分别用按键控制切换对方对应LED亮/灭状态。
如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0等等。
2.分别为Coordinator和EndDevice设计一个程序,运用DIO中断的方式分别用DIO4、DIO5、DIO6、DIO7切换对方相应LED亮/灭状态。
如Coordinator的DIO4控制EndDevice的LED0,EndDevice的DIO5控制Coordinator的LED1等等。
二、实验原理
1.介绍几个常用函数:
(1)vAHI_DioSetDirection()函数
该函数用来设置DIO引脚的方向(输入或输出),
(2)vAHI_DioInterruptEdge()函数
当某个DIO作为输入引脚时,则用该函数设置中断产生时是采用上升沿还是下降沿触
发。
该函数的原型如下:
voidvAHI_DIOInterruptEdge(uint32u32Rising,uint32u32Falling);
u32Rising对应为1表示文上升沿触发中断,其中21—31没有用
u32Falling对应为1表示下降沿触发中断,其中21—31没有用
注:
该函数仅将u32Rising中为1的位对应的引脚设置为上升沿触发中断,u32Falling中为
的位对应的引脚设置为下降沿触发中断,没有涉及到的引脚保持它原来的状态。
如果某一个
引脚在u32Rising和u32Falling中都进行了设置,则默认为上升沿触发。
该函数仅对设置为
输入的DIO引脚有效。
如果一个DIO引脚已安排给另一个外设且该外设已启用,则该函数
对该DIO引脚不产生影响。
(3)vAHI_DioInterruptEnable()函数
当某个DIO作为输入引脚时,则该函数用来设置接收或屏蔽该引脚发来的中断,及使
能/屏蔽中断。
该函数的原型如下:
voidvAHI_DIOInterruptEnable(uint32u32Enable,uint32u32Disable);
注:
该函数仅使能u32Enable中为1的位对应的引脚中断,屏蔽u32Disable中为1的位对应
的引脚中断,没有涉及到的引脚保持它原来的状态。
如果某一个引脚在u32Enable和
u32Disable中都进行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 新技术 综合 训练 报告