采用MC13192的无线传感器网络节点设计方案
SSPDR = (uint8)(u8Addr 0x3f);/*写入要访问的6位地址,设置写*/
while((SSPSR 0x01) == 0);/*等待发送栈为空*/
while((SSPSR 0x10) != 0);/*等待状态寄存器空闲*/
u8TempValue = SSPDR;/*清空地址中的内容*/
SSPDR = (uint8)(u16Content >> 8);/*写高字节*/
while((SSPSR 0x01) == 0);
while((SSPSR 0x10) != 0);
u8TempValue = SSPDR;
SSPDR = (uint8)(u16Content 0x00FF);/*写低字节*/
while((SSPSR 0x01) == 0);
while((SSPSR 0x10) != 0);
u8TempValue = SSPDR;
IO1SET =MC13192_CE;/*禁止MC13192SPI*/
MC13192RestoreInterrupts(); /*恢复MC13192中断状态*/
}
uint16 SPIDrvRead (uint8 u8Addr) {/*SPI读函数*/
uint8 u8TempValue;
uint16 u16ret;
SPIClearRecieveStatReg(); /*清状态寄存器*/
SPIClearRecieveDataReg();/*清接收数据寄存器*/
MC13192DisableInterrupts(); /*禁止MC13192产生中断请求*/
IO1CLR = MC13192_CE;/*使能MC13192 SPI */
SSPDR = (uint8)((u8Addr 0x3f) | 0x80);/*写入要访问的6位地址,设置读*/
while((SSPSR 0x01) == 0); /*等待发送栈为空*/
while((SSPSR 0x10) != 0);/*等待状态控制器空闲*/
u8TempValue = SSPDR;
SSPDR = (uint8)0xFF;
while((SSPSR 0x01) == 0);
while((SSPSR 0x10) != 0);
u8TempValue = SSPDR;/*存放高字节数据*/
SSPDR = (uint8)0xFF;
while((SSPSR 0x01) == 0);
while((SSPSR 0x10) != 0);
u16ret = SSPDR;/*存放低字节数据*/
u16ret=u16ret+u8TempValue*256;/*存放一个完整字*/
IO1SET = MC13192_CE;/*禁止MC13192 SPI*/
MC13192RestoreInterrupts();/*恢复MC13192中断状态*/
return u16ret;
}本文引用地址://m.amcfsurvey.com/article/161711.htm
图4 发送程序流程 图5 接收程序流程
3.3 实验结果
图6为硬件节点实物图。该电路板经过仿真调试应用良好,可以实现多个节点间的通信;在实验电路板上设置了一个LED,可以通过灯的闪烁来指示信息接收的质量以及接收的成败;能够利用串行接口与计算机进行通信,并且可以通过JTAG接口电路进行程序的固化。初步的实验表明: 通信距离基本达到预期目标,在空旷地带以最大功率传输,可以以较小误码率传输60多米。采用1节电压为3.6 V、容量为2 100 mAh的干电池供电时,节点连续工作的时间为3~4天。如果使得该节点始终工作在超低功耗的工作状态,则其工作时间可以超过1年,能够满足特定应用场合对电池寿命的要求。
图6 硬件节点实物图
结语
经实验证明,以MC13192和LPC2138为核心构造的无线传感器网络节点,在功耗、传输距离以及无线传输速率等性能上都能满足应用要求。在此方案基础之上,通过移植ZigBee协议栈,可以构建ZigBee网络的网络层、应用层及安全层,再配以满足特定要求的传感器便可实现具体的应用网络。
评论