control by wireless

80
Nhóm 01 Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng 1 GIÁM SÁT, ĐIỀU KHIN THIT BĐIỆN QUA CNG PARALLEL DÙNG WIRELESS MC LC 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

Upload: pham-trong-thuan

Post on 27-May-2015

96 views

Category:

Engineering


4 download

TRANSCRIPT

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

1 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

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

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

2 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 ................................................................ 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

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

3 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Phần 1: CỔNG SONG SONG

1.1 Cấu trúc cổng song song:

Cổng song song gồm có 4 đường điều khiển, 5 đường trạng thái và 8 đường

dữ liệu bao gồm 5 chế độ hoạt động:

Chế độ tương thích (compatibility).

Chế độ nibble.

Chế độ byte.

Chế độ EPP (Enhanced Parallel Port).

Chế độ ECP (Extended Capabilities Port).

Ba chế độ đầu tiên sử dụng cổng song song chuẩn (SPP – Standard Parallel

Port) trong khi đó chế độ 4, 5 cần thêm phần cứng để cho phép hoạt động ở tốc độ

cao hơn. Sơ đồ chân của cổng song song như sau:

Chân Tín hiệu Mô tả

1 -STROBE (Out) Mức tín hiệu thấp, chỉ truyền dữ liệu

2 D0 Bit dữ liệu 0 3 D1 Bit dữ liệu 1 4 D2 Bit dữ liệu 2 5 D3 Bit dữ liệu 3 6 D4 Bit dữ liệu 4 7 D5 Bit dữ liệu 5 8 D6 Bit dữ liệu 6 9 D7 Bit dữ liệu 7 10 -ACK (In) Mức thấp: đã nhận 1 ký tự và có khả năng

nhận nữa

11 -BUSY (In) Mức thấp: ký tự đã được nhận; bộ đệm

đầy. 12 PAPER EMPTY

(In)

Mức cao: hết giấy 13 SELECT (In) Mức cao: máy in ở trạng thái online 14 -AUTOFEED (Out) Mức thấp: máy in xuống dòng tự động

15 -ERROR (In) Mức thấp: hết giấy; máy in ở offline; lỗi

máy in

16 -INIT (Out) Mức thấp: lỗi truyền dữ liệu

17 SELECTIN (Out) Mức cao: chọn máy in

18-25 GROUND 0V

Bảng 1.1 – Sơ đồ chân cổng song song

Cổng song song có ba thanh ghi có thể truyền dữ liệu và điều khiển. Địa chỉ cơ

sở của các thanh ghi cho tất cả cổng LPT (line printer) từ LPT1 đến LPT4 được lưu

trữ trong vùng dữ liệu của BIOS. Thanh ghi dữ liệu được định vị ở offset 00h, thanh

ghi trang thái ở 01h, và thanh ghi điều khiển ở 02h. Thông thường, địa chỉ cơ sở của

LPT1 là 378h, LPT2 là 278h, do đó địa chỉ của thanh ghi trạng thái là 379h hoặc

279h và địa chỉ thanh ghi điều khiển là 37Ah hoặc 27Ah. Tuy nhiên trong một số

trường hợp, địa chỉ của cổng song song có thể khác do quá trình khởi động của BIOS.

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

4 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

BIOS sẽ lưu trữ các địa chỉ này như sau:

Địa chỉ Nội dung

0040h:0008h Địa chỉ cơ sở của LPT1

0040h:000Ah Địa chỉ cơ sở của LPT2

0040h:000Ch Địa chỉ cơ sở của LPT3

Bảng 1.2 – Lưu địa chỉ các cổng song song

1.2 Định dạng các thanh ghi:

Thanh ghi dữ liệu (hai chiều):

7 6 5 4 3 2 1 0

Tín hiệu máy

in

D7 D6 D5 D4 D3 D2 D1 D0 Chân số 9 8 7 6 5 4 3 2

Bảng 1.3- Thanh ghi dữ liệu

Thanh ghi trạng thái (chỉ đọc): Tín hiệu máy in

BUSY

-ACK

PAPER EMPTY

SELECT -ERROR -IRQ X X

Chân số 11 10 12 13 15 - - - Bảng 1.4 - Thanh ghi trạng thái

Thanh ghi điều khiển: Tín hiệu máy in

X X DIR IRQ Enable

SELECT IN

INIT AUTOFEED STROBE

Chân số - - - - 17 16 14 1 Bảng 1.5 - Thanh ghi điều khiển

x: không sử dụng

IRQ Enable: yêu cầu ngắt cứng; 1 = cho phép; 0 = không cho phép

Ngoài ra chân BUSY được nối với cổng đảo trước khi được đưa vào thanh ghi

trạng thái, các bit - AUTOFEED và - STROBE được đưa qua cổng đảo trước khi đưa

ra các chân.

Thông thường tốc độ xử lý dữ liệu của các thiết bị ngoại vi như máy in chậm

hơn PC nhiều nên các đường - ACK , BUSY và -STR được sử dụng cho kỹ thuật

bắt tay. Khởi đầu, PC đặt dữ liệu lên bus sau đó kích hoạt đường STR xuống mức

thấp để thông tin cho biết rằng dữ liệu đã ổn định trên bus. Khi xử lý xong dữ liệu,

nó sẽ trả lại tín hiệu -ACK xuống mức thấp để ghi nhận. PC đợi cho đến khi đường

BUSY từ máy in xuống thấp thì sẽ đưa tiếp dữ liệu lên bus.

1.3 Giao tiếp hai máy tính dùng cổng song song

Quá trình giao tiếp với cổng song song dùng 2 chế độ: chế độ chuẩn SPP và chế

độ mở rộng. Việc giao tiếp ở chế độ chuẩn mô tả như sau:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

5 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Hình 1.1 - Trao đổi dữ liệu qua cổng song song giữa 2 PC dùng chế độ chuẩn

Sơ đồ chân kết nối mô tả như sau:

PC

1

PC

2 Chức năng Chân Chân Chức năng

D0 2 15 -ERROR

D1 3 13 SELECT D2 4 12 PAPER EMPTY D3 5 10 -ACK

D4 6 11 BUSY BUSY 11 6 D4 -ACK 10 5 D3

PAPER

EMPTY

12 4 D2 SELECT 13 3 D1 -ERROR 15 2 D0

GND 25 25 GND

Bảng 1.6 – Sơ đồ chân kết nối hai máy tính chế độ chuần

Ngoài ra, việc kết nối giữa 2 máy tính sử dụng cổng song song có thể dùng chế độ mở rộng, chế độ này cho phép giao tiếp với tốc độ cao hơn

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

6 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Hình 1.2 - Trao đổi dữ liệu qua cổng song song giữa 2 PC dùng chế độ mở

rộng

Sơ đồ chân kết nối mô tả như sau:

PC

1

PC

2

Chức năng Chân Chân Chức năng

D0 2 2 D0 D1 3 3 D1 D2 4 4 D2 D3 5 5 D3 D4 6 6 D4

D5 7 7 D5 D6 8 8 D6 D7 9 9 D7 SELECT 13 17 SELECTIN

BUSY 11 16 -INIT

-ACK 10 1 -STROBE

S ELECTIN 17 13 SELECT

-INIT 16 11 BUSY

-STROBE 1 10 -ACK

Bảng 1.7 – Sơ đồ chân kết nối hai máy tính chế độ mở rộng

Chương trình giao tiếp trên VB sử dụng thư viện liên kết động để trao đổi dữ liệu

với cổng máy in. Thư viện inpout32.dll bao gồm các hàm sau:

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)

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

7 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Phần 2: GIỚI THIỆU PSOC VÀ MODUL WIRELESS USB

2.1 Giới thiệu chung về PSOC và chip Cyp29566:

PsoC được viết tắt từ Programmable System On Chip (hệ thống khả trình trên 1

chip) là một loại vi điều khiển, trong đó ngoài cấu trúc của một vi điều khiển 8 bit

truyền thống nó còn được tích hợp thêm các khối số và tương tự. Các khối số và tương

tự này co khả năng cấu hình mềm dẻo. Các khối số là các khối khả trình, cho phép ta

cấu hình để trở thành timer, bộ PWM, Counter, các chuẩn giao tiếp truyền thống... Các

khối tương tự cho phéo ta phát triển các thành phần như là bộ lọc, ADC, DAC, bộ

khuếch đại…PSoC chúng tôi đề cập ở đây là sản phẩm của hãng Cypress. Để thuận

tiện cho việc phát triển hệ thống với PSOC, Cypress cung cấp bộ phần mềm PSOC

Designer, cho phép ta cấu hình phần cứng dễ dàng. Các đặc điểm của loại PsoC

CYP29566:

Bộ xử lý với cấu trúc Harvard:

Tốc độ của bộ vi xử lý lên đến 24MHz

2 bộ nhân 8x8, thanh ghi tích lũy 32bit

Năng lượng tiêu hao ít, tốc độ xử lý cao

Dải điện áp từ 3.0 đến 5.25 V

Có bộ chuyển mạch SMP (Switch mode pump)

Dải nhiệt độ hoạt động từ -40 đến 85 độ C

Các khối ngoại vi tiên tiến:

12 khôi Analog cung cấp cho ta:

- Các bộ ADC lên tới 14 bit

- Các bộ DAC lên tới 9 bit

- Bộ khuếch đại lập trình được

- Bộ lọc và bộ so sánh lập trình được

8 Khối ngoại vi số được thiết lập để làm các nhiệm vụ

- Các Timer, Counter, RTC, PWM

- Các module kiểm tra lỗi (CRC)

- 4 bộ UART Full-Duplex

- Giao tiếp SPI Master, Slave

- Có khả năng kết nối đến tất cả các chân IO

Bộ tạo xung khả trình chính xác

- Bộ dao động 24/48MHz với độ chính xác 2,5% bên trong chip

- Tùy chọn dùng thạch anh 32,768KHz để tạo tần số dao động 24/48MHz

chính xác

- Dùng thạch anh ngoài tới 24Mhz

- Bộ dao động nội cho WDT và chế độ Sleep

Bộ nhớ trên chip linh hoạt:

- 32KB Flash Program Storage.

- 2K SRAM

- In-System Serial Programming

- Cập nhật từng phần của bộ nhớ Flash

- Chê độ bảo vệ

Cấu hình chân IO lập trình được

- Khả năng cấp dòng 25mA với tất cả các chân

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

8 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

- Pull up, Pull down, High Z, Strong, Open Drain Drive Modes cho tất cả

các chân

- Bất kì chân nào đều là chân ngắt ngoài được

- Tối đa 12 ngõ vào Analog

- 4 ngõ ra Analog có khả năng cấp dòng 40mA

Các tài nguyên hệ thống khác:

- I2C Slave, Master, and Multi-Master tối đa 400kHz

- Bộ định thời Watch Dog và Sleep

- Bộ phát hiện điện áp thấp tùy chọn

- Bộ tạo điện áp tham chiếu lập trình được

-

2.2 Sơ lƣợc cấu trúc phần cứng:

2.2.1 Tổng quan cấu trúc PSOC:

Các vi điều khiển PSOC dựa trên cấu trúc vi điều khiển 8 bit với tập lệnh phức

tạp (CISC). Sơ đồ khối như hình vẽ trên.

CPU là phần chính của vi điều khiển, mục đích là thực thi các lệnh và điều

khiển quá trình làm việc của các khối khác..

Bộ tạo dao động tạo xung clock CPU làm việc, bộ tạo dao động có thể tạo

nhiều tần số khác nhau do người sử dụng cấu hình.

Điều khiển reset cho phép vi điều khiển bắt đầu lại quá trình hoạt động và đưa

vi điều khiển đến trạng thái hoạt động ổn định..

Watch Dog Timer được sử dụng để phát hiện các lỗi vòng lặp của phần mềm.

Sleep Timer có thể làm cho vi điều khiển hoạt động trở lại từ chế độ ngủ. Nó

cũng có thể được sử dụng như là một bộ đếm thời gian.

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

