d. Kết luận :
Đo ngoài trời khoảng cỏch D giữa nỳt cơ sở và nỳt cảm nhận : D < 95m : nhận 100%
95m < D < 100m : nhận 70% - 80%
D > 100m : khụng truyền nhận được dữ liệu
Cụng suất phỏt của chip C1010 với nguồn nuụi 3.3V truyền với khoảng cỏch D<100 cỏc nỳt mạng cũn nhận được tớn hiệu.
3.4.1.2 Xỏc định thời gian truyền nhận dữ liệu giữa nỳt cảm nhận và nỳt cơ sở của mạng WSN trờn cơ sở CC1010.
a. Cỏc bước chuẩn bị thớ nghiệm: - Nạp phần mềm cho cỏc nỳt mạng
- Nối nỳt mạng cơ sở giao tiếp với mỏy tớnh qua cổng RS232 - Chạy phần mềm .. để đún kết quả
b. Mụ tả thớ nghiệm và quỏ trỡnh đo
- Sử dụng bộ định thời tớch hợp sẵn trong vi điều khiển CC1010.
- Cấu trỳc của gúi dữ liệu đó được sử dụng trong chương trỡnh cú dạng như sau: 7 byte 2 byte 2 byte 2 byte 2 byte 2 byte
Preamble NỳtID Data Target Type CRC Trong đú:
Preamble : cỏc byte dẫn đường dựng để đồng bộ ngưỡng cho bộ thu RF NỳtID: Địa chỉ của nỳt truyền.
Data: Thụng tin dữ liệu truyền về. Target: Địa chỉ nỳt nhận.
Type: Loại gúi dữ liệu (điều khiển/dữ liệu).
CRC : Byte chứa thụng tin kiểm tra lỗi dư thừa vũng.
. Quy trỡnh truyền nhận : bao gồm hai pha Phase 1: pha truyền
Truyền 7 byte dẫn đường
Truyền từng byte và tớnh CRC cho hết 8 byte Truyền 2 byte CRC
Phase 2 : Pha nhận
Nhận 7 byte dẫn đường Nhận 8 byte dữ liệu Nhận 2 byte CRC
Kiểm tra CRC
Cỏc bước sử dụng timer để đo, ở đõy sử dụng timer0
Khởi tạo timer0 chạy ở chế độ định thời, bộ đếm timer0 sẽ tăng lờn mỗi chu kỳ mỏy(0.2713às, với tần số thạch anh là 14,746Mhz). Với CC1010 thỡ một chu kỳ mỏy = 4 chu kỳ thạch anh
Gọi hàm truyền, đồng thời kớch hoạt timer0 bắt đầu đếm. Khi hàm truyền kết thỳc thỡ cho timer0 dừng đếm.
Giỏ trị đếm được của timer0 được lưu lại, nhõn với 0.2713às và hiển thị lờn màn hỡnh.
Làm tương tự với cỏc phộp đo khỏc (như đo thời gian nhận, tớnh CRC…)
Chương trỡnh khởi tạo timer0: // Khởi tạo timer0 mode 1
TMOD = (TMOD&0xF0)|0x01;
INT_ENABLE(INUM_TIMER0, INT_ON); INT_GLOBAL_ENABLE(TRUE);
// Cỏc biến đếm
byte xdata counter = 0; ulong xdata timeout; word xdata tCounter;
unsigned int xdata value = 0;
//Reset biến đếm và cho timer chạy tại thời điểm bắt đầu đo counter = 0;
TH0 = 0x00; TL0 = 0x00; TF0 = 0;
TIMER0_RUN(TRUE);
// Dừng timer khi kết thỳc đo và in ra thụng bỏo về thời gian đếm được TIMER0_RUN(FALSE);
value = TH0;// thanh ghi đếm của Timer 0 value <<= 8;
value |= TL0;
fTemp = (value*0.2713 + 65535*counter); //
printf("\n\nThoi gian đếm được là: %4.1f us", fTemp); // Hàm ngắt timer0 để tăng biến đếm mỗi khi tmer0 tràn
// Timer0 sẽ đếm từ 0, giỏ trị đếm tăng lờn mỗi 0.2713us, giỏ trị đếm đạt 65535 thỡ timer0 tràn, bỏo ngắt
void TIMER0_ISR() interrupt INUM_TIMER0 { // Reset the timer to generate another interrupt INT_SETFLAG (INUM_TIMER0, INT_CLR);
TIMER0_RUN(FALSE); TH0 = 0x00; TL0 = 0x00; TIMER0_RUN(TRUE); counter++; } // TIMER0_ISR
Chƣơng trỡnh đo thời gian từ nỳt truyền đến nỳt nhận
counter = 0; TH0 = 0x00; TL0 = 0x00; TF0 = 0;
TIMER0_RUN(TRUE);
// Tổng thời gian từ lỳc bắt đầu truyền đến lỳc hết hàm truyền
halRFSendPacket2(PREAMBLE_BYTE_COUNT, txDataBuffer.buffer, PACKET_LENGTH); TIMER0_RUN(FALSE); value = TH0; value <<= 8; value |= TL0;
fTemp = (value*0.2713 + 65535*counter);
printf("\n\nThoi gian truyen het 7 byte preamale + 8 byte data + 2 byte CRC16: %4.1f us", fTemp);
Kết quả đo : thời gian truyền hết 137ms
Hỡnh 3.7 Thời gian truyền hết 17 byte dữ liệu từ nỳt truyền đến nỳt nhận Xỏc định thời gian nhận và xử lý dữ liệu tại nỳt nhận
counter = 0; TH0 = 0x00; TL0 = 0x00; TF0 = 0;
TIMER0_RUN(TRUE);
// Tổng thời gian từ lỳc bắt đầu nhận đến lỳc hết hàm nhận
halRFReceivePacket2(byte timeOut, byte* packetData, byte maxLength);
TIMER0_RUN(FALSE); value = TH0;
value <<= 8; value |= TL0;
fTemp = (value*0.2713 + 65535*counter);
printf("\n\nThoi gian nhan het 7 byte preamale + 8 byte data + 2 byte CRC16: %4.1f us", fTemp);
Kết quả đo thời gian nỳt nhận và phõn tớch dữ liệu: 138ms
Hỡnh 3.8 Thời gian truyền hết 17 byte dữ liệu từ nỳt truyền đến nỳt nhận d. Kết luận
Vậy Tổng thời gian thời gian nỳt truyền bắt đầu gửi dữ liệu 17 byte cho đến khi nỳt nhận nhận và phõn tớch xong dữ liệu là : 137 + 138 = 275 ms
3.4.1.3 Đo cường độ dũng điện của cỏc nỳt mạng cỏc trạng thỏi : ngủ, truyền, nhận dữ liệu ở chế độ lập lịch tập trung. dữ liệu ở chế độ lập lịch tập trung.
a. Chế độ lập lịch tập trung
Lập lịch tập trung là một trong nhiều cỏch tổ chức hoạt động của cỏc nỳt mạng trong mạng WSN. Với lập lịch tập trung, hoạt động của mạng sẽ do nỳt cơ sở điều khiển. Tất cả cỏc nỳt cảm nhận khỏc trong mạng sẽ hoạt động theo yờu cầu của nỳt mạng cơ sở, cỏc yờu cầu điều khiển này đó được nỳt mạng cơ sở sắp xếp cố định và trở thành một lịch trỡnh hoạt động cho mạng đú.
Hoạt động:
Nỳt cơ sở: Sẽ lần lượt yờu cầu từng nỳt mạng gửi dữ liệu truyền về. Mỗi nỳt mạng khi nhận được yờu cầu sẽ phải gửi dữ liệu phản hồi về cho nỳt cơ sở.
Ban đầu, nỳt cơ sở gửi yờu cầu tới một nỳt cảm nhận n (NỳtID=n). Sau khi gửi gúi tin yờu cầu nỳt n ra ngoài mụi trường thỡ cỏc nỳt mạng khỏc cũng đều nhận được yờu cầu đú chứ khụng riờng nỳt n nhận được. Tiếp theo nỳt mạng cơ sở chuyển sang chế độ nhận dữ liệu từ nỳt mạng cảm nhận truyền về. Lỳc này, nỳt mạng cơ sở sẽ nhận dữ liệu, nếu nhận khụng thành cụng thỡ nhận lại lần nữa. Tuy nhiờn, quỏ trỡnh nhận lại này sẽ được giới hạn về mặt thời gian. Tức là với mỗi một nỳt cảm nhận, nỳt cơ sở chỉ dành cho một lượng thời gian nhất định, nếu sau khoảng thời gian đú mà vẫn khụng nhận được gúi dữ liệu truyền về thỡ tức là nỳt mạng được yờu cầu đú đó khụng nhận được yờu cầu hoặc là gúi dữ liệu truyền vễ đó gặp phải lỗi truyền nào đú ngoài mụi trường dẫn tới nỳt cơ sở khụng thể nhận được. Lỳc này nỳt cơ sở sẽ phải bỏ qua nỳt đú để chuyển tiếp sang yờu cầu nỳt khỏc. Nếu trong thời gian đú mà nỳt cơ sở nhận được thành cụng gúi dữ liệu của nỳt cảm nhận truyền về thỡ sẽ tiến hành xử lý gúi tin và hiển thị hoặc lưu trữ dữ liệu nhận được đú. Sau khi xử lý xong gúi tin, trước khi chuyển sang yờu cầu nỳt tiếp theo (n+1) thỡ nỳt cơ sở sẽ trễ một khoảng tdelay. Lý do phải cú khoảng trễ này sẽ được giải thớch tại phần hoạt động của nỳt cảm nhận. Như vậy là nỳt cơ sở đó hoàn thành việc yờu cầu và nhận gúi tin từ một nỳt cảm nhận trong mạng. Sau đú nỳt cơ sở sẽ tăng thờm 1 vào địa chỉ của nỳt sẽ yờu cầu, tức là sẽ yờu cầu nỳt cảm nhận tiếp theo. Quỏ trỡnh được lặp lại liờn tục, nỳt cơ sở yờu cầu và nhận dữ liệu của lần lượt từng nỳt trong mạng, sau khi hết một lượt lại tiến hành quay lại với nỳt đầu tiờn.
while (TRUE) {
for(i=1;i<max;i++) // max là số nỳt mạng {
tbcTransmit(i,0xFF);// gửi yờu cầu cho nỳt I, loại gúi tin điều khiển t = (int) sppGetTime(); // lấy thời gian trước khi nhận
do{ //Nếu nhận khụng thành cụng sẽ nhận lại cho //toi khi hết 800ms thỡ thụi.
tbcReceive();
}while((RXI.status != SPP_RX_FINISHED)&&( ((int) sppGetTime()-t)<80)); tbcPrintTable(); // xử lý gúi tin
delay(10000);//Thời gian Master đợi cỏc Slave tớnh toỏn, xử lý dữ liệu }
}
Giải thuật của nỳt cơ sở: