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ẻ: lethao | Lượt xem: 2011 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Giám sát, điều khiển thiết bị điện qua cổng song song dùng wireless, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
PARALLEL DÙNG WIRELESS
3.1.4. Giới thiêu DS1307
Sơ đồ nguyên lí của mach tạo xung đồng hồ:
Giơi thiệu các chân và dạng tín hiệu tại đó:
Vcc, GND – Nguôn DC cung cấp năng lượng cho DS1307 được đưa vào các
chân này. Nguồn Vcc +5V được đưa vào. Khi nguồn Vcc thấp hơn V_BAT thì sẽ tự
động ngắt Vcc chuyển sang V_BAT.
V_BAT – Sử dụng nguôn Pin 3V đề phòng mất điện và sụt áp Vcc.
SCL(Serial Clock Input) – SCL sử dụng đồng bộ di chuyển dữ liệu trên giao
tiếp nối tiếp.
SDA(Serial Data Input/Output) – SDA là chân input/output cho giao tiếp I2C.
SQW/OUT (Square Ware/Output Driver) – Khi được phép SQWE bit to 1,
Chân SQW/OUT có thể cho ra dang xung (1Hz, 4kHZ, 8kHz, 32kHz). Các chế độ này
được quy đinh bởi các bit của thanh ghi Control
Registers
X1, X2 – Kết nối dao động thạch anh 32.768
kHz
RTC và sơ đồ địa chỉ RAM
Thanh ghi RTC được xác định trong địa chỉ từ
00h tới 07h. RAM chứa đia chỉ từ 08h tới 3Fh.
Đồng hồ và lịch:
Thông tin thời gian và lịch được thu dược
bằng cách đọc các bytes trong thanh ghi RTC. Thời gian và lịch đuợc thiết lập hoăc từ
SCL
SDA
SQW
Y1
CRYSTAL
VBAT
5V
5V
J11
CON2
1
2
R2
2k2
R3
2k2
R18
RESISTOR
GND
D9
LED
5V
5V
U2
DS1307
SQW/OUT
7
SDA
5
X1
1
X2
2
SCL
6
VBAT
3
VCC
8
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
32 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
máy tính và dược ghi vào thanh ghi RTC. Nội dung của thời gian và lịch được trong
thanh ghi được định dạng BCD. Bit 7 của thanh ghi 0 gọi là bit dừng đồng hồ. Khi bit
được thiết lập băng 1, thì oscillator được ngắt. Khi xoá về 0, oscillator được mở.
DS1307 có thế hoạt động ở chế độ 12 giờ hoặc 24 giờ. Bit 6 của thanh ghi giờ
được định nghĩa là chọn chế độ 12- hoặc 24h bằng cách chọn bit. Khi cao, 12 h được
chọn. Trong chế độ 12h, bit 5 là AM/PM bit với mức logic cao sẽ trở thành PM.
Thanh ghi điều khiển:
Thanh ghi điều khiển của DS1307 được sử dụng để điều khiền hoạt động của
chân SQW/OUT
OUT (Output control): Đây là bit điều khiển mức ra của chân SQW/OUT khi
dạng sóng vuông bị ngắt. Nếu SQWE=0, mức logic mở của chân SQW/OUT là 1 và 0
nếu OUT=0.
SQWE (Square Wave Enable): Đây là bit, khi ở mức logic 1, sẽ cho phép
oscillator output. Tần số của dạng sóng vuông output được thiết lập bởi bit RS0 và
RS1.
RS ( Rate Select): Đây là bit điều khiển tần số của dạng sóng ra hình vuông khi
sóng vuông được mở. Bảng dưới đây là list các tần số dạng sóng vuông được chợn với
các bit RS
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
33 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Sơ đồ điển hình của 2-wire bus:
Dạng sóng trên bus I2C:
Quá trình truyền dữ liệu từ Master tới slave :
- Gửi địa chỉ của slave lên đương truyền. Dùng để chọn Slave nào hoạt
động, đợi cho đến khi truyền xong
- Gửi sô byte của dữ liệu. Đợi cho đến khi truyền xong
- Slave sẽ gửi lại ACK bit sau mỗi byte nhân được.
- Dữ liệu truyền với bit (MSB) đầu tiên cực kì quan trọng.
Quá trình truyền dữ liệu từ slave tới master.
- Gưi địa chỉ của slave được truyền bởi master.
- Slave sẽ gưi lại ACK bit.
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
34 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
- Tiếp theo slave truyền số byte của dữ liệu
- Master sẽ gửi lại ACK bit sau khi nhận một byte dữ liệu
- Tại byte nhận cuối cùng , sẽ gui “ not ACK”
Thiết bị master phát tất cả xung serial clock, START và STOP condition. Quá trình
truyền dữ liệu sẽ được bắt đầu với START condition và kết thúc với STOP condition.
Dữ liệu truyền với bit MSB đầu tiên.
DS1307 có thể hoạt động theo hai chế độ:
- Slave receiver (DS1307 write mode): Serial data và clock được nhận từ SDA và
SCL. Sau mỗi byte nhận được sẽ truyền ACK bit. START và STOP condition được
công nhận là bắt đầu và kết thúc của truyền nối tiếp. Byte địa chỉ là byte đầu tiên
sau khi nhận được sau start condition và được phát bởi master. Byte địa chỉ của
DS1307 có 7 bit đó là 1101000, tiếp theo là bit (R/W), với quá trình write thì bit
R/W bằng 0. Sau khi nhận và giải mã thì thiết bị sẽ xuất ra bit ACK trên đường
SDA . Master sẽ truyền thanh ghi địa chỉ tới DS1307, điều đó sẽ thiết lập register
pointer trên DS1307. Master sẽ bắt đầu phát mỗi byte của dữ liệu và DS1307 sẽ
phát lại ACK sau mỗi byte nhận được. Master sẽ phát bit STOP condition sau khi
kết thúc việc viết dữ liệu.
- Slave transmitter mode (DS1307 read mode): Byte địa chỉ là byte đầu tiên nhận
sau sau START condition và được phát bởi master. Byte địa chỉ của DS1307 có 7-
bit địa chỉ, đó là 1101000, sau đó là bit (R/W) vơi read thì bit co giá trị 1. Sau khi
nhận và giải mã byte địa chỉ thiết bị sẽ nhận được ACK trên đường SDA. DS1307
truyền dữ liệu bắt đầu với con trỏ thanh ghi địa chỉ tới con trỏ thanh ghi. DS1307 sẽ
nhận được “not acknowledge” là kết thúc việc đọc.
3.2. Sơ đồ mạch và nguyên lý hoạt động:
3.2.1 Mạch điều khiển thiết bị:
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
35 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
M
IS
O
R23
RESISTOR SIP 9
1
2 3 4 5 6 7 8 9
S
D
A
5V
nS
S
D1
LED
SCL
D2
LED
LS1
RELAY SPDT
3
5
4
1
2
D3
LED
D4
LED
J10
CON2
1
2
LCD_D5
5V
12V
3V3
nRESET
nSS
MISO
J6
CON2
1
2
nPD
GND
IRQ
5V
LCD_D7
MOSI
Q5
NPN BCE
SCK
R19
RESISTOR
R20
RESISTOR
5V
D10
3V9
LCD_RS
R13
RESISTOR
R17
RESISTOR
R15
RESISTOR
SCL
5V
SQW
Y1
CRYSTAL
VBAT
D5
DIODE
D6
DIODE
C4
CAP
5V
D7
DIODE
C5
CAP
D8
DIODE
12VLC
D
_D
7
LC
D
_D
6
5V
G
N
D
SW4
CY29566
U4
CY29566
P2[5]
1
P2[3]
2
P2[1]
3
P4[7]
4
P4[5]
5
P4[3]
6
P4[1]
7
SMP
8
P3[7]
9
P3[5]
10
P3[3]
11
P
3[
1]
12
P
1[
7]
13
P
1[
5]
14
P
1[
3]
15
P
1[
1]
16
V
S
S
17
P
1[
0]
18
P
1[
2]
19
P
1[
4]
20
P
1[
6]
21
P
3[
0]
22
P3[2]
23P3[4]
24P3[6]
25XRES
26P4[0]
27P4[2]
28P4[4]
29P4[6]
30P2[0]
31P2[2]
32P2[4]
33P
2[
6]
34
P
0[
0]
35
P
0[
2]
36
P
0[
4]
37
P
0[
6]
38
V
D
D
39
P
0[
7]
40
P
0[
5]
41
P
0[
3]
42
P
0[
1]
43
P
2[
7]
44
Q2
NPN BCE
Q3
NPN BCE
Q4
NPN BCE
T
B
1
LC
D
_W
R
LC
D
_E
LS3
RELAY SPDT
3
5
4
1
2
U3
LM7805C/TO220
IN
1
OUT
3
G
N
D
2
T
B
2
LS4
RELAY SPDT
3
5
4
1
2
LS2
RELAY SPDT
3
5
4
1
2
T
B
3
ISO1
OPTO ISOLATOR-A
1
2
4
3
LC
D
_R
S
S
W
4
T
B
4
ISO2
OPTO ISOLATOR-A
1
2
4
3
ISO3
OPTO ISOLATOR-A
1
2
4
3
12V
LC
D
_D
4
ISO4
OPTO ISOLATOR-A
1
2
4
3
S
W
3
LC
D
_D
5
3V3
S
W
2
LCD_D4
G
N
D
S
W
1
12V
12V
5V
nP
D
R8 330
J7
CON2
1
2
C1
CAP
nR
E
S
E
T
J8
CON2
1
2
R9 330
J9
CON2
1
2
C2
CAP
R10 330
IR
Q
R11 330
C3
CAP
J11
CON2
1
2
R2
2k2
R21
2k2
R3
2k2
R18
RESISTOR
GND
LCD_D6
R22
2k2
D9
LED
5V
5V
LCD_E
5V
MOSI
SW1
SW1
SW2
SW3
SW4
R16
RESISTOR
LC
D
_W
R
5V
SW2
12V
SCK
Q1
NPN BCE
CYWUSB6935
J4
CON12A
1
3
5
7
9
11
2
4
6
8
10
12
TB3
TB4
TB1
TB2
J5
CON16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
SW3
U2
DS1307
SQW/OUT
7
SDA
5
X1
1
X2
2
SCL
6
VBAT
3
VCC
8
5V
Mạch điều khiển thiết bị gồm các phần:
- VDK PSOC bộ điều khiển trung tâm
- DS1307: RTC đồng hồ thời gian thực.
- LCD 16x2: hiển thị
- Module Wireless CYWUSB 6935
- Bàn phím gồm 4 nút nhấn để điều khiển
- Mạch Ổn áp 5V và 3.3V
- Mạch điều khiển relay
3.2.2 Mạch giao tiếp máy tính:
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
36 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
SCK
Q6
NPN BCE
D11
LED
R23
RESISTOR
5V
R24
RESISTOR
nRESET
3V3
MISO
nSS
IRQ
GND
nPD
CYWUSB6935
J4
CON12A
1
3
5
7
9
11
2
4
6
8
10
12
Q5
NPN BCE
R19
RESISTOR
R20
RESISTOR
D10
3V9
C4
CAP
C5
CAP
3V3
5V
J5
CON2
1
2
J6
CON10
1
2
3
4
5
6
7
8
9
10
R21
2k2
R22
2k2
GND
D5
D4 nRESET
nSSD3
BS MISO
nPDD2
IRQ
D1 MOSI
D0 SCK
MOSI
Module CYWUSB được nối trực tiếp tới các chân của cổng song song theo so đồ trên.
3.3 Lƣu đồ thuật toán:
3.3.1 Chƣơng trình chính:
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
37 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Giải thích:
- Khởi tạo hệ thống: sẽ khởi tạo các module cần thiêt, bao gồm:
o Khởi tạo LCD
o Khởi tạo I2C
o Khởi tạo SPI.
o Khởi tạo module Wireless
o Set chế độ nhận cho Wireless
o Đọc giá trị cài đặt hẹn giờ từ Flash
- Việc kiểm tra dữ liệu từ Wireless được thực hiện bằng cách đọc giá trị trong
thanh ghi trạng thái của Wireless Module. (REG_RX_INT_STAT)
- Đọc DS1307 và hiển thị LCD dùng ham API của module I2Cm và LCD, các
hàm API này do PSOC Designer cung cấp.
Begin
Khởi tạo hệ thống
Có data từ
wireless
Thực hiện lênh
từ máy tính
Đọc DS1307,
hiển thị thời gian
Có hẹn giờ
Có phím
nhấn
Điều khiển
thiết bị
Thực hiện chương
trình cài đặt
Y
N
Y
Y
N
N
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
38 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
- Sau đó giá trị thời gian hiện thời được so sánh với giá trị hẹn giờ cài đặt, nếu
đúng giờ hẹn, các thiết bị được hẹn giờ sẽ được bật hay tắt tùy theo cài đặt.
- Kiểm tra phím: nếu có phím nhấn, chương trình sẽ thực hiện phần cài đặt trực
tiếp tại mạch, chương trình cài đặt bao gồm: chương trình điều chỉnh giờ,
chương trình, hiển thị menu để điều khiển thiết bị và thông tin về thiết bị.
3.3.2 Chƣơng trình cài đặt giờ:
Giải thích:
- Chương trình sẽ kiểm tra phím nhấn, khi nhấn phím SET (key == 4) thì con trỏ
hiển thị sẽ lần lượt dịch chuyển tới số cần điều chỉnh (ngày, tháng, năm, giờ
phút, giây)
Y
Y
N
N
Y
N
Y
N
Giảm giá trị mục
hiện thời (muc i)
Begin
Đọc DS1307,
hiển thị ,i=6
Key == 4
(phím SET)
Chờ phím nhấn
Chuyển vị trí con
trỏ, i--
Key = =2
(phím tăng)
Key == 3
(Phím giảm)
Tăng giá trị mục
hiện thời (mục i)
i==FFH
(-1)
End
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
39 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
- Hàm tăng và giảm mục hiện thời (mục i)( ngày, tháng, năm,…) sẽ căn cứ vào
giá trị của i để tăng hoặc giảm thích hợp. hàm: inc_field(i),dec_field(i) sẽ tăng
hoặc giảm mục I 1 đơn vị, hàm này cúng có so sánh tùy theo giá trị hiện thời
đang là giờ phút giây… sẽ cho phép giá trị tăng (giảm) trong phạm vi cho phép
(ví dụ: 0<phút< 60…), và hiệu chỉnh số BCD (dữ liệu đọc từ DS1307 ở dạng
BCD).
3.3.3 Chƣơng trình hiển thị menu:
Hàm hiển thị menu (void hien_thi_menu(const char* const menu[],BYTE n,BYTE
menu_thiet_bi)) sẽ hiển thị menu, khi người sử dụng phím 2, hoặc 3 sẽ chuyển mục
con (menu con) Mode se lưu giá trị vị trí mục được chọn
Y
N
Y
Begin
Chờ phím nhấn
i = 0
Key = =2
(phím tăng)
Hiển thị mục i i++ i<n
Hiển thị mục 0
N
Y
N
Key = =3
(phím giảm)
Hiển thị mục i i-- i>0
Hiển thị mục n
N
Y
Begin
Mode = i
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
40 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
3.3.4. Chƣơng trình hiển thị và cài đặt trên PSOC:
hien_thi_menu(men
uchinh,5,0);
Begin
Xoa_cai_dat();
hien_thi_menu(men
uthongtin,10,0);
hien_thi_menu(men
ucaidat,5,0);
hien_thi_menu(menut
hietbi,6,thiet_bi);
cai_dat_thiet_bi(thi
et_bi,mode);
Key==1
N
Y
Mode==4
N
Y
mode==2
N
Y
Mode==3
N
Y
Mode_kt=1 (hen gio
daily)
Key==1
N
Y
Key==1
N
Y
End
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
41 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
3.3.5. Chƣơng trình xử lý dữ liệu từ máy tính:
Đọc 1 byte từ
wireless->bWUSB
Begin
bWUSB ==
lệnh mở tbi
N
Y
bWUSB ==
lệnh tắt tbi
N
Y
Bật thiêt bị
Tăt thiết bị
bWUSB == cài
đặt hẹn giờ
N
Y
bWUSB ==yêu
cầu gửi dữ liệu
N
Y
bWUSB ==
cập nhật time
N
Y
Đọc 25 byte từ MT,
lưu vào FLASH
Gửi data
Đọc 6 byte time data,
ghi vào DS1307
End
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
42 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Phần 4: CHƢƠNG TRÌNH GIAO TIẾP CỔNG SONG SONG
TRÊN MÁY TÍNH
4.1 Giới thiệu chƣơng trình giao tiếp máy tính với module wireless.
Chương trình được viết bằng ngôn ngữ Visual Basic (VB) trong bộ công cụ Visual
Studio.NET phiên bản 2005 của Microsoft s ử dụng thư viện động (file DLL) thực hiện
truy cập trực tiếp cổng song song. Chương trình thực hiện nhiệm vụ truyền dữ liệu từ
máy tính tới module wireless thông qua cổng song song.
Giao diện của chương trình:
Các module xử lí của chƣơng trình:
Để xuất dữ liệu và từ điều khiển ra cổng song song, ta xuất trực tiếp ra địa chỉ của các
thanh ghi của cổng song song. Ở đây ta sử dụng cổng song song LPT1, hoặc LPT2.
Đƣa file thƣ viện liên kết động vào chƣơng trình.
Cách thêm thư viện liên kết động vào chương trình được thực hiện theo phần
hướng dẫn MSDN của Visual Studio .NET 2005.
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
43 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Đoạn chương trình đưa file liên kết động vào:
Public Class Form1
'Gửi dữ liệu ra port
Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
'Nhận dữ liệu từ port
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
4.2 Các module chính của chƣơng trình:
4.2.1 Hàm set và clear 1 bit:
Hàm set và clear 1 bit của thanh ghi có địa chỉ „port‟
Hàm này được xây dựng để thuận tiện trong quá trình truyền dữ liệu nối tiếp
(SPI), và set hoặc clear các chân (output) của cổng song song 1 cách riêng lẻ.
'set 1 bit của thanh ghi ‘port’
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
'clear 1 bit của thanh ghi ‘port’
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
4.2.2 Hàm đọc trạng thái của 1 bit: ở đây, hàm được thiết kế để đọc giá trị từ chân
BS của cổng song song, do đó tín hiệu vào cần phải đảo bit
Private Function readbit(ByVal port As Integer, ByVal bit As Integer) As
Boolean
Dim data1 As Integer
data1 = Inp(port)
If (data1 And (2 ^ bit)) Then
Return False
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
44 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Else
Return True
End If
End Function
4.2.3 Hàm gửi 1 byte lên bus SPI: Hàm này có nhiệm vụ dịch 8 bit ra chân MOSI
(chân data out của bus SPI) .
Private Sub SendByteSPI(ByVal dat As Integer)
Dim i As Integer
ClrBit(data, SCK)
setbit(data, D5) 'cho LED báo hiệu sáng
For i = 0 To 7
If (dat And (2 ^ (7 - i))) Then 'gửi MSB trƣớc
setbit(data, MO)
Else
ClrBit(data, MO)
End If
setbit(data, SCK)
ClrBit(data, SCK)
ClrBit(data, D5)
Next
End Sub
4.2.4 Hàm nhận đọc 1 byte trên bus SPI:
Private Function readbyteSPI() As Integer
Dim i, dat As Integer
dat = 0
ClrBit(data, SCK)
setbit(data, D5) 'cho LED báo hiệu sáng
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
Return dat
End Function
4.2.5 Hàm ghi đata vào 1 thanh ghi của module wireless:
Để ghi tới 1 thanh ghi của module wireless, trước tiên ta phải chọn chân nSS,
cho nSS xuống mức logic 0. Đối với quá trình ghi, bit MSB của địa chỉ cần ghi
tới phải được set lên 1. Trước tiên ta gửi lên bus SPI địa chỉ cần ghi, sau đó, gửi
giá trị cần ghi.
Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng
45 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS
Private Sub Write_WUSB_REG(ByVal reg As Integer, ByVal value As
Integer)
ClrBit(data, nSS) 'chan nSS=0
SendByteSPI(&H80 Or reg) 'set bit MSB->quá trình ghi
SendByteSPI(value)
setbit(data, nSS)
ClrBit(data, SCK)
ClrBit(data, MO)
End Sub
4.2.6 Hàm đọc data từ 1 thanh ghi của module 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
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 song song dùng wireless.pdf