9 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

InPut – outPut Pins cho phép kết nối giữa khối CPU, khối số và các khối

tương tự lập trình được và thế giới bên ngoài..

Digital Programmable Blocks được sử dụng để cấu hình các thành phần số

như PWM, Timer, counter,…do người sử dụng chọn.

Analog Programmble Blocks được sử dụng để cấu hình cho phần analog, như

là bộ chuyển đổi AD và DA, bộ lọc, bộ nhận DTMF, khuếch đại.

I2C Controller điều khiển giao tiếp I2C.

Voltage Reference (điện áp tham chiếu) cần cho hoạt động của các thành

phần analog bên trong các khối analog.(Ví dụ như điện áp tham chiếu cho bộ ADC)

Mac Unit sử dụng để nhân các số 8 bit có dấu.

SMP dùng để chuyển mạch nguồn cho PSOC qua nguồn pin dự trữ khi nguồn

điện chính mất

2.2.2 Cấu trúc CPU

Cấu trúc của VĐK PSOC theo kiến trúc Harvard, trong đó phân biệt rõ ràng bộ nhớ dữ

liệu và bộ nhớ chương trình, chúng có những bus riêng để truy cập vào bộ nhớ dữ liệu

và bộ nhớ chương trình. Bộ nhớ chương trình là bộ nhớ Flash. Đối với CYP29566, bộ

nhó chương trình lên đến 32K.

Các thanh ghi bên trong CPU:

Program counter (PC) Bộ đếm chương trình.

Stack Pointer (SP) Con trỏ ngăn xếp.

Accumulator register (A) thanh ghi chứa

Index Register (X) thanh ghi chỉ số.

Flag Register (F) thanh ghi cờ.

Arithmetic Logic Unit (ALU) khối logic và số học, để tính toán các phép tính số

học (cộng từ nhân chia ) và thực hiện những phép logic (and, or, shift…)

2.2.3 Bộ tạo tần số:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

10 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Tạo ra nhiều tần số khác nhau cho CPU, và xung clock cho các khối khác hoạt động

nhờ vào bộ tạo dao động bên trong cũng như bộ dao động thạch anh bên ngoài. Bên

trong bộ tạo tần số này có các mạch chia tần số với hệ số chia tùy chọn bởi người sử

dụng.

2.2.4 Mạch RESET:

2.2.5 Đầu vào và ra của tín hiệu số:

Kết nối giữa VĐK PSoC với thế giới bên ngoài qua các chân I-O. Việc truy xuất các

cổng được thông qua các thanh ghi PRT0DR, PRT1DR, PRT2DR, PRT3DR, PRT4DR

hoặc PRT5DR.

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

11 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

2.2.6 Drive Mode:

Các chân của VĐK PSOC có khả năng cấu hình ở nhiều chế độ khác nhau thông

qua thanh ghi PRTxDMx.

Sơ đồ cấu trúc bên trong của 1 chân PSOC như hình vẽ:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

12 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

2.2.7 Truy cập các khối số lập trình đƣợc:

Các thành phần số, được lưu trữ bên trong các khối lập trình được, mà không

phải được nối trực tiếp tới các chân I-O. Điều đó được thực hiện theo cách chỉ ra theo

hình vẽ dưới đây, miêu tả nhóm 4 khối lập trình số. như có thể thấy, chân kết nối được

thiết lập sử dụng đường kết nối toàn cục, bộ đa hợp và các đường của các khối lập

trình. PsoC có thể có 1, 2, hay 4 nhóm khối lập trình số như khối này phụ thuộc vào họ

của chúng.

2.2.8 Các đƣờng input toàn cục (Global input line):

Global input line thiết lập kết nối giữa những chân và những bộ đa hợp đầu vào. Global

input line được chia cắt trong hai nhóm, phụ thuộc vào thời tiết chúng có thể nối tới

những cổng với (GIO) lẻ hay chẵn (GIE). Quy kết nối: GIO nối với các Port lẻ, chỉ số

của đường GIO trùng với chỉ số của port, tương tự cho GIE. Chẳng hạn, hàng GIO_0

có thể chỉ nối tới chân 0 của một số những cổng chỉ số lẻ ( P1[0],P3[0],P5[0]).

2.2.9 Bộ chọn kênh đầu vào:

Đầu vào bộ chọn kênh lựa chọn một trong những global lines và nối nó tới các block

lines (RI[0]….RI[4]).

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

13 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

2.2.10 Khối số khả trình:

Bên trong của khối số khả trình, người dùng có thể chỉnh sửa các thành phần

như bộ định thời, bộ đếm, PWM, PRS, CRC và các thiết bị cho SPI, IrDA và giao

tiếp UART mà chúng ta có thể thay đổi phần cứng của hệ thống cho những mục

đích sử dụng đặc biệt. Quá trình cài đặt và kết nối dùng PSoC Designer rất dễ hiểu,

nhưng đầu tiên phải nắm bắt được chức năng của những thành phần này. Hầu hết

các thành phần, như bộ đếm, PRS và CRC có thể được chứa ở bất kỳ block trống

nào. Mặt khác, sự giao tiếp giữa các thành phần như Rx, Tx, UART và SPI có thể

được đặt bên phải của khối khả trình.

Số lượng block cần thiết khi sử dụng cho các thành phần được liệt kê như bảng dưới:

Số

block Thành phần

1 Counter8, Timer8, PWM8, PRS8, RX8/TX8, SPIM/SPIS

2 Counter16, Timer16, PWM16, PRS16, PWMDB8, CRC16, UART,

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

14 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Số

block Thành phần

IrDARx/IrDATx

3 Counter24, Timer24, PWMDB16

4 Counter32, Timer32

2.2.11 Tín hiệu CLK

Tín hiệu này cần thiết cho các thành phần số làm việc. Tùy thuộc vào tốc độ yêu

cầu, có một dãy tần số được được tạo sẵn để chọn từ:

Tần số tín hiệu trong VC1, VC2, VC3, SYSCLKx2, CPU_32

Bên ngoài từ những khối kề nhau

