采用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;/*禁止MC13192 SPI*/
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;
}本文引用地址:http://www.104case.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網絡的網絡層、應用層及安全層,再配以滿足特定要求的傳感器便可實現具體的應用網絡。
評論