MỤC LỤC
Phần 1: CỔNG SONG SONG . . 3
1.1 Cấu trúc cổng song song: . 3
1.2 Định dạng các thanh ghi: . 4
1.3 Giao tiếp hai máy tính dùng cổng song song 4
Phần 2: GIỚI THIỆU PSOC VÀ MODUL WIRELESS USB7
2.1 Giới thiệu chung về PSOC và chip Cyp29566: 7
2.2 Sơ lược cấu trúc phần cứng: 8
2.2.1 Tổng quan cấu trúc PSOC: 8
2.2.2 Cấu trúc CPU . 9
2.2.3 Bộ tạo tần số: . . 9
2.2.4 Mạch RESET: 10
2.2.5 Đầu vào và ra của tín hiệu số: 10
2.2.6 Drive Mode: . 11
2.2.7 Truy cập các khối số lập trình được: . 12
2.2.8 Các đường input toàn cục (Global input line): . 12
2.2.9 Bộ chọn kênh đầu vào: 12
2.2.10 Khối số khả trình: . . 13
2.2.11 Tín hiệu CLK . 14
2.2.12 Tín hiệu input . 14
2.2.13 Tín hiệu output 14
2.2.14 Multiplexer . 14
2.2.15 Mạch logic 15
2.2.16 Output drivers . 15
2.2.17 Điều khiển ngắt 15
2.2.18 Không gian địa chỉ . 16
2.3 Module WirelessUSB LR 2.4-GHz DSSS Radio SoC CYWUSB6935: 17
2.3.1 Các đặc điểm của CYWUSB6935: . 17
2.3.2 Các ứng dụng: 17
2.3.3 Sơ đồ khối của CYWUSB6935: 17
2.3.4 Chức năng tổng quát của CYWUSB6935: 18
2.3.6 Các thanh ghi của CYWUSB6935: 21
Phần 3: SƠ ĐỒ MẠCH VÀ LưU ĐỒ THUẬT TOÁN . 25
3.1 Cấu hình phần cứng trên PSOC Cyp29566 25
3.1.1 Khối giao tiếp SPI Master . 25
3.1.2 Module LCD 16x2 27
3.1.3. Module I2C: . 29
3.1.4. Giới thiêu DS1307 31
3.2. Sơ đồ mạch và nguyên lý hoạt động: . 34
3.2.1 Mạch điều khiển thiết bị: 34
3.2.2 Mạch giao tiếp máy tính: 35
3.3 Lưu đồ thuật toán: 36
3.3.1 Chương trình chính: . . 36
3.3.2 Chương trình cài đặt giờ: . 38
3.3.3 Chương trình hiển thị menu: . . 39
3.3.4. Chương trình hiển thị và cài đặt trên PSOC: 40
3.3.5. Chương trình xử lý dữ liệu từ máy tính: . 41
GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS 2
Phần 4: CHưƠNG TRÌNH GIAO TIẾP CỔNG SONG SONG
TRÊN MÁY TÍNH 42
4.1 Giới thiệu chương trình giao tiếp máy tính với module wireless. 42
4.2 Các module chính của chương trình: . . 43
4.2.1 Hàm set và clear 1 bit: . 43
4.2.2 Hàm đọc trạng thái của 1 bit: . 43
4.2.3 Hàm gửi 1 byte lên bus SPI: . 44
4.2.4 Hàm nhận đọc 1 byte trên bus SPI: . 44
4.2.5 Hàm ghi đata vào 1 thanh ghi của module wireless: 44
4.2.6 Hàm đọc data từ 1 thanh ghi của module wireless: . 45
4.2.7 Hàm khởi động module wireless: . 45
4.2.8 Hàm chọn chế độ truyền cho module 6935: . 46
4.2.9 Phát 1 byte dùng module wireless: 46
4.2.10 Nhận 1 byte: . 46
4.2.11 Sự kiện cho nút ‘Bắt đâu’: 46
4.2.12 Sự kiện cho nút ‘Cài đặt’: . 46
4.2.13 Sự kiện cho nút ‘Cập nhật thời gian’: . 47
4.2.14 Sự kiện cho nút ‘Nhận dữ liệu’: . 47
4.2.15 Sự kiện cho timer2 . 47
4.2.16 Sự kiện cho các nút điều khiển trực tiếp thiết bị: . 47
Phần 5: PHỤ LỤC . 48
5.1 Chương trình diều khiển ở VDK . 48
5.2 Chương trình VB: . 64
80 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2480 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Giám sát, điều khiển thiết bị điện qua cổng parallel dùng wireles, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ule wireless: tương tự như quá trình
ghi, nhưng ở đây, bit MSB của địa chỉ cần đọc để ở mức 0.
Private Function Read_WUSB_REG(ByVal reg As Integer) As Integer
Dim value As Integer
ClrBit(data, SCK)
ClrBit(data, nSS)
SendByteSPI(reg)
value = readbyteSPI()
setbit(data, nSS)
ClrBit(data, SCK)
Return value
End Function
4.2.7 Hàm khởi động module wireless:
Để khởi tạo module wireless, trước tiên la phải set bit nPD (bit power down) lên
1 để module này hoạt động. Quá trình khởi động của module này có thời gian để
bộ dao động của nó ổn định, trong thời gian này không nên ghi dữ liệu tới nó.
Do đó ta cần trì hoãn 1 thời gian dùng hàm System.Threading.Thread.Sleep(1).
Sau khi khởi động ta cần Reset module, set bit nSS (không chọn truyền SPI, chỉ
mỗi khi cần truyền dữ liệu ta mới clear bit này). Tiếp theo ghi giá trị 41H đến 2
thanh ghi REG_CLOCK_MANUAL và REG_CLOCK_ENABLE để module
được hoạt động đúng, và ghi 07H tới thanh ghi REG_SERDES_CTL để chọn số
bit cần đẻ kêt thúc 1 chuỗi bit.(ở đây chọn 7 bit)
Private Sub WUSB_Init()
setbit(data, nPD)
System.Threading.Thread.Sleep(1)
ClrBit(data, nRESET)
System.Threading.Thread.Sleep(1)
setbit(data, nRESET)
setbit(data, nSS)
System.Threading.Thread.Sleep(1)
Write_WUSB_REG(&H33, &H41) 'REG_CLOCK_MANUAL = 0x33
Write_WUSB_REG(&H32, &H41) 'REG_CLOCK_ENABLE 0x32
Write_WUSB_REG(&H6, &H7) 'REG_SERDES_CTL 0x06
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
46 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
End Sub
4.2.8 Hàm chọn chế độ truyền cho module 6935: Module wireless có thể hoạt động
ở chế độ truyền hoặc chế độ nhận tùy thuộc vào bit điều khiển tương ứng trong
thanh ghi REG_CONTROL
Private Sub Set_Transmit_Mode()
'Set transmit mode
Write_WUSB_REG(&H3, &H40) 'REG_CONTROL 0x03; (chọn chế độ
truyền, và bộ khuêch đại bên trong chip)
Write_WUSB_REG(&H6, &HF)
'Set he so khuech dai cong suat lon nhat
Write_WUSB_REG(&H23, &H7) 'REG_PA 0x23;mPA_BIAS
0x07
'set so bit valid trong thanh ghi REG_SERDES, bit =1->valid, bit = 0
invalid
Write_WUSB_REG(&H10, &HFF) 'REG_VALID_TX 0x10
End Sub
4.2.9 Phát 1 byte dùng module wireless:
Để phát 1 byte, trước hết ta phải set module ở chế độ truyền. sau đó ghi
dữ liệu cần phát đến thanh ghi: REG_TX_DATA ở địa chỉ 0x0F. Sau khi ghi dữ liệu
đến thanh ghi nay, ta có thể kiểm tra việc dữ liệu đã truyền xong hay chưa thông qua
việc đọc thanh ghi REG_TX_INT_STAT (0x0E), kiểm tra bit 0 (bit Empty).
Vd: truyền byte 0xFE:
Write_WUSB_REG(&HF, &HFE);
4.2.10 Nhận 1 byte:
Để nhận 1 byte, trước hết ta phải set module ở chế độ nhận, sau đó kiểm
tra thanh ghi trạng thái nhận REG_RX_INT_STAT (0x08), nếu bit 0 (bit Full A, set
lên 1 khi dữ liệu đã nhận đủ) được set lên 1 thì ta đọc giá trị nhận được trong thanh ghi
REG_RX_DATA_A (0x09). (Giá trị nhận được lưu trong 2 kênh A và B, ở đây ta đọc
giá trị ở kênh A)
Vd:
If (Read_WUSB_REG(&H8) And 1) Then
receive(0) = Read_WUSB_REG(&H9)
4.2.11 Sự kiện cho nút ‘Bắt đâu’:
Khởi động module Wireless
Chọn chế độ truyền
4.2.12 Sự kiện cho nút ‘Cài đặt’:
Gửi lệnh FFH: lệnh để báo hiệu cho VDK biết đó là gửi chuỗi dữ liệu
hẹn giờ.
Gửi byte cấu hình đầu tiên (byte để nhận biết thiết bị nào được hẹn giờ,
và ở chế độ nào)
Byte này có khuôn dạng như sau:
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
47 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
- Bit 0,2,4,6: Bit nào được set lên 1 -> thiết bị tương ứng (1,2,3,4)
được hẹn giờ. Dữ liệu cho các bit này được lấy từ các checkbox thiết bị.
- Bit 1,3,5,7: Bit set lên 1 tương ứng với hẹn giờ on cho thiết bị.
các bit này được set hay clear dựa vào Listbox mode.
Gửi 24 byte hẹn giờ cho 4 thiết bị (mỗi thiết bị 6 byte). Dữ liệu này được
chọn từ các Listbox ở mục „Giờ‟, „Phút‟, „Giây‟, „Ngày‟. Vì dữ liệu ghi tới
DS1307 ở board mạch VDK ở dạng BCD, dữ liệu hẹn giờ được so sánh ở dạng
số BCD nên trước khi truyền dữ liệu, chúng phải được chuyển đổi sang BCD.
Sử dụng hàm:
Private Function ConverttoBCD(ByVal deci As Integer) As Integer
Return ((deci \ 10) * 16 + (deci Mod 10))
End Function
4.2.13 Sự kiện cho nút ‘Cập nhật thời gian’:
Gửi byte lệnh F5H tới VDK để báo hiệu dữ liệu tiếp theo được gửi là dữ
liệu thời gian hệ thống.
Lấy giờ của hệ thống, chuyển đổi qua BCD sau đó gửi 6 byte thời gian hệ
thống xuống VDK.
4.2.14 Sự kiện cho nút ‘Nhận dữ liệu’:
Gửi byte lệnh F6H, lệnh yêu cầu VDK gửi dữ liệu lên máy tính.
Chuyển module wireless sang chế độ nhận,
Chờ đọc đủ 25 byte được gửi từ VDK
Nếu sau thời gian là 3s mà không có dữ liệu hoặc dữ liệu không đủ thì tự
động kết thúc việc đọc module wireless. Việc định giờ này được thiết lập nhờ
Timer1.
Chuyển module wireless sang chế độ truyền trở lại.
4.2.15 Sự kiện cho timer2.
Sau 1s thì sự kiện Timer2_Tick được gọi để yêu cầu truyền dữ liệu cập
nhật trạng thái của thiết bị.
Quá trình này giống như sự kiện cho nút „nhận dữ liệu‟, điểm khác là
byte lệnh đầu tiên là F4H, và chỉ yêu cầu truyền 1byte từ VDK.
Do timer2_tick tự động được gọi sau mỗi 1s do đó tất cả các hàm truyền dữ liệu
từ PC trước hết phải disable timer2 để tránh xung đột.
4.2.16 Sự kiện cho các nút điều khiển trực tiếp thiết bị:
Điều khiển bật thiết bị 1,2,3,4: lần lượt là các byte FEH, FDH, FCH,
FBH.
Điều khiển tắt thiết bị 1,2,3,4 lần lượt là các byte FAH, F9H, F8H, F7H
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
48 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Phần 5: PHỤ LỤC
5.1 Chƣơng trình diều khiển ở VDK
#include
#include "PSoCAPI.h"
#include "function.h"
#include
#include "PSoCGPIOINT.h"
const unsigned char
months[]={0x31,0x28,0x31,0x30,0x31,0x30,0x31,0x31,0x30,0x3
1,0x30,0x31};
const char* const menuchinh[]={"Menu chinh","1.Cai
Dat","2.Xoa cai dat","3.Hen gio daily","4.Thong tin N1"};
const char* const menuthongtin[]={"Thong tin nhom
1","1.N.Ngoc Nhan","2.D.Van Khanh","3.L.Van
Sanh","4.D.H.Cam Le","5.N.T.H.Oanh","6.N.Trong
Tri","7.N.Viet Trung","8.N.Duc Khoa","9.S.Thongsoul"};
const char* const menucaidat[]={"Cai Dat Thiet
Bi","1.Thiet bi 1","2.Thiet bi 2","3.Thiet bi 3","4.Thiet
bi 4"};
const char* const menuthietbi[]={"Thiet bi ","1.Dat gio
On","2.Dat gio Off","3.On","4.Off","5.Trang Thai"};
unsigned char mode,j,i,thiet_bi,mode_kt,bWUSB;
unsigned char flashBuf[25];
unsigned char time[8],i2cBuf[9],key_flag,key,field,day;
unsigned char addr=0;
void display_time()
{
I2Cm_bWriteBytes(0x68,&addr,1,I2Cm_NoStop);
//gui byte dia chi dau tien cua vung RAM can doc
I2Cm_fReadBytes(0x68,time,7,I2Cm_RepStart);
//DOc 7 byte lien tiep
display();
}
void display()
{
LCD_1_Position(1,9); LCD_1_PrCString(":");
//di chuyen con tro LCD den hang 1,cot 9,in ki tu
":"
LCD_1_Position(1,12);LCD_1_PrCString(":");
LCD_1_Position(0,9); LCD_1_PrCString("/");
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
49 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
LCD_1_Position(0,12);LCD_1_PrCString("/");
LCD_1_Position(1,13);LCD_1_PrHexByte(time[0]);
LCD_1_Position(1,10);LCD_1_PrHexByte(time[1]);
LCD_1_Position(1,7);LCD_1_PrHexByte(time[2]);
LCD_1_Position(0,7); LCD_1_PrHexByte(time[4]);
LCD_1_Position(0,10);LCD_1_PrHexByte(time[5]);
LCD_1_Position(0,13);LCD_1_PrHexByte(time[6]);
}
void delay(){
unsigned char k;
for(k=0;k<100;k++);
}
char get_key()
{
check_key();
if(key_flag==1)
{
for(i=0;i<100;i++)
{
check_key();
if(key_flag==1) i=0;
}
return 1;
}
return 0;
}
void check_key(){
key_flag=1;
if(!(PRT0DR&0x80))key=1;
else if(!(PRT0DR&0x20)) key=2;
else if(!(PRT0DR&0x08)) key=3;
else if(!(PRT0DR&0x02)) key=4;
else key_flag=0;
}
//ham gui 1 byte du lieu toi dia chi add cua DS1307
//2 ham nay ko dung trong chuong trinh, chi de test
void send_data(BYTE add,BYTE data){
I2Cm_fSendStart(0x68,I2Cm_WRITE);
I2Cm_fWrite(add);
I2Cm_fWrite(data);
I2Cm_SendStop();
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
50 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
}
BYTE read_data(BYTE add){
BYTE data;
I2Cm_fSendStart(0x68,I2Cm_WRITE);
I2Cm_fWrite(add);
I2Cm_fSendRepeatStart(0x68,I2Cm_READ);
data=I2Cm_bRead(I2Cm_NAKslave);
I2Cm_SendStop();
return data;
}
//////////////////////////////////////////////////////////
//
///Ham hien thi menu:
///n: so muc chon lua cua menu,
//menu_thiet_bi:bien dung de xac dinh neu la menu thiet bi
/////thi them chi so chi thiet bi thu menu_thiet_bi vao
dong hien thi
void hien_thi_menu(const char* const menu[],BYTE n,BYTE
menu_thiet_bi){
j=1;
//j: bien dung de xac dinh muc can hien thi
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
LCD_1_Position(0,0);
LCD_1_PrCString(menu[0]);//muc chinh cua menu
if(menu_thiet_bi){
LCD_1_Position(0,9);
LCD_1_PrHexByte(menu_thiet_bi);
}
LCD_1_Position(1,1);
LCD_1_PrCString(menu[1]);//muc 1 cua menu
while(!get_key());
while(key==2||key==3){
if(key==2){
j++;
if(j==n) j=1;
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
LCD_1_PrCString(menu[0]);
LCD_1_Position(1,1);
LCD_1_PrCString(menu[j]);
if(menu_thiet_bi){
LCD_1_Position(0,9);
LCD_1_PrHexByte(menu_thiet_bi);
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
51 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
}
}
else {
j--;
if(j==0) j=n-1;
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
LCD_1_PrCString(menu[0]);
LCD_1_Position(1,1);
LCD_1_PrCString(menu[j]);
if(menu_thiet_bi){
LCD_1_Position(0,9);
LCD_1_PrHexByte(menu_thiet_bi);
}
}
while(!get_key());
}
mode=j;
///bien mode de biet duoc ta da chon muc nao
}
void set_date(){
field=5;//bien de xac dinh dang o vi tri
gio,phut,giay,ngay,thang,nam
//field=5 -> giay,4->phut,......
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
I2Cm_bWriteBytes(0x68,&addr,1,I2Cm_NoStop);
//ham I2Cm_bWriteBytes: 0x68:dia chi cua DS1307
(device address),
//addr=0:write dia chi o nho dau tien trong DS1307
I2Cm_fReadBytes(0x68,time,7,I2Cm_RepStart);
//Doc lien tiep 7 byte cua DS1307
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
display() ;
LCD_1_Position(1,14);
LCD_1_Control(LCD_1_CURSOR_BLINK);
do{
while(!get_key());
//dung phim thu 4,(phim SET) de thay doi field
if(key==4&&field>=0) change_field();
else if(key==2) inc_field();
else if(key==3) dec_field();
time[7]=0x10;
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
52 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
///byte dieu khien DS1307-> 0x10->tao xung ra tso
1Hz
if(field==0xff){//neu nhan qua het cac field-
>field=-1->thoat
LCD_1_Control(LCD_1_CURSOR_OFF);
break;
}
} while(1);
}
void change_field(){
field--;
if(field!=0xff){
LCD_1_Position(field/3,8+3*(field%3));
//field/3 = 0:hien thi dong 0,=1 hien thi dong 1
//8+3*(field%3)) :vi tri cua
gio,phut,giay,ngay,thang,nam
LCD_1_Control(LCD_1_CURSOR_BLINK);
}
}
void inc_field(){
///ham inc_field():
// tang gia tri cua field(gio,phut,giay,ngay,thang,nam)
hien thoi
//tuy vao ta dang o field nao ma ham se xu ly de tang dung
gia tri
//(vi du:ko the tang giay>=60.hoac <0)
switch (field) {
case 5: time[0]++;//tang giay
if((time[0]%16)>9)
time[0]+=6;//hieu chinh so BCD
if(time[0]>=0x60)
time[0]=0;
break;
case 4:time[1]++;//tang phut
if((time[1]%16)>9)
time[1]+=6;//hieu chinh so BCD
if(time[1]>=0x60)
time[1]=0;
break;
case 3:time[2]++;//tang gio
if((time[2]%16)>9)
time[2]+=6;//hieu chinh so BCD
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
53 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
if(time[2]>=0x24)
time[2]=0;
break;
case 2:time[6]++;//tang nam
if((time[6]%16)>9)
time[6]+=6;//hieu chinh so BCD
if(time[6]>0x99)
time[6]=0;
break;
case 1:time[5]++;//tang thang
if((time[5]%16)>9)
time[5]+=6;//hieu chinh so BCD
if(time[5]>0x12)
time[5]=1;
break;
case 0:time[4]++;//tang ngay
if((time[4]%16)>9)
time[4]+=6;//hieu chinh so BCD
day=months[time[5]-1];//mang months:chua so
ngay trong 1 thang
if(((time[6]/16+time[6]%16)%4==0)&&(time[5]==2))
//neu nam nhuan va thang 2->so ngay 29
day++;
if(time[4]>day)
time[4]=1;
break;
}
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
display();
LCD_1_Position(field/3,8+3*(field%3));
LCD_1_Control(LCD_1_CURSOR_BLINK);
}
void dec_field(){
switch (field) {
case 5: time[0]--;
if((time[0]%16)==0x0f)
time[0]-=6;
if(time[0]==0xf9)
time[0]=0x59;
break;
case 4:time[1]--;
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
54 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
if((time[1]%16)==0x0f)
time[1]-=6;
if(time[1]==0xf9)
time[1]=0x59;
break;
case 3:time[2]--;
if((time[2]%16)==0x0f)
time[2]-=6;
if(time[2]==0xf9)
time[2]=0x23;
break;
case 2:time[6]--;
if((time[6]%16)==0x0f)
time[6]-=6;
if(time[6]==0xf9)
time[6]=0x99;
break;
case 1:time[5]--;
if((time[5]%16)==0x0f)
time[5]-=6;
if(time[5]==0xf9)
time[5]=0x12;
break;
case 0:time[4]--;
if((time[4]%16)==0x0f)
time[4]-=6;
day=months[time[5]-1];
if(((time[6]/16+time[6]%16)%4==0)&&(time[5]==2))
day++;
if(time[4]==0xf9)
time[4]=day;
break;
}
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
display();
LCD_1_Position(field/3,8+3*(field%3));
LCD_1_Control(LCD_1_CURSOR_BLINK);
}
/////////////////////////////////////////////////
void write_flash(){
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
55 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
//xem them
FLASH_WRITE_STRUCT fwStruct;
fwStruct.wARG_BlockId = 511;//512 block, moi block
64Byte,->ghi toi block cuoi cung
fwStruct.pARG_FlashBuffer = flashBuf;//dia chi vung
dem chua du lieu can ghi
fwStruct.cARG_Temperature = 25;
bFlashWriteBlock(&fwStruct);
}
void read_flash(){
FLASH_READ_STRUCT frStruct;
frStruct.wARG_BlockId = 511;
frStruct.pARG_FlashBuffer = flashBuf;
frStruct.wARG_ReadCount = 25;//doc 25 byte
FlashReadBlock(&frStruct);
}
//truoc ham kiem tra hen gio phai doc 1307
void kiem_tra_hen_gio(BYTE mode_kt){
///mode_kt =0:hen gio co dinh,=1:hen gio daily
BYTE ii,jj=0;
if(flashBuf[0]&0x0f){
////////////Thiet bi 1/////////////
if(flashBuf[0]&0b00000001){
for(ii=0;ii<6;ii++)
{
if(ii==3){ ii++;jj=1;}
//so sanh 6 byte, bo qua byte "day of
week" cua mang time[]
if(time[ii]!=flashBuf[ii+1-jj]) break;
}
if(ii==6||((mode_kt)&&(ii>=3))){
if(flashBuf[0]&0x10) turnOn(1);
else turnOff(1);
}
}
///////////////Thiet bi 2///////////////
jj=0;
if(flashBuf[0]&0b00000010){
for(ii=0;ii<6;ii++)
{
if(ii==3){ ii++;jj=1;}
if(time[ii]!=flashBuf[ii+7-jj]) break;
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
56 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
}
if(ii==6||((mode_kt)&&(ii>=3))){
if(flashBuf[0]&0x20) turnOn(2);
else turnOff(2);
}
}
/////////////////Thiet bi 3///////////////
jj=0;
if(flashBuf[0]&0b00000100){
for(ii=0;ii<6;ii++)
{
if(ii==3){ ii++;jj=1;}
if(time[ii]!=flashBuf[ii+13-jj]) break;
}
if(ii==6||((mode_kt)&&(ii>=3))){
if(flashBuf[0]&0x40) turnOn(3);
else turnOff(3);
}
}
/////////////////Thiet bi 4///////////////
jj=0;
if(flashBuf[0]&0b00001000){
for(ii=0;ii<6;ii++)
{
if(ii==3){ ii++;jj=1;}
if(time[ii]!=flashBuf[ii+19-jj]) break;
}
if(ii==6||((mode_kt)&&(ii>=3))){
if(flashBuf[0]&0x80) turnOn(4);
else turnOff(4);
}
}
}
}
void cai_dat_thiet_bi(unsigned char tb,unsigned char m){
//m:mode neu m=1:hen gio bat
//m=2:hen gio tat
//m=3:bat
//m=4:tat
//m=5:xem trang thai
switch (m){
case 1: flashBuf[0]|=(0x11<<(tb-1));
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
57 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
//flashBuf[0]=
// x x x x x x x x
// | | | | | | | |
// 4On/Off 3On/Off 2On/Off 1On/Off 4Set3Set2Set1Set
set_date();
for(i=0;i<3;i++)
flashBuf[6*(tb-1)+i+1]=time[i];
//bo qua byte chi ngay trong tuan(week day)
for(i=4;i<7;i++)
flashBuf[6*(tb-1)+i]=time[i];
write_flash();
break;
case 2: flashBuf[0]&=~(0x10<<(tb-1));
flashBuf[0]|=(0x01<<(tb-1));
set_date();
for(i=0;i<3;i++)
flashBuf[6*(tb-1)+i+1]=time[i];
for(i=4;i<7;i++)
flashBuf[6*(tb-1)+i]=time[i];
write_flash();
break;
case 3: turnOn(tb);break;
case 4: turnOff(tb);break;
case 5: xem_trang_thai(tb);break;
}
}
void turnOn(BYTE tbi){
PRT0DR&=~(0b00000001<<(2*tbi-2));
}
void turnOff(BYTE tbi){
PRT0DR|=(0b00000001<<(2*tbi-2));
}
//ham xem trang thai hen gio cua thiet bi
//ham nay se doc flashBuf[0] truoc de xac dinh tb nao co
hen gio va mode hen gio
///sau do se doc tiep gia tri hen gio va hien thi len LCD
void xem_trang_thai(BYTE tb){
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
//neu co cai dat
if((flashBuf[0]&0x0f)&(0x01<<(tb-1))){
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
58 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
for(i=0;i<3;i++)
time[i]=flashBuf[6*(tb-1)+i+1];
for(i=4;i<7;i++)
time[i]=flashBuf[6*(tb-1)+i];
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
display();
LCD_1_Position(0,0);
if(flashBuf[0]&(0x10<<(tb-1)))
LCD_1_PrCString("T.On");
else LCD_1_PrCString("T.Off");
LCD_1_Position(0,4);
LCD_1_PrHexByte(tb);
}
else {
LCD_1_Position(0,1);
LCD_1_PrCString("Chua cai dat");
}
while(!get_key());
}
//ham xoa cai dat, de xoa cai dat,chi can xoa byte
flash[0]
void xoa_cai_dat(){
flashBuf[0]=0;
write_flash();
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
LCD_1_Position(0,0);
LCD_1_PrCString("Nhan phim bat ki");
LCD_1_Position(1,1);
LCD_1_PrCString("de tiep tuc...");
while(!get_key());
}
///////////////////////////////////////////
void radio_init(){
PRT1DR|=0b01000000;//nPD chan nPD=1-> set high power
cho module 6935
delay();
delay(); //cho cho bo dao dong on dinh
PRT1DR&=0b11101111;// nRESET // reset module 6935
delay();
delay(); //cho cho module 6935 reset
PRT1DR|=0b00010000; // reset radio device
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
59 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
PRT1DR|=0b00100000; //nSS chan nSS set len 1
write_radio_reg(REG_CLOCK_MANUAL,0x41);
write_radio_reg(REG_CLOCK_ENABLE,0x41);
//ghi gia tri 0x41 den 2 thanh ghiREG_CLOCK_MANUAL
///va REG_CLOCK_ENABLE de module 6935 hoat dong dung (theo
datasheet)
write_radio_reg(REG_SERDES_CTL,7); //
}
void set_transmit_mode(){
write_radio_reg(REG_CONTROL,bTX_ENABLE|bPA_ENABLE);
//Chon che do truyen
// bTX_ENABLE = 0x40,bPA_ENABLE=0x04
write_radio_reg(REG_SERDES_CTL,bSERDES_ENABLE |
mEND_OF_FRAME_LEN); // chon che do SERDES va 7 EOF bits
write_radio_reg(REG_PA,mPA_BIAS); // chon de so kd
cong suat lon nhat
write_radio_reg(REG_VALID_TX,0xFF); //chon so bit
valid, ->0xFF->8bit valid
}
void set_receive_mode(){
write_radio_reg(REG_CONTROL,bRX_ENABLE); // chon che
do nhan
write_radio_reg(REG_SERDES_CTL,bSERDES_ENABLE |
mEND_OF_FRAME_LEN); //// chon che do SERDES va 7 EOF bits
write_radio_reg(REG_RX_INT_EN,bRX_FULL_A); // Set
RX interrupt: Full A
//->phai set de khi co du lieu bit 0 trong thanh ghi
trang thai->1
//write_radio_reg(REG_CONFIG,bIRQ_ACTIVE_LOW);
}
void send_byte(char x){
while( ! (SPIM_bReadStatus() &
SPIM_SPIM_TX_BUFFER_EMPTY ) );
//cho bo dem Empty (du lieu truoc do duoc truyen xong)
SPIM_SendTxData( x ); //gui byte x len bus spi
}
char read_byte(){
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
60 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
while( ! (SPIM_bReadStatus() & SPIM_SPIM_RX_BUFFER_FULL
) );
//cho bo dem nhan Full (du lieu duoc nhan du)
return SPIM_bReadRxData();
}
void write_radio_reg(char reg, char value){
PRT1DR&=0b11011111;//cho chan nSS=0
send_byte(0x80 | reg);//Qua trinh Write->bit 7=1
read_byte();
send_byte(value);
read_byte();
PRT1DR|=0b00100000;//nSS=1
}
char read_radio_reg(char reg){
char x;
PRT1DR&=0b11011111;//cho chan nSS=0
send_byte(reg);
read_byte();
send_byte(0);
x=read_byte();
PRT1DR|=0b00100000;//nSS=1
return x;
}
void display_all()
{
back1:
I2Cm_Start();
display_time();
kiem_tra_hen_gio(mode_kt);
if(get_key())
{
if(key==4)
{
set_date();
i2cBuf[0]=0;
for(i=0;i<8;i++)
i2cBuf[i+1]=time[i];
I2Cm_bWriteBytes(0x68,i2cBuf,9,I2Cm_CompleteXfer);
}
if(key==1)
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
61 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
{
back2: hien_thi_menu(menuchinh,5,0);
if(key==1)
{
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
goto back1;
}
else if(mode==4)
{
do
{
hien_thi_menu(menuthongtin,10,0);
}while(key!=1);
goto back2;
}
else if(mode==2)
{
xoa_cai_dat();
goto back2;
}
else if(mode==3)
{
mode_kt=1;
goto back2;
}
else ///mode==1
{
back3: hien_thi_menu(menucaidat,5,0);
if(key==1) goto back2;
else
{
thiet_bi=mode;
back4:
hien_thi_menu(menuthietbi,6,thiet_bi);
if(key==1) goto back3;
else
{
cai_dat_thiet_bi(thiet_bi,mode);
goto back4;
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
62 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
}
}
}
}
}
}
void receive_data_PC(){
for(i=0;i<25;i++)
{
while(!(read_radio_reg(REG_RX_INT_STAT)&1));
flashBuf[i]=read_radio_reg(REG_DATA_RX_A); //doc
25 byte hen gio tu may tinh
}
write_flash();
}
void update_time(){
i2cBuf[0]=0;
for(i=1;i<8;i++)
{
while(!(read_radio_reg(REG_RX_INT_STAT)&1));
i2cBuf[i]=read_radio_reg(REG_DATA_RX_A); //doc 7
byte gio he thong tu may tinh
}
i2cBuf[8]=0x10;
I2Cm_bWriteBytes(0x68,i2cBuf,9,I2Cm_CompleteXfer);//g
hi du lieu gio he thog vao DS1307
}
void send_data_PC(){
int kk;
set_transmit_mode();
for (kk=0;kk<100;kk++)
delay();//delay cho cho module wireless chuyen
sang che do truyen
write_radio_reg(REG_DATA_TX,PRT0DR);
for (kk=0;kk<100;kk++)
delay(); //cho module truyen xong 1 byte
for(i=0;i<25;i++)
{
// while (!(read_radio_reg(REG_TX_INT_STAT) & 1));
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
63 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
write_radio_reg(REG_DATA_TX,flashBuf[i]);
for (kk=0;kk<100;kk++)
delay();
}
/ set_receive_mode();
}
void send_status(){
int kk;
set_transmit_mode();
for (kk=0;kk<100;kk++)
delay();
write_radio_reg(REG_DATA_TX,PRT0DR);
for (kk=0;kk<100;kk++)
delay();
set_receive_mode();
}
void process_wusb_data(){
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
while(!(read_radio_reg(REG_RX_INT_STAT)&1));
bWUSB=read_radio_reg(REG_DATA_RX_A);//Doc byte
dau tien nhan tu may tinh
switch (bWUSB){
case 0xFE:
case 0xFD:
case 0xFC:
case 0xFB:turnOn(~bWUSB);break; //cac byte
lenh bat(on) thiet bi
case 0xFA:
case 0xF9:
case 0xF8:
case 0xF7:turnOff(~bWUSB-4);break;//cac byte
lenh tat thiet bi
case 0xFF:receive_data_PC();break;//Lenh
0xFF:may tinh truyen du lieu cai dat
case 0xF6:send_data_PC();break;//lenh 0xF6:
may tinh yeu cau truyen du lieu len
case 0xF5:update_time();break;//cap nhat gio
he thong tu may tinh
case 0xF4:send_status();break;//Lenh 0xF4:
may tinh yeu cau truyen trang thai cua cac thiet bi
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
64 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
}
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);
}
void main()
{
PRT0DR|=0xFF;//tát ca cac pin cua P0 set len 1
mode_kt=0;
LCD_1_Start(); //khoi dong module LCD
I2Cm_Start(); //khoi dog module I2C
LCD_1_Control(LCD_1_DISP_CLEAR_HOME);//Xoa man hinh
LCD
SPIM_Start(SPIM_SPIM_MODE_0 |
SPIM_SPIM_MSB_FIRST);//khoi dong module SPI, che do 0,
truyen MSB truoc
radio_init(); //khoi dong module wireless
set_receive_mode();//chon che do nhan
read_flash();//doc bo nho eeprom cua PSOC
while(1)
{
if((read_radio_reg(REG_RX_INT_STAT)&1))//doc
thanh ghi trang thai nhan
process_wusb_data(); //xu ly du lieu nhan
tu may tinh
display_all();//hien thi gio, kiem tra hen
gio,hien thi menu
}
}
5.2 Chƣơng trình VB:
Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class Form1
Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As
Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal
Value As Integer)
Dim data As Integer
Dim Status As Integer
Const SCK = 0 ' SCK
Const MO = 1 ' DO (MOSI)
Const nSS = 3 ' CS
Const nPD = 2 'nPD
Const nRESET = 4
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
65 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Const D5 = 5
Const D6 = 6
Const D7 = 7
Const DI = 7 'DI (MISO)
Dim dataout As Integer
Dim receive(25) As Integer
Dim transmit(25) As Integer
Dim LEDstatus As Byte = &HFF
Dim timeout As Boolean
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
ComboBox17.SelectedIndex = 0
ComboBox13.SelectedIndex = 0
ComboBox14.SelectedIndex = 0
ComboBox15.SelectedIndex = 0
ComboBox16.SelectedIndex = 0
data = &H378
Status = &H379
PictureBox1.Image =
WindowsApplication6vb.My.Resources.ledoff
PictureBox2.Image =
WindowsApplication6vb.My.Resources.ledoff
PictureBox3.Image =
WindowsApplication6vb.My.Resources.ledoff
PictureBox4.Image =
WindowsApplication6vb.My.Resources.ledoff
WUSB_Init()
Set_Transmit_Mode()
Timer2.Interval = 3000
Timer2.Enabled = True
End Sub
Private Sub setbit(ByVal port As Integer, ByVal bit As
Integer)
Dim data1 As Integer
data1 = Inp(port)
data1 = data1 Or (2 ^ bit)
Out(port, data1)
End Sub
Private Sub ClrBit(ByVal port As Integer, ByVal bit As
Integer)
Dim data1 As Integer
data1 = Inp(port)
data1 = data1 And (Not (2 ^ bit))
Out(port, data1)
End Sub
Private Function readbit(ByVal port As Integer, ByVal
bit As Integer) As Boolean
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
66 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Dim data1 As Integer
data1 = Inp(port)
If (data1 And (2 ^ bit)) Then
Return False 'Doc du lieu tu Chan BUSY -> dao
bit
Else
Return True
End If
End Function
Private Sub SendByteSPI(ByVal dat As Integer)
Dim i As Integer
setbit(data, D5)
ClrBit(data, SCK)
For i = 0 To 7
If (dat And (2 ^ (7 - i))) Then
setbit(data, MO)
Else
ClrBit(data, MO)
End If
setbit(data, SCK)
ClrBit(data, SCK)
ClrBit(data, D5)
Next
End Sub
Private Function readbyteSPI() As Integer
Dim i, dat As Integer
dat = 0
setbit(data, D5) 'cho LED báo hiệu sáng
ClrBit(data, SCK)
For i = 0 To 7
setbit(data, SCK)
If readbit(Status, DI) Then
dat = dat Xor (2 ^ (7 - i)) 'đọc MSB trước
End If
ClrBit(data, SCK)
Next
ClrBit(data, D5)
Return dat
End Function
Private Sub Write_WUSB_REG(ByVal reg As Integer, ByVal
value As Integer)
ClrBit(data, nSS) 'chan nSS=0
SendByteSPI(&H80 Or reg) 'qua trinh ghi du lieu ->
bit MSB =1
SendByteSPI(value)
setbit(data, nSS)
ClrBit(data, SCK)
ClrBit(data, MO)
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
67 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
End Sub
Private Function Read_WUSB_REG(ByVal reg As Integer)
As Integer
Dim value As Integer
ClrBit(data, SCK)
ClrBit(data, nSS)
SendByteSPI(reg)
value = readbyteSPI()
setbit(data, nSS)
ClrBit(data, SCK)
Return value
End Function
Private Sub WUSB_Init()
setbit(data, nPD)
System.Threading.Thread.Sleep(1)
ClrBit(data, nRESET)
System.Threading.Thread.Sleep(1)
setbit(data, nRESET)
setbit(data, nSS)
System.Threading.Thread.Sleep(1)
Write_WUSB_REG(&H33, &H41) 'REG_CLOCK_MANUAL =
0x33
Write_WUSB_REG(&H32, &H41) 'REG_CLOCK_ENABLE
0x32
Write_WUSB_REG(&H6, &HF) 'REG_SERDES_CTL
0x06
End Sub
Private Sub Set_Transmit_Mode()
'Set chế độ truyền
Write_WUSB_REG(&H3, &H44) 'REG_CONTROL 0x03;
(chọn chế độ truyền, và bộ khuêch đại bên trong chip)
'Write_WUSB_REG(&H33,
&H41)'write_radio_reg(REG_SERDES_CTL,bSERDES_ENABLE |
mEND_OF_FRAME_LEN);
' Write_WUSB_REG(&H6, &HF)
'Set he so khuech dai cong suat lon nhat
Write_WUSB_REG(&H23, &H7) 'REG_PA 0x23;mPA_BIAS
0x07
'set so bit valid trong thanh ghi REG_SERDES
Write_WUSB_REG(&H10, &HFF) 'REG_VALID_TX 0x10
End Sub
Private Sub Set_Receive_Mode()
'Set chế độ nhận
Write_WUSB_REG(&H3, &H80) 'REG_CONTROL
0x03,bRX_ENABLE 0x80
Write_WUSB_REG(&H6, &HF)
'write_radio_reg(REG_SERDES_CTL,bSERDES_ENABLE |
mEND_OF_FRAME_LEN);
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
68 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
'REG_RX_INT_EN 0x07,bRX_FULL_A
0x01
Write_WUSB_REG(&H7, &H1)
'REG_CONFIG 0x05
Write_WUSB_REG(&H5, &H0)
'write_radio_reg(REG_RX_INT_EN,bRX_FULL_A);
'write_radio_reg(REG_CONFIG,bIRQ_ACTIVE_LOW);
End Sub
Private Function ConverttoBCD(ByVal deci As Integer)
As Integer
Return ((deci \ 10) * 16 + (deci Mod 10))
End Function
Private Sub UpdateLed()
LEDstatus = (Not receive(0)) And &HFF
If (LEDstatus And &H1) = 1 Then
PictureBox1.Image =
WindowsApplication6vb.My.Resources.ledon
LEDstatus = LEDstatus And &HFE
ElseIf (LEDstatus And &H1) = 0 Then
PictureBox1.Image =
WindowsApplication6vb.My.Resources.ledoff
LEDstatus = LEDstatus Or &H1
End If
If (LEDstatus And &H4) = 4 Then
PictureBox2.Image =
WindowsApplication6vb.My.Resources.ledon
LEDstatus = LEDstatus And &HFB
ElseIf (LEDstatus And &H4) = 0 Then
PictureBox2.Image =
WindowsApplication6vb.My.Resources.ledoff
LEDstatus = LEDstatus Or &H4
End If
If (LEDstatus And &H10) = &H10 Then
PictureBox3.Image =
WindowsApplication6vb.My.Resources.ledon
LEDstatus = LEDstatus And &HEF
ElseIf (LEDstatus And &H10) = 0 Then
PictureBox3.Image =
WindowsApplication6vb.My.Resources.ledoff
LEDstatus = LEDstatus Or &H10
End If
If (LEDstatus And &H40) = &H40 Then
PictureBox4.Image =
WindowsApplication6vb.My.Resources.ledon
LEDstatus = LEDstatus And &HBF
ElseIf (LEDstatus And &H40) = 0 Then
PictureBox4.Image =
WindowsApplication6vb.My.Resources.ledoff
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
69 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
LEDstatus = LEDstatus Or &H40
End If
End Sub
Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Timer2.Enabled = False
Dim i As Integer
Write_WUSB_REG(&HF, &HFF) 'lenh truyen du lieu
hen gio
System.Threading.Thread.Sleep(5)
For i = 0 To 24
Write_WUSB_REG(&HF, transmit(i))
System.Threading.Thread.Sleep(5)
Next i
Timer2.Enabled = True
End Sub
Private Sub UpdateStatus()
If (receive(1) And &H1) Then
If (receive(1) And &H10) Then
Label1.Text = "Giờ bật"
Else
Label1.Text = "Giờ tắt"
End If
Label2.Text = receive(5).ToString() + "/" +
receive(6).ToString() + "/" + receive(7).ToString()
Label3.Text = receive(4).ToString() + ":" +
receive(3).ToString() + ":" + receive(2).ToString()
Else
Label1.Text = "Chưa cài đặt"
Label2.Text = ""
Label3.Text = ""
End If
If (receive(1) And &H2) Then
If (receive(1) And &H20) Then
Label4.Text = "Giờ bật"
Else
Label4.Text = "Giờ tắt"
End If
Label5.Text = receive(11).ToString() + "/" +
receive(12).ToString() + "/" + receive(13).ToString()
Label6.Text = receive(10).ToString() + ":" +
receive(9).ToString() + ":" + receive(8).ToString()
Else
Label4.Text = "Chưa cài đặt"
Label5.Text = ""
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
70 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Label6.Text = ""
End If
If (receive(1) And &H4) Then
If (receive(1) And &H40) Then
Label7.Text = "Giờ bật"
Else
Label7.Text = "Giờ tắt"
End If
Label8.Text = receive(17).ToString() + "/" +
receive(18).ToString() + "/" + receive(19).ToString()
Label9.Text = receive(16).ToString() + ":" +
receive(15).ToString() + ":" + receive(14).ToString()
Else
Label7.Text = "Chưa cài đặt"
Label8.Text = ""
Label9.Text = ""
End If
If (receive(1) And &H8) Then
If (receive(1) And &H80) Then
Label10.Text = "Giờ bật"
Else
Label10.Text = "Giờ tắt"
End If
Label11.Text = receive(23).ToString() + "/" +
receive(24).ToString() + "/" + receive(25).ToString()
Label12.Text = receive(22).ToString() + ":" +
receive(21).ToString() + ":" + receive(20).ToString()
Else
Label10.Text = "Chưa cài đặt"
Label11.Text = ""
Label12.Text = ""
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Timer1.Tick
timeout = True
'MessageBox.Show("Lỗi truyền dữ liệu, kiểm tra kết
nối", "Timeout Error", MessageBoxButtons.OK)
Timer1.Enabled = False
End Sub
Private Sub Button2_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button2.Click
Timer2.Enabled = False
Dim k As Integer
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
71 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Write_WUSB_REG(&HF, &HF6) 'gui yeu cau truyen du
lieu len may tinh
System.Threading.Thread.Sleep(4)
Set_Receive_Mode()
timeout = False
Timer1.Interval = 3000
Timer1.Enabled = True
While True
Application.DoEvents()
'REG_TX_INT_STAT 0x0e
'REG_RX_INT_STAT 0x08
'REG_DATA_RX_A 0x09
If (Read_WUSB_REG(&H8) And 1) Then
receive(k) = Read_WUSB_REG(&H9)
If k > 1 Then
'chuyen doi tu byte thu 3
receive(k) = (receive(k) \ 16) * 10 +
(receive(k) Mod 16)
End If
k = k + 1
End If
If (k = 26) Then
Exit While
End If
If (timeout = True) Then
MessageBox.Show("Lỗi truyền dữ liệu, kiểm
tra kết nối", "Timeout Error", MessageBoxButtons.OK)
Exit While
End If
End While
If timeout = False Then
UpdateLed()
UpdateStatus()
End If
Timer1.Enabled = False
Set_Transmit_Mode()
Timer2.Enabled = True
End Sub
Private Sub Button3_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button3.Click
Timer2.Enabled = False 'disable Timer2 ()
WUSB_Init()
setbit(data, D5)
Set_Transmit_Mode()
Timer2.Enabled = True
End Sub
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
72 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Private Sub updateBtn_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
updateBtn.Click
Timer2.Enabled = False
Dim currentTime As System.DateTime =
System.DateTime.Now
Write_WUSB_REG(&HF, &HF5)
System.Threading.Thread.Sleep(5)
Write_WUSB_REG(&HF, ((currentTime.Second() \ 10) *
16 + (currentTime.Second() Mod 10)))
System.Threading.Thread.Sleep(5)
Write_WUSB_REG(&HF, ((currentTime.Minute() \ 10) *
16 + (currentTime.Minute() Mod 10)))
System.Threading.Thread.Sleep(5)
Write_WUSB_REG(&HF, ((currentTime.Hour() \ 10) *
16 + (currentTime.Hour() Mod 10)))
System.Threading.Thread.Sleep(5)
Write_WUSB_REG(&HF, ((currentTime.DayOfWeek() \
10) * 16 + (currentTime.DayOfWeek() Mod 10)))
System.Threading.Thread.Sleep(5)
Write_WUSB_REG(&HF, ((currentTime.Day() \ 10) * 16
+ (currentTime.Day() Mod 10)))
System.Threading.Thread.Sleep(5)
Write_WUSB_REG(&HF, ((currentTime.Month() \ 10) *
16 + (currentTime.Month() Mod 10)))
System.Threading.Thread.Sleep(5)
Write_WUSB_REG(&HF, (((currentTime.Year() And &HF)
\ 10) * 16 + ((currentTime.Year() And &HF) Mod 10)))
System.Threading.Thread.Sleep(5)
Timer2.Enabled = True
End Sub
Private Sub Button4_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button4.Click
End
End Sub
Private Sub PictureBox1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
PictureBox1.Click
Timer2.Enabled = False
If (LEDstatus And &H1) = 1 Then 'neu bit thu 1 cua
LEDstatus bang 1 (LED dang tat) thi gui lenh bat LED 1
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
73 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
PictureBox1.Image =
WindowsApplication6vb.My.Resources.ledon
Write_WUSB_REG(&HF, &HFE)
LEDstatus = LEDstatus And &HFE
ElseIf (LEDstatus And &H1) = 0 Then 'Neu LED dang
bat ->tat LED
PictureBox1.Image =
WindowsApplication6vb.My.Resources.ledoff
Write_WUSB_REG(&HF, &HFA)
LEDstatus = LEDstatus Or &H1
End If
Timer2.Enabled = True
End Sub
Private Sub PictureBox2_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
PictureBox2.Click
Timer2.Enabled = False
If (LEDstatus And &H4) = 4 Then 'Neu bit thu 4 cua
LEDstatus = 1 ->bat LED 2 (do LED 1,2,3,4 noi toi
P0.0,P0.2,P0.4)
PictureBox2.Image =
WindowsApplication6vb.My.Resources.ledon
Write_WUSB_REG(&HF, &HFD)
LEDstatus = LEDstatus And &HFB
ElseIf (LEDstatus And &H4) = 0 Then
PictureBox2.Image =
WindowsApplication6vb.My.Resources.ledoff
Write_WUSB_REG(&HF, &HF9)
LEDstatus = LEDstatus Or &H4
End If
Timer2.Enabled = True
End Sub
Private Sub PictureBox3_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
PictureBox3.Click
Timer2.Enabled = False
If (LEDstatus And &H10) = &H10 Then
PictureBox3.Image =
WindowsApplication6vb.My.Resources.ledon
Write_WUSB_REG(&HF, &HFC)
LEDstatus = LEDstatus And &HEF
ElseIf (LEDstatus And &H10) = 0 Then
PictureBox3.Image =
WindowsApplication6vb.My.Resources.ledoff
Write_WUSB_REG(&HF, &HF8)
LEDstatus = LEDstatus Or &H10
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
74 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
End If
Timer2.Enabled = True
End Sub
Private Sub PictureBox4_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
PictureBox4.Click
Timer2.Enabled = False
If (LEDstatus And &H40) = &H40 Then
PictureBox4.Image =
WindowsApplication6vb.My.Resources.ledon
Write_WUSB_REG(&HF, &HFB)
LEDstatus = LEDstatus And &HBF
ElseIf (LEDstatus And &H40) = 0 Then
PictureBox4.Image =
WindowsApplication6vb.My.Resources.ledoff
Write_WUSB_REG(&HF, &HF7)
LEDstatus = LEDstatus Or &H40
End If
Timer2.Enabled = True
End Sub
Private Sub CheckBox1_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
CheckBox1.CheckedChanged
If CheckBox1.Checked Then
transmit(0) = transmit(0) Or &H1
Else
transmit(0) = transmit(0) And (Not &H1)
End If
End Sub
Private Sub CheckBox2_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
CheckBox2.CheckedChanged
If CheckBox2.Checked Then
transmit(0) = transmit(0) Or &H2
Else
transmit(0) = transmit(0) And (Not &H2)
End If
End Sub
Private Sub CheckBox3_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
CheckBox3.CheckedChanged
If CheckBox3.Checked Then
transmit(0) = transmit(0) Or &H4
Else
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
75 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
transmit(0) = transmit(0) And (Not &H4)
End If
End Sub
Private Sub CheckBox4_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
CheckBox4.CheckedChanged
If CheckBox4.Checked Then
transmit(0) = transmit(0) Or &H8
Else
transmit(0) = transmit(0) And (Not &H8)
End If
End Sub
Private Sub ComboBox13_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox13.SelectedIndexChanged
If ComboBox13.SelectedIndex() = 0 Then
transmit(0) = transmit(0) Or &H10
ElseIf ComboBox13.SelectedIndex() = 1 Then
transmit(0) = transmit(0) And (Not &H10)
End If
End Sub
Private Sub ComboBox15_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox15.SelectedIndexChanged
If ComboBox15.SelectedIndex() = 0 Then
transmit(0) = transmit(0) Or &H20
ElseIf ComboBox15.SelectedIndex() = 1 Then
transmit(0) = transmit(0) And (Not &H20)
End If
End Sub
Private Sub ComboBox14_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox14.SelectedIndexChanged
If ComboBox14.SelectedIndex() = 0 Then
transmit(0) = transmit(0) Or &H40
ElseIf ComboBox14.SelectedIndex() = 1 Then
transmit(0) = transmit(0) And (Not &H40)
End If
End Sub
Private Sub ComboBox16_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox16.SelectedIndexChanged
If ComboBox16.SelectedIndex() = 0 Then
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
76 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
transmit(0) = transmit(0) Or &H80
ElseIf ComboBox16.SelectedIndex() = 1 Then
transmit(0) = transmit(0) And (Not &H80)
End If
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox1.SelectedIndexChanged
transmit(3) =
ConverttoBCD(ComboBox1.SelectedIndex)
End Sub
Private Sub DateTimePicker1_Validated(ByVal sender As
Object, ByVal e As System.EventArgs) Handles
DateTimePicker1.Validated
transmit(4) =
ConverttoBCD(DateTimePicker1.Value.Day())
transmit(5) =
ConverttoBCD(DateTimePicker1.Value.Month())
transmit(6) =
ConverttoBCD(DateTimePicker1.Value.Year() And &HF)
End Sub
Private Sub DateTimePicker2_Validated(ByVal sender As
Object, ByVal e As System.EventArgs) Handles
DateTimePicker2.Validated
transmit(10) =
ConverttoBCD(DateTimePicker2.Value.Day())
transmit(11) =
ConverttoBCD(DateTimePicker2.Value.Month())
transmit(12) =
ConverttoBCD(DateTimePicker2.Value.Year() And &HF)
End Sub
Private Sub DateTimePicker4_Validated(ByVal sender As
Object, ByVal e As System.EventArgs) Handles
DateTimePicker4.Validated
transmit(16) =
ConverttoBCD(DateTimePicker4.Value.Day())
transmit(17) =
ConverttoBCD(DateTimePicker4.Value.Month())
transmit(18) =
ConverttoBCD(DateTimePicker4.Value.Year() And &HF)
End Sub
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
77 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Private Sub DateTimePicker3_Validated(ByVal sender As
Object, ByVal e As System.EventArgs) Handles
DateTimePicker3.Validated
transmit(22) =
ConverttoBCD(DateTimePicker3.Value.Day())
transmit(23) =
ConverttoBCD(DateTimePicker3.Value.Month())
transmit(24) =
ConverttoBCD(DateTimePicker3.Value.Year() And &HF)
End Sub
Private Sub ComboBox3_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox3.SelectedIndexChanged
transmit(1) =
ConverttoBCD(ComboBox3.SelectedIndex)
End Sub
Private Sub ComboBox2_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox2.SelectedIndexChanged
transmit(2) =
ConverttoBCD(ComboBox2.SelectedIndex)
End Sub
Private Sub ComboBox4_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox4.SelectedIndexChanged
transmit(7) =
ConverttoBCD(ComboBox4.SelectedIndex)
End Sub
Private Sub ComboBox5_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox5.SelectedIndexChanged
transmit(8) =
ConverttoBCD(ComboBox5.SelectedIndex)
End Sub
Private Sub ComboBox6_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox6.SelectedIndexChanged
transmit(9) =
ConverttoBCD(ComboBox6.SelectedIndex)
End Sub
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
78 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Private Sub ComboBox7_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox7.SelectedIndexChanged
transmit(13) =
ConverttoBCD(ComboBox7.SelectedIndex)
End Sub
Private Sub ComboBox8_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox8.SelectedIndexChanged
transmit(14) =
ConverttoBCD(ComboBox8.SelectedIndex)
End Sub
Private Sub ComboBox9_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox9.SelectedIndexChanged
transmit(15) =
ConverttoBCD(ComboBox9.SelectedIndex)
End Sub
Private Sub ComboBox10_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox10.SelectedIndexChanged
transmit(19) =
ConverttoBCD(ComboBox10.SelectedIndex)
End Sub
Private Sub ComboBox11_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox11.SelectedIndexChanged
transmit(20) =
ConverttoBCD(ComboBox11.SelectedIndex)
End Sub
Private Sub ComboBox12_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox12.SelectedIndexChanged
transmit(21) =
ConverttoBCD(ComboBox12.SelectedIndex)
End Sub
Private Sub ComboBox17_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles ComboBox17.SelectedIndexChanged
If ComboBox17.SelectedIndex = 0 Then
data = &H378
Status = &H379
ElseIf ComboBox17.SelectedIndex = 1 Then
data = &H278
Status = &H279
End If
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
79 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Timer2.Tick
Dim count As Integer
back1:
Timer2.Enabled = False
Write_WUSB_REG(&HF, &HF4) 'gui yeu cau truyen du
lieu len may tinh
System.Threading.Thread.Sleep(4)
timeout = False
Timer1.Interval = 3000
Timer1.Enabled = True
Set_Receive_Mode()
While True
Application.DoEvents()
'REG_RX_INT_STAT 0x08
''REG_DATA_RX_A 0x09
count = count + 1
If (Read_WUSB_REG(&H8) And 1) Then
receive(0) = Read_WUSB_REG(&H9)
Exit While
End If
If (timeout = True) Then
Timer2.Enabled = False
Exit While
End If
If count = 10 Then
GoTo back1
End If
End While
If timeout = False Then
UpdateLed()
End If
Timer1.Enabled = False
Set_Transmit_Mode()
Timer2.Enabled = True
End Sub
Private Sub StartToolStripMenuItem_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
StartToolStripMenuItem.Click
Button3.PerformClick()
End Sub
Private Sub ExitToolStripMenuItem_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
ExitToolStripMenuItem.Click
Close()
End Sub
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
80 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Private Sub SeToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
SeToolStripMenuItem.Click
Button1.PerformClick()
End Sub
Private Sub AboutToolStripMenuItem_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
AboutToolStripMenuItem.Click
MessageBox.Show("Chương trình điều khiển giám sát
thiết bị điện qua cổng Parallel" & vbNewLine & "Thực hiện:
Nhóm 1 - Lớp 04DT2" & vbNewLine & _
"Thành Viên Nhóm 1:" & vbNewLine & _
" Nguyễn Ngọc Nhân" & vbNewLine & _
" Đặng Vân Khánh" & vbNewLine & _
" Lê Văn Sanh" & vbNewLine & _
" Nguyễn Đức Khoa" & vbNewLine & _
" Nguyễn Trọng Trí" & vbNewLine & _
" Đinh Hoàng Cẩm Lệ" & vbNewLine & _
" Nguyễn Thị Hoàng Oanh" & vbNewLine & _
" Nguyễn Việt Trung" & vbNewLine & _
" Thongsoul Sengchaleung", "About",
MessageBoxButtons.OK)
End Sub
Private Sub CậpNhậtToolStripMenuItem_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles CậpNhậtToolStripMenuItem.Click
updateBtn.PerformClick()
End Sub
Private Sub NhậnDữLiệuToolStripMenuItem_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles NhậnDữLiệuToolStripMenuItem.Click
Button2.PerformClick()
End Sub
Private Sub HelpToolStripMenuItem1_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
HelpToolStripMenuItem1.Click
Form2.Show()
End Sub
Private Sub Timer3_Tick(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Timer3.Tick
Me.Text = "Paralel Port - " + Now.ToString()
End Sub
End Class
Các file đính kèm theo tài liệu này:
- Giám sát, điều khiển thiết bị điện qua cổng parallel dùng wireles.pdf