Đường broacast chung (BC)

Row Input (RI) hay Row Output (RO) .

Hầu hết tín hiệu chung ở trong là VC1, VC2 và VC3, bởi vì khi sử dụng thanh ghi

prescalers khác nhau, chúng cho phép vượt qua dãy tần số nhất định. Nếu các tín hiệu

VC1,VC2 và VC3 không tạo nên tần số đặc biệt, bên ngoài từ bộ Counter, Timer hay

PWM, được sử dụng như những prescalers phụ. Những gạch đứt ở hình trên mô tả

đường nối để nối đầu ra của block trước với đầu vào của block tiếp theo. Trường hợp

tín hiệu cần thiết để được đi chéo qua vài block, kết nối như vậy được thực hiện trên

BC đường tần số broacast chung (BC).

2.2.12 Tín hiệu input

Hầu hết các thành phần, ngoài tín hiệu CLK đều có một hoặc hai tín hiệu input. Ví

dụ như ở trong trường hợp của một bộ đếm hay PWM, tín hiệu input được dùng cho

việc đếm. Những khả năng khác nhau trong việc lựa chọn những tín hiệu input:

Khối input lines (RI), thành phần của tín hiệu ngoài.

Khối output lines (RO), thành phần của cascading

Analog block comparator lines

Tín hiệu logic 1 (cao)

Tín hiệu logic 0 (thấp).

2.2.13 Tín hiệu output

Tín hiệu output được dùng để kết nối các khối khả trình với output lines RO. Tín

hiệu có thể được gửi từ output lines đến đầu ra của vi điều khiển hay đầu vào của vài

thành phần. Đầu ra multiplexer dùng để nối những khối khả trình với những đường ra

chung.

2.2.14 Multiplexer

Tùy vào loại multiplexer, những đường output (RO) hay input (RI) của khối khả

trình được nối.

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

15 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

2.2.15 Mạch logic

Tín hiệu chọn được mang đến đầu ra của mạch logic. Đầu vào khác có thể dùng

một vài đường kề nhau của khối khả trình. Mạch logic có thể:

Cho qua một hoặc hai tín hiệu

Đảo tín hiệu vào

Thực hiện những phép AND, OR hay XOR …

2.2.16 Output drivers

Mạch ra logic có thể được gửi đến bốn output drivers mà có thể nối đến một hay

nhiều đường ra chung. Đường của khối khả trình với vài chỉ số có thể được nối đến

GOO hoặc GOE với chỉ số giống nhau hoặc gấp 4 lần. Những đường ra chung nối giữa

các drivers và pins. Chúng được tách thành 2 nhóm, phụ thuộc vào nơi chúng có thể

được nối đến cổng hay với chỉ số lẻ (FGIO) hay chẵn (GIE). Chỉ những đường và chân

với chỉ số giống nhau mới được nối liền. Bên cạnh điều đó có một khả năng để thiết

lập một kết nối giữa những hàng đầu vào và đầu ra, mà cho phép xử lý bổ sung tín hiệu

vào.

2.2.17 Điều khiển ngắt

Khi có ngắt, bộ điều khiển ngắt lưu kiểu ngắt.

Chờ cho thực thi xong lệnh hiện thời.

Nếu ngắt được cho phép và cho phép ngắt toàn cục được đặt bằng 1 (GIE= 1),

sự xử lý ngắt bắt đầu. Tiếp tục, stack lưu những giá trị của thanh ghi PCH, PCL

và F.

Sự kiện ngắt mới bị disable bằng cách thiết lập giá trị của thanh ghi F bằng 0

(GIE = 0).

Bộ đếm chương trình được đặt tới địa chỉ của thủ tục ngắt.

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

16 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Chương trình thực hiện các lệnh thủ tục ngắt.

Khi nó tới lệnh reti, nó sẽ trở lại hương trình chính, những giá trị của thanh ghi

F được khôi phục từ stack, và bộ đếm chương trình được đặt lại tới giá trị trước

khi ngắt xuất hiện.

2.2.18 Không gian địa chỉ

PSoC có ba không gian địa chỉ:

ROM

RAM

Các thanh ghi

- Program memory

Bộ nhớ chương trình là phần của ROM, được sử dụng để lưu mã chương trình,

được ghi trong bộ nhớ được viết bằng việc lập trình phần cứng. Bộ nhớ chương trình

được thực hiện bằng công nghệ FLASH. Kích thước bộ nhớ Chương trình phụ thuộc

vào họ PsoC, có thể là 2, 4, 8, 16 và 32 kB.

- Supervisory ROM

Supervisory ROM là phần của ROM mà được sử dụng trong suốt thời gian khởi

động của PSoC, Với chỉ dẫn SSC đặc biệt, nó có thể truy cập một phần bộ nhớ.

- RAM

RAM cho phép sự lưu trữ những biến và stack được sử dụng trong thời gian làm

việc của vi điều khiển. Kích thước của đa số PsoC là 256 byte. Khi vi điều khiển có

hơn 256 byte RAM (dòng CY8C29xx và CY8C21x34), bộ nhớ được tổ chức trong 256

trang byte, với stack ở trên trang cuối cùng.

- Thanh ghi

Vùng địa chỉ thanh ghi chứa đựng những thanh ghi được dùng cho các thiết lập

toàn cục cho các khối ngoại vi và những khối lập trình được của một PSoC. PSoC có

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

17 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

512 thanh ghi, mà được nhóm lại trong hai bank 256 bytes. Để truy nhập thanh ghi

nào đó, bên cạnh tình trạng tên của nó, cái gì cần sẽ cũng xác định tên trong bank . Sự

truy nhập tới bank xác định bằng cách sử dụng macro M8C_SetBank0 và

M8C_SetBank1, xóa hay thiết lập bit XIO ở thanh ghi CPU_F.

2.3 Module WirelessUSB LR 2.4-GHz DSSS Radio SoC CYWUSB6935:

2.3.1 Các đặc điểm của CYWUSB6935:

Hoạt động ở tần số 2.4-GHz.

