Phần mềm cho board điều khiển

Một phần của tài liệu Nghiên cứu, thiết kế và chế tạo hệ thống truyền nhận dữ liệu vô tuyến theo chuẩn giao tiếp ZIGBEE (Trang 55 - 58)

Phần mềm dành cho board điều khiển được viết bằng ngôn ngữ C, sử dụng bộ biên dịch C18 Compiler. Phần mềm này phải thực hiện những nhiệm vụ chính như sau:

- Thực hiện quá trình khởi tạo hoạt động cho module MRF24J40. Quá trình này bao gồm việc lựa chọn kênh truyền (tần số), mức công suất phát,

- Nếu là quá trình đọc và phát dữ liệu, phần mềm sẽ đọc dữ liệu từ cổng tương ứng (có thể do người sử dụng lựa chọn thông qua các nút nhấn), sau đó gửi dữ liệu đó qua module MRF24J40 để phát đi.

- Nếu là quá trình thu dữ liệu và truyền lên máy tính, phần mềm sẽ thực hiện việc đọc dữ liệu thu được từ module MRF24J40, sau đó truyền cho máy tính được kết nối thông qua cổng COM.

- Phần mềm cũng sẽ thực hiện việc giám sát các nút nhấn để lựa chọn trạng thái hoạt động phù hợp, cũng như điều khiển hiển thị trên LCD để người dùng có thể biết được trạng thái hiện tại của board mạch.

- Việc quyết định board mạch là thu hay phát sẽ được thực hiện thông qua phần mềm và do người dùng lựa chọn bằng cách sử dụng các nút bấm tương ứng. Sau khi board mạch được khởi động, tại màn hình đầu tiên, nếu người dùng nhấn nút SW3 thì board mạch sẽ hoạt động ở chế độ nhận (RX). Board mạch ở chế độ RX là board được kết nối với máy tính. Nếu người dùng nhấn nút SW2 thì board mạch sẽ hoạt động ở chế độ truyền (TX). Board mạch hoạt động chế độ TX là board mạch được ghép nối với các thiết bị đo.

Hình 4.10. Lưu đồ chính của chương trình.

Đoạn chương trình để chuyển board điều khiển về trạng thái là nhận dữ liệu (RX) được mô tả như sau:

if(!RB4)

{

while(!RB4); RFIE = 1;

lcd_print("\fBoard status:");

lcd_print("\nRX ");

SetChannel(CHANNEL_11);

PHYSetLongRAMAddr(RFCON3,0b0010100); // fix power

PHYSetShortRAMAddr(WRITE_RXFLUSH,0x01); ReceivingMode = TRUE; while(1) { PHYSetShortRAMAddr(WRITE_RXFLUSH, 0x01); LATB6 ^= 1;

Delay1KTCYx(200); }

}

Để chuyển trạng thái của board mạch về trạng thái truyền (TX) ta sử dụng đoạn mã như sau:

if(!RB3)

{

while(!RB3);

lcd_print("\fBoard status:");

lcd_print("\nTX"); SetChannel(CHANNEL_11); PHYSetLongRAMAddr(RFCON3,0b0010100); PHYSetLongRAMAddr(0x22F,0x0F); PHYSetLongRAMAddr(0x000,sizeof(PredefPacket)); PHYSetLongRAMAddr(0x001,sizeof(PredefPacket)); while(1) { if(!RB3) { while(!RB3); for(i=2;i<(sizeof(PredefPacket)+2);i++) {

PHYSetLongRAMAddr(i, PredefPacket[i-

2]); } PHYSetShortRAMAddr(WRITE_TXNCON,0b00000001); } LATB7 ^= 1; Delay1KTCYx(200); } }

Trong các đoạn mã trên, hàm SetChannel() được sử dụng để lựa chọn kênh truyền. Ở đây, ta lựa chọn truyền trên kênh truyền số 11 với tần số hoạt động là 2,405MHz.

Các hàm PHYSetLongRAMAddr() PHYSetShortRAMAddr() là các hàm cho phép ghi dữ liệu vào các vùng bộ nhớ có địa chỉ ngắn và vùng bộ nhớ có địa chỉ dài tương ứng. Các hàm này đều được phát triển bởi MicroChip và dành cho việc điều khiển chip MRF24J40. Các hàm này đều được định nghĩa và mô tả trong file

RadioDefine.c và RadioDefine.h.

Một phần của tài liệu Nghiên cứu, thiết kế và chế tạo hệ thống truyền nhận dữ liệu vô tuyến theo chuẩn giao tiếp ZIGBEE (Trang 55 - 58)