Được dùng trong lĩnh vực công nghiệp, y khoa, khoa học với băng tần từ

2.4GHz-2.483GHz.

Độ nhạy là -95dBm.

Công suất ra tối đa 0dBm.

Khoảng cách truyền và nhận tối đa là 50m.

Tốc độ truyền dữ liệu đạt đến 62.5kbps.

Độ tích hợp cao với giá thành thấp, yêu cầu số thành phần bên ngoài là nhỏ

nhất.

Sử dụng giao thức truyền SPI.

Tần số hoạt động xung clock đầu vào là 13MHz.

Dòng dự phòng dưới 1 A.

Nhiệt độ hoạt động từ -400C đến 85

0C.

2.3.2 Các ứng dụng:

Trong lĩnh vực tự động:

- Điều khiển khí hậu và ánh sáng.

- Các thiết bị thông minh.

- Hệ thống cảnh báo và bảo vệ.

Điều khiển trong công nghiệp:

- Quản lý trong kiểm kê.

- Nhà máy tự động.

- Tiếp nhận dữ liệu.

Trong đo lường tự động.

Máy tính:

- Điều khiển từ xa.

- Các công cụ dẫn chương trình.

- Hệ thống cảnh báo.

2.3.3 Sơ đồ khối của CYWUSB6935:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

18 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

2.3.4 Chức năng tổng quát của CYWUSB6935:

CYWUSB6935 được thiết kế thành thiết bị wireless hoạt động trong công

nghiệp, khoa học, y khoa với băng tần 2.4GHz-2.4835GHz. CYWUSB6935 bao gồm 1

bộ thu phát sóng vô tuyến tần số 2.4GHz, 1 modem GFSK. CYWUSB6935 hỗ trợ

khoảng cách truyền tối đa là 50m.

Máy thu phát 2.4GHz:

Bộ truyền và nhận là bộ chuyển đổi đơn, kiến trúc tần số trung tần thấp kết hợp

với bộ lọc nhiễu. Tích hợp bộ khuyếch đại công suất để điều khiển công suất ra trong

phạm vi 30dB. Cả bộ truyền và nhận đều tích hợp bộ VCO (dao động điều khiển bởi

điện áp) và bộ tổng hợp. Bộ tổng hợp tần số cung cấpbộ dao động nhảy tần nội tại cho

bộ phát và bộ nhận.

Modem GFSK:

Máy phát sử dụng bộ điều chế DSP cơ sở để chuyển đổi tần số 1MHz chip thành

sóng mang GFSK. Máy thu sử dụng bộ tách sóng FM với bộ tự động chia dữ liệu để

giải điều chế tín hiệu GSFK.

Bộ chuyển đổi nối tiếp Serializer và bộ chuyển đổi ngƣợc nối tiếp

Deserialzer:

CYWUSB6935 cung cấp dữ liệu cho bộ Serialzer/Deserialzer (SERDES), nó

cung cấp khung byte của dữ liệu truyền và nhận. Các byte truyền được đưa vào

SERDES và các byte nhận được đọc từ SERDES bên ngoài qua giao thức SPI.

SERDES cung cấp cặp dữ liệu đệm truyền và nhận. Trong khi 1 byte được truyền bởi

sóng vô tuyến thì byte tiếp theo có thể được viết đến thanh ghi SERDES để đảm bảo

chắc chắn không đứt dữ liệu đã truyền.

Sau khi nhận 1 byte thì nó sẽ được đưa vào thanh ghi SERDES và có thể đọc bất

kỳ lúc nào cho đến khi byte tiếp theo được nhận, khi đó nội dung cũ của thanh ghi sẽ

được viết đè lên.

Các giao thức ứng dụng:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

19 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

CYWUSB6935 có đầy đủ các giao thức SPI thụ động đồng bộ cho các kết nối

đến ứng dụng của MCU. Cấu hình và dữ liệu byte truyền có thể được thực hiện thông

qua giao thức này.

Kiểu SERDES (DIO) được cung cấp cho các ứng dụng yêu cầu đồng bộ đường

dữ liệu nối tiếp. Giao thức này chỉ được dùng cho truyền bit dữ liệu.

Bộ chỉ thị độ dài tín hiệu nhận RSSI (Receive signal strength indicator):

Thanh ghi RSSI (Reg 0x22) trả lại độ dài của tín hiệu nhận kênh ON và được

dùng để:

- Xác định chất lượng kết nối.

- Xác định giá trị nhiễu.

- Kiểm tra kênh trước khi truyền.

Điện áp trong RSSI được lấy mẫu qua 5 bit của bộ chuyển đổi ADC. Một khi sự

kết nối đã được thiết lập, thanh ghi RSSI có thể được đọc để xác định chất lượng kết

nối của kênh. Giá trị của thanh ghi dưới 10 cho biết chiều dài tín hiệu nhận là thấp, còn

giá trị lón hơn 28 thì chiều dài tín hiệu là dài.

Để kiểm tra kênh truyền trước khi truyền, trước hết thiết lập kiểu nhận cho đúng

giá trị của thanh ghi RSSI (Reg 0x22). Nếu giá trị bit là 0, sau đó tác động thanh ghi

Carrier Detect (Reg 0x2F, bit7=1) để khởi động bộ chuyển đổi ADC. Sau đó, chờ hơn

50s và tiếp tục đọc giá trị RSSI. Tiếp theo xóa thanh ghi Carrier Detect và điều chỉnh

bộ nhận là OFF. Đo mức độ nhiễu của kênh tức là xử lý nhiễu, để có kết quả tốt nhất,

thủ tục này nên lập lại nhiều lần (khoảng 20 lần) để tính toán trung bình mức độ nhiễu

của kênh. Giá trị của thanh ghi RSSI từ 0-10 tức là tín hiệu trên kênh truyền yếu. Còn

giá trị lớn hơn 10 cho rằng kênh hầu như đang được sử dụng.

Giao thức SPI:

CYWUSB6935 có 4 dây giao thức SPI giao tiếp giữa ứng dụng MCU và 1 hoặc

các thiết bị thứ cấp khác.

Giao thức SPI hổ trợ truyền byte đơn và nhiều byte nối tiếp. Bốn dây giao thức

SPI giao tiếp bao gồm Master Out-Slave In (MOSI), Master In-Slave Out (MISO),

Serial Clock (SCK), và Slave Select. SPI nhận xung SCK từ MCU trên chân SCK. Dữ

liệu từ MCU được dịch trên chân MOSI. Dữ liệu từ MCU đưa ra chân MISO. Chân

Slave Select ở mức thấp cần được xác nhận để khởi động bộ truyền SPI.

MCU có thể khởi động bộ truyền dữ liệu SPI theo đường quản lý nhiều byte.

Byte đầu tiên là byte Command/Address, và byte tiếp là các byte dữ liệu.Tín hiệu Slave

Select không nên chọn giữa các byte. Giao tiếp SPI như sau:

- Bit 7=0: SPI đọc. Bit 7=1:SPI ghi.

- Bit 6=1: SPI tự động tăng địa chỉ. Khi thiết lập, địa chỉ tự động tăng tại mỗi

byte cuối trong truy cập nhóm bit truyền, nếu không thì các địa chỉ tương tự

được truy cập.

- 6 bit là địa chỉ.

- 8 bit của dữ liệu.

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

20 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

2.3.5 Các ngắt:

CYWUSB6935 có ba kiểu ngắt: ngắt truyền, ngắt nhận và khởi động. Tất cả

được chia sẽ bởi một chân IRQ, nhưng có thể độc lập enabled/disabled. Trong kiểu

truyền, tất cả các ngắt nhận tự động disabled, và trong kiểu nhận tất cả các ngắt truyền

đều disabled. Tuy nhiên nội dung thanh ghi được bảo tồn khi chuyển đổi giữa kiểu

truyền và kiểu nhận.

Các ngắt được enable và trạng thái đọc thông qua 6 thanh ghi: Receive Interrup

Enable (Reg 0x07), Receive Interrup Status (Reg 0x08), Transmit Interrup Enable (Reg

0x1C), Wake Status (Reg 0x1D).

Nếu có hơn 1 ngắt được enable tại bất kỳ một thời điểm nào, nó cần thiết phải

đọc trạng thái ưu tiên của thanh ghi ngắt để xác định việc nào đựoc IRQ xác nhận. Còn

khi nguồn ngắt là disabled, điều kiện trạng thái sẽ gây ra một ngắt khác có thể đựoc xác

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

21 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

định bởi đọc trạng thái của thanh ghi tương tự. Vì vậy nó có thể sử dụng các thiết bị mà

không cần sử dụng các chân ngắt. Chương trình cơ sở có thể thăm dò trạng thái của

thanh ghi ngắt để chờ khi có việc hơn là sử dụng chân IRQ.

Ngắt khởi động Wake Interrup:

Khi chân PD ở mức thấp, bộ dao động bị dừng. Sau khi chân PD không đựoc

xác nhận, bộ dao động thiết lập thời gian để bắt đầu, và cho đến khi nó làm tốt, nó

không được chắc chắn để sủ dụng giao thức SPI. Ngắt khởi động chỉ định bộ dao động

đã đựoc bắt đầu và thiết bị đã sẵn sàng để nhận bộ truyền SPI.

Ngắt khởi động được enable bằng cách thiết lập bit 0 của thanh ghi Wake

Enable (Reg 0x1C), bit 0=1). Dù thanh ghi khởi động treo hay không thì nó được chỉ

định bởi trạng thái bit 0 của thanh ghi Wake Status (Reg 0x1D), bit 0).

Các ngắt truyền:

Bốn ngắt được cung cấp đến cờ khi có sự truyền. Các ngắt được enabled bằng

cách ghi đến thanh ghi Transmit Interrup Enable (Reg 0x0D), và những trạng thái đó

có thể được xác định bằng cách đọc trạng thái thanh ghi Transmit Interrup Status (Reg

0x0E). Nếu có hưon 1 ngắt được enabled, thì rất cần thiết đọc trạng thái thanh ghi

Transmit Interrup Status để xác định việc nào được chân IRQ xác nhận.

Các ngắt nhận:

Có 8 ngắt đựoc cung cấp đến cờ khi việc nhận tín hiệu xảy ra, mỗi 4 ngắt là cho

SERDES A và B. Trong kiểu DDR 64 chips/bit và 32 chips/bit, chỉ có ngắt SERDES A

là available, và ngắt SERDES B sẽ không bao giờ kích khởi dù là enabled. Các ngắt

được enabled bằng cách ghi đến thanh ghi Receive Interrup Enable (Reg 0x07), và các

trạng thái đó có thể được xác định bằng cắch đọc trạng thái của thanh ghi Receive

Interrup Status (reg 0x08). Nếu có hơn 1 ngắt được enabled, thì cần phải đọc trạng thái

thanh ghi Receive Interrup Status để xác định việc nào được chân IRQ xác nhận.

2.3.6 Các thanh ghi của CYWUSB6935:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

22 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Thanh ghi điều khiển:

Thanh ghi REG_CONFIG:

Thanh ghi REG_SERDES_CTL:

Thanh ghi REG_RX_INT_EN:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

23 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Thanh ghi Reg_RX_INT_STAT:

Thanh ghi REG_RX_DATA_A:

Thanh ghi REG_RX_VALID_A:

Thanh ghi REG_RX_DATA_B:

Thanh ghi REG_RX_VALID_B:

Thanh ghi REG_TX_INT_EN:

Thanh ghi REG_TX_INT_STAT:

Thanh ghi REG_TX_DATA:

Thanh ghi REG_TX_VALID:

Thanh ghi REG_RSSI:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

24 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Thanh ghi REG_CLOCK_MANUAL:

Thanh ghi REG_CLOCK_ENABLE:

Thanh ghi REG_PA:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

25 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Phần 3: SƠ ĐỒ MẠCH VÀ LƢU ĐỒ THUẬT TOÁN

3.1 Cấu hình phần cứng trên PSOC Cyp29566.

3.1.1 Khối giao tiếp SPI Master

Đặc điểm của khối SPI

- Hỗ trợ giao thức SPI Master

- Hỗ trợ mode 0,1,2,3

- Nguồn xung Clock và MISO đầu vào tùy chọn được

- Kết nối ngõ ra cho MOSI và chân CLK tùy chọn được

- Ngắt lập trình được

- Có thể chọn thiết bị SPI Slave độc lập .

Sơ đồ khối:

Các thiết lập phần cứng:

Các thiết lập cho khối này như hình vẽ:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

26 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Ở đây ta chọn xung clock cho CPU SysemClock/2 với SystemClock = 24MHz

Các nguôn xung VC1, VC2, VC3 có thể tùy chọn hệ số chia.

Sơ đồ kết nối bên trong (interconnect)

Chân Clock của khối SPI được nối tới Row_0_Output_1, và được nối tới

GlobalOutOdd_1 (các đường kết nối mà có thể nôi tới các có chỉ 1 của 1 port), và

sau đó nối tới chân P1.1

Chân MOSI -> GlobalOutEven_1-> P1.0

Ngõ vào: MISO -> GlobalInEven_3->P1.3

Ngoài các thiết lập trên cho khối SPI ta còn thiết lập thêm các chân nSS (chân

chọn, tích cực mức thấp)-> P1.5, chân này là chân đầu ra nên chọn DriveMode la

Strong, chân nRESET (dùng để reset module wireless) ->P1.4 drivemode ->

Strong,

nPD-> P1.6 DriveMode -> Strong.

PSOC cho ta khả năng cấu hình một cách linh hoạt các khối Digital và các chân.

Các hàm API mà phần mềm PSOC Designer cung cấp:

void SPIM_Start(BYTE bConfiguration)

SPIM_MODE_0 0x00

SPIM_MODE_1 0x02

SPIM_MODE_2 0x04

SPIM_MODE_3 0x06

SPIM_LSB_FIRST 0x80

SPIM_MSB_FIRST 0x00

SPIM Status Masks Value

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

27 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

void SPIM_Stop(void)

void SPIM_DisableInt(void)

BOOL SPIM_SendTxData(BYTE

bSPIMData)

BYTE SPIM_bReadRxData(void)

BYTE SPIM_bReadStatus(void)

3.1.2 Module LCD 16x2

Giới thiệu LCD

LCD được giới thiệu ở đây có 14 chân (hinh dưới). Chức năng các chân được

cho trong bảng dưới:

Bảng mô tả chân LCD

SPIM_DONE 0x20

SPIM_RX_OVERRUN_ERROR 0x40

SPIM_TX_BUFFER_EMPTY 0x10

SPIM_RX_BUFFER_FULL 0x08

Chân Kí hiệu I/O Mô tả

1 VSS - Đất

2 VCC - Nguồn dương +5v

3 VEE - Nguồn điều khiển tương phản

4 RS | RS( Register select)

+ RS= 0 chọn thanh ghi lệnh

+ RS= 1 chọn thanh ghi dữ liệu

5 R/W | R/W= 1 đọc dữ liệu.R/W= 0 ghi

6 E I/O Cho phép

7 DB0 I/O Bus dữ liệu 8 bit

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

28 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

LCD có 2 thanh ghi 8 bit quan trọng đó là quan trọng: Thanh ghi lệnh IR ( Instructor

Register) và thanh ghi dữ liệu DR ( Data Register)

Bảng mã lệnh đến thanh ghi của LCD:

Mã (Hexa) Lệnh đến thanh ghi của LCD

1 Xoá màn hình hiển thị

2 Trở về đầu dòng

4 Dịch con trỏ sang trái

6 Dịch con trỏ sang trái

5 Dịch hiển thị sang phải

7 Dịch hiển thị sang trái

8 Tắt con trỏ, tắt hiển thị

A Tắt hiển thị, bật con trỏ

C Bật hiển thị tắt con trỏ

E Bật hiển thị, nhấp nháy con trỏ

F Tắt con trỏ, nhấp nháy con trỏ

10 Dịch vị trí con trỏ sang trái

14 Dịch vị trí con trỏ sang phải

18 Dịch toàn bộ hiển thị sang trái

8 DB0 I/O Bus dữ liệu 8 bit

9 DB0 I/O Bus dữ liệu 8 bit

10 DB0 I/O Bus dữ liệu 8 bit

11 DB0 I/O Bus dữ liệu 8 bit

12 DB0 I/O Bus dữ liệu 8 bit

13 DB0 I/O Bus dữ liệu 8 bit

14 DB0 I/O Bus dữ liệu 8 bit

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

29 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

1C Dịch toàn bộ hiển thị sang phải

80 Đưa con trỏ về đầu dòng thứ

nhất

C0 Đưa con trỏ về đầu dòng thứ hai

38 Hai dòng và ma trận 5 x 7

Để hiển thị chữ cái và con số, mã ASCII của các chữ cái từ A đến Z, a đến z và các

con số tư 0 – 9 được gứi tới các chân D0 – D7 khi RS = 1.

Các mã lệnh được gửi tới LCD để xóa màn hình hoặc đưa con trỏ về đầu dòng…(

được liệt kê trên bảng trên) thông các chân D0 – D7.

Có thế sử dụng RS = 0 để kiểm tra bit cờ bận xem LCD đã sẵn sàng nhận thông tin

chưa. Khi R/W = 1 và RS = 0: Nếu D7 = 1 ( cờ bận bằng 1) có nghĩa LCD đang bận

các công việc bên trong và sẽ không nhận thông tin, nếu D7 = 0 sẵn sàng nhận

thông tin mới. Trong mọi trường hợp cần kiểm tra cờ bận trước khi ghi bất kì dữ

liệu nào lên LCD.

*Module này không chiếm khối Digital, để chọn module này ta chỉ cần click

chọn trong mục Misc Digital

Module LCD được nối tới Port 2.

Các hàm API:

void LCD_Start(void);

void LCD_Init(void);

void LCD_Position(BYTE bRow, BYTE bCol);

void LCD_PrString(CHAR * sRamString);

void LCD_PrCString(const char * sRomString);

void LCD_PrHexByte(BYTE bValue);

void LCD_PrHexInt(INT iValue);

3.1.3. Module I2C:

Moduel này không chiểm khối Digital, để chọn module này ta chỉ cần click

chọn trong mục Digital Comm.

Cấu hình cho module này như hình vẽ:

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

30 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG PARALLEL DÙNG WIRELESS

Các hàm API:

void I2Cm_Start(void);

BYTE I2Cm_fReadBytes(BYTE bSlaveAddr, BYTE * pbXferData, BYTE

bCnt, BYTE bMode);

BYTE I2Cm_bWriteBytes(BYTE bSlaveAddr, BYTE * pbXferData, BYTE

bCnt, BYTE bMode);

BYTE I2Cm_bWriteCBytes(BYTE bSlaveAddr, const BYTE *

pcbXferData, BYTE bCnt, BYTE bMode);

void I2Cm_Stop(void);

Các hàm API mức thấp:

BYTE I2Cm_fSendStart(BYTE bSlaveAddr, BYTE fRW);

BYTE I2Cm_fSendRepeatStart(BYTE bSlaveAddr, BYTE fRW);

void I2Cm_SendStop(void);

BYTE I2Cm_fWrite(BYTE bData);

BYTE I2Cm_bRead(BYTE fACK);

Các byte định mode hoạt động:

I2Cm_CompleteXfer 0x00 Thực hiện quá trình truyền từ Start

đếnStop

I2Cm_RepStart 0x01 Gửi tín hiệu Repeat Start thay vì gửi tín

hiệu Start

I2Cm_NoStop 0x02 Thực hiện truyền mà không gửi byte

stop

Nhóm 01 – Lớp 04ĐT2 – Khoa ĐTVT – ĐHBK Đà Nẵng

31 GIÁM SÁT, ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA CỔNG 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

VBAT5V

5V

J11

CON2

12

R22k2

R32k2

R18RESISTOR

GND

D9

LED

5V

5V

U2

DS1307

SQW/OUT7

SDA5

X11

X22

SCL6

VBAT3

VCC8

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

MIS

O

R23

RESISTOR SIP 9

12 3 4 5 6 7 8 9

SD

A

5V

nS

S

D1

LED

SCL

D2

LED

LS1

RELAY SPDT

35

412

D3

LED

D4

LED

J10

CON2

12

LCD_D5

5V

12V

3V3nRESET

nSSMISO

J6

CON2

12

nPD

GNDIRQ

5V

LCD_D7

MOSI

Q5NPN BCE

SCK

R19RESISTOR

R20RESISTOR

5V

D10

3V9

LCD_RS

R13RESISTOR

R17RESISTOR

R15RESISTOR

SCL

5V

SQW

Y1

CRYSTAL

VBAT

D5

DIODE

D6

DIODE

C4CAP

5V

D7

DIODE

C5CAP

D8

DIODE

12V

LC

D_

D7

LC

D_

D6

5V

GN

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

SMP8

P3[7]9

P3[5]10

P3[3]11

P3[1

]12

P1[7

]13

P1[5

]14

P1[3

]15

P1[1

]16

VS

S17

P1[0

]18

P1[2

]19

P1[4

]20

P1[6

]21

P3[0

]22

P3[2]23P3[4]24P3[6]25XRES26P4[0]27P4[2]28P4[4]29P4[6]30P2[0]31P2[2]32P2[4]33P

2[6

]34

P0[0

]35

P0[2

]36

P0[4

]37

P0[6

]38

VD

D39

P0[7

]40

P0[5

]41

P0[3

]42

P0[1

]43

P2[7

]44

Q2NPN BCE

Q3NPN BCE

Q4NPN BCE

TB

1

LC

D_

WR

LC

D_

E

LS3

RELAY SPDT

35

412

U3

LM7805C/TO220

IN1

OUT3

GN

D2

TB

2

LS4

RELAY SPDT

35

412

LS2

RELAY SPDT

35

412

TB

3

ISO1OPTO ISOLATOR-A

12

43

LC

D_

RS

SW

4

TB

4

ISO2OPTO ISOLATOR-A

12

43

ISO3OPTO ISOLATOR-A

12

43

12V

LC

D_

D4

ISO4OPTO ISOLATOR-A

12

43

SW

3

LC

D_

D5

3V3

SW

2

LCD_D4

GN

D

SW

1

12V

12V

5V

nP

D

R8 330

J7

CON2

12

C1CAP

nR

ES

ET

J8

CON2

12

R9 330

J9

CON2

12

C2CAP

R10 330

IRQ

R11 330

C3CAP

J11

CON2

12

R22k2

R21

2k2

R32k2

R18RESISTOR

GND

LCD_D6

R22

2k2

D9

LED

5V

5V

LCD_E

5V

MOSI

SW1

SW1

SW2

SW3

SW4

R16RESISTOR

LC

D_

WR

5V

SW2

12V

SCK

Q1NPN BCE

CYWUSB6935

J4

CON12A

1357911

2468

1012

TB3TB4

TB1TB2

J5

CON16

1 2 3 4 5 6 7 8 910

11

12

13

14

15

16

SW3

U2

DS1307

SQW/OUT7

SDA5

X11

X22

SCL6

VBAT3

VCC8

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

Q6NPN BCE

D11

LED

R23RESISTOR

5V

R24

RESISTOR

nRESET3V3

MISOnSS

IRQGND

nPD

CYWUSB6935

J4

CON12A

1357911

2468

1012

Q5NPN BCE

R19RESISTOR

R20RESISTOR

D10

3V9

C4CAP

C5CAP

3V3

5V

J5

CON2

12

J6

CON10

12345678910

R21

2k2

R22

2k2

GNDD5

D4 nRESETnSSD3

BS MISOnPDD2

IRQD1 MOSID0 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 <m8c.h>

#include "PSoCAPI.h"

#include "function.h"

#include <flashBlock.h>

#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 <flashBlock.h>

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