giao trinh thuc hanh vi dieu khien va vi xu ly

293

Click here to load reader

Upload: ti-vi-tuan

Post on 05-Dec-2014

194 views

Category:

Documents


36 download

TRANSCRIPT

Page 1: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

KHOA CÔNG NGHỆ THÔNG TIN

BỘ MÔN ĐIỆN TỬ - VIỄN THÔNG

GIÁO TRÌNH:

THỰC HÀNH VI ĐIỀU KHIỂN & VI XỬ LY

Ngươi biên soan: ThS.VU THÀNH VINH

THÁI NGUYÊN, NĂM 2010

1

Page 2: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

MUC LUC

PHẦN I: MÔ TẢ HỆ THỐNG...............................................................................4I. Tổng quan hệ thống.....................................................................................4II. Module LMD01...........................................................................................6III. Module LMD02.......................................................................................8IV. Module LMD03.....................................................................................10V. Module LMD04.........................................................................................12VI. Module LMD05.....................................................................................13VII. Module LMD06.....................................................................................15VIII. Module LMD07.....................................................................................18IX. Module LMD09 – Module điều khiển chính.........................................18

PHẦN II: THỰC HÀNH......................................................................................19BÀI 1: KHẢO SÁT MA TRẬN LED 8x8 MỘT MÀU VÀ QUÉT HÀNG....19

I. MUC ĐÍCH................................................................................................19II. THIẾT BỊ SỬ DUNG...............................................................................20III.THỰC HÀNH..........................................................................................23

1.Kiểm tra LMD........................................................................................232. Kiểm tra khối đệm cathode ULN2803..................................................233. Kiểm tra bộ đệm cực dương..................................................................234.Kiểm tra khối chốt hàng.........................................................................245.Kiểm tra khối đệm hàng.........................................................................246.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ.............................................................................................................24

BÀI 2: KHẢO SÁT MA TRẬN LED 8x8 MỘT MÀU VÀ QUÉT CỘT........25I. MUC ĐÍCH................................................................................................25II. THIẾT BỊ SỬ DUNG...............................................................................26III. THỰC HÀNH.........................................................................................28

1. Kiểm tra LMD.......................................................................................282. Kiểm tra khối đệm Cathode ULN2803.................................................293.Kiểm tra bộ đệm cực dương...................................................................294.Kiểm tra khối chốt cột............................................................................295.Kiểm tra khối đệm cột............................................................................306.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ.............................................................................................................30

BÀI 3: KHẢO SÁT MA TRẬN LED 8x8 2 MÀU XANH ĐỎ VÀ PHƯƠNG PHÁP QUÉT HÀNG........................................................................................31

I. MUC ĐÍCH................................................................................................31II. THIẾT BỊ SỬ DUNG...............................................................................31III. THỰC HÀNH.........................................................................................34

1.Kiểm tra LMD........................................................................................342. Kiểm tra bộ đệm cực dương..................................................................343.Kiểm tra khối ĐỆMCHÔT.....................................................................354. Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ.............................................................................................................35

BÀI 4: KHẢO SÁT MA TRẬN LED 8x8 2 MÀU XANH ĐỎ VÀ PHƯƠNG PHÁP QUÉT CỘT............................................................................................36

2

Page 3: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

I. MUC ĐÍCH................................................................................................36II. THIẾT BỊ SỬ DUNG...............................................................................36III. THỰC HÀNH.........................................................................................39

1.Kiểm tra LMD........................................................................................392.Kiểm tra bộ đệm cực âm DEMG, DEMR..............................................393.Kiểm tra khối ĐỆMCHÔT.....................................................................404.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ.............................................................................................................40

BÀI 5: KHẢO SÁT MODULE HIỂN THỊ 16x32 ĐIỂM MỘT MÀU............41I. MUC ĐÍCH................................................................................................41III. THIẾT BỊ SỬ DUNG.............................................................................41III.THỰC HÀNH..........................................................................................45

1.Kiểm tra LMD........................................................................................452.Kiểm tra bộ đệm cực âm ULN2803.......................................................453.Khảo sát hoạt động của module..............................................................454.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ.............................................................................................................46

BÀI 6: KHẢO SÁT MODULE HIỂN THỊ 16x32 ĐIỂM HAI MÀU.............47I.MUC ĐÍCH.................................................................................................47II.THIẾT BỊ SỬ DUNG................................................................................47III.THỰC HÀNH..........................................................................................50

1.Kiểm tra LMD........................................................................................502.Kiểm tra bộ đệm cực âm ULN2803.......................................................503.Khảo sát hoạt động của module..............................................................514.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ.............................................................................................................51

BÀI 7: KHẢO SÁT HOẶT ĐỘNG CỦA BẢNG TIN ĐIỆN TỬ...................52I. MUC ĐÍCH................................................................................................52II. THIẾT BỊ SỬ DUNG...............................................................................52III. THỰC HÀNH.........................................................................................52

1.Bật bảng tin điện tử................................................................................522.Khởi động phần mềm điều khiển...........................................................523.Thay đổi nội dung, lưu nội dung cho bảng tin........................................53

3

Page 4: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

PHẦN I: MÔ TẢ HỆ THỐNG

I. Tổng quan hệ thống

Giới thiệu

LMD TS là hệ thống mô hình đào tạo phục vụ khảo sát, nghiên cứu, thực hành

thiết kế bảng thông tin điện tử sử dụng công nghệ ma trận đèn LED (Light

Emitting Diode – Đi ôt phát quang). Hệ thống giúp sinh viên tiếp cận với công

nghệ hiển thị bằng bảng ma trận đèn LED từ cơ bản đến nâng cao, từ đó sinh

viên có thể hiểu, thiết kế được hệ thống bảng. Hệ thống được thiết kế theo tư duy

logic kỹ thuật liền mạch từ đầu trí cuối dựa theo cách nhìn của sinh viên, cộng

với sự sắp xếp, phân chia bài bản theo các vấn đề chuyên môn chi tiết rõ ràng.

Đặc tính

Làm quen với các linh kiện chức năng

Thiết kế dàn trải

Các điểm kiểm tra (test point)

Sơ đồ nguyên lí rõ ràng

Phân cấp từ cơ bản đến nâng cao

Phân chia thành nhiều module

Khảo sát phương pháp quét hàng, quét cột

Hiển thị một màu đỏ và tổ hợp 2 màu xanh đỏ

Các thành phần hệ thống

Hệ thống được chia thành 9 module theo bài thực hành, một khung giá chính

bằng kim loại để đỡ các module. Khi sử dụng module nào thì cài module đó trên

lên ray của khung giá kim loại.

Bảng dưới đây là danh sách các module và chức năng của chúng

4

Page 5: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Tên Mô tả

LMD01

Ma trận LED đơn sắc 8x8, quét theo hàng, khối quét hàng, đệm hàng,

chốt hàng, đệm cathode, đệm anode, các chốt cấp nguồn kiểm thử tín

hiệu

LMD02

Ma trận LED đơn sắc 8x8, quét theo cột, khối quét cột, đệm cột, chốt

cột, đệm cathode, đệm anode, đầu nối tín hiệu điều điều khiển và dữ

liệu, các chốt cấp nguồn kiểm thử tín hiệu

LMD03

Ma trận LED hai màu xanh/đỏ 8x8, quét theo hàng, khối quét hàng,

đệm chốt hàng, đệm anode, đầu nối tín hiệu điều điều khiển và dữ

liệu, các chốt cấp nguồn kiểm thử tín hiệu

LMD04

Ma trận LED hai màu xanh/đỏ 8x8, quét theo cột, khối quét cột, đệm

chốt cột, đệm cathode, đầu nối tín hiệu điều điều khiển và dữ liệu, các

chốt cấp nguồn kiểm thử tín hiệu

LMD05

Module hiển thị màu đỏ, 16x32 pixel, quét theo hàng, khối kích dòng,

đệm chốt dữ liệu, đầu vào/đầu ra tín hiệu điều khiển và dữ liệu, các

chốt cấp nguồn kiểm thử tín hiệu

LMD06

Module hiển thị hai màu xanh/đỏ 16x32 pixel, quét theo hàng, khối

kích dòng, đệm chốt dữ liệu, đầu vào/đầu ra tín hiệu điều khiển và dữ

liệu, các chốt cấp nguồn và kiểm thử tín hiệu

LMD07Bảng tin điện tử 16x96 pixel, outdoor, đơn sắc, giao tiếp RS232,

nguồn 220VAC

LMD09Board điều khiển chung, MCU AT89S52, 16Kbyte Ram, RS232,

LMD port, KeyBoard, nạp ISP và cấp nguồn cho thí nghiệm

Khung Giá đỡ bằng kim loại

5

Page 6: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

II. Module LMD01

LMD01 là ma trận LED đơn sắc 8x8, quét theo hàng, khối quét hàng, đệm hàng,

chốt hàng, đệm cathode, đệm anode, các chốt cấp nguồn kiểm thử tín hiệu

LMD01 chứa các loại, linh kiện cơ bản, và lí thuyết cơ bản để điều khiển bảng

LED. LMD01 đưa ra một ma trận LED 8x8 điểm, đơn sắc (đỏ) và các linh kiện

để điều khiển một LMD theo phương pháp đầu tiên – Quét theo hàng.

LMD01 gồm các thành phần sau:

Ma trận LED 8x8 pixel, đơn sắc (đỏ)

Khối đệm Kathode – ULN2803

Khối đệm Anode – 74LS574

Khối đệm dữ liệu hàng – 74LS164

Khối chốt dữ liệu hàng – 74LS573

Khối quét hàng – 74LS164

Module có chốt cắm nguồn 5V, jack nối tín hiệu điều khiển để kết nôi với

module điều khiển chung. Hình 1 là module LMD01.

Các thành phần được bố trí dàn trải, có sơ đồ nguyên lí rõ ràng, các đường tín

hiệu có các chốt để đo thử.

Sơ đồ nguyên lí

6

Page 7: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 1. Sơ đồ nguyên lí LMD01

7

Page 8: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

III. Module LMD02

LMD02 đưa ra một ma trận LED 8x8 điểm, đơn sắc (đỏ) và các linh kiện để điều khiển một LMD theo phương pháp Quét theo cột.

Các thành phần được bố trí dàn trải, có sơ đồ nguyên lí rõ ràng, các đường tín hiệu có các chốt để đo thử.

LMD02 gồm các thành phần sau:

Ma trận LED 8x8 pixel, đơn sắc (đỏ)

Khối đệm Kathode – ULN2803

Khối đệm Anode – 74LS574

Khối đệm dữ liệu cột – 74LS164

Khối chốt dữ liệu cột – 74LS573

Khối quét cột – 74LS164

Module có chốt cắm nguồn 5V để, jack nối tín hiệu điều khiển để kết nôi với module điều khiển chung. Hình 4 là module LMD02.

Sơ đồ nguyên lí

Hình 2. Sơ đồ nguyên lí LMD02

8

Page 9: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

IV.Module LMD03

LMD03 đưa ra một ma trận LED 8x8 điểm, hai màu xanh/đỏ và các linh kiện để điều khiển một LMD theo phương pháp Quét theo hàng.

Các thành phần được bố trí dàn trải, có sơ đồ nguyên lí rõ ràng, các đường tín hiệu có các chốt để đo thử.

LMD03 gồm các thành phần sau:

Ma trận LED 8x8 pixel, 2 màu xanh/đỏ

Khối đệm chốt dữ liệu màu xanh – 74LS595

Khối đệm chốt dữ liệu màu đỏ – 74LS595

Khối đệm Anode – 74LS574

Khối quét hàng – 74LS164

Module có chốt cắm nguồn 5V, jack nối tín hiệu điều khiển để kết nôi với module điều khiển chung. Hình 7 là module LMD03.

Sơ đồ nguyên lí

Hình 3. Sơ đồ nguyên lí LMD03

9

Page 10: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

V. Module LMD04

LMD04 đưa ra một ma trận LED 8x8 điểm, hai màu xanh/đỏ và các linh kiện để

điều khiển một LMD theo phương pháp Quét theo cột.

Các thành phần được bố trí dàn trải, có sơ đồ nguyên lí rõ ràng, các đường tín

hiệu có các chốt để đo thử.

LMD04 gồm các thành phần sau:

Ma trận LED 8x8 pixel, 2 màu xanh/đỏ

Khối đệm màu xanh – ULN2803

Khối đệm màu đỏ – ULN2803

Khối quét cột – 74LS164

Khối đệm chốt dữ liệu cột – 74LS595

Module có chốt cắm nguồn 5V, jack nối tín hiệu điều khiển để kết nôi với

module điều khiển chung. Hình 10 là module LMD04.

Sơ đồ nguyên lí

10

Page 11: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 4. Sơ đồ nguyên lí LMD04

11

Page 12: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

VI.Module LMD05

LMD05 là một module hiển thị 16x32 pixel, đơn sắc màu đỏ trên đó có đệm kích

dòng Anode, đệm Kathode, đệm chốt dữ liệu theo hàng. Các thành phần được bố

trí dàn trải, có sơ đồ nguyên lí rõ ràng, các đường tín hiệu có các chốt để đo thử.

LMD05 gồm các thành phần sau:

Ma trận LED 16x32 pixel, 1 màu đỏ

Khối đệm dữ liệu hàng – 4 IC 74LS574

Khối chốt dữ liệu hàng – 4 IC 74LS574

Khối đệm Anode – 4 IC ULN2803

Jack tín hiệu vào, jack tín hiệu ra

Module có chốt cắm nguồn 5V, jack nối tín hiệu điều khiển để kết nôi với

module điều khiển chung. Hình 13 là module LMD05.

Sơ đồ nguyên lí

12

Page 13: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 5. Sơ đồ nguyên lí LMD05

13

Page 14: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

VII. Module LMD06

LMD06 là một module hiển thị 16x32 pixel hai màu xanh và đỏ, trên đó có các

khối đệm kích dòng Anode, đệm Kathode, đệm chốt dữ liệu theo hàng. Các thành

phần được bố trí dàn trải, có sơ đồ nguyên lí rõ ràng, các đường tín hiệu có các

chốt để đo thử.

LMD06 gồm các thành phần sau:

Ma trận LED 16x32 pixel, 2 màu xanh/đỏ

Khối đệm chốt dữ liệu hàng – 16 IC 74LS574

Khối đệm Anode – 4 IC ULN2803

Jack tín hiệu vào, jack tín hiệu ra

Module có chốt cắm nguồn 5V, jack nối tín hiệu điều khiển để kết nôi với

module điều khiển chung. Hình 16 là module LMD06.

Sơ đồ nguyên lí

14

Page 15: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 6. Sơ đồ nguyên lí LMD06

15

Page 16: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

VIII. Module LMD07

Hình 7. LMD07 – Bảng tin điện tử 16x96 pixel đơn sắc (xanh/đỏ)

LMD07 là một bảng thông tin điện tử hoàn chỉnh 16x96 pixel một màu đỏ, với

các tham số kỹ thuật như sau:

LED outdoor

16x96 pixel màu đỏ

MCU AT89S52, 8k flash ROM

16 Kbyte RAM

Giao diện truyền thông RS232

Sử dụng nguồn 220VAC

IX.Module LMD09 – Module điều khiển chính

LMD09 là hệ vi điều khiển chứa các các thành phần để phục vụ cho các bài thực

hành các phương pháp điều khiển LMD bằng chương trinh điều khiển

Các thành phần có trên module:

- MCU PIC AT89S52

- 16K RAM

- Giao diện RS232

- Bàn phím 8

- Giao diện ISP

- Cổng điều khiển LMD

Sơ đồ nguyên lí

16

Page 17: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 8. Sơ đồ nguyên lý mạch LMD09

17

Page 18: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

PHẦN II: THỰC HÀNH

BÀI 1: KHẢO SÁT MA TRẬN LED 8x8 MỘT MÀU VÀ QUÉT HÀNG

I. MUC ĐÍCH

Tìm hiểu cấu trúc của ma trận LED, kiểm tra độ sáng của từng đèn LED, tìm

hiểu phương pháp điều khiển quét hàng, và một số linh kiện điều khiển

II. THIẾT BỊ SỬ DUNG

Module LMD01, LMD09, dây nguồn, dây cáp tín hiệu

Nguyên lí làm việc

- Khối quét hàng làm nhiệm vụ tạo ra tín hiệu quét cho 8 chân đầu ra từ H1 đến

H8. Các chân đầu ra sẽ lần lượt và luân phiên có tín hiệu mức cao, tại một thời

điểm chỉ có một chân có tín hiệu mức cao, các chân còn lại mang tín hiệu mức

18

Page 19: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

thấp hết, sau một khoảng thời gian quy định sẽ chuyển sang chân tiếp theo, cứ

như thế từ chân đầu tiên cho đến hết chân cuối cùng sau đó lại quay lại chân đầu

tiên. Thời gian tồn tại trạng thái mức cao của mỗi chân đầu ra là bằng nhau

nhưng có thể thay đổi được, tổng thời gian để quét hết một vòng 8 chân đầu ra

cũng thay đổi được, do vậy phải quyết định được thời điểm bắt đầu chuyển trạng

thái của một chân bất kỳ. Khôi quét hàng có một đầu vào tín hiệu đồng bộ SYN

và một đầu vào xung nhịp. Đầu vào xung nhịp để quyết định thời điểm chuyển

đổi trạng thái của đầu ra, còn đầu vào tín hiệu đồng bộ để xác định thời điểm bắt

đầu một vòng quét. Tại thời điểm trước khi bắt đầu một vòng quét mới tín hiệu

SYN băng một, ngay sau đó là một xung dương đưa vào làm cho đầu ra H1

chuyển trạng thái từ 0 sang 1, sau đó một khoảng thời gian bắt đầu chuyển trạng

thái cho chân đầu ra tiếp theo (H2) tín hiệu SYN = 0, và liền đó là một xung

dương được đưa vào đầu vào xung nhịp, tín hiệu SYN chỉ bằng 1 khi bắt đầu một

vòng quét mới còn lại toàn bộ thời gian quét luôn = 0.

- Khối đệm hàng làm nhiệm vụ chứa dữ liệu của một hàng để sẵng sàng cho

việc hiển thị một hàng, dữ liệu được đưa vào kiểu nối tiếp và dịch chuyển trên

các chân đầu ra b1 đến b8. Dữ liệu b8 được đưa vào đầu tiên, b1 dịch đến sau,

dịch đến khi dữ liệu của b1 được đưa vào thì dữ liệu b8 dịch đến chân b8 và dữ

liệu của b1 có trên chân b1. Khối này có một chân đầu vào xung nhịp sử dụng

cho việc đọc dữ liệu vào.

- Khối chốt hàng làm nhiệm vụ chốt dữ liệu của một hàng. Trước khi hiển thị

một hàng dữ liệu phải sẵn hàng ở các đầu vào D của khối chốt hàng, một xung

dương được đưa vào để đẩy dữ liệu từ các chân đầu vào D tới các chân đầu ra Q

và giữ nguyên ở đó để cho một hàng được hiển thị trong khoảng thời gian xác

định trước hiển thị một hàng tiếp theo.

- Khối đệm Kathode làm nhiệm vụ tạo điện áp âm hút dòng cho kathode của

đèn LED, các đầu ra của khối sẽ nối đến các cathode của đèn LED. Các đầu vào

được nối với dữ liệu điều khiển đèn LED.

- Khối đệm Anode làm nhiệm vụ cấp nguồn dương cho nhóm các LED và các

đầu ra Q nối đến các chân A của đèn LED.

- Khối ma trận đèn LED là một ma trân 8x8 đèn LED các chân A của một hàng

LED được nối chung tạo nên 8 chân A chung, các chân K của một cột được nối

chung và tạo nên 8 chân K chung.

19

Page 20: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Để hiển thị toàn bộ ma trận LED các hàng sẽ lần lượt được luân phiên hiển thị từ

hàng đầu tiên cho đến hàng cuối cùng rồi lặp lại. Tại một thời điểm chỉ có một

hàng được hiển thị.

Trước thời điểm bắt đầu hiển thị hàng đầu tiên dữ liệu của hàng đầu tiên được

đưa vào bộ đệm hàng theo cách nối tiếp từ b8 vào trước rồi đến b1, xung nhịp

được cấp từ bên ngoài vào để đọc mỗi bít dữ liệu tuân tự, khi đã đủ hết dữ liệu

rồi thì xung nhịp không được phép làm việc nữa.

Tiếp theo là hiển thị dữ liệu của hàng đầu tiên, khi hiển thị tín hiệu SYN được

đưa vào = 1, sau đó sẽ có một xung dương OUTCLK, xung dương OUTCLK sẽ

đồng thời làm hai việc: 1 là đưa toàn bộ dữ liệu của hàng đầu tiên mà đang tồn tại

ở đầu vào bộ chốt hàng đến đầu ra bộ chốt hàng và 2 đặt đầu ra H1 của khối quét

hàng lên mức cao để hiển thị hàng đầu tiên. Vậy là dữ liệu của hàng đầu tiên đã

được chuyển đến bộ đệm Kathode, H1 cũng đã được chuyển lên mức cao đưa

vào bộ đệm Anode, quá trình bắt đầu hiển thị hàng đầu tiên đã hoàn tất, việc còn

lại là của hai bộ đệm. Bộ đệm Kathode sẽ khuyếch đại đảo các bit dữ liệu và

điều khiển việc hút dòng cho 8 Kathode chung, bộ đệm Anode sẽ cấp nguồn

dương cho một hàng. Trạng thái này được duy trì một khoảng thời gian xác định

để các LED của hàng đầu tiên được hiển thị trong một khoảng thời gian xác định.

Khi hết thời gian cho việc hiển thị hàng đầu tiên thì việc hiển thị hàng thứ hai sẽ

phải bắt đầu.

Việc bắt đầu cho hiển thị hàng thứ 2 cũng giống như hàng thứ nhất chỉ có điểm

duy nhất khác biệt là tín hiệu SYN đặt vào phải bằng 0 còn lại thì mọi thủ tục

không có gì thay đổi. Do vậy khi có xung OUTCLK thì H1 sẽ ở mức thấp và

mức cao trước đó của nó sẽ được dịch sang H2 làm cho A2 được cấp nguồn và

20

Page 21: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

hàng thứ hai sáng. Hàng thứ hai cũng sẽ được hiển thị trong một khoảng thời

gian xác định và kết thúc

Quá trình được diễn ra lặp lại tương tự đối với các hàng sau cho đến hết hàng 8.

Kết thúc thời gian hiển thị hàng 8 là hết một chu trình quét toàn bộ LMD, một

chu trình quét mới sẽ lại bắt đầu. Quá trình cứ lặp đi lặp lại như thế trong suốt

thời gian hoạt động của LMD.

III.THỰC HÀNH

1.Kiểm tra LMD

- Đảm bảo ma trận LED HY2088BS đã được gắn lên đế MATRIX1

- Không cấp nguồn cho bảng LMD01

- Dùng đồng hồ vạn năng cơ học, để thang đo 1Ohm

- Đưa que đỏ vào một chân K1 (dùng kẹp hoặc cầm tay)

- Quẹt đầu que đen của đồng hồ qua các chốt từ A1 đến A8, khi quẹt

quan sát LMD sẽ thấy các đèn cột 1 sáng đều lần lượt từ hàng 1 đến hàng

8 là tốt, chứng tỏ không LED nào hỏng và mạch nối đúng cấu hình chân

- Lần lượt làm như thế với các chân từ K2 đến K8, để kiểm tra các

cột còn lại của toàn bộ LMD.

Sau khi kiểm tra nếu không thấy LED nào hỏng là tốt.

2. Kiểm tra khối đệm cathode ULN2803

- LMD đã được kiểm tra và gắn lên đế MATRIX1

- IC ULN2803 đã gắn lên đế của khối DEMK

- Không cắm IC trên các khối ĐỆMA1, và ĐEMK1

- Không cấp nguồn 5V cho bảng, chỉ đấu dây cho chốt GND

- Nối dây từ nguồn +5V với một đầu điện trở 100 Ohm, đầu kia của

điện trở nối với một chân A bất kỳ.

- Dùng một dây 5V khác quẹt qua các chốt từ b1 đến b8, khi quẹt

thấy các LED của hàng tương ứng với chân A lần lượt sáng đều là

ULN2803 tốt.

3. Kiểm tra bộ đệm cực dương

- Giữ nguyên các linh kiện như phần trên

- Kiểm tra đế của khối QUETHANG không có gì, nếu có thì bỏ ra

- IC 74573(4) đã gắn lên đế của khối DEMA

21

Page 22: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Cấp nguồn 5V và GND cho bảng.

- Dùng một dây nguồn 5V chấm vào chốt b bất kỳ giữa khối CHỐT

HÀNG và khối ĐỆMK

- Dùng một dây nguồn 5V khác quẹt qua các chốt từ H1 đến H8, khi

quẹt quan sát thấy các LED của cột tương ứng với b sáng đều là tốt. Cả

hai khối ĐỆMA VÀ ĐỆMK đều tốt.

4.Kiểm tra khối chốt hàng

- Giữ nguyên các linh kiện như phần trên.

- Kiểm tra đế ic của khối ĐỆM HÀNG không có gì, nếu có thì bỏ ra

- Gắn IC 74573(4) lên đế của khối CHOTHANG

- Đưa tín hiệu 0 hoặc 1 vào đầu vào bất kỳ từ D1 đến D8 của khối

CHỐT HÀNG, dùng thanh kim loại hoặc nguồn 0V hoặc 5V quét vào

chốt OUTCLK, dùng đồng hồ đo điện áp của các đầu ra từ Q tương ứng

với đầu vào D sau mỗi lần quẹt.

- Làm lại như trên vài lần với các tín hiệu vào là 0 , 1 ta sẽ thấy đầu

vào D được đưa đến đầu ra Q và sau mỗi lần có xung, trạng thái đầu ra sẽ

được giữ nguyên nếu không có một xung quẹt lên chốt OUTCLK mặc dù

đầu vào có thay đổi trạng thái 0/1.

5.Kiểm tra khối đệm hàng

- Gắn IC 74xx164 lên đế của khối DEMHANG và QUETHANG

Chú ý: tất cả các IC phải cắm đúng chiều

- Nối chốt nguồn 5V và GND cho bảng (chưa bật nguồn)

- Khối điều khiển LMD09 đã có sẵn chương trình LMD01 trên chíp

89s52

- Nối cáp tín hiệu 4 chân từ bảng LMD09 tới LMD01

- Bật nguồn cho cả hai khối.

- nếu không có gì sai trên LMD sẽ hiển thị hình ảnh/ kí tự lập trình

sẵn.

- dùng máy hiện sóng quan sát tín hiệu tại các chốt DATA, INCLK,

OUTCLK, B, H, A, K để thấy rõ quá trình làm việc của khối QUÉT

HÀNG, ĐỆM HÀNG và toàn bộ hệ thống

- Phân tích giản đồ xung của 4 chân tín hiệu

6.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ

22

Page 23: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

BÀI 2: KHẢO SÁT MA TRẬN LED 8x8 MỘT MÀU VÀ QUÉT CỘT

I. MUC ĐÍCH

Khảo sát phương pháp điều khiển quét cột, và một số linh kiện điều khiển.

II. THIẾT BỊ SỬ DUNG

Module LMD02, LMD09, dây nguồn, dây cáp tín hiệu

Nguyên lí làm việc

- Khối quét cột làm nhiệm vụ tạo ra tín hiệu quét cho 8 chân đầu ra từ C1 đến

C8. Các chân đầu ra sẽ lần lượt và luân phiên có tín hiệu mức cao, tại một thời

điểm chỉ có một chân có tín hiệu mức cao, các chân còn lại mang tín hiệu mức

thấp hết, sau một khoảng thời gian xác định sẽ chuyển sang chân tiếp theo, cứ

như thế từ chân đầu tiên cho đến hết chân cuối cùng sau đó lại quay lại chân đầu

tiên. Thời gian tồn tại trạng thái mức cao của mỗi chân đầu ra là bằng nhau

nhưng có thể thay đổi được, tổng thời gian để quét hết một vòng 8 chân đầu ra

cũng thay đổi được, do vậy phải quyết định được thời điểm bắt đầu chuyển trạng

thái của một chân bất kỳ. Khối quét cột có một đầu vào tín hiệu đồng bộ SYN và

một đầu vào xung nhịp. Đầu vào xung nhịp để quyết định thời điểm chuyển đổi

trạng thái của đầu ra, còn đầu vào tín hiệu đồng bộ để xác định thời điểm bắt đầu

một vòng quét. Tại thời điểm trước khi bắt đầu một vòng quét mới tín hiệu SYN

23

Page 24: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

bằng một, ngay sau đó là một xung dương đưa vào làm cho đầu ra H1 chuyển

trạng thái từ 0 sang 1, sau đó một khoảng thời gian bắt đầu chuyển trạng thái cho

chân đầu ra tiếp theo (H2) tín hiệu SYN = 0, và liền đó là một xung dương được

đưa vào đầu vào xung nhịp, tín hiệu SYN chỉ bằng 1 khi bắt đầu một vòng quét

mới còn lại toàn bộ thời gian quét luôn = 0.

- Khối đệm cột làm nhiệm vụ chứa dữ liệu của một cột để sẵng sàng cho việc

hiển thị một cột, dữ liệu được đưa vào kiểu nối tiếp và dịch chuyển trên các chân

đầu ra b1 đến b8. Dữ liệu của b8 được đưa vào đầu tiên, dịch dần từ b1 đến b8,

cho đến khi dữ liệu của b1 được đưa vào thì dữ liệu b8 dịch đến chân b8 và dữ

liệu của b1 có trên chân b1. Một chân đầu vào xung nhịp INCLK cần cho việc

đọc dữ liệu vào.

- Khối chốt cột làm nhiệm vụ chốt dữ liệu của một cột. Trước khi hiển thị một

cột dữ liệu phải sẵn hàng ở các đầu vào D của khối chốt cột, một xung dương

được đưa vào để đẩy dữ liệu từ các chân đầu vào D tới các chân đầu ra Q và giữ

nguyên ở đó để cho một cột được hiển thị trong khoảng thời gian xác định trước

hiển thị một hàng tiếp theo.

- Khối đệm Kathode làm nhiệm vụ tạo điện áp âm hút dòng cho nhóm kathode

của các đèn LED, các đầu ra của khối sẽ nối đến các cathode của đèn LED. Các

đầu vào được nối với dữ liệu điều khiển đèn LED.

- Khối đệm Anode làm nhiệm vụ cấp nguồn dương cho các LED, nên các đầu

ra Q nối đến các chân A của đèn LED

- Khối ma trận đèn LED là một ma trân 8x8 đèn LED các chân A của một hàng

LED được nối chung tạo nên 8 chân A chung, các chân K của một cột được nối

chung và tạo nên 8 chân K chung

24

Page 25: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Để hiển thị toàn bộ ma trận LED các cột sẽ lần lượt được luân phiên hiển thị từ

cột đầu tiên cho đến cột cuối cùng rồi lặp lại. Tại một thời điểm chỉ có một cột

được hiển thị.

Trước thời điểm bắt đầu hiển thị cột đầu tiên dữ liệu của cột đầu tiên được đưa

vào bộ đệm cột theo cách nối tiếp từ b8 vào trước rồi đến b1, xung nhịp được cấp

từ bên ngoài vào để đọc mỗi bít dữ liệu tuần tự, khi đã đủ hết dữ liệu rồi thì xung

nhịp không được phép làm việc nữa.

Tiếp theo là hiển thị dữ liệu của hàng đầu tiên, khi hiển thị tín hiệu SYN=1 được

đưa vào, sau đó sẽ có một xung dương OUTCLK, xung dương OUTCLK sẽ đồng

thời làm hai việc: 1 là đưa toàn bộ dữ liệu của cột đầu tiên mà đang tồn tại ở đầu

vào bộ chốt cột đến đầu ra bộ chốt cột; và 2 là dịch tín hiệu SYN=1 đến đầu ra

C1 của khối quét cột để hiển thị cột đầu tiên. Vậy là dữ liệu của cột đầu tiên đã

được chuyển đến bộ đệm Anode, C1 cũng đã được chuyển lên mức cao đưa vào

bộ đệm Kathode, quá trình bắt đầu hiển thị hàng đầu tiên đã hoàn tất, việc còn lại

là của hai bộ đệm. Bộ đệm Anode sẽ khuyếch đại các bit dữ liệu và điều khiển

việc cấp nguồn dương cho 8 Anode , bộ đệm Kathode sẽ khuyếch đại đảo tín

hiệu tích cực cột để hút dòng cho một cột. Trạng thái này được duy trì một

khoảng thời gian xác định để các LED của cột đầu tiên được hiển thị trong một

khoảng thời gian xác định. Khi hết thời gian cho việc hiển thị cột đầu tiên thì

việc hiển thị cột thứ hai sẽ phải bắt đầu.

Việc bắt đầu cho hiển thị cột thứ 2 cũng giống như cột thứ nhất chỉ có điểm duy

nhất khác biệt là tín hiệu SYN đặt vào phải bằng 0 còn lại thì mọi thủ tục không

có gì thay đổi. Do vậy khi có xung OUTCLK thì C1 sẽ ở mức thấp và mức cao

trước đó của nó sẽ được dịch sang C2 làm cho K2 được nối đất và cột thứ hai

sáng. Cột thứ hai cũng sẽ được hiển thị trong một khoảng thời gian xác định và

kết thúc

Quá trình được diễn ra lặp lại tương tự đối với các cột sau cho đến hết cột 8.

Kết thúc thời gian hiển thị cột 8 là hết một chu trình quét toàn bộ LMD, một chu

trình quét mới sẽ lại bắt đầu. Quá trình cứ lặp đi lặp lại như thế trong suốt thời

gian hoạt động của LMD.

III. THỰC HÀNH

1. Kiểm tra LMD

- Gắn LMD HY2088BS lên đế MATRIX1

- Không cấp nguồn cho bảng

25

Page 26: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Đưa điện áp 0V vào một chân K1 (dùng kẹp hoặc cầm tay)

- Nối dây từ nguồn 5V nối tiếp với một đầu điện trở 100 Ohm (dùng

kẹp hoặc cầm bằng tay)

- Quẹt đầu còn lại của điện trở qua các chốt từ A1 đến A8, khi quẹt

quan sát LMD sẽ thấy các đèn cột 1 sáng đều lần lượt từ hàng 1 đến hàng

8 là tốt, chứng tỏ không LED nào hỏng và mạch nối đúng cấu hình chân

- Lần lượt làm như thế với các chân từ K2 đến K8, để kiểm tra các

cột còn lại của toàn bộ LMD. Cũng có thể kiểm tra theo từng hàng bằng

cách cho điện áp dương vào chân A và quẹt đầu 0V qua các chân K1 đến

K8.

Sau khi kiểm tra nếu không thấy LED nào hỏng là tốt

2. Kiểm tra khối đệm Cathode ULN2803

- LMD đã được kiểm tra và gắn lên đế MATRIX1

- IC ULN2803 đã gắn lên đế của khối DEMK

- Không cắm IC trên các khối DEMA2, và DEMK2

- Không cấp nguồn 5V cho bảng, chỉ đấu dây cho chốt GND

- Nối dây từ nguồn +5V với một đầu điện trở 100 Ohm, đầu kia nối

với một chân A bất kỳ.

- Dùng một dây 5V khác quẹt qua các chốt từ b1 đến b8, khi quẹt

thấy các LED của hàng tương ứng với chân A lần lượt sáng đều là

ULN2803 tốt.

3.Kiểm tra bộ đệm cực dương

- Giữ nguyên các linh kiện như phần trên

- Kiểm tra đế của khối CHOTCOT không có gì

- IC 74573(4) đã gắn lên đế của khối DEMA

- Cấp nguồn 5V và GND cho bảng.

- Dùng một dây nguồn 5V chấm vào chốt C bất kỳ giữa khối

QUETCOT và khối ĐỆMK

- Dùng một dây nguồn 5V khác quẹt qua các chốt từ b1 đến b8, khi

quẹt quan sát thấy các LED của cột tương ứng với C đều sáng là tốt. Cả

hai khối ĐỆMA VÀ ĐỆMK đều tốt.

4.Kiểm tra khối chốt cột

- Giữ nguyên các linh kiện như phần trên.

26

Page 27: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Kiểm tra đế IC của khối ĐỆMCỘT không có gì, nếu có thì bỏ ra

- Gắn IC 74573(4) lên đế của khối CHOTCỘT

- Đưa tín 0 hoặc 1 vào đầu vào bất kỳ từ D1 đến D8 của khối

CHỐTCOT, dùng thanh kim kim loại hoặc nguồn 0V hoặc 5V quét vào

chốt OUTCLK, dùng đồng hồ đo điện áp của các đầu ra từ Q tương ứng

với đầu vào D sau mỗi lần quẹt.

- Làm lại như trên vài lần với các tín hiệu vào là 0 , 1 ta sẽ thấy đầu

vào D được đưa đến đầu ra Q và sau mỗi lần có xung, trạng thái đầu ra sẽ

được giữ nguyên nếu không có một xung quẹt lên chốt OUTCLK mặc dù

đầu vào có thay đổi trạng thái 0/1.

5.Kiểm tra khối đệm cột

- Gắn IC 164 lên đế của khối DEMCỘT và QUETCỘT

Chú ý: tất cả các IC phải cắm đúng chiều

- Nối chốt nguồn 5V và GND cho bảng (chưa bật nguồn)

- Khối điều khiển LMD09 đã có sẵn chương trình LMD02 trên chíp

89s52

- Nối cáp tín hiệu 4 chân từ bảng LMD09 tới LMD02

- Bật nguồn cho cả hai khối.

- Nếu không có gì sai trên LMD sẽ hiển thị chữ Z

- Dùng máy hiện sóng quan sát tín hiệu tại các chốt DATA, INCLK,

OUTCLK, B, C, A, K để thấy rõ quá trình làm việc của khối

QUÉTCỘTT, ĐỆMCỘT và toàn bộ hệ thống

- Phân tích giản đồ xung của 4 chân tín hiệu

6.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ

27

Page 28: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

BÀI 3: KHẢO SÁT MA TRẬN LED 8x8 2 MÀU XANH ĐỎ VÀ PHƯƠNG

PHÁP QUÉT HÀNG

I. MUC ĐÍCH

Khảo sát cấu trúc của ma trận LED 8x8 2 màu xanh đỏ, kiểm tra độ sáng của

từng đèn LED, tìm hiểu phương pháp điều khiển quét hàng cho 2 màu, và một số

linh kiện điều khiển

II. THIẾT BỊ SỬ DUNG

Module LMD03, LMD09, dây nguồn, dây cáp tín hiệu

Nguyên lí làm việc

- Khối quét hàng làm nhiệm vụ tạo ra tín hiệu quét cho 8 chân đầu ra từ H1 đến

H8. Các chân đầu ra sẽ lần lượt và luân phiên có tín hiệu mức cao, tại một thời

điểm chỉ có một chân có tín hiệu mức cao, các chân còn lại mang tín hiệu mức

thấp hết, sau một khoảng thời gian quy định sẽ chuyển sang chân tiếp theo, cứ

như thế từ chân đầu tiên cho đến hết chân cuối cùng sau đó lại quay lại chân đầu

28

Page 29: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

tiên. Thời gian tồn tại trạng thái mức cao của mỗi chân đầu ra là bằng nhau

nhưng có thể thay đổi được, tổng thời gian để quét hết một vòng 8 chân đầu ra

cũng thay đổi được, do vậy phải quyết định được thời điểm bắt đầu chuyển

trạng thái của một chân bất kỳ. Khôi quét hàng có một đầu vào tín hiệu đồng bộ

SYN và một đầu vào xung nhịp. Đầu vào xung nhịp để quyết định thời điểm

chuyển đổi trạng thái của đầu ra, còn đầu vào tín hiệu đồng bộ để xác định thời

điểm bắt đầu một vòng quét. Tại thời điểm trước khi bắt đầu một vòng quét mới

tín hiệu SYN băng một, ngay sau đó là một xung dương đưa vào làm cho đầu ra

H1 chuyển trạng thái từ 0 sang 1, sau đó một khoảng thời gian bắt đầu chuyển

trạng thái cho chân đầu ra tiếp theo (H2) tín hiệu SYN = 0, và liền đó là một

xung dương được đưa vào đầu vào xung nhịp, tín hiệu SYN chỉ bằng khi bắt

đầu một vòng quét mới còn lại toàn bộ thời gian quét luôn = 0.

- Khối DEMCHOTG (và DEMCHOTR) làm nhiệm vụ chứa dữ liệu G và R

của một hàng và chốt dữ liệu tại đầu ra để hiển thị một hàng, dữ liệu được đưa

vào kiểu nối tiếp và xuất ra song song. Dữ liệu của R8 được đưa vào đầu tiên, dữ

liệu G1 được đưa vào cuối. Khi 16 bit dữ liệu đã được đưa vào 2 bộ ĐỆMCHÔT,

một xung dương OUTCLK được đưa vào để đẩy dữ liệu tới các chân đầu ra và

giữ nguyên ở đó để cho một hàng được hiển thị trong khoảng thời gian xác định

trước khi hiển thị một hàng tiếp theo. Một khối này làm cả 3 việc tương đương 3

khối: ĐỆMHANG, CHÔTHÀNG, ĐỆMK trong LMD01. ĐỆMCHOTG phục vụ

cho màu xanh, ĐỆMCHOTR phục vụ màu đỏ.

- Khối đệm Anode làm nhiệm vụ cấp nguồn dương cho nhóm các LED, các

đầu ra Q nối đến các chân A của đèn LED

- Khối ma trận đèn LED là một ma trân 8x8 điểm, mỗi điểm gồm 2 đèn LED

nối chung, Anode các chân A của một hàng LED được nối chung tạo nên 8 chân

A chung, các chân Cathode của màu xanh của một cột được nối chung và tạo nên

8 chân G chung, các chân Cathode của màu đỏ của một cột được nối chung và

tạo nên 8 chân R chung

29

Page 30: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Một hàng được hiển thị bao gồm một hàng xanh và một hàng đỏ kết hợp

Để hiển thị toàn bộ ma trận LED các hàng sẽ lần lượt được luân phiên hiển thị từ

hàng đầu tiên cho đến hàng cuối cùng rồi lặp lại. Tại một thời điểm chỉ có một

hàng được hiển thị.

Trước thời điểm bắt đầu hiển thị hàng đầu tiên, dữ liệu của hàng đầu tiên được

đưa vào bộ đệm chốt theo cách nối tiếp từ R8 vào trước rồi đến G1, xung nhịp

INCLK được cấp từ bên ngoài vào để đọc mỗi bít dữ liệu tuân tự, khi đã đủ hết

dữ liệu rồi thì xung nhịp không được phép làm việc nữa.

Tiếp theo là hiển thị dữ liệu của hàng đầu tiên, trước khi hiển thị tín hiệu SYN=1

được đưa vào, sau đó sẽ có một xung dương OUTCLK, xung dương OUTCLK sẽ

đồng thời làm hai việc: 1 là đưa toàn bộ dữ liệu của hàng đầu tiên mà đang tồn tại

ở trong bộ ĐỆMCHÔT ra các chân R và G của LED matrix, và 2 là đặt đầu ra H1

của khối quét hàng lên mức cao để hiển thị hàng đầu tiên. Vậy là dữ liệu của

hàng đầu tiên đã đầu tiên đã đến các chân Kathode (R và G), H1 cũng đã được

chuyển lên mức cao để đưa vào bộ đệm Anode, quá trình bắt đầu hiển thị hàng

đầu tiên đã hoàn tất, việc còn lại là của bộ đệm Anode. Các bít 0 sẽ điều khiển

cho Kathode nối với nó sáng, bít 1 sẽ làm cho kathode tắt, bộ đệm Anode sẽ cấp

nguồn dương cho một hang. Trạng thái này được duy trì một khoảng thời gian

xác định để các LED của hàng đầu tiên được hiển thị trong một khoảng thời gian

30

Page 31: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

xác định. Khi hết thời gian cho việc hiển thị hàng đầu tiên thì việc hiển thị hàng

thứ hai sẽ phải bắt đầu.

Việc bắt đầu cho hiển thị hàng thứ 2 cũng giống như hàng thứ nhất chỉ có điểm

duy nhất khác biệt là tín hiệu SYN đặt vào phải bằng 0 còn lại thì mọi thủ tục

không có gì thay đổi. Do vậy khi có xung OUTCLK thì H1 sẽ ở mức thấp và

mức cao trước đó của nó sẽ được dịch sang H2 làm cho A2 được cấp nguồn và

hàng thứ hai sáng. Hàng thứ hai cũng sẽ được hiển thị trong một khoảng thời

gian xác định và kết thúc

Quá trình được diễn ra lặp lại tương tự đối với các hàng sau cho đến hết hàng 8.

Kết thúc thời gian hiển thị hàng 8 là hết một chu trình quét toàn bộ LMD, một

chu trình quét mới sẽ lại bắt đầu. Quá trình cứ lặp đi lặp lại như thế trong suốt

thời gian hoạt động của LMD.

III. THỰC HÀNH

1.Kiểm tra LMD

- LMD 2088DHG đã được gắn lên đế MATRIX1

- Không cấp nguồn cho bảng

- Đưa điện áp 5V vào một chân A1 (dùng kẹp hoặc cầm tay)

- Nối dây từ nguồn 0V nối tiếp với một đầu điện trở 100 Ohm (dùng

kẹp hoặc cầm bằng tay)

- Quẹt đầu còn lại của điện trở qua các chốt từ G1 đến R8, khi quẹt

quan sát LMD sẽ thấy các đèn hàng 1 sáng đều lần lượt từ R1 đến G8 là

tốt, chứng tỏ không LED nào hỏng và mạch nối đúng cấu hình chân

- Lần lượt làm như thế với các chân từ A2 đến A8, để kiểm tra các

cột còn lại của toàn bộ LMD

2. Kiểm tra bộ đệm cực dương

- Giữ nguyên các linh kiện như phần trên

- Kiểm tra đế của khối QUETHANG, ĐỆMCHỐT không có gì

- Không cắm IC trên các khối DEMCHOTR và DEMCHOTG

- IC 74573(4) đã gắn lên đế của khối DEMA

- Cấp nguồn 5V và GND cho bảng.

- Dùng một dây nguồn 0V chấm vào chốt R hoặc G bất kỳ

31

Page 32: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Dùng một dây nguồn 5V khác quẹt qua các chốt từ H1 đến H8, khi

quẹt quan sát thấy các LED của cột tương ứng với R hoặc G sáng đều là

Khối ĐỆMA tốt.

3.Kiểm tra khối ĐỆMCHÔT

- Giữ nguyên các linh kiện như phần trên.

- Gắn IC 74595 lên đế của khối DEMCHOtTR và DEMCHOTG,

- Gắn IC 74164 lên đế của khối QUETHANG

Chú ý: tất cả các IC phải cắm đúng chiều

- Nối chốt nguồn 5V và GND cho bảng (chưa bật nguồn)

- Khối điều khiển LMD09 đã có sẵn chương trình LMD03 trên chíp

89s52

- Nối cáp tín hiệu 4 chân từ bảng LMD09 tới LMD03

- Bật nguồn cho cả hai khối.

- Nếu không có gì sai trên LMD sẽ hiển thị chữ như lập trình sẵn

- Dùng máy hiện sóng quan sát tín hiệu tại các chốt DATA, INCLK,

OUTCLK, SYN, R, G, H, A để thấy rõ quá trình làm việc của khối QUÉT

HÀNG, ĐỆM HÀNG và toàn bộ hệ thống

- Phân tích giản đồ xung của 4 chân tín hiệu DATA, INCLK,

OUTCLK, SYN

4. Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ

32

Page 33: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

BÀI 4: KHẢO SÁT MA TRẬN LED 8x8 2 MÀU XANH ĐỎ VÀ PHƯƠNG

PHÁP QUÉT CỘT

I. MUC ĐÍCH

Khảo phương pháp điều khiển quét hàng cho 2 màu, và một số linh kiện điều

khiển

II. THIẾT BỊ SỬ DUNG

Module LMD04, LMD09, dây nguồn, dây cáp tín hiệu

Nguyên lí làm việc

33

Page 34: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Khối quét cột (QUETR, QUETG) làm nhiệm vụ tạo ra tín hiệu quét cho 16

chân đầu ra từ C1 đến C16. Các chân đầu ra sẽ lần lượt và luân phiên có tín hiệu

mức cao, tại một thời điểm chỉ có một chân có tín hiệu mức cao, các chân còn lại

mang tín hiệu mức thấp hết, sau một khoảng thời gian quy định sẽ chuyển sang

chân tiếp theo, cứ như thế từ chân đầu tiên cho đến hết chân cuối cùng sau đó lại

quay lại chân đầu tiên. Thời gian tồn tại trạng thái mức cao của mỗi chân đầu ra

là bằng nhau nhưng có thể thay đổi được, tổng thời gian để quét hết một vòng 16

chân đầu ra cũng thay đổi được, do vậy phải quyết định được thời điểm bắt đầu

chuyển trạng thái của một chân bất kỳ. Khôi quét hàng có một đầu vào tín hiệu

đồng bộ SYN và một đầu vào xung nhịp OUTCLK. Đầu vào xung nhịp để quyết

định thời điểm chuyển đổi trạng thái của đầu ra, còn đầu vào tín hiệu đồng bộ để

xác định thời điểm bắt đầu một vòng quét. Tại thời điểm trước khi bắt đầu một

vòng quét mới tín hiệu SYN băng một, ngay sau đó là một xung dương đưa vào

làm cho đầu ra C1 chuyển trạng thái từ 0 sang 1, sau đó một khoảng thời gian bắt

đầu chuyển trạng thái cho chân đầu ra tiếp theo (C2) tín hiệu SYN = 0, và liền đó

là một xung dương được đưa vào đầu vào xung nhịp, tín hiệu SYN chỉ bằng khi

bắt đầu một vòng quét mới còn lại toàn bộ thời gian quét luôn = 0.

- Khối DEMCHOTA làm nhiệm vụ chứa dữ liệu của một cột và chốt dữ liệu tại

đầu ra để hiển thị một cột, dữ liệu được đưa vào kiểu nối tiếp và xuất ra song

song. Dữ liệu của A1 được đưa vào đầu tiên, dữ liệu A8 được đưa vào cuối. Khi

8 bit dữ liệu đã được đưa vào bộ ĐỆMCHÔTA, một xung dương OUTCLK được

đưa vào để đẩy dữ liệu tới các chân đầu ra và giữ nguyên ở đó để cho một cột

được hiển thị trong khoảng thời gian xác định trước khi hiển thị một hàng tiếp

theo. Một khối này làm cả 3 việc tương đương 3 khối: ĐỆMCỘT, CHÔTCỘT,

ĐỆMA trong LMD02.

- Khối DEMR và DEMG làm nhiệm vụ khuyếch đại đảo cấp nguồn âm để hút

dòng từ các Cathode chung của LMD.

- Khối ma trận đèn LED là một ma trân 8x8 điểm, mỗi điểm gồm 2 đèn LED

nối chung Anode các chân A của một hàng LED được nối chung tạo nên 8 chân

A chung, các chân Cathode của màu xanh của một cột được nối chung và tạo nên

8 chân G chung, các chân Cathode của màu đỏ của một cột được nối chung và

tạo nên 8 chân R chung

34

Page 35: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Để hiển thị toàn bộ ma trận LED 16 cột sẽ lần lượt được luân phiên hiển thị từ

cột C1 đến C16 tương ứng là G1 đến R8 rồi lặp lại. Tại một thời điểm chỉ có một

cột được hiển thị.

Trước thời điểm bắt đầu hiển thị cột đầu tiên, dữ liệu của cột đầu tiên được đưa

vào bộ đệm chốt theo cách nối tiếp từ A1 vào trước rồi đến A8, xung nhịp

INCLK được cấp từ bên ngoài vào để đọc mỗi bít dữ liệu tuần tự, khi đã đủ hết

dữ liệu rồi thì xung nhịp không được phép làm việc nữa.

Tiếp theo là hiển thị dữ liệu của cột đầu tiên, trước khi hiển thị tín hiệu SYN=1

được đưa vào, sau đó sẽ có một xung dương OUTCLK, xung dương OUTCLK sẽ

đồng thời làm hai việc: 1 là đưa toàn bộ dữ liệu của cột đầu tiên mà đang tồn tại

ở trong bộ ĐỆMCHÔT ra các chân A của LED matrix, và 2 là đặt đầu ra C1 của

khối quét cột lên mức cao để hiển thị cột đầu tiên. Vậy là dữ liệu của cột đầu tiên

đã đầu tiên đã đến các chân A, C1 cũng đã được chuyển lên mức cao để đưa vào

bộ đệm Kathode, quá trình bắt đầu hiển thị hàng đầu tiên đã hoàn tất, việc còn lại

là của bộ đệm Cathode. Các bít 1 sẽ điều khiển cho Anode nối với nó sáng, bít 0

sẽ làm cho Anode tắt, bộ đệm Cathode sẽ hút dòng cho một cột. Trạng thái này

được duy trì một khoảng thời gian xác định để các LED của cột đầu tiên được

hiển thị trong một khoảng thời gian xác định. Khi hết thời gian cho việc hiển thị

cột đầu tiên thì việc hiển thị hàng thứ hai sẽ phải bắt đầu.

35

Page 36: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Việc bắt đầu cho hiển thị cột thứ 2 cũng giống như cột thứ nhất chỉ có điểm duy

nhất khác biệt là tín hiệu SYN đặt vào phải bằng 0 còn lại thì mọi thủ tục không

có gì thay đổi. Do vậy khi có xung OUTCLK thì C1 sẽ ở mức thấp và mức cao

trước đó của nó sẽ được dịch sang C2 làm cho K2 được nối đất và cột thứ hai

sáng. Cột thứ hai cũng sẽ được hiển thị trong một khoảng thời gian xác định và

kết thúc

Quá trình được diễn ra lặp lại tương tự đối với các cột sau cho đến hết cột16. Các

cột từ 1 đến 8 là các cột cho màu xanh, các cột từ 9 đến 16 là các cột cho màu đỏ,

do vậy trong phương pháp này 8 cột màu xanh được hiển thị trước sau đó đến 8

cột màu đỏ.

Kết thúc thời gian hiển thị cột 16 là hết một chu trình quét toàn bộ LMD, một

chu trình quét mới sẽ lại bắt đầu. Quá trình cứ lặp đi lặp lại như thế, 8 cột màu

xanh và 8 cột màu đỏ luân phiên nhau trong suốt thời gian hoạt động của LMD.

III. THỰC HÀNH

1.Kiểm tra LMD

- LMD 2088DHG đã được gắn lên đế MATRIX1

- Không cấp nguồn cho bảng

- Đưa điện áp 5V vào một chân A1 (dùng kẹp hoặc cầm tay)

- Nối dây từ nguồn 0V nối tiếp với một đầu điện trở 100 Ohm (dùng

kẹp hoặc cầm bằng tay)

- Quẹt đầu còn lại của điện trở qua các chốt từ G1 đến R8, khi quẹt

quan sát LMD sẽ thấy các đèn hàng 1 sáng đều lần lượt từ R1 đến G8 là

tốt, chứng tỏ không LED nào hỏng và mạch nối đúng cấu hình chân

- Lần lượt làm như thế với các chân từ A2 đến A8, để kiểm tra các

cột còn lại của toàn bộ LMD

2.Kiểm tra bộ đệm cực âm DEMG, DEMR

- Giữ nguyên các linh kiện như phần trên

- Kiểm tra đế của khối QUETG, QUETR, ĐỆMCHỐT không có gì

- IC 2803 đã gắn lên đế của khối DEMG, DEMR

- Cấp nguồn 5V và GND cho bảng.

- Dùng một dây nguồn 5V chấm vào chốt A

36

Page 37: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Dùng một dây nguồn 5V khác quẹt qua các chốt từ G1 đến R8, khi

quẹt quan sát thấy các LED của hàng tương ứng với A sáng đều là Khối

ĐỆMG, DEMR tốt.

3.Kiểm tra khối ĐỆMCHÔT

- Giữ nguyên các linh kiện như phần trên.

- Gắn IC 74595 lên đế của khối DEMCHOT

- Gắn IC 74164 lên đế của khối QUETG, QUETR

Chú ý: tất cả các IC phải cắm đúng chiều

- Nối chốt nguồn 5V và GND cho bảng (chưa bật nguồn)

- Khối điều khiển LMD09 đã có sẵn chương trình LMD04 trên chíp

89s52

- Nối cáp tín hiệu 4 chân từ bảng LMD09 tới LMD04

- Bật nguồn cho cả hai khối.

- Nếu không có gì sai trên LMD sẽ hiển thị chữ X với màu chữ và

nền thay đổi

- Dùng máy hiện sóng quan sát tín hiệu tại các chốt DATA, INCLK,

OUTCLK, SYN, R, G, H, A để thấy rõ quá trình làm việc của khối QUÉT

HÀNG, ĐỆM HÀNG và toàn bộ hệ thống

- Phân tích giản đồ xung của 4 chân tín hiệu DATA, INCLK,

OUTCLK, SYN

4.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ

37

Page 38: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

BÀI 5: KHẢO SÁT MODULE HIỂN THỊ 16x32 ĐIỂM MỘT MÀU

I. MUC ĐÍCH

Tìm hiểu thiết kế của module hiển thị 16x32 điểm, và phương pháp điều khiển.

III. THIẾT BỊ SỬ DUNG

Module LMD05, LMD09, dây nguồn, dây cáp tín hiệu

Nguyên lí làm việc

LMD05 là mô hình của một module hiển thị, dùng để ghép nối nhiều module này

với nhau để có một kích thước hiển thị lớn hơn.

- Khối đệm hàng: làm nhiệm vụ tiếp nhận dữ liệu của một hàng. Khối đệm

hàng gồm các IC U17, U18, U19, U20. Mỗi IC là bộ 8 DFF độc lập với nhau

nhưng dùng chung đầu vào CLK, mỗi IC có 8 đầu vào D và 8 đầu ra Q. Bốn IC

được mắc liên tiếp với nhau, 8 đầu ra của IC U17 nối với 8 đầu vào của U18,

tương tự U19, U20 như hình vẽ. Đầu vào của khối đệm hàng là đầu vào của U17.

Dữ liệu sẽ được đưa vào khối đệm hàng từng byte một (8 bit đồng thời) đi kèm

với một xung INCLK. Khi dữ liệu đã có ở đầu vào DFF, một xung dương

INCLK sẽ làm cho dữ liệu chuyển đến đầu ra và lưu ở đó, đầu ra đó lại được nối

đến đầu vào của DFF tiếp theo đồng thời nối đến đầu ra của toàn khối đệm hàng.

Khối đệm hàng có 8 đầu vào nối tiếp, 32 đầu ra dịch chuyển, và 8 đầu ra liên tiếp

dành cho việc ghép nối với module tiếp theo. Dữ liệu được đưa vào 8 đầu vào

xen kẽ với tín hiệu INCLK để đọc vào, và dịch chuyển trên 32 đầu ra. Hoạt động

của khối tương tự như thanh ghi dịch. 8 bit dữ liệu đặt vào đầu vào, 1 xung

dương inclk sẽ dịch 8 bit đó đến 8 đầu ra và nối đến bộ 8 đầu vào tiếp theo, sau 4

lần dịch thì ta đọc được 4 byte và có mặt trên 32 đầu ra.

- Khối CHỐT HÀNG làm nhiệm vụ chốt dữ liệu của một hàng ở đầu vào đến

đầu ra và giữ chúng ở đầu ra trong thời gian hàng đó hiển thị.

- Khối ma trận đèn LED là một ma đèn LED 16 hàng, 32 cột bao gồm U1, U2,

U3, U4, U5, U6, U7 và U8, mỗi một khối là một ma trận 8x8. Một hàng có 16

LED, 16 kathode của một hang được nối chung với nhau thành một chân K

chung. Một hàng có 32 LED, và chia làm hai nửa, 16 cathode của mỗi nửa nối

với nhau tạo nên một chân K chung.

- Khối đệm Cathode: làm nhiệm vụ khuyếch đại đảo tín hiệu quét hàng để hút

dòng cho cathode của các hàng. Đầu ra khối này được nối đến Cathode chung

của các hàng (K). Khối này sử dụng 4 IC 2803 gồm U9, U10, U11 và U12, mỗi

ic có 8 cổng ra, mỗi cổng ra nối đến một chân K, một chân K là nối chung của 16

38

Page 39: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

cathode của một nửa hàng. U9, U10 dành cho nửa trái từ K1 đến K16, U11 và 12

cho nửa phải từ K17 đến K32. Toàn bộ khối này co 32 cổng ra chia cho cho nửa

là 16 cho bên phải, 16 cho bên trai, tương ứng với 16 hàng cua ma trận LED.

Khối này có 16 đầu vào, tương ứng 16 hàng. Mỗi đầu vào nhận tín hiệu điều

khiển của một hàng, để điều khiển hai đầu ra cho hai nửa của một hàng đó. Khối

này đơn giản chỉ là khuyếch đại đảo 16 tín hiệu điều khiển nối đất cho hàng và

tách hàng thành hai nửa để đủ công suất điều khiển.

39

Page 40: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

-

40

Page 41: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- 16 tín hiệu đầu vào điều khiển hàng tương ứng với 16 hàng của ma trận LED

- 8 đầu vào dữ liêu

- INCLK, tín hiệu xung nhịp cho dữ liệu vào

- OUTCLK, tín hiệu xung nhịp cho dữ liệu ra

Các đầu ra:

- 16 tín đầu ra điều khiển hàng tương ứng với 16 hàng của module tiếp theo

- 8 đầu ra dữ liệu, để nối đến 8 đầu vào dữ liệu của module tiếp theo

- INCLK, dùng cho module tiếp theo

- OUTCLK, dùng cho module tiếp theo

Các đầu ra của module này sẽ nối đến đầu vào của module tiếp theo khi ghép nối

nhiều module khác nhau

Để hiển thị toàn bộ ma trận LED, 16 hàng sẽ lần lượt được luân phiên hiển thị từ

hàng 1 đến hàng 16 tương ứng là từ K1và K2_1 đến K16 và K2_16 rồi lặp lại.

Tại một thời điểm chỉ có một hàng được hiển thị.

Trước thời điểm bắt đầu hiển thị hàng đầu tiên, dữ liệu của hàng đầu tiên được

đưa vào bộ đệm hàng theo trình tự 8 bit một như sau: (D25..D32), (D17..D24),

(D9..D16), (D1..D8), với Dn là cho bit dữ liệu cho cột n. Dữ liệu của điểm nào

phải được dịch đến đúng vị trí của điểm ấy trước khi chúng được chốt đến các

chân A tương ứng. Khi có nhiều module được ghép nối với nhau thì có thể xem

tương đương hoàn toàn với một module lớn với số điểm của một hàng dài hơn,

và trình tự dịch chuyển dữ liệu vẫn tương tự như trên, nghĩa là dữ liệu của byte

cuối hàng sẽ đưa vào trước và dữ liệu byte đầu hàng đưa vào sau cùng. Xung

nhịp INCLK được cấp từ bên ngoài vào để đọc mỗi byte dữ liệu đồng thời, khi đã

đủ hết dữ liệu rồi thì xung nhịp không được phép làm việc nữa.

Để hiển thị dữ liệu của hàng đầu tiên, sẽ phải có một xung dương OUTCLK để

chốt toàn bộ dữ liệu của hàng đầu tiên mà đang tồn tại ở đầu vào bộ

CHOTHANG ra các chân A của LED matrix, và tín hiệu H1của đầu vào bộ đệm

cathode ở mức cao để hiển thị cột đầu tiên, các đầu vào khác ở mức thấp, để bộ

đệm cathode nối đất cho cathode của hàng đầu tiên. Khối đệm cathode sẽ

khuyếch đại đảo tín hiệu H1=1 và làm cho đầu ra K1 nối đất, để hàng 1 được

hiển thị, các hàng còn lại ở trạng thái trở kháng cao nên không sáng. Trạng thái

này được duy trì một khoảng thời gian xác định để các LED của hàng đầu tiên

được hiển thị trong một khoảng thời gian xác định. Khi hết thời gian cho việc

hiển thị hàng đầu tiên đầu tiên thì việc hiển thị hàng thứ hai sẽ phải bắt đầu.

41

Page 42: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Việc bắt đầu cho hiển thị hàng thứ 2 hoàn toàn giống như hàng thứ nhất, khi ấy

H1 trở về mức thấp, H2 sẽ chuyển lên mức cao, còn lại ở các đầu vào còn lại ở

mức thấp hết. Hàng thứ hai cũng sẽ được hiển thị trong một khoảng thời gian xác

định và kết thúc

Quá trình được diễn ra lặp lại tương tự đối với các hàng sau cho đến hết hàng16.

Kết thúc thời gian hiển thị hàng 16 là hết một chu trình quét toàn bộ LMD, một

chu trình quét mới sẽ lại bắt đầu.

III.THỰC HÀNH

1.Kiểm tra LMD

- 8 LMD 2088BS đã được gắn lên đế MATRIX1

- Không cấp nguồn cho bảng

- Đưa điện áp 0V vào chân K1 (dùng kẹp hoặc cầm tay)

- Nối dây từ nguồn 5V nối tiếp với một đầu điện trở 100 Ohm (dùng

kẹp hoặc cầm bằng tay)

- Quẹt đầu còn lại của điện trở qua các chốt từ A1 đến A32, khi quẹt

quan sát LMD sẽ thấy các đèn hàng 1 sáng đều lần lượt từ A1 đến A32 là

tốt, chứng tỏ không LED nào hỏng và mạch nối đúng cấu hình chân

- Lần lượt làm như thế với các chân từ K2 đến K16, để kiểm tra các

hàng còn lại của toàn bộ LMD

2.Kiểm tra bộ đệm cực âm ULN2803

- Giữ nguyên các linh kiện như phần trên

- IC ULN2803 đã gắn trên các khối U9, U10, U11, U12

- Nối đất cho bảng, không cấp nguồn.

- Dùng một dây nguồn 5V chấm vào chốt A1

- Dùng một dây nguồn 5V khác quẹt qua các chốt từ H1 đến H16,

khi quẹt quan sát thấy các LED của cột tương ứng với A1 sáng đều là U9,

U10 tốt

- Làm lại như trên với A32 để kiểm tra U11, U12.

3.Khảo sát hoạt động của module

- Tất cả các IC được gắn trên module

Chú ý: tất cả các IC phải cắm đúng chiều

- Nối chốt nguồn 5V và GND cho bảng (chưa bật nguồn)

42

Page 43: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Khối điều khiển LMD09 đã có sẵn chương trình LMD05 trên chíp

89s52

- Nối cáp tín hiệu 26 chân từ bảng LMD09 tới LMD05

- Bật nguồn cho cả hai khối.

- nếu không có gì sai trên LMD sẽ hiển thị chữ như đã lập trình sẵn

- dùng máy hiện sóng quan sát tín hiệu tại các chốt DATA, CLKIN,

CLKOUT, D, A, H, K để thấy rõ trình tự của các tín hiệu điều khiển và dữ

liệu

4.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ

43

Page 44: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

BÀI 6: KHẢO SÁT MODULE HIỂN THỊ 16x32 ĐIỂM HAI MÀU

I.MUC ĐÍCH

Tìm hiểu thiết kế của module hiển thị 16x32 điểm hai màu, và phương pháp điều

khiển.

II.THIẾT BỊ SỬ DUNG

Module LMD06, LMD09, dây nguồn, dây cáp tín hiệu

Nguyên lí làm việc

LMD06 là mô hình của một module hiển thị, dùng để ghép nối nhiều module này

với nhau để có một kích thước hiển thị lớn hơn.

- Khối đệm hàng: làm nhiệm vụ tiếp nhận dữ liệu của một hàng, bao gồm 1

byte cho màu xanh xen kẽ một byte cho màu đỏ. Khối đệm hàng gồm các IC

U21, U22, U23, U24, U25, U26, U27, U28. Mỗi IC là bộ 8 DFF độc lập với nhau

nhưng dùng chung đầu vào CLK, mỗi IC có 8 đầu vào D và 8 đầu ra Q. Bốn IC

được mắc liên tiếp với nhau, 8 đầu ra của IC U21 nối với 8 đầu vào của U22,

tương tự đến U27, U280 như hình vẽ. Đầu vào của khối đệm hàng là đầu vào của

U21. Dữ liệu sẽ được đưa vào khối đệm hàng từng byte một (8 bit đồng thời) đi

kèm với một xung CLKIN. Khi dữ liệu đã có ở đầu vào DFF, một xung dương

CLKIN sẽ làm cho dữ liệu chuyển đến đầu ra và lưu ở đó, đầu ra đó lại được nối

đến đầu vào của DFF tiếp theo đồng thời nối đến đầu ra của toàn khối đệm hàng.

Khối đệm hàng có 8 đầu vào nối tiếp, 64 đầu ra dịch chuyển, và 8 đầu ra liên tiếp

dành cho việc ghép nối với module tiếp theo. Dữ liệu được đưa vào 8 đầu vào nối

tiếp nhau 1 byte cho màu xanh và một byte cho màu đỏ, tín hiệu INCLK để đọc

vào mỗi byte dữ liệu, và dịch chuyển trên 64 đầu ra. Hoạt động của khối tương tự

như thanh ghi dịch. 8 bit dữ liệu đặt vào đầu vào, 1 xung dương CLKIN sẽ dịch 8

bit đó đến 8 đầu ra và nối đến bộ 8 đầu vào tiếp theo, sau 8 lần dịch thì ta đọc

được 8 byte và có mặt trên 642 đầu ra.

- Khối CHỐT HÀNG làm nhiệm vụ chốt dữ liệu của một hàng ở đầu vào đến

đầu ra và giữ chúng ở đầu ra trong thời gian hàng đó hiển thị, bao gồm các IC

U13, U14, U15, U16, U17, U18, U19, U20.

- Khối ma trận đèn LED là một ma đèn LED 16x32 điểm, mỗi điểm có 1 đèn

màu xanh và một đèn màu đỏ, bao gồm IC U1, U2, U3, U4, U5, U6, U7 và U8,

(xem trên sơ đồ nguyên lí và sơ đồ mạch in) mỗi một khối U là một ma trận 8x8

điểm 2 màu 2088DHG. Một cột có 16 LED, 16 anode của một cột được nối

44

Page 45: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

chung với nhau thành một chân A chung. Một hàng có 32 LED, và chia làm hai

nửa, 16 cathode của mỗi nửa nối với nhau tạo nên một chân K chung.

-

- Khối đệm Cathode: làm nhiệm vụ khuyếch đại đảo tín hiệu quét hàng để hút

dòng cho cathode của các hàng. Đầu ra khối này được nối đến Cathode chung

của các hàng (K). Khối này sử dụng 4 IC 2803 gồm U9, U10, U11 và U12, mỗi

ic có 8 cổng ra, mỗi cổng ra nối đến một chân K, một chân K là nối chung của 16

cathode của một nửa hàng. U9, U10 dành cho nửa trái từ K1 đến K16, U11 và 12

cho nửa phải từ K17 đến K32. Toàn bộ khối này co 32 cổng ra chia cho cho nửa

45

Page 46: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

là 16 cho bên phải, 16 cho bên trai, tương ứng với 16 hàng cua ma trận LED.

Khối này có 16 đầu vào, tương ứng 16 hàng. Mỗi đầu vào nhận tín hiệu điều

khiển của một hàng, để điều khiển hai đầu ra cho hai nửa của một hàng đó. Khối

này đơn giản chỉ là khuyếch đại đảo 16 tín hiệu điều khiển nối đất cho hàng và

tách hàng thành hai nửa để đủ công suất điều khiển.

Các đầu vào:

- 16 tín đầu vào điều khiển hàng tương ứng với 16 hàng của ma trận LED

- 8 đầu vào dữ liêu

- INCLK, tín hiệu xung nhịp cho dữ liệu vào

- OUTCLK, tín hiệu xung nhịp cho dữ liệu ra

Các đầu ra:

- 16 tín đầu ra điều khiển hàng tương ứng với 16 hàng của module tiếp theo

- 8 đầu ra dữ liệu, để nối đến 8 đầu vào dữ liệu của module tiếp theo

- INCLK, dùng cho module tiếp theo

- OUTCLK, dùng cho module tiếp theo

Các đầu ra của module này sẽ nối đến đầu vào của module tiếp theo khi ghép nối

nhiều module khác nhau

Để hiển thị toàn bộ ma trận LED, 16 hàng sẽ lần lượt được luân phiên hiển thị từ

hàng1 đến hàng 16 tương ứng là từ K1và K2_1 đến K16 và K2_16 rồi lặp lại. Tại

một thời điểm chỉ có một hàng được hiển thị.

Trước thời điểm bắt đầu hiển thị hàng đầu tiên, dữ liệu của hàng đầu tiên được

đưa vào bộ đệm hàng theo trình tự 8 bit một như sau: (D25..D32), (D17..D24),

(D9..D16), (D1..D8), với Dn là cho bit dữ liệu cho cột n. Dữ liệu của điểm nào

phải được dịch đến đúng vị trí của điểm ấy trước khi chúng được chốt đến các

chân A tương ứng. Khi có nhiều module được ghép nối với nhau thì có thể xem

tương đương hoàn toàn với một module lớn với số điểm của một hàng dài hơn,

và trình tự dịch dịch chuyển dữ liệu vẫn tương tự như trên, nghĩa là dữ liệu của

byte cuối hàng sẽ đưa vào trước và dữ liệu byte đầu hàng đưa vào sau cùng.

Xung nhịp INCLK được cấp từ bên ngoài vào để đọc mỗi byte dữ liệu đồng thời,

khi đã đủ hết dữ liệu rồi thì xung nhịp không được phép làm việc nữa.

Để hiển thị dữ liệu của hàng đầu tiên, sẽ phải có một xung dương OUTCLK để

chốt toàn bộ dữ liệu của hàng đầu tiên mà đang tồn tại ở đầu vào bộ

46

Page 47: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

CHOTHANG ra các chân A của LED matrix, và tín hiệu H1của đầu vào bộ đệm

cathode ở mức cao để hiển thị cột đầu tiên, các đầu vào khác ở mức thấp, để bộ

đệm cathode nối đất cho cathode của hàng đầu tiên. Khối đệm cathode sẽ

khuyếch đại đảo tín hiệu H1=1 và làm cho đầu ra K1 nối đất, để hàng 1 được

hiển thị, các hàng còn lại ở trạng thái trở kháng cao nên không sáng. Trạng thái

này được duy trì một khoảng thời gian xác định để các LED của hàng đầu tiên

được hiển thị trong một khoảng thời gian xác định. Khi hết thời gian cho việc

hiển thị hàng đầu tiên đầu tiên thì việc hiển thị hàng thứ hai sẽ phải bắt đầu.

Việc bắt đầu cho hiển thị hàng thứ 2 hoàn toàn giống như hàng thứ nhất, khi ấy

H1 trở về mức thấp, H2 sẽ chuyển lên mức cao, còn lại ở các đầu vào còn lại ở

mức thấp hết. Hàng thứ hai cũng sẽ được hiển thị trong một khoảng thời gian xác

định và kết thúc

Quá trình được diễn ra lặp lại tương tự đối với các hàng sau cho đến hết hàng16.

Kết thúc thời gian hiển thị hàng 16 là hết một chu trình quét toàn bộ LMD, một

chu trình quét mới sẽ lại bắt đầu.

III.THỰC HÀNH

1.Kiểm tra LMD

- 8 LMD 2088BS đã được gắn lên đế MATRIX1

- Không cấp nguồn cho bảng

- Đưa điện áp 0V vào chân K1 (dùng kẹp hoặc cầm tay)

- Nối dây từ nguồn 5V nối tiếp với một đầu điện trở 100 Ohm (dùng

kẹp hoặc cầm bằng tay)

- Quẹt đầu còn lại của điện trở qua các chốt từ A1 đến A32, khi quẹt

quan sát LMD sẽ thấy các đèn hàng 1 sáng đều lần lượt từ A1 đến A32 là

tốt, chứng tỏ không LED nào hỏng và mạch nối đúng cấu hình chân

- Lần lượt làm như thế với các chân từ K2 đến K16, để kiểm tra các

hàng còn lại của toàn bộ LMD

2.Kiểm tra bộ đệm cực âm ULN2803

- Giữ nguyên các linh kiện như phần trên

- IC ULN2803 đã gắn trên các khối U9, U10, U11, U12

- Nối đất cho bảng, không cấp nguồn.

- Dùng một dây nguồn 5V chấm vào chốt A1

47

Page 48: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Dùng một dây nguồn 5V khác quẹt qua các chốt từ H1 đến H16,

khi quẹt quan sát thấy các LED của cột tương ứng với A1 sáng đều là U9,

U10 tốt

- Làm lại như trên với A32 để kiểm tra U11, U12.

3.Khảo sát hoạt động của module

- Tất cả các IC được gắn trên module

Chú ý: tất cả các IC phải cắm đúng chiều

- Nối chốt nguồn 5V và GND cho bảng (chưa bật nguồn)

- Khối điều khiển LMD09 đã có sẵn chương trình LMD05 trên chíp

89s52

- Nối cáp tín hiệu 26 chân từ bảng LMD09 tới LMD05

- Bật nguồn cho cả hai khối.

- nếu không có gì sai trên LMD sẽ hiển thị chữ hình mũi tên

- Dùng máy hiện sóng quan sát tín hiệu tại các chốt DATA, CLKIN,

CLKOUT, D, A, H, K để thấy rõ trình tự của các tín hiệu điều khiển và dữ

liệu

4.Sử dụng khối LMD09 lập trình điều khiển thay đổi nội dung hiển thị chữ

48

Page 49: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

BÀI 7: KHẢO SÁT HOẶT ĐỘNG CỦA BẢNG TIN ĐIỆN TỬ

I. MUC ĐÍCH

Làm quen với bảng tin điện tử vừa, làm quen với phần mềm điều khiển bảng tin

điện tử từ máy tính. Thực hành cập nhật nội dung, thay đổi font chữ cho bản tin

điện tử bằng phần mềm trên máy tính.

II. THIẾT BỊ SỬ DUNG

Module LMD07 (bảng tin điện tử), máy tính có cài phần mềm LMD Controller

III. THỰC HÀNH

1.Bật bảng tin điện tử

Ngay khi vừa cắm nguồn bảng tin sẽ hiển thị nội dung đã lưu từ trước đó với

hiệu ứng cuộn ngang. Nội hiển thị này được lưu từ trước đó trong Flash ROM

của bộ điều khiển (do lần sử dụng trước đó người dùng đã dùng lệnh Save), khi

mới cấp nguồn chương trình sẽ Load nội dung này lên theo trình tự làm việc của

phần mềm và thực hiện hiệu ứng cuộn ngang (Roll).

2.Khởi động phần mềm điều khiển

Sau khi kích đúp vào file LMDControl.exe bạn sẽ thấy giao diện chương trình

như sau:

49

Page 50: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Từ trên xuống dưới giao diện sử dụng của phần mềm gồm những thành phần sau:

- Cửa sổ Preview: là của sổ màu đen để xem bản tin hiển trước khi cho hiển

thị trên bảng điện tử

- Khung Display Option gồm có: Nút lệnh Font dùng để chọn font chữ, và ô

Message là ô nhập nội dung bản tin hiển thị. Nút lệnh Font sẽ cho phép chọn

Font, Size, Style của bản tin sẽ hiển thị trên bảng tin điện tử

- Ô Dimension Inf: là ô thông báo kết quả kích thước của bản tin dự đinh

hiển thị, kích thước được tính bằng số điểm ảnh của chiều cao và rộng

- Khung Preview gồm: Nút lệnh Capture là lệnh thực hiện chuyển đoạn văn

bản thành bức ảnh với các điểm ảnh đơn giản (chỉ có màu đỏ và màu đen).

Nút lệnh Preview là lệnh xem trước bản tin trên máy trước khi cho hiển thị

trên bảng tin điện tử. Ô Top Cutting để cắt đi phần trên của bức ảnh bằng số

dòng điểm ảnh hiện tại của ô. Ô Bottom Cutting để cắt đi phần dưới của bức

ảnh theo số dòng điểm ảnh hiện tại của ô. Ô Threshold dùng để đặt ngưỡng

cho chuyển đổi một điểm ảnh nhiều mức thành một điểm ảnh đơn giản (0

hoặc 1).

- Nút lệnh Bit2Byte: mảng bít các điểm ảnh đơn giản thành mảng byte, thực

chất là ghép 8 bit thành một byte để truyền đi qua công COM máy tính theo

từng byte

- Nút lệnh Out Array: là lệnh Truyền Mảng các Byte xuống bảng tin điện

tử, lệnh này truyền mảng byte là kết quả chuyển đổi và mã hóa bản tin với

định dạng yêu cầu trước đó xuống bảng tin điện tử và yêu cầu bảng tin điện tử

hiển thị cố định nội dung của bản tin này (không thực hiện hiệu ứng gì)

- Nút lệnh Roll

- Stop dừng hiệu ứng

- Save lưu trạng thái hiện tại vào ROM

- Load nạp lại nội dung đã lưu

3.Thay đổi nội dung, lưu nội dung cho bảng tin

Để thay đổi nội dung làm như sau:

- Sau khi khởi động động phần mềm, ô message có nội dung là “Hello!

LMD” kích chuột vào ô message gõ nội dung cần hiển thị (không được bỏ

qua, bắt buộc phải gõ gì đó dù một dấu cách rồi lại xóa đi)

50

Page 51: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Kích vào Capture, Preview, cửa sổ Preview sẽ hiển thị như hình dưới với

thông tin về kích thước ảnh

- Nối dây truyền thông RS232 của bảng tin điện tử với cổng COM của máy

tính

- Kích Bit2Byte, Out Array, Bảng điện tử sẽ hiển thị nội dung như Preview

- Kích Roll, để thực hiện hiệu ứng cuộn ngang

- Kích Stop để thực hiện dừng hiệu ứng

- Kích Save để lưu trạng thái hiện tại của bảng vào ROM (trạng thái này sẽ

được giữ lại trong ROM ngay cả khi mất điện)

- Kích Load để lấy lại trạng thái đã ghi vào ROM trước đó

Để thay đổi Font làm như sau:

- Kích vào Font sẽ xuất hiện cửa sổ như hình dưới đây:

51

Page 52: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Chọn Font, Font style, Size để thay đổi font, kiểu cách, và cỡ chữ như

mong muốn, sau đó chọn OK

- Kích Capture, Preview, xem lại kết quả chỉnh sửa và thông báo về kích

thước trong ô Dimension Inf

- Để hiển thị kết quả mới chọn Bit2byte, Out Array

- Nếu sau khi capture thông báo kích thước ảnh lớn hơn kích thước bảng tin

hiện có thì nội dung hiển thị sẽ bị mất đi phần trên của bức ảnh xem trong

Preview

- Dùng các điều chỉnh Top cutting, và Bottom Cutting để cắt đỉnh phần trên

và dưới của bức ảnh

- Kích Capture để xem thông báo về kích thước ảnh sau mỗi lần chỉnh sửa,

lưu ý kích thước thật của bảng hiện có là cao 16 điểm và có thể hiển thị bản

tin rộng 256 điểm, một kích thước ảnh rộng hơn sẽ hiển thị bị mất đi phần

trên và phần bên phải.

- Kích Preview để xem qua

Chú ý sau mỗi lần chỉnh sửa nội dung phải kích vào Capture để có nội dung mới,

chọn Preview để xem lại nội dung mới, chọn Bit2Byte và Out Array để truyền

bản tin ra bảng điện tử

52

Page 53: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Phụ Lục

Mã nguồn chương trình

Bài 1:

/* Chuong trinh mau LMD1

NTL – viet tren Keil C

*/

#include <reg51.h>

sbit clkIN = 0xB3;//tao xung dich vao bo dem ghi dich

sbit DuLieu = 0x97;

sbit clkOUT = 0xB4;//tao xung xuat ra dong thoi cua cac bo dem

sbit DongBo = 0xB5;//tao xung dong bo hang dau tien, chan nay noi toi dau vao

bo ghi dich quet hang

void main (void){

char data X[8] = {0xC0,0xD2,0xDA,0xD6,0xD2,0xC0,0xFC,0xFC};//

Chữ L và n

char TrungGian;

int i,j;

P1 = 0;

while (1){

DongBo = 1;

for (i = 0; i <= 7; i++ ) {

TrungGian = X[i];

for (j=0; j<=7; j++) {

DuLieu = TrungGian%2; //phat bit LSB

TrungGian = TrungGian/2; //dich phai

clkIN = 1; //tao mot xung vuong kich vao bo dem ghi

dich

53

Page 54: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

clkIN = 0;

}

clkOUT = 1; //tao mot xung vuong de bo dem xuat ra dong

thoi mot hang

clkOUT = 0; //dich xung dong bo hang xuong hang tiep theo

DongBo = 0; //tat xung dong bo o cac hang sau

}

}

}

Bài 2:

/*chuong trinh thu nghiem LMD2

------------------------------

dung hai ngat ngoai de dieu khien thay doi du lieu trong mang hien thi.

khi co ngat o chan 12 hien thi chu A

khi co ngat o chan 13 hien thi chu Z

mang char dc khai bao o ngoai

--------------------------

Viet tren Keil C

NTL

*/

#include <reg51.h>

sbit clkIN = 0xB3;//tao xung dich vao bo dem ghi dich

sbit DuLieu = 0x97;

sbit clkOUT = 0xB4;//tao xung xuat ra dong thoi cua cac bo dem

sbit DongBo = 0xB5;//tao xung dong bo hang dau tien, chan nay noi toi dau vao

bo ghi dich quet hang

sbit Ngat = 0xAF; //EA

sbit Ngatchan12 = 0xA8; //EX0

54

Page 55: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

sbit Ngatchan13 = 0xAA; //EX1

char data X[8] = {0x41,0x63,0x36,0x1c,0x1c,0x36,0x63,0x41}; //du lieu hien thi

/*--------------------------------------------------------------------*/

#pragma NOAREGS // ko su dung cac ky hieu thanh ghi tuyet doi cho cac

// ham duoc goi tu dich vu ngat

static void XuLiNgatChan12 (void) { //chuyen du lieu thanh chu A

X[0] = 0x10; //nap du lieu chu A cho bang X

X[1] = 0x38;

X[2] = 0x6c;

X[3] = 0xc6;

X[4] = 0xfe;

X[5] = 0xc6;

X[6] = 0xc6;

X[7] = 0xc6;

}

static void XuLiNgatChan13 (void) { //chuyen du lieu thanh chu Z

X[0] = 0x7f; //nap du lieu chu Z cho bang X

X[1] = 0x7f;

X[2] = 0x06;

X[3] = 0x0c;

X[4] = 0x18;

X[5] = 0x30;

X[6] = 0x7f;

X[7] = 0x7f;

}

#pragma AREGS

/*--------------------------------------------------------------------*/

55

Page 56: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

void ngatchan12 (void) interrupt 0 using 1{

XuLiNgatChan12 (); //hien thi chi A

}

void ngatchan13 (void) interrupt 2 using 1{

XuLiNgatChan13 (); //hien thi chi Z

}

/*--------------------------------------------------------------------*/

void main (void){

char TrungGian;

int i,j;

Ngat = 1; //cho phep ngat toan cuc

Ngatchan12 = 1;//cho phep ngat chan 12

Ngatchan13 = 1;//cho phep ngat chan 13

P1 = 0;

while (1){

DongBo = 1;

for (i = 7; i >= 0; i-- ) {

TrungGian = X[i];

for (j=0; j<=7; j++){

DuLieu = TrungGian%2; //phat bit LSB

TrungGian = TrungGian/2; //dich phai

clkIN = 1; //tao mot xung vuong kich vao bo dem ghi

dich

clkIN = 0;

}

clkOUT = 1; //tao mot xung vuong de bo dem xuat ra dong

thoi mot hang

clkOUT = 0; //dich xung dong bo hang xuong hang tiep theo

56

Page 57: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

DongBo = 0; //tat xung dong bo o cac hang sau

}

}

}

Bài 3:

/*chuong trinh thu nghiem LMD3

----------------------------------

hien thi chu A

-----------------------------------

NTL

*/

#include <reg51.h>

//cac chan tin hieu dieu khien

sbit clkIN = 0xB3;//tao xung dich vao bo dem ghi dich

sbit DuLieu = 0x97;

sbit clkOUT = 0xB4;//tao xung xuat ra dong thoi cua cac bo dem

sbit DongBo = 0xB5;//tao xung dong bo hang dau tien, chan nay noi toi dau vao

bo ghi dich quet hang

//cac bit cho phep ngat

sbit Ngat = 0xAF; //EA

sbit Ngatchan12 = 0xA8; //EX0

sbit Ngatchan13 = 0xAA; //EX1

sbit NgatDinhthoi0 = 0xA9;

// bang du lieu khoi tao

57

Page 58: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

//day la bang du lieu toan cuc

char data X[24] = { 0xFF,0xEF,0xD7,

0xBB,0x83,0xBB,

0xBB,0xFF,0xFF,

0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF

};

int hang,cot;

bit msb,lsb;

void main (void){

char TrungGian;

int i,j;

hang = 0;

cot = 2;

P1 = 0;

while (1)

{

DongBo = 1;

for (i = 0; i <= 23; i++ ) {

TrungGian = X[i];

for (j=0; j<=7; j++) {

DuLieu = TrungGian%2; //phat bit LSB

TrungGian = TrungGian/2; //dich phai

58

Page 59: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

clkIN = 1; //tao mot xung vuong kich vao dem ghi dich

clkIN = 0;

}

clkOUT = 1; //tao mot xung vuong de bo dem xuat ra dong

thoi mot hang

clkOUT = 0; //dich xung dong bo hang xuong hang tiep theo

DongBo = 0; //tat xung dong bo o cac hang sau

}

}

}

Bài 4:

/*chuong trinh thu nghiem LMD4

*/

#include <reg51.h>

//cac chan tin hieu dieu khien

sbit clkIN = 0xB3;

sbit DuLieu = 0x97;

sbit clkOUT = 0xB4;

sbit DongBo = 0xB5;

//cac bit cho phep ngat

// bang du lieu khoi tao

//day la bang du lieu toan cuc

char data X[64] = { 0x00,0x00,0x00,0x00,

0x00,0x01,0x00,0x00,

0x80,0x01,0x00,0x00,

59

Page 60: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

0xc0,0x01,0x00,0x00,

0xe0,0x01,0x00,0x00,

0xb0,0xff,0xff,0x3f,

0x98,0xff,0xff,0x3f,

0x0c,0x00,0x00,0x30,

0x0c,0x00,0x00,0x30,

0x98,0xff,0xff,0x3f,

0xb0,0xff,0xff,0x3f,

0xe0,0x01,0x00,0x00,

0xc0,0x01,0x00,0x00,

0x80,0x01,0x00,0x00,

0x00,0x01,0x00,0x00,

0x00,0x00,0x00,0x00 };

/*--------------------------------------------------------------------*/

/*sau day la chuong trinh chinh

1. NHIEM VU:

- khai bao, khoi tao

khoi tao mang hien thi

khoi tao cac biet dieu khien chi so mang de phuc vu xuat mang

khoi tao tin hieu dieu khien

- dieu khien xuat mang theo vong lap vo han

2. GIAI THUAT

3. Danh sach cac bien, du lieu tac dong

- du lieu toan cuc

+ mang du lieu hien thi: X

+ Cac chan tin hieu dieu khien

port1: Dulieu

chan dieu khien xung dich vao bo dem: clkIN

chan dieu khien xung dich ra bo dem: clkOUT

chan tao xung dong bo hang dau tien: DongBo

60

Page 61: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Du lieu cuc bo

Bien trung gian xac dinh tri so mang: chiso

bien dung de dem so byte trong 1 hang, dung cho viec phat 1 hang: k

bien dung de dem so hang trong anh, dung cho viec phat 1 hang: i

*/

void main (void){

int i,k,chiso;

while (1){

DongBo = 1;

for (i = 0; i <= 15; i++ ) {

for (k=0; k<=3; k++) {

chiso = i*4 + k;

DuLieu = X[chiso];

clkIN = 1; //tao mot xung vuong kich vao bo dem ghi

dich

clkIN = 0;

}

clkOUT = 1; //tao mot xung vuong de bo dem xuat ra dong

thoi mot hang

clkOUT = 0; //dich xung dong bo hang xuong hang tiep theo

DongBo = 0; //tat xung dong bo o cac hang sau

}

}

}

Bài 5:

/*chuong trinh thu nghiem LMD5 --- "CHAY TOT !!!"

dieu khien mach quet LED co so do phan cung nhu ...

61

Page 62: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

dieu khien quet LED bang ngat dinh thoi

moi khi say ra ngat dinh thoi 0 chuong trinh se xuat ra mot hang dua vao bien

ChiSo

va chot giu. cu the viec do la

- xuat ra lien tuc cac byte cua hang do xe ke xung clkIN

- sau khi xuat het cac byte thi xuat ra mot xung clkOUT

ChiSo la bien toan cuc dc khoi tao do chuong trinh chinh

neu ChiSo bang 0, tuc la hang dau tien dc xuat, khi ay xuat ra DongBo = 1

neu ChiSo khac 0 thi xuat ra mot ra DongBo = 0

sau khi xuat het so byte kiem tra neu ChiSo = 63 thi dua tro ve 0

cong P1 xuat ra song song DuLieu

cac chan 21, 22, 23 (p20, p21, p22) dieu khien clkIN, clkOUT, DongBo

mang char dc khai bao o ngoai

*/

#include <reg51.h>

//cac chan tin hieu dieu khien

sfr DuLieu = 0x90; //chan 1,2,3,4,5,6,7,8 cong P1 cua 8951 duong dl song

song noi den dau vao bo dem ghi dich

sbit clkIN = 0xA0; //chan 21 8951 tao xung dich vao bo dem ghi dich

sbit clkOUT = 0xA1; //chan 22 8951 tao xung xuat ra dong thoi cua bo dem

sbit DongBo = 0xA2; //chan 23 8951 tao xung dong bo hang dau tien, chan nay

noi toi dau vao bo ghi dich quet hang

//cac thanh ghi va bit chuc nang dac biet

sfr CheDoDinhThoi = 0x89;

sfr ByteThapDinhThoi0 = 0x8A;

sfr ByteCaoDinhThoi0 = 0x8C;

sbit BatDinhThoi0 = 0x8C;

//cac bit cho phep ngat

sbit Ngat = 0xAF; //EA

62

Page 63: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

sbit NgatDinhthoi0 = 0xA9;

//DINH NGHIA CAC THAM SO KICH THUOC BANG, THOI GIAN QUET

#define BeRong 4 //so byte cua mot hang

#define ChieuCao 16 //so hang

#define SoByteMang 64 //so byte cua mang hien thi X

#define SoLanNgat 5 //so lan say ra ngat dinh thoi

#define SoDemDinhThoi 256 //so xung nhip dinh thoi can dem

// bang du lieu khoi tao

// 16 11 1985

char data X[SoByteMang] = { 0x00,0x00,0x00,0x00,

0x00,0x00,0x06,0x00,

0x00,0x00,0x49,0x00,

0xFF,0xFF,0x49,0xFF,

0x40,0x40,0x49,0x40,

0x20,0x20,0x25,0x20,

0x00,0x00,0x1E,0x00,

0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,

0x8c,0x6E,0x7C,0x00,

0x92,0x91,0xA2,0x00,

0xA1,0x91,0x91,0xFF,

0xA1,0x91,0x91,0x40,

0xA1,0x91,0x91,0x20,

0x72,0x6E,0x62,0x00,

0x00,0x00,0x00,0x00 };

/*--------------------------------------------------------------------*/

int ChiSo,n;//chi so mang va bien n de dem so lan say ra ngat

/*--------------------------------------------------------------------*/

63

Page 64: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

#pragma NOAREGS // ko su dung cac ky hieu thanh ghi tuyet doi cho cac

// ham duoc goi tu dich vu ngat

/*----------------------------------*/

static void XuLiNgatDinhThoi0 (void) //xuat ra mot hang thu x

/*day la chuong chinh con phuc vu ngat dinh thoi 0

nhiem vu cua chuong trinh con nay la:

- dem so lan say ra ngat dinh thoi qua bien n

- khi n < 100 thi tang len 1 ket thuc

- khi n = 100 thi xuat ra hang ket thuc

viec xuat ra mot hang dua vao bien ChiSo.

bien ChiSo ban dau dc main gan la 0, la chi so cua byte dau hang

+ kietm tra neu la hang dau tien (n==0) thi DongBo=0, nguoc lai =1

+ su dung vong lap voi so vong la so byte cua hang

moi chu trinh lap se xuat ra mot byte, va clkIN, tang ChiSo

+ ket thuc vong lap thi xuat ra mot xung chot clkOUT, va chi so da tro den hang

tiep theo

+ kiem tra neu xuat het mang (chiso=SoByteMang) thi gan lai chiso=0

*/

{

int k; //bien dem so byte trong mot hang

if (n==SoLanNgat) //neu ngat SoLanNgat lan thi

{

n=0; //dem lai tu 0 voi lan sau

if (ChiSo==0) {DongBo = 1;}//DongBo=1 o hang dau tien

else {DongBo = 0;}// =0 cac hang sau

for (k=1; k<=BeRong; k++) //va xuat ra mot hang

{

DuLieu = X[ChiSo];

clkIN = 1; //tao mot xung vuong kich vao bo dem ghi

dich

clkIN = 0;

64

Page 65: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

ChiSo++; //tang chi so len 1,

} //ket thuc for chi so se tang len 4

clkOUT = 1; //tao mot xung vuong de bo dem xuat ra dong thoi

mot hang

clkOUT = 0; //dich xung dong bo hang xuong hang tiep theo

if (ChiSo > (SoByteMang-1)) {ChiSo=0;}

}

else //neu n < 100 thi

{

n++;//tiep tuc dem so lan ngat

}

}

#pragma AREGS

/*--------------------------------------------------------------------*/

void NgatDinhThoi0 (void) interrupt 1 using 1

{

XuLiNgatDinhThoi0 (); //dich 1 cot tu trai qua phai

}

/*--------------------------------------------------------------------*/

/*sau day la chuong trinh chinh

1. NHIEM VU:

+ khoi tao cac gia tri bien:

khoi tao bien dieu khien chi so mang ChiSo de phuc vu xuat mang

khoi tao bien dem n de tinh toc do ngat

+ thiet lap cac che do ngat va dinh thoi

cho phep ngat toan cuc

cho phep ngat dinh thoi

2. GIAI THUAT

3. Danh sach cac bien, du lieu tac dong

Bit cho phep ngat toan cuc: Ngat

65

Page 66: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Bit cho phep ngat dinh thoi 0: Ngatdinhthoi0

Bien trung gian xac dinh tri so mang: chiso

Bien dem so lan say ra ngat: n

Gia tri thanh ghi dinh thoi

*/

void main (void){ //khoi tao

ChiSo = 0; //khoi tao chi so cua mang

n = 0; //khoi tao bien dem so lan ngat

//thiet lamp che do cho dinh thoi

CheDoDinhThoi = (CheDoDinhThoi & 0xf0) | 0x02;

// thiet lap che do tu dong lap lai 8 bit cho T0

ByteCaoDinhThoi0 = 256 - SoDemDinhThoi;

// nap lai cho TL0 de dem SoDemDinhThoi xung nhip he thong

ByteThapDinhThoi0 = ByteCaoDinhThoi0;

//khoi dong he thong

Ngat = 1; //cho phep ngat toan cuc

NgatDinhthoi0 = 1;//cho phep ngat dinh thoi 0

BatDinhThoi0 = 1; // khoi dong dinh thoi 0

//doi

while (1);

}

Bài 6:

/*chuong trinh thu nghiem LMD6 --- "CHAY TOT !!!"

dieu khien mach quet LED co so do phan cung nhu ...

dieu khien quet LED bang ngat dinh thoi

tao hieu ung dich chuyen ngang

moi khi say ra ngat dinh thoi 0 chuong trinh se xuat ra mot hang dua vao bien

ChiSo

66

Page 67: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

va chot giu. cu the viec do la

- xuat ra lien tuc cac byte cua hang do xe ke xung clkIN

- sau khi xuat het cac byte thi xuat ra mot xung clkOUT

ChiSo la bien toan cuc dc khoi tao do chuong trinh chinh

neu ChiSo bang 0, tuc la hang dau tien dc xuat, khi ay xuat ra DongBo = 1

neu ChiSo khac 0 thi xuat ra mot ra DongBo = 0

sau khi xuat het so byte kiem tra neu ChiSo = 63 thi dua tro ve 0

cong P1 xuat ra song song DuLieu

mang char dc khai bao o ngoai

*/

#include <reg51.h>

//cac chan tin hieu dieu khien

sbit clkIN = 0xB3;//tao xung dich vao bo dem ghi dich

sfr DuLieu = 0x90;

sbit clkOUT = 0xB4;//tao xung xuat ra dong thoi cua cac bo dem

sbit DongBo = 0xB5;//tao xung dong bo hang dau tien, chan nay noi toi dau vao

bo ghi dich quet hang

//cac thanh ghi va bit chuc nang dac biet

sfr CheDoDinhThoi = 0x89;

sfr ByteThapDinhThoi0 = 0x8A;

sfr ByteCaoDinhThoi0 = 0x8C;

sbit BatDinhThoi0 = 0x8C;

//cac bit cho phep ngat

sbit Ngat = 0xAF;

sbit NgatDinhthoi0 = 0xA9;

//DINH NGHIA CAC THAM SO KICH THUOC BANG, THOI GIAN QUET

67

Page 68: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

#define BeRong 4 //so byte cua mot hang

#define ChieuCao 16 //so hang

#define SoByteMang 64 //BeRong * ChieuCao = so byte cua mang hien thi X

#define NgatDu 5 //so lan say ra ngat dinh thoi

#define SoDemDinhThoi 256 //so xung nhip dinh thoi can dem

// bang du lieu khoi tao

char code KhoiTao[SoByteMang] ={0x00,0x00,0x00,0x00,

0x00,0x01,0x00,0x00,

0x80,0x01,0x00,0x00,

0xc0,0x01,0x00,0x00,

0xe0,0x01,0x00,0x00,

0xb0,0xff,0xff,0x3f,

0x98,0xff,0xff,0x3f,

0x0c,0x00,0x00,0x30,

0x0c,0x00,0x00,0x30,

0x98,0xff,0xff,0x3f,

0xb0,0xff,0xff,0x3f,

0xe0,0x01,0x00,0x00,

0xc0,0x01,0x00,0x00,

0x80,0x01,0x00,0x00,

0x00,0x01,0x00,0x00,

0x00,0x00,0x00,0x00

};

68

Page 69: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

char idata X[SoByteMang];

char bdata ThanhGhiTrungGian; //day la thanh ghi trung gian truy cap bit

sbit BitThapNhat= ThanhGhiTrungGian ^ 0;

sbit BitCaoNhat = ThanhGhiTrungGian ^ 7;

bit BitRa;//bit chua bit di ra tu bit dau hang

bit BitVao;//bit chua bit di Vao cuoi hang

/*--------------------------------------------------------------------*/

int ChiSo,DemSoLanNgatT0;//chi so mang va bien n de dem so lan say ra ngat

int SoDongDaXuat;

/*--------------------------------------------------------------------*/

#pragma NOAREGS // ko su dung cac ky hieu thanh ghi tuyet doi cho cac

// ham duoc goi tu dich vu ngat

/*----------------------------------*/

static void XuLiNgatDinhThoi0 (void) //xuat ra mot hang thu x

/*day la chuong chinh con phuc vu ngat dinh thoi 0

nhiem vu cua chuong trinh con nay la:

- dem so lan say ra ngat dinh thoi qua bien n

- khi n < SoLanNgat thi tang len 1 ket thuc

- khi n = SoLanNgat thi xuat ra hang ket thuc

viec xuat ra mot hang dua vao bien ChiSo.

bien ChiSo ban dau dc main gan la 0, la chi so cua byte dau hang

+ kietm tra neu la hang dau tien (n==0) thi DongBo=0, nguoc lai =1

+ su dung vong lap voi so vong la so byte cua hang

moi chu trinh lap se xuat ra mot byte, va clkIN, tang ChiSo

+ ket thuc vong lap thi xuat ra mot xung chot clkOUT, va chi so da tro den hang

tiep theo

+ kiem tra neu xuat het mang (chiso=SoByteMang) thi gan lai chiso=0

*/

{

int k; //bien dem so byte trong mot hang

if (++DemSoLanNgatT0==NgatDu) //neu ngat SoLanNgat lan thi

69

Page 70: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

{

DemSoLanNgatT0=0;

//dem lai tu 0 voi lan sau

SoDongDaXuat++;

if (ChiSo==0) {DongBo = 1;}//DongBo=1 o hang dau tien

else {DongBo = 0;}// =0 cac hang sau

for (k=1; k<=BeRong; k++) //va xuat ra mot hang

{

DuLieu = X[ChiSo];

clkIN = 1; //tao mot xung vuong kich vao bo dem ghi

dich

clkIN = 0;

ChiSo++; //tang chi so len 1,

} //ket thuc for chi so se tang len 4

clkOUT = 1; //tao mot xung vuong de bo dem xuat ra dong thoi

mot hang

clkOUT = 0; //dich xung dong bo hang xuong hang tiep theo

if (ChiSo > (SoByteMang-1)) {ChiSo=0;}

}

}

#pragma AREGS

/*--------------------------------------------------------------------*/

void NgatDinhThoi0 (void) interrupt 1 using 1

{

XuLiNgatDinhThoi0 (); //dich 1 cot tu trai qua phai

}

/*--------------------------------------------------------------------*/

void Quay1DiemCho1Hang (int SoHang)//so hang bat dau tu 1 den 16

/*day la thu tuc dich chuyen mot hang

thu tuc nay se lam cho mot hang quay di mot cot theo giai thuat sau:

- ve dau hang

70

Page 71: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- chep bit dau hang

- thuc hien vong lap quay cac byte tu cuoi

hang den dau hang co kem theo bit dau hang

+ chep byte vao ThanhGhiTrungGian

+ dich trai (*2)

+ BitVao->BitThapNhat

+ BitRa ->BitVao

+ nhay den byte tiep theo thuc hien tiep chu trinh

*/

{

int SoByte;

ThanhGhiTrungGian = X[SoHang*BeRong - 1]; //chep Byte dau

hang vao ThanhGhiTrungGian

BitVao = BitCaoNhat; //chep bit dau hang vao

BitTrungGian

for (SoByte=0; SoByte<BeRong; SoByte++)//thuc hien vong lap quay cac

byte tu cuoi

{ //hang den dau hang co kem theo

bit dau hang

ThanhGhiTrungGian = X[(SoHang-1)*BeRong + SoByte];//chep

byte dang tro

BitRa = BitCaoNhat; //chep bit Cao nhat truoc khi

dich

ThanhGhiTrungGian *=2; //dich trai

if (BitVao) {ThanhGhiTrungGian++;}

BitVao = BitRa;

X[(SoHang-1)*BeRong + SoByte] = ThanhGhiTrungGian;

}

}

/*--------------------------------------------------------------------*/

/*sau day la chuong trinh chinh

71

Page 72: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

1. NHIEM VU:

+ khoi tao cac gia tri bien:

khoi tao bien dieu khien chi so mang ChiSo de phuc vu xuat mang

khoi tao bien dem n de tinh toc do ngat

+ thiet lap cac che do ngat va dinh thoi

cho phep ngat toan cuc

cho phep ngat dinh thoi

2. GIAI THUAT

3. Danh sach cac bien, du lieu tac dong

Bit cho phep ngat toan cuc: Ngat

Bit cho phep ngat dinh thoi 0: Ngatdinhthoi0

Bien trung gian xac dinh tri so mang: chiso

Bien dem so lan say ra ngat: n

Gia tri thanh ghi dinh thoi

*/

void main (void)

{

int Hang;//bien mang mang chi so hang

//khoi tao

SoDongDaXuat=0;

ThanhGhiTrungGian = 0;

ChiSo = 0; //khoi tao chi so cua mang

DemSoLanNgatT0 = 0; //khoi tao bien dem so lan ngat

for (Hang=0; Hang<=SoByteMang; Hang++)//nap du lieu khoi tao

{X[Hang] = KhoiTao[Hang];}

//thiet lamp che do cho dinh thoi

CheDoDinhThoi = (CheDoDinhThoi & 0xf0) | 0x02; // thiet lap che do

tu dong lap lai 8 bit cho T0

ByteCaoDinhThoi0 = 256 - SoDemDinhThoi; // nap lai cho TL0

de dem SoDemDinhThoi xung nhip he thong

72

Page 73: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

ByteThapDinhThoi0 = ByteCaoDinhThoi0;

//khoi dong he thong

Ngat = 1; //cho phep ngat toan cuc

NgatDinhthoi0 = 1;//cho phep ngat dinh thoi 0

BatDinhThoi0 = 1; // khoi dong dinh thoi 0

//vong lap thuc hien hieu ung dich chuyen

while (1)

{

if (SoDongDaXuat==48) //neu da dc 48 dong

{

SoDongDaXuat=0; //xoa

for ( Hang=1; Hang<=16; Hang++) //dich ca hinh di 1 cot

{Quay1DiemCho1Hang(Hang);}

};

};

}

73

Page 74: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

TÀI LIỆU THỰC HÀNH PIC

MỤC LỤC

I. GIỚI THIỆU HỆ THỐNG.............................................................................85

II. MÔ TẢ CÁC THÀNH PHẦN CỦA HỆ THỐNG.....................................87

1. DIP SWITCH (DIPSW)............................................................................87

2. JUMPERs..................................................................................................88

3. MCU SOCKETs........................................................................................89

4. POWER SUPPLY.....................................................................................92

5. ON-BOARD PROGRAMMER................................................................92

6. REAL TIME CLOCK (RTC) DS1307......................................................93

7. RS-232 COMMUNICATION...................................................................94

8. USB COMMUNICATION.......................................................................95

9. PS/2 COMMUNICATION.......................................................................96

10. DS1820 DIGITAL THERMOMETER...................................................98

11. A-D CONVERTER INPUT....................................................................99

12. DIRECT PORT ACCESS.....................................................................100

PHẦN II: THỰC HÀNH....................................................................................102

Bài thực hành số 1...........................................................................................102

SỬ DUNG PHẦN MỀM WINPIC800...........................................................102

TRUY CẬP CỔNG VÀO RA SỐ VÀ ĐIỀU KHIỂN LED 7 DOẠN...........102

I. MUC ĐÍCH..............................................................................................102

II. CHUẨN BỊ.............................................................................................102

III. THỰC HÀNH.......................................................................................102

Bài thực hành số 2...........................................................................................112

BIẾN ĐỔI ADC, ĐO ĐIỆN ÁP, NHIỆT ĐỘ.................................................112

HIỂN THỊ TRÊN LED VÀ TRUYỀN THÔNG QUA RS232.......................112

I. MUC ĐÍCH..............................................................................................112

II. CHUẨN BỊ.............................................................................................112

74

Page 75: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

III. THỰC HÀNH.......................................................................................112

Bài thực hành số 3...........................................................................................116

ĐỌC PHÍM BẤM, ĐIỀU KHIỂN RELAY....................................................116

VÀ ĐỌC THỜI GIAN THỰC DS1307 HIỂN THỊ TRÊN LEB 7 ĐOẠN....116

I. MUC ĐÍCH..............................................................................................116

II. CHUẨN BỊ.............................................................................................116

III. THỰC HÀNH.......................................................................................117

PHU LUC...........................................................................................................123

Phần I: Lý thuyết chung về CPLD và VHDL.....................................................155

Giới thiệu............................................................................................................156

I. Lý thuyết chung về CPLD...............................................................................156

1. Giới thiệu chung..........................................................................................156

1.1. Lịch sử Logic khả trình........................................................................156

1.2. Thiết bị logic khả trình phức tạp CPLD...............................................159

1.3. Mảng cổng Logic khả trình miền FPGA..............................................162

1.4. Hợp nhất công nghệ Logic...................................................................164

2. Các giải pháp công nghệ của Xilinx...........................................................165

2.1. Giới thiệu..............................................................................................165

2.2. Các thiết bị của Xilinx..........................................................................166

2.3. CPLD Xilinx........................................................................................166

II. Lý thuyết chung về VHDL.............................................................................174

1. Các phương pháp thiết kế số truyền thống..................................................174

1.1. Phương pháp thiết kế dùng hàm Boolean.............................................174

1.2. Phương pháp thiết kế dựa trên sơ đồ (Là sự mở rộng của phương pháp

thiết kế dùng hàm Boolean).........................................................................175

1.3. Nhược điểm của các phương pháp thiết kế truyền thống.....................175

2. Phương pháp thiết kế số bằng ngôn ngữ mô tả phần cứng.........................176

3. Các quá trình thực hiện thiết kế số bằng HDL trên FPGA.........................178

4. Ngôn ngữ mô tả phần cứng VHDL.............................................................184

4.1. Giới thiệu..............................................................................................184

4.2. Cấu trúc một mô hình hệ thống mô tả bằng VHDL.............................186

75

Page 76: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Phần II: Thực hành.............................................................................................190

Bài 1: Làm quen với phương pháp thiết kế số bằng VHDL trên phần mềm ISE

của Xilinx............................................................................................................190

1. Mục đích.....................................................................................................190

2. Thiết bị sử dụng..........................................................................................190

3. Nội dung thực hành.....................................................................................190

3.1. Tạo dự án mới......................................................................................191

3.2. Biên soạn HDL.....................................................................................194

3.3. Biên soạn lưu đồ trạng thái...................................................................201

3.4. Thiết kế VHDL mức đỉnh....................................................................207

3.5. Thiết kế sơ đồ nguyên lí mức đỉnh.......................................................220

4. Các bài thực hành nâng cao........................................................................229

Bài 2: Tìm hiểu về cấu trúc phần cứng X-Board................................................231

1. Mục đích.....................................................................................................231

2. Thiết bị sử dụng..........................................................................................231

3. Nội dung thực hành.....................................................................................231

4. Yêu cầu sau buổi thực hành........................................................................238

Bài 3: Thực hành với Project mẫu trên X-Board................................................239

1. Mục đích.....................................................................................................239

2. Thiết bị thực hành.......................................................................................239

4. Yêu cầu sau buổi thực hành........................................................................243

76

Page 77: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

PHẦN I: MÔ TẢ THIẾT BỊ

I. GIỚI THIỆU HỆ THỐNG

HẾ THỐNG ĐÀO TẠO PIC (PIC.TS) là board mạch đầy đủ các công cụ cho

việc học tập và nghiên cứu vi điều khiển PIC của Microchip. Sinh viên dễ dàng

thực hành, kiểm tra và đánh giá khả năng của vi điều khiển PIC. PIC.TS cho

phép PIC giao tiếp với một số lượng lớn các thiết bị ngoại vi và mạch ngoài. Với

PIC.TS, sinh viên không còn lo lắng về phần cứng mà chỉ cần tập trung vào việc

phát triển phần mềm. Trên PIC.TS, mỗi thành phần được in thẳng trên board

mạch rất rõ ràng đánh dấu sự mô tả kết nối đến các thiết bị cùng một vài ghi chú

hữu ích.

Hình 1.1 - PIC.TS

77

Page 78: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 1.2 - Sơ đồ nguyên lí PIC.TS

78

Page 79: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

II. MÔ TẢ CÁC THÀNH PHẦN CỦA HỆ THỐNG

1. DIP SWITCH (DIPSW)

PIC.TS có đặc tính là kết nối với nhiều thiết vị ngoại vi. Để kết nối những thiết bị

này trước khi lập trình, cần phải kiểm tra và thiết đặt của các jumper và DIPSW.

DIPSW là linh kiện tập hợp nhiều switch có 2 vị trí ON và OFF dùng để nối hoặc

ngắt giữa 2 chân với nhau. PIC.TS có 2 DIPSW.

DIPSW1 cho phép kết nối giữa các port của PIC (PORTA và PORTE) với điện

trở pull-up/down bên ngoài. Các điện trở pull-up/down phải được tách rời ra khi

các chân của các port này dùng làm ngõ vào Analog vì làm ảnh hưởng đến mức

điện áp đầu vào. Khi các chân của PORTA và PORTE sử dụng như digital

inputs/outputs thì những điện trở pull-up/down lại thích hợp và được cho phép.

Sáu switches đầu của DIPSW2 cho phép kết nối tới PortA để điều khiển 6 LED 7

đoạn (7-Segment display). Nếu không cần 7-seg Display trong bài tập thì các SW

này cần phải OFF.

Hai switches đầu của SW2 cho phép kết nối DS1307 đến chân RC4 và RC3 của

PIC. Khi không có nhu cầu sử dụng DS1307 thì nên đưa các SW này về vị trí

OFF.

Hình 1.3 - Dip switch

79

Page 80: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

2. JUMPERs

Jumpers cũng giống như switches, có thể ngắt hoặc nối hai điểm với nhau. Bên

trong vỏ bọc nhựa của jumper là một lá kim loại dùng để tiếp xúc. Nó sẽ nối (dẫn

điện) nếu jumper này được gắn vào hai pin đang bị ngắt.

Ví dụ: Hai biến trở trong mạch ADC được ngắt rời với RA2 và RA3. Để nối

chúng với nhau cần sử dụng jumper.

Hình 1.4 - Jumper như một Switch

Các jumper cũng thường được sử dụng để lựa chọn giữa hai kết nối. Như minh

họa trong hình dưới, điểm giữa được nối với bên phải hoặc bên trái tuỳ thuộc vào

vị trí của jumper.

Hình 1.5 – Lựa chọn kết nối với jumper

3. MCU SOCKETs

PIC.TS được thiết kế sử dụng cho các loại vi điều khiển PIC 16F và 18F. Người

sử dụng có thể dùng các PIC khác nhau thích hợp cho công việc của mình có các

kiểu chân phù hợp với socket DIP40, DIP28, DIP18.

80

Page 81: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 1.6 - MCU socket

Chú ý: Tất cả các sockets trên được nối song song với nhau, vì vậy trong

cùng một thời điểm bạn chỉ có thể sử dụng được một vi điều khiển PIC mà thôi.

Chân MCU được sử dụng để nối đến nhiêu thiết bị ngoại vi như được minh hoạ

trong Hình 1.8. Do đó tất cả các port đều kết nối trực tiếp đến những đầu nối 5x2.

Những đầu nối như vậy cho phép mở rộng kết nối đến các thiết bị ngoại vi bên

ngoài hoặc hữu ích cho việc kết nối với các đầu dò digital logic.

Tất cả các ports đều được nối đến điện trở pull-ip/down và được đánh số ghi chú

rất chi tiết để dễ dàng cho việc kiểm tra và đo thử.

Một vài chân được kết nối tới các thiết bị ngoại vi khác như DS1820 temperature

sensor, RS-232 communication, 7-segment displays, LCD.

81

Page 82: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 1.8 - Sự kết nối hệ thống

PIC.TS có một nút bấm sử dụng cho mục đích RESET, sơ đồ mạch RESET được nhìn thấy trong hình dưới.

Hình 1.9 – Sơ đồ mạch reset

82

Page 83: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

4. POWER SUPPLY

Để hệ thống làm việc cần phải cấp nguồn. PIC.TS có thể hoạch động bằng nguồn

ngoài hoặc được cung cấp qua cable USB.

Trong trường hợp cấp nguồn qua USB, hệ thống phải được nối với PC bằng

cable USB và công tắc nguồn phải được gạt về phía USB. Lưu ý là việc cấp

nguồn qua USB chỉ sử dụng khi chạy thử chương trình. Khi nạp chương trình cho

chip bạn phải sử dụng nguồn ngoài. Khi sử dụng nguồn ngoài, PIC.TS sẽ tạo ra điện

áp +5V cấp cho hệ thống và điện áp +13V dùng làm điện áp lập trình chip.

Hình 1.10 – Lựa chọn nguồn cung cấp

5. ON-BOARD PROGRAMMER

Không cần sử dụng bất kỳ mạch nạp nào khác, PIC.TS có riêng một mạch nạp

on-board rất tiện lợi và dễ sử dụng. Bạn chỉ cần cắm cáp kết nối đến PC qua cổng

LPT.

83

Power supply swichesPower supply connector

Page 84: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 1.11 –Mạch nạp

Đây là mạch nạp giao tiếp qua cổng máy in sử dụng phần mềm WinPIC800 có độ

ổn định cao, tốc độ nhanh, hỗ trợ rất nhiều PIC.

6. REAL TIME CLOCK (RTC) DS1307

PIC.TS sử dụng đồng hồ thời gian thực DS1307 giao tiếp chuẩn I2C với vi điều

khiển PIC. Hai chân SCL và SDA nối với RC3 và RC4 qua SW2. Pin CMOS

dùng nuôi DS1307 khi ngắt nguồn.

Mạch nạp cho PIC trên PIC.TS Cáp kết nối

84

RTC DS1307 Pin Cmos

Page 85: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

RS-232 communiction

Hình 1.12 – Sơ đồ kết nối DS1307

7. RS-232 COMMUNICATION

Truyền thông RS-232 cho phép truyền dữ liệu điểm tới điểm. RS232 thường

được dùng trong các ứng dụng giao tiếp truyền thông giữa giữa vi điều khiển và

máy tính. Mức điện áp giữa vi điều

khiển và máy tính không thích hợp nhau.

Do vậy bộ đệm Max-232 được sử dụng.

Để sử dụng linh hoạt hơn, trên PIC.TS vi

điều khiển được nối tới Max232 qua cặp

jumper JP_TX và JP_TD. Jumper

JP_RX được sử dụng để nối tới đường

Rx tới RC7, RB2 hoặc RB1. Jumper

JP_TX được sử dụng để nối tới đường

85

Page 86: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Tx tới RC6, RB5 hoặc RB2. Chú ý: JP5 và JP6 không được nối cùng lúc đến

RB2.

Hình 1.13 - Kết nối PIC với máy tính

8. USB COMMUNICATION

PIC.TS có một cổng USB. Nó được sử

dụng cho những loại vi điều khiển PIC có

hỗ trợ giao tiếo USB như 18F2450,

18F2550, 18F4550… ngoài khả năng giao

tiếp USB nó còn là bộ phận cấp nguồn 5V

cho chế độ chạy thử (không sử dụng được

nguồn USB ở chế độ nạp).

Để kết nối giữa vi điều khiển và socket

USB cần phải nối cả 3 jumpers JP17, JP18

và JP19 lên phía trên. Kết quả là vi điều

86USB communication connector

Page 87: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

khiển có RC3, RC4 và RC5 được tách ra khỏi các phần tử khác trên board và nối

với socket USB.

Hình 1.14 – Sơ đồ kết nối truyền thông USB

9. PS/2 COMMUNICATION

Đầu nối PS/2 cho phép kết nối trực tiếp giữa PIC.TS với những thiết bị có sử

dụng giao tiếp PS/2 như PC, bàn phím hoặc chuột. Ví dụ: vi điều khiển được nối

với bàn phím để đọc những phím được nhấn hoặc kết nối với PC để hoạt động

như một bàn phím. Đường DATA cà CLK được sử dụng cho việc truyền dữ liệu.

Trong trường hợp này chúng được nối tới những pin tương ứng RC1 và RC0 của

vi điều khiển.

87

Page 88: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 1.15 – Sơ đồ kết nối PS/2 với vi điều khiển

10. DS1820 DIGITAL THERMOMETER

DS1820 là IC cảm biến nhiệt độ dạng số rất tốt cho việc đo nhiệt độ môi trường

với dải nhiệt độ đo rộng -55OC đến 125OC với độ chính xác +/- 0.5OC. Nó phải

được đặt chính xác trong socket 3 chân và đúng chiều với hình vẽ in trên PIC.TS.

Nếu không DS1820 có thể bị hỏng. Chân data của DS1820 có thể nối tới pin

RA5 hoặc RE2 của vi điều khiển PIC bởi jumper JP14.

88

Page 89: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 1.16 – Sơ đồ kết nối DS18b20 với vi điều khiển

11. A-D CONVERTER INPUT

Board phát triển Kit phát triển Vi điều khiển PIC có 2 biến trở để làm việc với

Analog to Digital converter – ADC. Biến trở P1 thì hoạt động khi Jumper JP 15

được chọn gắn vào cho tín hiệu analog đến chân RA2 của Microcontroller. Biến

trở P2 thì hoạt động khi jumper JP16 được chọn gắn vào cho tín hiệu analog đến

chân RA3 của microcontroller. Cả 2 đầu ra analog của biến trở trong phạm vi 0V

đến 5V.

89

Page 90: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 1.17 - ADC Converter input

Để đo tín hiệu tương tự các jumper pull-up/down của PORTA cần phải được loại

bỏ. Các chân của PORTA không kết nối tới bất cứ các thành phần thiết bị nào

khác.

Ứng dụng chuyển đổi tương tự - số khác nhau, vi điều khiển nhận tín hiệu tương

tự từ chân đầu vào và chuyển nó thành tín hiệu số. Về cơ bản, bạn có thể đo bất

kỳ tín hiệu tương tự nào trong phạm vi 0 ÷ 5V

Hình 1.18 – Sơ đồ kết nối khi đo ADC

12. DIRECT PORT ACCESS

Tất cả các pin vào/ra của microcontroller có thể được truy cập trực tiếp qua các

đầu nối đặt bên mép phải của PIC.TS cho mỗi PORTA, PORTB, PORTC,

PORTD và PORTE. Đây là socket 10-pin (5x2) cung cấp VDD, GND và 8 pin

port kết nối với bên ngoài bằng cáp kết nối.

Những đầu nối này sử dụng cho việc mở rộng hệ thống với những board mở rộng

hệ thống bên ngoài và cần bảo đảm những thiết bị ngoại vi trên board phải được

tách ra bằng việc đặt các jumper thích hợp khi thiết bị ngoại vi bên ngoài cũng

dùng chân đó.

Những đầu nối cũng có thể sử dụng để gắn đầu dò logic hoặc các thiết bị đo thử khác.

90

Page 91: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 1.19 - Sơ đồ kết nối PORTB

91

Page 92: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

PHẦN II: THỰC HÀNH

Bài thực hành số 1

SỬ DUNG PHẦN MỀM WINPIC800

TRUY CẬP CỔNG VÀO RA SỐ VÀ ĐIỀU KHIỂN LED 7 DOẠN

I. MUC ĐÍCH

- Làm quen với phần mềm WinPIC800, biết cách sử dụng phần mềm và

mạch nạp có sẵn trên PIC.TS để nạp chương trình cho PIC.

- Tìm hiểu các cổng vào ra của vi điều khiển PIC16f877A.

- Viết chương trình điều khiển các cổng vào ra, thực hiện giải mã và hiển

thị các số từ 0 ÷ 9 trên leb 7 thanh.

II. CHUẨN BỊ

- Máy tính có cài chương trình WinPIC800, trình dịch CCS,

HT-PIC.

- PIC.TS và các module, vi điều khiển PIC16F877A, đồng hồ đo, cáp

nguồn, cáp kết nối.

- Lý thuyết về lập trình C, lập trình C cho PIC trên CCS, HT-

PIC…

- Giải mã và hiển thị với led 7 thanh.

III. THỰC HÀNH

1. Nạp chương trình cho PIC bằng phần mềm WinPIC

Trên PIC.TS được thiết kế sẵn một mạch nạp do đó sẽ không cần bất kỳ

mạch nạp nào từ bên ngoài. Mặt khác với mạch nạp sẵn có này bạn không cần

phải tháo chip nhiều lần tránh các phiền phức và hư hỏng vật lý.

Phần mền WinPIC800 đi cùng không cần cài đặt có thể sử dụng ngay rất tiện

lợi. Nhấn dúp vào biểu tượng WinPIC800 trên desktop hoặc file WinPIC800.exe

trong thư mục WinPIC800. Cửa sổ chương trình WinPIC800 hiện lên:

92

Page 93: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 2.1 – Giao diện WinPIC800

Nhấn vào menu Settings ->Hardware để chọn cấu hình sử dụng WinPIC800

cho PIC.TS như sau:

Hình 2.2 – Cầu hình cho WinPIC800

Lưu ý:

- Nếu không hiện lên bảng như hình trên thì nhấp chuột vào ô tròn số 1

- Nhấp vào ô tròn số 2 để bật các chức năng chọn cấu hình

Cài đặt cấu hình cho WinPIC800 chính xác như hình sau:

93

Page 94: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 2.3 – Cấu hình WinPIC800 để sử dụng cho PIC.TS

Nhấn vào nút Apply edits để xác nhận cài đặt.

Kết nối với PIC.TS:

- Chuyển chuyển mạch nguồn sang chế độ nguồn từ kit (lên trên).

- Bật Công tắc nguồn – Đèn Power sáng.

- Nối cable programmer vào cổng LPTx của PC và bo mạch.

Kiểm tra kết nối:

Sau khi kết nối phần cứng, chạy phần mềm WinPIC800. Nhấn vào Icon Detect

device (trong vòng tròn hình dưới) màn hình hiện lên như hình sau:

94

Page 95: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 2.4 – Quá trình kiểm tra kết nối và loại pic sử dụng

Nhấn chọn ô “Close this window….” Để lần sau bảng detect tự động. Nhấn nút

accept để đóng cửa sổ.

Lưu ý: Khi nhân nút detect device WinPIC800 sẽ tự động chọn device mà nó

detect được. Điều này này giúp bạn khỏi tốn công chọn device.

Kích vào menu chọn File -> Open sau đó chọn đường dẫn dến file .hex.

Ví dụ: D:\PIC\port test.hex chọn OK.

Sau đó vào menu chọn thực đơn Device -> Program All.

Kết quả: Chíp sẽ được nạp chương trình điều khiển.

95

Page 96: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Hình 2.5 – Đang nạp chương trình cho vi điều khiển

Chú ý: Sau khi nạp chương trình thành công phải tháo cáp nạp để tránh gây

ảnh hưởng tới hoạt động của hệ thống.

2. Truy cập cổng vào ra số

Nhiệm vụ: Tìm hiểu vi điều khiển 16F877A và lập trình điều khiển các cổng vào

ra số.

96

Page 97: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

R0 R1 R2 R3 R4 R5 R6 R7

D0 D1 D2 D3 D4 D5 D6 D7

1 23 45 67 89 10

JP1

VCC

1 23 45 67 89 10

JP2

1 23 45 67 89 10

JP3

1 23 45 67 89 10

JP4

1 23 45 67 89 10

JP5

VCC VCC VCC VCC

D8 D9 D10 D11 D12 D13 D14 D15

D16 D17 D18 D19 D20 D21 D22 D23 D24 D25 D26 D27 D28 D29 D30 D31 D32

R8 R9 R10 R11 R12 R13 R14 R15

R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 R30 R31 R32

A0 A1 A2 A3 A4 A5 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1

C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 E2

A0 A1A2 A3A4 A5

B0 B1B2 B3B4 B5B6 B7

C0 C1C2 C3C4 C5C6 C7

D0 D1D2 D3D4 D5D6 D7

E0 E1E2

Hình 2.6 – Sơ đồ nguyên lý module PIC.TS01

Nguyên lý hoạt động:

Các đèn led trên PIC.TS01 sẽ được nối trực tiếp chân anot đến cổng của vi điều

khiển PIC trên PIC.TS đồng thời nối tiếp một điện trở 100ohm rồi đưa xuống đất.

Các cổng của PIC có thể cấp dòng trực tiếp cho led mà không cần đệm hay

khuếch đại. Mỗi cổng vào ra số được nối với một đèn led. Khi một cổng được

xuất giá trị là “1” thì led sáng ngược lại nếu xuất giá trị “0” led tắt. Chú ý: ở đây

giả định là PIC đang được cấu hình là một cổng ra số.

Các bước tiến hành:

- Nối các cổng PA, PB, PC, PD và PE của PIC.TS tương ứng với các

JP1, JP2, JP3, JP4 và JP5 của module PIC.TS01.

- Viết chương trình điều kiển các đèn led tắt sáng theo yêu cầu.

- Biên dịch và nạp chương trình lên vi điều khiển PIC

- Sửa lại chương trình để có được chu chình led sáng theo ý muốn.

Có thể chạy thử chương trình mẫu: PORT_TEST.C có sẵn ở thư mục

.../sample/ PORT_TEST/ để tham khảo hoặc kiểm tra các module có chạy tốt hay

không trước khi viết một chương trình cho riêng mình.

3. Điều khiển led 7 đoạn

Nhiệm vụ: Tìm hiểu led 7 đoạn, PIC16F877A trong điều khiển và giải mã hiển

thị các số. Viết được chương trình giải mã hiển thị các số theo yêu cầu trên led 7

đoạn.

97

Page 98: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

R0 R1 R2 R3 R4 R5

D0 D1 D2 D3 D4 D5

1 23 45 67 89 10

JP1

VCC

1 23 45 67 89 10

JP2

1 23 45 67 89 10

JP3

1 23 45 67 89 10

JP4

1 23 45 67 89 10

JP5

VCC VCC VCC VCC

D10 D11 D12 D13

D30 D31 D32

R10 R11 R12 R13

R14R15R16R17R18R19R20

R21

R22R23R24R25R26R27R28R29

R30 R31 R32

A0 A1 A2 A3 A4 A5

B0B1

B2B3

B4 B5 B6 B7

C0C1C2C3C4C5C6C7

D0D1D2D3D4D5D6D7

E0 E1 E2

A0 A1A2 A3A4 A5

B0 B1B2 B3B4 B5B6 B7

C0 C1C2 C3C4 C5C6 C7

D0 D1D2 D3D4 D5D6 D7

E0 E1E2

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

DIGIT1

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

DIGIT2

VCC

F1 F2 F3 F4

123

JPVCC

Hình 2.7 – Sơ đồ nguyên lý PIC.TS03

Nguyên lý hoạt động:

Trong PIC.TS03 sử dụng các led catot chung. Anot của mỗi thanh led của led 7

đoạn được nối đến cổng vi điều khiển PIC thông qua điện trở 100ohm nhằm hạn

dòng. Catot của mỗi led 7 đoạn được nôi xuống đất. Khi cổng đó xuất giá trị là

“1” thì thành led sáng và ngược lại xuất “0” thì tắt. Chữ số bên phải nối với cổng

PC, chữ số bên trái nối với cổng PD. Các thanh a, b, c, d, e, f, g của mỗi chữ số

tương ứng nối với các bit b0, b1, b2, b3, b4, b5, b6 của mỗi cổng.

Các bước tiến hành:

- Nối các PORT PC và PD PIC.TS tương ứng với JP3 và JP4 trên

module PIC.TS03.

- Viết chương trình điều kiển led 7 đoạn để hiển thị chữ số theo yêu

cầu.

- Biên dịch và nạp chương trình cho vi điều khiển PIC.

- Sửa lại chương trình để có được sự hiển thị theo yêu cầu.

98

Page 99: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Có thể chạy thử chương trình mẫu: 7SegCount00To99.c có sẵn ỏ thư mục

…/sample/7SEGS_LED/ để tham khảo hoặc kiểm tra module có chạy tốt hay

không trước khi viết một chương trình theo ý muốn.

4. Điều khiển đèn giao thông

Nhiệm vụ: Tìm hiểu PIC16F877A trong việc vào ra số và giải mã điều khiển led

7 đoạn. Viết chương trình điều khiển đèn giao thông.

R0 R1 R2 R3 R4 R5

D0 D1 D2 D3 D4 D5

1 23 45 67 89 10

JP1

VCC

1 23 45 67 89 10

JP2

1 23 45 67 89 10

JP3

1 23 45 67 89 10

JP4

1 23 45 67 89 10

JP5

VCC VCC VCC VCC

D10 D11 D12 D13

D30 D31 D32

R10 R11 R12 R13

R14R15R16R17R18R19R20

R21

R22R23R24R25R26R27R28R29

R30 R31 R32

A0 A1 A2 A3 A4 A5

B0B1

B2B3

B4 B5 B6 B7

C0C1C2C3C4C5C6C7

D0D1D2D3D4D5D6D7

E0 E1 E2

A0 A1A2 A3A4 A5

B0 B1B2 B3B4 B5B6 B7

C0 C1C2 C3C4 C5C6 C7

D0 D1D2 D3D4 D5D6 D7

E0 E1E2

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

DIGIT1

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

DIGIT2

VCC

F1 F2 F3 F4

123

JPVCC

Hình 2.8 – Sơ đồ nguyên lý PIC.TS03

Nguyên lý hoạt động:

Trong PIC.TS03 sử dụng các led catot chung. Anot của mỗi thanh led của led 7

đoạn được nối đến cổng vi điều khiển PIC thông qua điện trở 100ohm nhằm hạn

dòng. Catot của mỗi led 7 đoạn được nôi xuống đất. Khi cổng đó xuất giá trị là

“1” thì thành led sáng và ngược lại xuất “0” thì tắt. Chữ số bên phải nối với cổng

PC, chữ số bên trái nối với cổng PD. Các thanh a, b, c, d, e, f, g của mỗi chữ số

tương ứng nối với các bit b0, b1, b2, b3, b4, b5, b6 của mỗi cổng.

Các đèn led xanh, đỏ và vàng cũng được nối đến các cổng của vi điều khiển PIC thông qua trở 100ohm. Khi vi điều khiển xuất giá trị “1” ra cổng đó thì đèn tương

99

Page 100: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

ứng sáng ngược lại nếu xuất giá trị “0” đèn sẽ tắt. Các đèn led và led 7 đoạn được nối với vi điều khiển PIC theo như bảng sau:

Bảng 1

LED Tên cổng Gi chú

D0 A0 Đỏ

D1 A1 Vàng

D2 A2 Xanh

D3 A3 Xanh

D4 B4 Vàng

D5 A5 Đỏ

D11 B5 Đỏ

D12 B6 Vàng

D13 B7 Xanh

D30 E0 Xanh

D31 E1 Vàng

D32 E2 Đỏ

F1 B0 Nút 1

F2 B1 Nút 2

F3 B2 Nút 3

F43 B3 Nút 4

Cách tiến hành:

- Nối các port PA, PB, PC, PD và PE của kit chính PIC.TS tương ứng với các port JP1, JP2, JP3, JP4 và JP5 của module PIC.TS03.

- Viết chương trình điều kiển các đèn led xanh, đỏ, vàng tắt sáng theo thời gian yêu cầu đồng thời hiển thị thời gian đếm ngược trên led 7 đoạn cho một chiều được quy định.

- Biên dịch và nạp chương trình lên vi điều khiển PIC.

- Sửa lại chương trình để có được thời gian lưu thông các luồng theo theo yêu cầu.

Có thể thử chương trình mẫu: TRAFFIC_LIGHT.c có sẵn ỏ thư mục …/sample/TRAFFIC_LIGHT/ để tham khảo hoặc kiểm tra module có chạy tốt hay không trước khi viết một chương trình theo yêu cầu.

Mở rộng, nếu có thể hãy viết chương trình dùng các phím F để thay đổi thời gian lưu thông của các luồng.

100

Page 101: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Bài thực hành số 2

BIẾN ĐỔI ADC, ĐO ĐIỆN ÁP, NHIỆT ĐỘ

HIỂN THỊ TRÊN LED VÀ TRUYỀN THÔNG QUA RS232

I. MUC ĐÍCH

Làm quen với bộ biến đổi tương tự số ADC có sẵn trên vi điều khiển

PIC16F877A. Tìm hiểu chuẩn 1 dây và truyền thông không đồng bộ UART. Viết

chương trình biến đổi ADC, đo điện áp, giao tiếp vơi cảm biến nhiệt độ

DS18B20.

II. CHUẨN BỊ

- Máy tính có cài chương trình WinPIC800, trình dịch CCS,

HT-PIC.

- PIC.TS và các module, vi điều khiển PIC16F877A, đồng hồ đo,

cáp nguồn, cáp kết nối.

- Lý thuyết về lập trình C, lập trình C cho PIC trên CCS, HT-

PIC…

- Lý thuyết về chuẩn 1 dây, truyền thông không đồng bộ

UART.

III. THỰC HÀNH

1. Biến đổi ADC và hiển thị trên led

Nhiệm vụ: Tìm hiểu và sử dụng bộ biến đổi ADC của vi điều khiển PIC16F877A

1 2

JP_ADC1

1 2

JP_ADC2VCC

RA2 RA3123

VR1

123

VR2

Hình 2.9 – Sơ đồ nguyên lý khối biến trở

Nguyên lý hoạt động:

Khi vặn biến trở VR1 và VR2 tương ứng điện áp tai RA2 và RA3 sẽ thay đổi.

Cấu hình PIC cho phép bộ biến đổi ADC kênh 2 và kênh 3 (RA2 và RA3) hoạt

101

Page 102: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

động. Giá trị tương tự tai RA2 và RA3 sẽ được bộ ADC của PIC chuyển sang

thành tín hiệu số.

Cách tiến hành:

- Kiểm tra jumper JP_ADC2 ở trạng thái kết nối, để nối đầu ra biến trở

với đầu vào ADC của PIC. VR2 và JP_ADC2 nối đến ngõ vào AN3.

- Công tắc DIP_SW1.3, DIP_SW1.4 ở trạng thái OFF để ngắt đầu vào

ADC ra khỏi điện trở treo khi làm việc với điện áp tương tự (điện trở

treo dùng khi làm việc ở chế độ vào ra tín hiệu số)

- Nối port PC (PD) của kit chính PIC.TS với các port JP3 (JP4) của

module PIC.TS03

- Viết chương trình đọc giá trị từ bộ chuyển đổi ADC và xuất ra cổng C

(D)

- Biên dịch và nạp chương trình lên vi điều khiển PIC

- Sau khi nạp thành công, khi chương trình đang chạy, vặn biến trở từ

min đến max sẽ thấy giá trị của điện áp được chuyển đổi thành tín hiệu

số hiển thị trên các led nối với PC (PD) thay đổi theo mỗi vị trí của

chiết áp

Có thể thử chương trình mẫu: ADC Single_LED.c có sẵn ỏ thư mục

…/sample/ADC2PORTC/ để tham khảo hoặc kiểm tra module có chạy tốt hay

không trước khi viết một chương trình theo yêu cầu.

2. Đo điện áp và truyền thông qua RS232

Nhiệm vụ:

Sử dụng bộ ADC trên PIC để đo điện áp từ đầu ra của biến trở sau đó truyền dữ

liệu đo được lên máy tính qua RS232.

Cách tiên hành:

- Kiểm tra jumper JP_ADC1, JP_ADC2 ở trạng thái kết nối, để nối đầu

ra chiết áp với đầu vào ADC của PIC

- Công tắc DIP_SW1.3, DIP_SW1.4 ở trạng thái OFF để ngắt đầu vào

ADC ra khỏi điện trở treo khi làm việc với điện áp tương tự (điện trở treo

dùng khi làm việc ở chế độ vào ra tín hiệu số)

- Kiểm tra JP_TX và JP_RX ở trạng thái nối chân 5 với chân 6 để nối

chân TX và RX của bộ thu phát UART với bộ phát thu MAX232

- Nối cổng truyền thông nối tiếp của PIC.TS với cổng COM của máy tính

102

Page 103: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Sử dụng trình HyperTermial giao tiếp với tín hiệu trên kênh RS232

Vào Hyper Terminal như hình dưới đây

Hình 2.10a - Hyper Terminal

Gõ tên là 9600 trong ô Name như hình dưới, rồi chọn OK.

Hình 2.10b - Hyper Terminal

Chọn COM1 trong ô Connect using như sau:

Hình 2.10c - Hyper Terminal

103

Page 104: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Đặt các thuộc tính như hình dưới, rồi chọn OK

Hình 2.10d - Hyper Terminal

Bấm vào biểu tượng Call để kết nối

- Viết chương trình đọc giá trị từ bộ chuyển đổi ADC và truyền dữ liệu đó

qua bộ truyền thông nối tiếp

- Biên dịch và nạp chương trình lên vi điều khiển PIC

- Sau khi nạp thành công, khi chương trình đang chạy, vặn biến trở từ min

đến max trên màn hình máy tính sẽ hiển thị các giá trị của điện áp được

chuyển đổi thành tín hiệu số thay đổi theo mỗi vị trí của chiết áp.

Có thể thử chương trình mẫu: ADC1.c có sẵn ỏ thư mục …/sample/

ADC2UART/ để tham khảo, hoặc kiểm tra module có chạy tốt hay không, trước

khi viết một chương trình theo yêu cầu.

Mở rộng: có thể thay đổi chương trình để chuyển đổi giá trị đầu ra ADC thành

giá trị điện áp tương ứng và gửi lên máy tính theo dạng

U1 = X.X (V) , U2 = Y.Y (V). Trong đó X.X là điện áp của VR1, Y.Y là điện áp

của VR2, nằm trong khoảng 0.0V đến 5.0V.

Ví dụ: U1 = 2.5 (V), U2 = 1.8 (V)

3. Đo nhiệt độ và truyền thông qua RS232

Nhiệm vụ:

Thực hành với bộ cảm biến nhiệt độ DS18B20 có sẵn trên PIC.TS. Giao tiếp PIC

với DS18B20 thông qua giao tiếp 1 dây (one wire interface), truyền dữ liệu

không đồng bộ UART có sẵn trên PIC qua chuẩn RS232. Viết chương trình đọc

dữ liệu nhiệt độ từ DS18B20 và truyền dữ liệu đó qua UART.

Cách tiến hành:

104

Page 105: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Kiểm tra jumper JP_temp ở trạng thái kết nối chân 1 (bên phải) với chân

2 để nối chân data của DS1820 với RE2 của PIC.

- Công tắc DIP_SW1.5 ở trạng thái ON để nối đến điện trở treo (điện trở

treo dùng khi làm việc ở chế độ vào ra tín hiệu số).

- Kiểm tra JP_TX và JP_RX ở trạng thái nối chân 5 với chân 6, để nối

chân TX và RX của bộ thu phát UART với bộ phát thu MAX232.

- Nối cổng truyền thông nối tiếp của Kit chính với cổng COM của máy

tính.

- Sử dụng trình HyperTermial giao tiếp với tín hiệu trên kênh RS232.

- Viết chương trình đọc giá trị nhiệt độ từ DS1820 và truyền đi qua bộ

truyền thông không đồng bộ.

- Biên dịch và nạp chương trình lên vi điều khiển PIC

- Sau khi nạp thành công, khi chương trình đang chạy, dùng tay (hoặc một

nguồn nhiệt nào đó) trạm vào cảm biến nhiệt DS1820 và quan sát thấy giá

trị nhiệt độ hiển thị trên màn hình từ từ tăng lên (Chú ý độ trễ là tương đối

lớn, cỡ 1 giây và giá trị hiển thị được có thể sai lệch vài độ). Khi bỏ tay ra

nhiệt độ sẽ giảm xuống từ từ.

Có thể thử chương trình mẫu có sẵn ỏ thư mục …/sample/TEMP2UART/ để

tham khảo hoặc kiểm tra module có chạy tốt hay không, trước khi viết một

chương trình cho riêng mình.

Bài thực hành số 3

ĐỌC PHÍM BẤM, ĐIỀU KHIỂN RELAY

VÀ ĐỌC THỜI GIAN THỰC DS1307 HIỂN THỊ TRÊN LEB 7 ĐOẠN

I. MUC ĐÍCH

Đọc phím bấm, phương pháp quét ma trận phím. Tìm hiểu làm quen với Thời

gian thực DS1307 có sẵn trên PIC.TS. Viết chương trình đọc phím bấm và điều

khiển vào ra số, đọc dữ liệu thời gian từ DS1307 và hiển thị trên led 7 đoạn.

II. CHUẨN BỊ

- Máy tính có cài chương trình WinPIC800, trình dịch CCS,

HT-PIC.

- PIC.TS và các module, vi điều khiển PIC16F877A, đồng hồ đo,

cáp nguồn, cáp kết nối.

105

Page 106: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Lý thuyết về lập trình C, lập trình C cho PIC trên CCS, HT-

PIC…

- Phương pháp quét ma trận phím, chống rung phím co khí

bằng phần mềm.

- Lý thuyết về giao tiếp chuẩn I2C.

III. THỰC HÀNH

1. Đọc phím bấm

Nhiệm vụ: Làm quen sử dụng phím bấm, giao tiếp với phím bấm bằng cổng vào

ra số. Viết chương trình sử dụng các cổng vào ra để nhận lệnh từ phím bấm.

Cách tiên hành:

- Nối các port PA, PB, PC và PD của kit chính PIC.TS tương ứng với các

port JP1, JP2, JP4 và JP3 của module PIC.TS01

- Kiểm tra jumper KEY_JP của module PIC.TS02 nối xuống đất để nối 8

cực của 8 phím bấm F0 đến F7 xuống đất, tám cực còn lại nối đến cổng port

D của PIC.

- Kiểm tra jumper JP4 của kit chính PIC.TS nối lên dương nguồn (vị trí bên

dưới) để nối treo port D lên dương nguồn

Như vậy, Port D sẽ được treo lên dương nguồn đồng thời nối đến 8 phím bấm,

các cực còn lại của 8 phím bấm nối xuống đất, khi phím được bấm sẽ làm cho

port được nối xuống đất, khi không được bấm port sẽ được nối đến 5V qua điện

trở treo 4,7K.

- Viết chương trình nhận biết trạng thái của 8 phím bấm trên port D và thực

hiện lệnh quy định cho phím đó, giả sử bật sáng một số thanh led nào đó

trên 6 led 7 đoạn

- Biên dịch và nạp chương trình lên vi điều khiển PIC

- Sửa lại chương trình để có được chức năng của các phím theo yêu cầu

khác.

Có thể thử chương trình mẫu: BUTTON.c có sẵn ỏ thư mục…/sample/

BUTTON/ để tham khảo hoặc kiểm tra các module có chạy tốt hay không trước

khi viết một chương trình cho riêng mình

2. Đọc phím bấm từ bàn phím ma trận

Nhiệm vụ:

106

Page 107: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Làm quen với việc giao tiếp với bàn phím ma trận, giao tiếp PIC với bàn phím

ma trận bằng cổng vào ra số. Viết một chương trình sử dụng các cổng vào ra để

nhận lệnh từ phím bấm.

B00 B01 B02 B03

B10 B11 B12 B13

B20 B21 B22 B23

B30 B31 B32 B33

1 23 45 67 89 10

JP4

VCC

P40 P41P42 P43P44 P45P46 P47

P40

P41

P42

P43

P44P45P46P47

12345

AR0

12345

AR1

123

Jum1

123

Jum2

VCC

VCC

Hình 2.11 – Sơ đồ nguyên lý kết nối bàn phím ma trận

Cách tiến hành:

- Nối các port PA, PB, PC và PD của kit chính PIC.TS tương ứng với các

port JP1, JP2, JP4 và JP3 của module PIC.TS02

Các chân RC0 đến RC7 của PIC đã lần lượt nối tới các hàng 0 đến 3,

các cột 0 đến 3 của ma trận bàn phím:

RC[0..3] -> hàng[0..3]

RC[4..7] -> cột[0..3]

- Kiểm tra jumper JUM1 của module PIC.TS02 nối lên dương nguồn để

nối 4 cổng PC[0..3] lên dương nguồn.

- Kiểm tra jumper JUM2 ở trạng thái không kết nối

- Viết chương trình nhận biết trạng thái của 16 phím bấm trên port C và

thực hiện lệnh quy định cho phím đó, giả sử bật sáng một số thanh led nào

đó trên 6 led 7 đoạn

- Biên dịch và nạp chương trình lên vi điều khiển PIC

- Sửa lại chương trình để có được chức năng của các phím theo yêu cầu

khác

Có thể thử chương trình mẫu: KEY_BOARD.c có sẵn ỏ thư mục …/sample/

KEY_BOARD/ để tham khảo hoặc kiểm tra các module có chạy tốt hay không,

trước khi viết một chương trình cho riêng mình.

107

Page 108: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

3. Đọc phím bấm và điều khiển relay

Nhiệm vụ: Viết chương trình nhận biết phím bấm , chống nẩy phím và điều khiển

đóng ngắt relay tương ứng với phím yêu cầu.

Hình 2.12– Sơ đồ nguyên lý PIC.TS04

Nguyên lý hoạt động:

Các chân RB6, RB4, RB2 và RB0 của PIC lần lượt nối tới các đầu vào IN1 đến

IN 4 của ULN2803. RB1, RB3, RB5và RB7 lần lượt F3. Port B sẽ được treo lên

dương nguồn đồng thời nối đến 4 phím bấm, các cực còn lại của 4 phím bấm nối

xuống đất, khi phím được bấm sẽ là cho port được nối xuống đất, khi không được

bấm port sẽ được nối đến 5V qua điện trở treo 4,7K.

Khi đầu vào IN1 đến IN4 của ULN2803 có giá trị logic là “1” do vi điều khiển

xuất ra thi tương ứng OUT1 đến OUT4 sẽ được nối xuống đất, relay sẽ đóng.

Ngược lại khi đầu vào có giá trị logic là “0” Relay mở.

Cách tiến hành:

108

Page 109: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Nối port PB của PIC.TS với port JP2 của module PIC.TS04

- Kiểm tra jumper KEY_JP của module PIC.TS04 nối xuống đất.

- Kiểm tra jumper JP2 của PIC.TS nối lên dương nguồn.

- Viết chương trình nhận biết trạng thái của 4 phím bấm trên port B và khi

một phím được bấm một lần sẽ thực hiện lật chuyển trạng thái của

RELAY tương ứng và giữ ở trạng thái đó cho đến lần bấm sau sẽ lại

chuyển trạng thái. Chuyển trạng thái có nghĩa là nếu RELAY đó đang

đóng sẽ chuyển sang trạng thái mở, còn nếu nó đang mở sẽ chuyển sang

trạng thái đóng.

- Biên dịch và nạp chương trình lên vi điều khiển PIC

- Sửa lại chương trình để có được chức năng của các phím theo yêu cầu

khác.

Có thể thử chương trình mẫu: RELAY.c có sẵn ỏ thư mục …/sample/ RELAY/

để tham khảo hoặc kiểm tra các module có chạy tốt hay không trước khi viết một

chương trình khác theo yêu cầu.

4. Đọc thời gian thực hiển thị trên Led 7 đoạn

Nhiệm vụ:

Làm quen với bộ đếm thời gian thực DS11307, giao tiếp PIC với DS1307 qua

giao tiếp I2C. Viết chương trình giao tiếp PIC với DS1307, giao tiếp PIC với bộ

hiển thị led 7 đoạn theo chế độ quét (hiển thị động), đọc dữ liệu thời gian từ

DS1307 và hiển thị trên bộ hiển thị led 7 đoạn.

12345678

161514131211109

SW2RA0RA1RA2RA3RA4RA5RC3_URC4_U

X11

X22

VBAT3

GND4

SDA5

SCL6

SQW/OUT7

VCC8

RTC

DS1307

12

X 32768Hz

4K7

R_rtc1

4K7

R_rtc2VCC

BATTERY

Hình 2.13 – Sơ đồ nguyên lý khối thời gian thực

109

Page 110: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

Digit0

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

Digit1

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

Digit2

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

Digit3

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

Digit4

f9

g10

e1

d2

A3

c4

DP5

b6

a7

A8

Digit5seg_a seg_a seg_a seg_a seg_a

seg_bseg_bseg_bseg_bseg_bseg_cseg_dseg_eseg_fseg_gseg_P

seg_cseg_dseg_eseg_fseg_gseg_P

seg_cseg_dseg_eseg_fseg_gseg_P

seg_cseg_dseg_eseg_fseg_gseg_P

seg_cseg_dseg_eseg_fseg_gseg_P

A0A1A2A3A4A5

1 23 45 67 89 10

JP1

1 23 45 67 89 10

JP2

220R0220R1220R2220R3220R4220R5220R6220R7

seg_aseg_bseg_cseg_dseg_eseg_fseg_gseg_P

VCC

VCC

2

3

1

Q0

2

3

1

Q12

31

Q2

2

3

1

Q3

2

3

1

Q4

2

3

1

Q5VCC

10KR8

10KR9

10KR10

10KR11

10KR12

10KR13

P10P11P12P13P14P15P10 P11P12 P13P14 P15

P20P21P22P23P24P25P26P27

P20 P21P22 P23P24 P25P26 P27

123

KEY JPVCC

1 23 45 67 89 10

JP3

VCC

P30 P31P32 P33P34 P35P36 P37

P30P31P32P33P34P35P36P37

F0F1F2F3F4F5F6F7

Hình 2.14 – Sơ đồ nguyên lý khối phím bấm và hiển thị PIC.TS02

Nguyên tắt hoạt động:

Chân SCL và SDA của DS1307 được nối với RC3 và RC4 của PIC. Đây là hai

chân hỗ trợ giao tiếp I2C của PIC. Các thanh a, b, c, d, e, f, g, p chung của 6 led 7

đoạn tương ứng sẽ được nối đến port B của vi điều khiển PIC trên PIC.TS nối

tiếp qua một điện trở 100 ohm. Cổng A của PIC sẽ điều khiển 6 Transitor qua 6

điện trở để cấp nguồn cho 6 anot chung của 6 led 7 đoạn tương ứng.

110

Page 111: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Bảng sau đây mô tả thứ tự kết nối các chân của hai cổng A và B

Chân

PIC

điện trở Chân Led

7 thanh

Transitor

RA5 R8 A5 Q5

RA4 R9 A4 Q4

RA3 R10 A3 Q3

RA2 R11 A2 Q2

RA1 R12 A1 Q1

RA0 R13 A0 Q0

RB7 R7 p

RB6 R6 g

RB5 R5 f

RB4 R4 e

RB3 R3 d

RB2 R2 c

RB1 R1 b

RB0 R0 a

Chương trình điều khiển sẽ dùng hai cổng A và B để điều khiển bộ hiển thị 6 led

7 thanh đồng thời giao tiếp với DS1307 để đọc giá trị giờ, phút, giây và hiển thị

trên bộ hiển thị led 7 thanh.

Cách tiến hành:

- Kiểm tra SW2.7, SW2.8 ở trạng thái ON để nối chân SCL và SDA của

DS1307 với RC3 và RC4 của PIC.

- Nối các port PA, PB và PD của PIC.TS tương ứng với các port JP1, JP2

và JP3 của module PIC.TS02.

- Viết chương trình đọc giờ, phút, giây từ DS1307 và hiển thị trên bộ hiển

thị led 7 thanh.

- Biên dịch và nạp chương trình lên vi điều khiển PIC.

111

Page 112: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Sau khi nạp thành công, khi chương trình đang chạy, tắt nguồn cho hệ

thống, để một thời gian sau đó bật lại ta sẽ thấy thời gian vẫn tiếp tục chạy

khi tắt nguồn .

Có thể thử chương trình mẫu: …\samples\DS1307-7SEG\Ds1307 LED.c

có sẵn ỏ thư mục để tham khảo hoặc kiểm tra module có chạy tốt hay không

trước khi viết một chương trình theo yêu cầu khác.

PHU LUC

/****************************************

Bo mon DTVT Khoa CNTT Thai Nguyen

FILE NAME: Test led PortD.c

***************************************/

#include<16f877A.h>

#fuses HS,NOLVP,NOWDT,PUT

#use delay(clock=8000000) // defind crystal = 8MHz

//******************************

// main program start here

//******************************

void main()

{

char i,count;

while(TRUE)

{

count=1; //ship a

for (i=0;i<=6;i++)

{

output_a(count);

delay_ms(150);

count=count<<1;

112

Page 113: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

}

count=1; //ship b

for (i=0;i<=8;i++)

{

output_b(count);

delay_ms(150);

count=count<<1;

}

count=1; //ship c

for (i=0;i<=8;i++)

{

output_c(count);

delay_ms(150);

count=count<<1;

}

count=1; //ship d

for (i=0;i<=8;i++)

{

output_d(count);

delay_ms(150);

count=count<<1;

}

count=1; //ship e

for (i=0;i<=3;i++)

{

output_e(count);

delay_ms(150);

113

Page 114: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

count=count<<1;

}

output_a(0xff); // a

delay_ms(150);

output_a(0x00);

output_b(0xff); // b

delay_ms(150);

output_b(0x00);

output_c(0xff); // c

delay_ms(150);

output_c(0x00);

output_d(0xff); // d

delay_ms(150);

output_d(0x00);

output_e(0xff); // e

delay_ms(150);

output_e(0x00);

delay_ms(150);

output_a(0xff); //flash all ON

output_b(0xff);

output_c(0xff);

output_d(0xff);

output_e(0xff);

delay_ms(150);

output_a(0x00); // OFF

output_b(0x00);

output_c(0x00);

output_d(0x00);

114

Page 115: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

output_e(0x00);

delay_ms(150);

output_a(0xff); // ON

output_b(0xff);

output_c(0xff);

output_d(0xff);

output_e(0xff);

delay_ms(150);

output_a(0x00); // OFF

output_b(0x00);

output_c(0x00);

output_d(0x00);

output_e(0x00);

delay_ms(150);

}}

//===============================================//TEN DE

TAI :HE THONG DAO TAO VI DIEU KHIEN PIC

//Ngon ngu :C cho PIC, dung trinh bien dich CCS compiler

//Lap trinh vien :Bo mon DTVT Khoa CNTT TN

//Chuong trinh :VAO RA CONG

//Su dung MCU :16f877a cua Microchip.thach anh 8 Mhz

//Ngay bat dau :Ngay xx thang' xx nam 2008

//Ngay hoan thanh :Ngay xx thang' xx nam 2008

//Mo ta hardware :DEN GIAO THONG

//File name: Trafic_light.c

//===============================================

#include <16f877A.h>

#include <def_877a.h> //file header do nguoi dung dinh nghia

115

Page 116: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

#fuses HS,NOLVP,NOWDT,PUT

#use delay(clock=8000000) // defind crystal = 8MHz

byte const DIGITS[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void display_right_led(byte digit);

void display_left_led(byte digit);

void displayh(byte n);

void displayl(byte k);

//******************************

// main program start here

//******************************

void main()

{

char i;

//tat het cac den

output_a(0x00);

output_b(0x00);

output_c(0x00);

output_d(0x00);

output_e(0x00);

delay_ms(3);

while(TRUE)

{

//phase 1

//duong ngang

RA2 = 1; RE0 = 1;//xanh

RA1 = 0; RE1 = 0;//vang

RA0 = 0; RE2 = 0;//do

//duong doc

116

Page 117: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

RA3 = 0; RB7 = 0;//xanh

RB4 = 0; RB6 = 0;//vang

RA5 = 1; RB5 = 1;//do

//dem

for (i=30;i>3;i--)

displayh(i);

//phase2

//duong ngang

RA2 = 0; RE0 = 0;//xanh

RA1 = 1; RE1 = 1;//vang

RA0 = 0; RE2 = 0;//do

//duong doc

RA3 = 0; RB7 = 0;//xanh

RB4 = 0; RB6 = 0;//vang

RA5 = 1; RB5 = 1;//do

//dem

for (i=3;i>0;i--)

displayl(i);

//============

//phase 3

//duong ngang

RA2 = 0; RE0 = 0;//xanh

RA1 = 0; RE1 = 0;//vang

RA0 = 1; RE2 = 1;//do

//duong doc

RA3 = 1; RB7 = 1;//xanh

RB4 = 0; RB6 = 0;//vang

RA5 = 0; RB5 = 0;//do

117

Page 118: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

//dem

for (i=30;i>3;i--)

displayh(i);

//=============

//phase4

//duong ngang

RA2 = 0; RE0 = 0;//xanh

RA1 = 0; RE1 = 0;//vang

RA0 = 1; RE2 = 1;//do

//duong doc

RA3 = 0; RB7 = 0;//xanh

RB4 = 1; RB6 = 1;//vang

RA5 = 0; RB5 = 0;//do

//dem

for (i=3;i>0;i--)

displayl(i);

}

}

//===================================

void display_right_led(byte digit)

{

output_c(DIGITS[digit] ^ 0xff);

}

//===================================

void display_left_led(byte digit)

{

output_d(DIGITS[digit] ^ 0xff);

118

Page 119: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

}

//===================================

void displayh(byte n) {

byte i;

for (i = 0; i < 100; i++) {

display_left_led(n / 10);

display_right_led(n % 10);

delay_ms(6);

}

}

//==================================

void displayl(byte k) {

byte i;

for (i = 0; i < 2; i++) {

display_left_led(k / 10);

display_right_led(k % 10);

delay_ms(180);

output_c(0xff);

output_d(0xff);

delay_ms(120);

}

}

/***********************************************************

* Bo mon DTVT Khoa CNTT Thai Nguyen

* File name: 7seccount00to99.c

************************************************************/

#include <16F877A.h>

#fuses HS, NOWDT, PUT,NOLVP

#use delay (clock=8000000) // define crystal = 8MHz

119

Page 120: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

#define LEFT_LED_C1 PIN_A1

#define RIGHT_LED_C2 PIN_A0

// 0 1 2 3 4 5 6 7 8 9

byte const DIGITS[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void display_right_led(byte digit);

void display_right_led(byte digit)

void display_left_led(byte digit);

//***********************************************************

//Chuong trinh chinh

void main() {

while (true)

count_00_99();

}

//**********************************************************

void display_right_led(byte digit) {

output_c(DIGITS[digit] ^ 0xff);

}

//*************************************************************

void display_left_led(byte digit) {

output_d(DIGITS[digit] ^ 0xff);

}

//***************************************************************

//ham display n hien thi 100 viec goi ham hien thi hang truc va hang don vi

void display(byte n) {

byte i;

for (i = 0; i < 100; i++) {

display_left_led(n / 10);

display_right_led(n % 10);

delay_ms(1);

120

Page 121: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

}

}

//****************************************************************

//ham dem tu 0 den 99 thuc hien 100 lan ham display(i) voi bien i = 0 den 100

void count_00_99() {

byte i;

for (i = 0; i < 100; i++)

display(i);

}

//****************************************************************

/**********************************************

Bo mon DTVT Khoa CNTT Dai hoc Thai Nguyen *

File name: ADC Single_LED.c

***********************************************/

#include <16F877A.h>

#fuses HS, NOWDT, NOPROTECT, NOLVP

#device 16F877*=16, ADC=8

#use delay(clock=8000000)

//*********************************************

void main()

{

setup_adc(adc_clock_internal);

setup_adc_ports(ALL_ANALOG);

set_adc_channel(3); // PIC.TS VR1 JP1=RA2, VR2 JP2=RA3

delay_ms(10);

while (true)

output_c(read_adc());

}

121

Page 122: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

//*********************************************

/****************************************************

* Bo mon DTVT Khoa CNTT Dai hoc Thai Nguyen *

* File name: ADC1.c

*****************************************************/

#include <16F877A.h> // PIC16F877 header file

#device 16f877*=16, ADC=10 // 10 bits ADC

#use delay(clock=8000000) // for 8Mhz crystal

#fuses HS, NOWDT, NOPROTECT, NOLVP // for debug mode

#use rs232(baud=9600, xmit=PIN_C7, rcv=PIN_C6, stream=MYPC)

// rs232 setting

#define DO_NOTHING 0

#define DO_START_ADC 1

#define DO_END_ADC 2

/*============================================*/

void main(void)

{

int16 int_volt;

int8 str_volt[21];

float flt_volt;

int8 do_what = DO_NOTHING;

int8 tmp;

printf( "S: Start ADC\n\r");

Printf( "Q: END ADC\n\r");

while(true){

// if rs232 get char

if(0 != kbhit())

{

tmp = fgetc(MYPC);

122

Page 123: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

switch(tmp)

{

case 'S':

case 's':

printf( "S: Start ADC\n\r" );

do_what = DO_START_ADC;

// init pic16f877a adc

setup_adc_ports(RA0_RA1_RA3_ANALOG);

setup_adc(ADC_CLOCK_INTERNAL);

set_adc_channel(3);

break;

case 'Q':

case 'q':

printf( "Q:EndADC\n\r" );

do_what = DO_END_ADC;

// adc off

setup_adc(ADC_OFF);

break;

default : // rs232 get other char

putc(tmp);

break;

}//end switch(tmp)

}//end if(kbhit())

switch(do_what)

{

case DO_START_ADC:

// start adc and send result to PC

int_volt = read_adc();

123

Page 124: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

flt_volt = 5.0 * int_volt / 0x3ff;

sprintf(str_volt, "ADC: %1.3fV\n\r", flt_volt);

printf(str_volt);

printf( "\n\r" );

delay_ms(500);

break;

case DO_END_ADC:

// you want to do

break;

case DO_NOTHING:

// you want to do

break;

default:

break;

}//end switch(do_what)

}//end while(1)

}//end main()

/****************************************

chuong trinh dieu khien led de kiem tra cong

Bo mon DTVT Khoa CNTT Dai hoc Thai Nguyen

***************************************/

#include <16F877A.h>

#device *=16

#device adc=8

#FUSES NOWDT, HS, PUT, NOPROTECT, NODEBUG, BROWNOUT,

NOLVP, NOCPD, NOWRT

#use delay(clock=8000000)

#include <1wire.c>

124

Page 125: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

#use rs232(baud=9600, xmit=PIN_C7, rcv=PIN_C6, stream=MYPC)

// rs232 setting

#include <ds1820.c>

void main()

{

float temperature;

setup_psp(PSP_DISABLED); // huy bo PSP

setup_spi(FALSE); //THIET PAP SPI

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); //Thiet lap bo dinh thoi ben

setup_timer_1(T1_DISABLED); //cam

setup_timer_2(T2_DISABLED,0,1); //cam

setup_comparator(NC_NC_NC_NC);

setup_vref(VREF_LOW|-2);

printf("\n\r Bo mon Dien Tu Vien Thong Khoa CNTT");

printf( "\n\rXin chao, toi la PIC.TS, Toi dang do nhiet do\n\r",);

delay_ms(100);

while (TRUE)

{

temperature = ds1820_read();

printf( "Nhiet do: %3.1f ", temperature);

printf( "oC, ");

if(temperature >= 30)

printf("Nong!\n\r ");

else if( temperature >= 20 && temperature < 30)

printf("Nhiet do vua\n\r!");

else

printf("Lanh!\n\r ");

delay_ms(20);

}

125

Page 126: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

}

//*****************************************************

Bo mon DTVT Khoa CNTT Thai Nguyen

File name:

//==============================================

//TEN DE TAI :HE THONG DAO TAO VI DIEU KHIEN PIC

//Ngon ngu :C cho PIC, dung trinh bien dich CCS compiler

//Lap trinh vien :Bo mon dien tu Vien Thong

//Chuong trinh :CHUONG TRINH DOC PHIM

//Su dung MCU :16f877a cua Microchip.thach anh 8 Mhz

//Ngay bat dau :Ngay xx thang' xx nam 2008

//Ngay hoan thanh :Ngay xx thang' xx nam 2008

//file name: button.c

//===============================================

#include <16F877A.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay (clock=8000000) // define crystal = 8MHz

#use Fast_IO(D)

byte command; //ma lenh

// 0 1 2 3 4 5 6 7 8 9

byte const DIGITS[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void keyscan();

void display();

//*****************************************************

void main()

{

126

Page 127: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Set_tris_D(1);

command = 0;

output_a(0x00);//bat chan A5

while(true)

{

keyscan();

display();

}

}//end of main program

//****************************************************

void keyscan()

{

output_d(0xff);

if(input(PIN_D0) == 0)

{

delay_ms(150);

if (input(PIN_D0)==0) command = 1;

display() ;

}

if(input(PIN_D1) == 0)

{

delay_ms(150);

if (input(PIN_D1)==0) command = 2;

display() ;

}

if(input(PIN_D2) == 0)

{

delay_ms(150);

if (input(PIN_D2)==0) command = 3;

127

Page 128: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

display() ;

}

if(input(PIN_D3) == 0)

{

delay_ms(150);

if (input(PIN_D3)==0) command = 4;

display() ;

}

if(input(PIN_D4) == 0)

{

delay_ms(150);

if (input(PIN_D4)==0) command = 5;

display() ;

}

if(input(PIN_D5) == 0)

{

delay_ms(150);

if (input(PIN_D5)==0) command = 6;

display() ;

}

if(input(PIN_D6) == 0)

{

delay_ms(150);

if (input(PIN_D6)==0) command = 7;

display() ;

}

if(input(PIN_D7) == 0)

{

delay_ms(150);

if (input(PIN_D7)==0) command = 8;

128

Page 129: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

display() ;

}

output_d(0xff);

}

//******************************************************

void display()

{

output_b(DIGITS[command] ^ 0xff);

}

//*****************************************************

//END PROGRAM

//

=========================================================

====================

//TEN DE TAI :RELAY

//Ngon ngu:ANSI C cho PIC, dung trinh bien dich Hi-Tech PICC compiler

//Lap trinh vien : Bo mon DTVT Khoa CNTT

//Chuong trinh :HIEN THI SO BAT KY TREN LED_7T

//Su dung MCU : 16f877a cua Microchip.thach anh 20 Mhz

//Ngay bat dau :Ngay xx thang' xx nam 20xx

//Ngay hoan thanh : Ngay xx thang' xx nam 20xx

//Mo ta hardware :

//khi dich chon dung loai PIC:Configure-->Select Device-->chon loai PIC

//============================================

#include<pic.h>

__CONFIG(UNPROTECT & WDTEN & HS & PWRTEN & BOREN &

LVPDIS & DUNPROT & DEBUGDIS);

//**************************************************

129

Page 130: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

void init(void);

void Delay(void);

//===========Chuong trinh =========================

void main() //chuong trinh trinh

{

init();

while(1)

{

if (RB1 == 0)

{

Delay();

if (RB1 == 0)RB0 ^= 1;}

if (RB3 == 0)

{

Delay();

if (RB3 == 0)RB2 ^= 1;}

if (RB5 == 0)

{

Delay();

if (RB5 == 0)RB4 ^= 1;}

if (RB7 == 0)

{

Delay();

if (RB7 == 0)RB6 ^= 1;}

CLRWDT();

}

CLRWDT();

}

//==============THE END =========================

130

Page 131: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

void init(void)

{

//---------Dinh nghi cacs cong------------------

OPTION = 0x01000000;

TRISB = 0b10101010;

Delay();

PORTB = 0b10101010;

}

//===============================================

void Delay()

{

unsigned char i;

for (i =0;i<20;i++)

{

NOP(); NOP(); NOP(); NOP(); NOP();

NOP(); NOP(); NOP(); NOP(); NOP();

NOP(); NOP(); NOP(); NOP(); NOP();

NOP(); NOP(); NOP(); NOP(); NOP();

}

}

//================THE END =====================

//===============================================//TEN DE

TAI : Ma tran phim

//Ngon ngu :ANSI C cho PIC, dung trinh bien dich Hi-Tech PICC compiler

//Lap trinh vien :Bo mon DTVT

//Chuong trinh : HIEN THI SO BAT KY TREN LED_7T

131

Page 132: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

//Su dung MCU :16f877a cua Microchip.thach anh 20 Mhz

//Mo ta firmware :Coi keu khi duoc 5s va co phim RB7 bam thi no keu-theo thoi

gian tuy

//khi dich chon dung loai PIC:Configure-->Select Device-->chon loai PIC

//============================================

#include<pic.h>

__CONFIG(UNPROTECT & WDTEN & HS & PWRTEN & BOREN &

LVPDIS & DUNPROT & DEBUGDIS);

//===============Mang phông so; ép vào mauc thu

hai===================

#define KEYPORT PORTC

#define NOKEY 16

bit keyfound = 0;

const unsigned char KEY_IO[16] = {0xEE, 0xDE, 0xBE, 0x7E, //C4 C5 C6 C7

0xED, 0xDD, 0xBD, 0x7D,//C3

0xEB, 0xDB, 0xBB, 0x7B,//C2

0xE7, 0xD7, 0xB7, 0x77};

const unsigned char KEY_MAP[16] = {12,11, 0,10,

13, 9, 8, 7,

14, 6, 5, 4,

15, 3, 2, 1};

// 0 1 2 3 4 5 6 7 8 9 a b c d e f

const unsigned char DIGITS[] =

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7

9,0x71};

unsigned char maphim;

//===========Cac dinh nghia =========================

void init(void); //su bat dau

void keyscan(void);

void display(void);

unsigned char kboard_idkey(void);

132

Page 133: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

void delay(void);

//==================Chuong trinh chinh'===============

void main() //chuong trinh trinh

{

init(); //bat dau chuong trinh

PORTA = 0xff;

maphim = 0;

PORTB = (DIGITS[maphim] ^ 0xff);

while(1) //lenh While(bt).Neu bt=1 luon dung thi lap lai ko

thoat khoi //lenh While(bt).Neu bt=0 thi sai thi thoat khoi vong lap

{

keyscan();

display();

CLRWDT();

}

CLRWDT();

}

//================THE END MAIN===================

void init(void)

{

//---------Dinh nghi cacs cong------------------

TRISD = 0b00000000; //cong X la ra

PORTD = 0b11111111; //CONG RA MUC 0 HAY 1

TRISE = 0b00000011;

TRISB = 0b00000000;

PORTB = 0b00000000;

//--------Dinh nghia cong A--------

133

Page 134: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

ADCON1 = 0b00001111; //4bít dau ko làm gì; 4bít sau de cong ra

so

TRISA = 0b11000000; //C?ng A có A0-5 là ra

TRISC = 0b11110000;

PORTC = 0b11110000;

}

//--------------chia lay gia tri chung cho moi cai---------------

//===================================

void keyscan()

{

maphim = KEY_MAP[(kboard_idkey())];

}

void delay()

{

NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();

NOP(); NOP(); NOP(); NOP(); NOP();

NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();

NOP(); NOP(); NOP(); NOP(); NOP();

}

void display()

{

if (keyfound)

{

PORTB = (DIGITS[maphim] ^ 0xff);

PORTA = 0x00;

}

}

//=================================

134

Page 135: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

unsigned char kboard_idkey()

{

unsigned char key = 0xFF;

keyfound = 0;

do

{

key++;

KEYPORT &= 0xF0; // clear lower nibble

KEYPORT |= KEY_IO[key] & 0x0F; // output lower nibble

NOP();

NOP();

keyfound = ((KEYPORT & 0xF0) == (KEY_IO[key] & 0xF0));

} while((key < NOKEY) && (!keyfound));

return(key);

}

//=======================THE

END===============================

/***************************************************************

* Real time Clock DS1307 *

* Dong ho so su dung DS1307 hien thi tren 6 LED 7-segment hh.mm.ss *

* Compiler Sofware: Compiler CCS Ver 4.018 *

* Program design: Bo Mon DTVT - Khoa CNTT Thai Nguyen *

* Harware: *

* - Pull up PORTD, Pull-down Switches, connect PORTD to Switches *

* - PORTA and PORTB to control leb *

* - Switches: F0 - Mode, F1 - set time, F2 - clean status *

* - DIP Swich SW2 all ON (Enable 7-segment and RTC DS1307) *

135

Page 136: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

File name: DS1307.c

****************************************************************/

#include <16F877A.h>

//file header nguoi dung dinh nghia

#include <def_877a.h>

#include <ds1307.c>

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay(clock=8000000)

byte sec,min,hour;

//Su dung led 7 thanh loai catot

// // 1 2 3 4 5 6 7 8 9 .

byte const MAP[10] =

{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

byte DIS1,DIS2,DIS3,DIS4,DIS5,DIS6;

byte key,mode;

int1 ampm,blink,blink_sec,blink_min,blink_hour;

int1 on_off;

int16 count;

#bit SW1 = 0x8.0 // D0 - mode

#bit SW2 = 0x8.1 // D1 - set_time

#bit SW3 = 0x8.2 // D2 - Clear_status

//

*****************************************************************

*

//Khai bao chuong trinh con

//

*****************************************************************

*

136

Page 137: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

void init(void);

void set_blink(void);

void change_time(void);

void update_1307(void);

void keyscan(void);

void set_sec(void);

void set_min(void);

void set_hour(void);

void clear_status(void);

void read_time(void);

void update_time(void);

void display(void);

//

*****************************************************************

*

//Chuong trinh chinh

//

*****************************************************************

*

void main() {

byte u;

Delay_ms(5);

init();

u=read_ds1307(0);

sec=u & 0x7F;// enable RTC

write_ds1307(0,sec);// set second to 00 and enable clock(bit7=0)

//Xoa tat ca cac co khien

key=5;mode=0;blink=0;

blink_sec=0;blink_min=0;blink_hour=0;

count=15;on_off=1;

ampm = bit_test(hour,5);// test AM_PM

137

Page 138: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

if(ampm==0) {RD4 = 0;RD5=1;} //LED AM

if(ampm==1) {RD4 = 1;RD5=0;} //LED PM

while(true)

{

read_time();

display();

keyscan();

}

}//end of main program

//

*****************************************************************

*

void set_blink()

{

switch (mode)

{

case 1: blink_sec=1; break;

case 2: {blink_min=1;blink_sec=0;} break;

case 3: {blink_hour=1;blink_min=0;} break;

case 4:

{

blink=0;mode = 0;blink_sec=0;

blink_min=0;blink_hour=0;

}

break;

}

}

//

*****************************************************************

*

void change_time()

{

138

Page 139: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

if(mode == 1) {blink_sec=1;set_sec();}

if(mode == 2) {blink_min=1;set_min();}

if(mode == 3) {blink_hour=1;set_hour();}

if(mode == 4)

{

blink=0;mode = 0;

blink_sec=0; blink_min=0; blink_hour=0;

}

}

//

*****************************************************************

*

void update_1307()

{

write_DS1307(0,sec);

write_DS1307(1,min);

bit_set(hour,6);

if (ampm == 0) {bit_clear(hour,5); write_DS1307(2,hour);} // AM

if (ampm == 1) {bit_set (hour,5); write_DS1307(2,hour);} // PM

}

//

*****************************************************************

*

void keyscan() {

RD0=1;RD1=1;RD2=1;RD3=1;

if(SW1 != 1) { key=0;SW1=1;delay_ms(150);}

if(SW2 != 1) { key=1;SW2=1;delay_ms(150);}

if(SW3 != 1) { key=2;SW3=1;delay_ms(150);}

if(key != 5)

{

139

Page 140: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

switch (key)

{

case 0: {mode++;key = 5;blink=1;set_blink();}

break;

case 1: {change_time();key = 5;update_1307();}

break;

case 2: {clear_status();key = 5;}

break;

}

}

}

//

*****************************************************************

*

void set_sec()

{

sec=read_ds1307(0);

if (sec>=0x30) {sec=0; min++; write_ds1307(1,min);}

else sec=0;

write_ds1307(0,sec);

}

//

*****************************************************************

*

void set_min()

{ byte j;

min=read_ds1307(1);

min++;

j=min & 0x0F;

if (j>=0x0A) min=min+0x06;

if (min>=0x60) min=0;

write_ds1307(1,min);

140

Page 141: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

}

//

*****************************************************************

*

void set_hour()

{

hour= hour & 0x1F;

hour++;

if(hour== 0x0a) hour = hour+0x06;

if(hour == 0x13)

{ hour = 0x00;

if (ampm == 0) ampm = 1;

else ampm = 0;

}

}

//

*****************************************************************

*

void clear_status() {

mode=4; set_blink();

}

//

*****************************************************************

*

void read_time()

{ sec = read_DS1307(0);

min = read_DS1307(1);

hour = read_DS1307(2);

update_time();

}

141

Page 142: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

//

*****************************************************************

*

void update_time()

{

ampm = bit_test(hour,5); //test AM PM

if(ampm == 0) {RD4 = 0;RD5=1;} //AM

if(ampm == 1) {RD4 = 1;RD5=0;} // PM

DIS1= sec & 0x0F;

DIS2=(sec & 0xF0)>>4; //convert to BCD SEC

DIS3= min & 0x0F;

DIS4=(min & 0xF0)>>4; //convert to BCD MIN

DIS5= hour & 0x0F;

DIS6=(hour & 0x10)>>4; //convert to BCD HOUR

}

//

*****************************************************************

*

void display() {

TRISB=0x00;TRISA=0x00;

if(blink==0) goto norm;

if(on_off==0) goto led_blink;

norm:

//-----------------------------------------------------------------

// sec - min - hour

PortB=MAP[DIS1]; RA5=0;//DIS1

delay_ms(1); RA5=1;

PortB=MAP[DIS2]; RA4=0; //DIS2

delay_ms(1); RA4=1;

PortB=MAP[DIS3];output_low(PIN_B7);RA3=0;//DIS3

delay_ms(1); RA3=1;

142

Page 143: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

PortB=MAP[DIS4]; RA2=0;//DIS4

delay_ms(1); RA2=1;

PortB=MAP[DIS5];output_low(PIN_B7); RA1=0;//DIS5

delay_ms(1); RA1=1;

PortB=MAP[DIS6];if (portb==0xC0) RA0=1; else RA0=0;//DIS6

delay_ms(1); RA0=1;//*/

if(count!=0) goto exit;

else

{

count=15;

on_off=0;

}

goto exit;

led_blink:

PortB=MAP[DIS1];

if (blink_sec==1) RA5=1;//DIS1

else RA5=0;

delay_ms(3); RA5=1;

PortB=MAP[DIS2];

if (blink_sec==1) RA4=1;//DIS2

else RA4=0;

delay_ms(3); RA4=1;

PortB=MAP[DIS3];output_low(PIN_B7);

if(blink_min==1) RA3=1;//DIS3

else RA3=0;//DIS3

delay_ms(3); RA3=1;

PortB=MAP[DIS4];

if(blink_min==1) RA2=1;//DIS4

else RA2=0;//DIS4

143

Page 144: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

delay_ms(3); RA2=1;

PortB=MAP[DIS5];output_low(PIN_B7);

if(blink_hour==1) RA1=1;//DIS5

else RA1=0;//DIS5

delay_ms(3); RA1=1;

PortB=MAP[DIS6];

if(blink_hour==1) RA0=1;//DIS6

else {if (portb==0xC0) RA0=1; else RA0=0;}//DIS6

delay_ms(3); RA0=1;//*/

if(count==0) {count=15;on_off=1;}

//------------------------------------------------------------------

exit:

count--;

}

//*************************************************

void init()

{

Trisd = 0x0F;

Trisb = 0x00;//output

Trisa = 0x00;

RD4=1;RD5=1;

init_ds1307();

}

//*************************************************

//END PROGRAM

144

Page 145: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

TÀI LIỆU THỰC HÀNH CPLD

MỤC LỤC

I. GIỚI THIỆU HỆ THỐNG.............................................................................85

II. MÔ TẢ CÁC THÀNH PHẦN CỦA HỆ THỐNG.....................................87

1. DIP SWITCH (DIPSW)............................................................................87

2. JUMPERs..................................................................................................88

3. MCU SOCKETs........................................................................................89

4. POWER SUPPLY.....................................................................................92

5. ON-BOARD PROGRAMMER................................................................92

6. REAL TIME CLOCK (RTC) DS1307......................................................93

7. RS-232 COMMUNICATION...................................................................94

8. USB COMMUNICATION.......................................................................95

9. PS/2 COMMUNICATION.......................................................................96

10. DS1820 DIGITAL THERMOMETER...................................................98

11. A-D CONVERTER INPUT....................................................................99

145

Page 146: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

12. DIRECT PORT ACCESS.....................................................................100

PHẦN II: THỰC HÀNH....................................................................................101

Bài thực hành số 1...........................................................................................101

SỬ DUNG PHẦN MỀM WINPIC800...........................................................101

TRUY CẬP CỔNG VÀO RA SỐ VÀ ĐIỀU KHIỂN LED 7 DOẠN...........101

I. MUC ĐÍCH..............................................................................................101

II. CHUẨN BỊ.............................................................................................101

III. THỰC HÀNH.......................................................................................101

Bài thực hành số 2...........................................................................................111

BIẾN ĐỔI ADC, ĐO ĐIỆN ÁP, NHIỆT ĐỘ.................................................111

HIỂN THỊ TRÊN LED VÀ TRUYỀN THÔNG QUA RS232.......................111

I. MUC ĐÍCH..............................................................................................111

II. CHUẨN BỊ.............................................................................................111

III. THỰC HÀNH.......................................................................................111

Bài thực hành số 3...........................................................................................115

ĐỌC PHÍM BẤM, ĐIỀU KHIỂN RELAY....................................................115

VÀ ĐỌC THỜI GIAN THỰC DS1307 HIỂN THỊ TRÊN LEB 7 ĐOẠN....115

I. MUC ĐÍCH..............................................................................................115

II. CHUẨN BỊ.............................................................................................115

III. THỰC HÀNH.......................................................................................116

PHU LUC...........................................................................................................122

Phần I: Lý thuyết chung về CPLD và VHDL.....................................................154

Giới thiệu............................................................................................................155

I. Lý thuyết chung về CPLD...............................................................................155

1. Giới thiệu chung..........................................................................................155

1.1. Lịch sử Logic khả trình........................................................................155

1.2. Thiết bị logic khả trình phức tạp CPLD...............................................158

146

Page 147: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

1.3. Mảng cổng Logic khả trình miền FPGA..............................................161

1.4. Hợp nhất công nghệ Logic...................................................................163

2. Các giải pháp công nghệ của Xilinx...........................................................164

2.1. Giới thiệu..............................................................................................164

2.2. Các thiết bị của Xilinx..........................................................................165

2.3. CPLD Xilinx........................................................................................165

II. Lý thuyết chung về VHDL.............................................................................173

1. Các phương pháp thiết kế số truyền thống..................................................173

1.1. Phương pháp thiết kế dùng hàm Boolean.............................................173

1.2. Phương pháp thiết kế dựa trên sơ đồ (Là sự mở rộng của phương pháp

thiết kế dùng hàm Boolean).........................................................................174

1.3. Nhược điểm của các phương pháp thiết kế truyền thống.....................174

2. Phương pháp thiết kế số bằng ngôn ngữ mô tả phần cứng.........................175

3. Các quá trình thực hiện thiết kế số bằng HDL trên FPGA.........................177

4. Ngôn ngữ mô tả phần cứng VHDL.............................................................183

4.1. Giới thiệu..............................................................................................183

4.2. Cấu trúc một mô hình hệ thống mô tả bằng VHDL.............................185

Phần II: Thực hành.............................................................................................189

Bài 1: Làm quen với phương pháp thiết kế số bằng VHDL trên phần mềm ISE

của Xilinx............................................................................................................189

1. Mục đích.....................................................................................................189

2. Thiết bị sử dụng..........................................................................................189

3. Nội dung thực hành.....................................................................................189

3.1. Tạo dự án mới......................................................................................190

3.2. Biên soạn HDL.....................................................................................193

3.3. Biên soạn lưu đồ trạng thái...................................................................200

3.4. Thiết kế VHDL mức đỉnh....................................................................206

3.5. Thiết kế sơ đồ nguyên lí mức đỉnh.......................................................219

147

Page 148: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

4. Các bài thực hành nâng cao........................................................................228

Bài 2: Tìm hiểu về cấu trúc phần cứng X-Board................................................230

1. Mục đích.....................................................................................................230

2. Thiết bị sử dụng..........................................................................................230

3. Nội dung thực hành.....................................................................................230

4. Yêu cầu sau buổi thực hành........................................................................237

Bài 3: Thực hành với Project mẫu trên X-Board................................................238

1. Mục đích.....................................................................................................238

2. Thiết bị thực hành.......................................................................................238

4. Yêu cầu sau buổi thực hành........................................................................242

Phần I: Lý thuyết chung về CPLD và VHDL

Giới thiệu

Dù bạn đang thiết kế logic dùng các phần tử logic rời rạc, hay dựa trên vi điều

khiển, hay đơn giản hơn là bạn đang học cách sử dụng phần mềm thiết kế logic

tân tiến nhất thì cuốn tài liệu này cũng mang đến cho bạn nhiều thú vị về một

cách thiết kế khác biệt.

Các thiết bị logic khả trình được phát minh vào cuối những năm 70, và từ đó đã

được cải tiến để trở nên phổ biến và trở thành một trong những lĩnh vực tăng

trưởng nhanh nhất trong công nghiệp bán dẫn. Tại sao các thiết bị logic khả trình

lại được sử dụng rộng rãi đến vậy? Luôn đi bên những nhà thiết kế là thiết bị

logic khả trình với độ mềm dẻo linh động tối đa cung cấp ưu điểm về thời gian

hoàn thành sản phẩm để đưa ra thị trường và mức độ tích hợp trong thiết kế. Ưu

thế hơn nữa, họ có thể thiết kế và lập trình đi lập trình lại nhiều lần để để nâng

cấp các tính năng hệ thống.

Tài liệu này nói chi tiết về lịch sử của logic khả trình, khi nào thì sử dụng và sử

dụng chúng như thế nào, cách cài đặt phầm mềm thiết kế bản miễn phí và bản đủ

chức năng (Xilinx ISE WebPACK) và sau đó hướng dẫn bạn thực hiện một thiết

kế đầu tiên của riêng mình. Cũng có những phần nói về thiết kế ban đầu theo sơ

đồ mạch và VHDL. Hy vọng các bạn sẽ tìm thấy sự bổ ích trong quyển tài liệu

148

Page 149: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

này về cả lí thuyết và thực hành để có thể dễ dàng xây dựng các thiết kế của riêng

mình.

I. Lý thuyết chung về CPLD

1. Giới thiệu chung

1.1. Lịch sử Logic khả trình

Cuối những năm 1970, các linh kiện logic chuẩn thịnh hành và được thiết kế trên

các bảng mạch in. Một số người đã đặt vấn đề: “Sẽ thế nào nếu nhà thiết kế có

thể thực hiện kết nối các đường mạch trong một thiết bị lớn hơn”. Điều này sẽ

cho phép các nhà thiết kế tích hợp nhiều linh kiện logic chuẩn trong một thiết bị.

Để đưa ra cách tối ưu nhất trong thiết kế, Ron Cline từ hãng Signetics (hãng này

sau đó được mua bởi Philips và cuối cùng là Xilinx) đã tạo ra hai mảng khả trình

được phát triển từ sự kết hợp giữa 2 cổng AND và OR cũng như là sự phân bổ

các số hạng AND qua các cổng OR.

Đây là kiến trúc mềm dẻo nhưng vào thời đó sự trễ lớn đầu vào và đầu ra làm

cho các linh kiện hoạt động khá chậm.

Đặc điểm PLA là:

- Có hai mảng khả trình

- Bất kỳ sự kết hợp nào là của các cổng AND và OR.

- Mật độ logic cao nhất.

- Nhiều cầu chì, chậm hơn PAL.

- Mảng logic khả trình.

149

Page 150: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Simple PLA.

Tiếp theo là MMI (được mua lại bởi AMD sau đó) tham gia như nguồn thứ hai

trong mảng PLA. Sau đó trong quá trình chế tạo có sự thay đổi nhỏ và cải tiến

thành logic mảng khả trình PAL.

Kiến trúc mới này khác với PLA ở chỗ là một trong các mảng khả trình được cố

định - mảng cổng OR. Kiến trúc PAL nhanh hơn, phần mềm ít phức tạp hơn,

nhưng không được linh động như PLA.

Các kiến trúc khác như PLD. Các loại thiết bị được gọi là Simple PLD

Một mảng khả trình gồm các cổng AND /OR cố định

Kết hợp hạn chế của các cổng AND / OR

Mật độ logic trung bình

Ít cầu chì hơn, và nhanh hơn PLA (thời điểm đó, được chế tạo trên

quy trình 10µm).

Logic mảng khả trình

Kiến trúc SPLD (PAL).

Kiến trúc này có một mạng lưới kết nối ngang và dọc. Ở mỗi kết nối có một cầu

chì. Với sự trợ giúp của công cụ phần mềm, người thiết kế có thể lựa chọn cách

kết nối bằng cách phá vỡ tất cả các cầu chì không cần thiết (việc này được thực

hiện bởi một bộ nạp, nhưng bây giờ thường làm bằng công nghệ ISP).

150

Page 151: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Các chân đầu vào được nối tới các kết nối theo chiều ngang. Các đường chiều

đứng được nối tới các cổng AND – OR được gọi là product term. Chúng lần lượt

được nối với các Flip-Flop chuyên dụng. Các cổng ra của các Flip – Flop này

được nối với các chân đầu ra.

PLD cung cấp hơn 50 lần số cổng trong một bộ đóng gói so với các thiết bị logic

rời rạc. Đây là sự cải tiến cực lớn vớí ít thiết bị hơn nhưng có độ tin cậy cao hơn

đối với các phép logic chuẩn.

Công nghệ PLD đã phát triển từ những ngày đầu tiên bởi Xilinx bằng việc tạo ra

những thiết bị CMOS tiêu thụ năng lượng cực nhỏ, dựa trên công nghệ lưu trữ

flash. Flash PLD cho phép khả năng lập trình lại nhiều lần gồm cả lập trình và

xoá bằng điện. Đã qua cái thời mà phải mất hơn 20 phút để xoá bằng UV eraser.

1.2. Thiết bị logic khả trình phức tạp CPLD

CPLD mở rộng mật độ của SPLD, nói nôm na nó có một vài khối PLD hay còn

gọi là macrocells trong một thiết bị đơn với mục đích chung là tạo kết nối giữa

các mạng bên trong. Các đường logic đơn giản có thể được thực hiện với một

khối đơn. Logic tinh vi hơn yêu cầu nhiều khối tổ hợp và sử dụng với mạng kết

nối chung để tạo ra những kết nối này.

Các CPLD có đặc điểm sau:

Liên kết nối chung trung tâm

Đơn giản, có khả năng định thời

Định tuyến dễ dàng

Công cụ PLD thêm vào liên kết nối

Tác động của cổng phức tạp, nhanh và gọn

151

Page 152: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Kiến trúc CPLD.

CPLD hay ở chỗ xử lí những tác động phức tạp và rộng với tốc độ sắc bén – ví

dụ cỡ 5 ns, tương đương 200MHz. Mô hình định thời của CPLD được tính toán

dễ dàng, do vậy trước khi bắt đầu thiết kế bạn có thể tính toán tốc độ đầu vào -

đầu ra.

Lý do dùng CPLD

CPLD cho phép thiết kế dễ dàng, chi phí phát triển thấp hơn, nhân được lợi

nhuận, và đưa được sản phẩm ra thị trường.

Thiết kế dễ: CPLD đưa ra cách thiết kế đơn giản để thực hiện thiết

kế. Khi một thiết kế được mô tả bằng sơ đồ nguyên lí, hay HDL, bạn chỉ

đơn giản dùng công cụ phát triển CPLD tối ưu, khớp, và mô phỏng thiết

kế. Công cụ thiết kế tạo ra một file mà sẽ được sử dụng để áp dụng tuỳ

theo loại CPLD với chức năng mong muốn. Điều cho phép thực hiện một

nguyên mẫu phần cứng và thực hiện gỡ lỗi ngay từ lúc bắt đầu. Khi cần

thiết phải thay đổi, bạn có thể thay đổi bằng công cụ thiết kế, sau đó lại

thực hiện và kiểm tra thiết kế mới ngay lập tức.

Chi phí phát triển thấp: CPLD làm cho chí phí phát triển giảm

xuống còn rất thấp. Vì có thể lập trình lại được, bạn có thể dễ dàng và

không tốn kém gì để thay đổi thiết kế của bạn. Điều này cho phép tối ưu

thiết kế và thêm những tính năng mới và nâng cấp sản phẩm. Công cụ

thiết kế CPLD tin cậy và rất rẻ (hoặc miễn phí đối với trường hợp Xilinx).

Theo cách truyền thống thì người thiết kế phải đối mặt với chi phí lớn như

lặp lại công việc, tháo rời và thời gian phát triển .Với CPLD, bạn có

152

Page 153: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

những cách giải quyết linh động hơn vì thế tránh được nhiều lỗi thiết kế

truyền thống.

Lợi ích kinh tế lớn: CPLD có một chu trình phát triển ngắn, sản

phẩm nhanh chóng chiếm lĩnh thị trường và thu được lợi nhuận nhanh.

Bởi vì CPLD có khả năng tái sử dụng, dễ thay đổi sử dụng ISP trên

internet. Điều này lần lượt cho phép bạn giới thiệu một các đặc tính mới

một cách dễ dàng và nhanh chóng tạo ra lợi nhuận mới. Hàng nghìn các

nhà thiết kế đang sử dụng CPLD để thâm nhập thị trường nhanh hơn và

tồn tại trong thị trường lâu hơn bằng việc tiếp tục nâng cao sản phẩm của

họ.

Giảm kích thước bo mạch sử dụng: CPLD đưa ra một mức tích hợp

cao hơn (tức là một mức độ lớn các cổng hệ thống trên một đơn vị diện

tích). Điều này cung cấp một giải pháp hoàn chỉnh cho người thiết kế mà

sản phẩm của họ phải thích hợp với các tài liệu nhỏ đính kèm hoặc có diện

tích bo mạch giới hạn để thực thi thiết kế logic. Xilinx CoolRunner II có

sẵn trong các dòng chip mới nhất. Ví dụ, CP56 CPLD có độ cao của chân

là 0,5mm và kích thước chỉ là 6x6 mm, tạo cho nó sự lý tưởng trong sản

phẩm có công suất thấp. CoolRunner II CPLD cũng có sẵn ở gói QF

(vuông, phẳng) tạo ra dạng nhỏ nhất trong công nghiệp. QF32 có kích

thước chỉ là 5x5mm.

Các kích thước đóng gói khác nhau.

Chi phí của người sử dụng: Chi phí người sử dụng có thể định

nghĩa như là chi phí để bảo dưỡng, sửa chữa hoặc bảo hành sản phẩm.

Chẳng hạn, một thiết kế cần thay đổi các phần cứng phải được tạo ra

một số ít nguyên mẫu, chi phí thì khá nhỏ. Nhưng khi một số các đơn

vị cần thay đổi, chi phí có khả năng rất lớn. Bởi vì CPLD có khả năng

tái lập trình, không đòi hỏi phải tái lập lại phần cứng, như vậy chi phí

rất ít để thay đổi thiết kế sử dụng chúng.

Độ tin cậy: Được tăng lên bởi sử dụng công suất nhỏ CoolRunner-

CPLD

153

Page 154: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

1.3. Mảng cổng Logic khả trình miền FPGA

Năm 1985 Xilinx giới thiệu một ý tưởng mới hoàn toàn: kết hợp giữa việc điều

khiển của người dùng và thời gian tiếp cận thị trường của các PLD cùng với mật

độ và quan hệ vốn lãi từ mảng các cổng.Người mua quan tâm, và FPGA ra đời.

Bây giờ thì Xilinx là số một về nhà cung cấp FPGA trên thế giới.

Một FPGA thường là cấu trúc của các tế bào logic (hay module) và có sự liên

kết, các liên kết hoàn toàn điều khiển được. Điều này có nghĩa là bạn có thể thiết

kế, lập trình và thay đổi mạch bất cứ lúc nào muốn.

FPGA ngày nay đang vượt qua giới hạn 10 triệu cổng, bạn có thể thực hiện

những tham vọng lớn. FPGA có đặc điểm như sau:

Định tuyến dựa trên kênh

Định thời gian theo vị trí

Công cụ phức tạp hơn CPLD

Hạt mịn.

Xử lý thanh ghi nhanh

Kiến trúc FPGA.

Từ khi giới thiệu dòng Spartan của dòng FPGA, đến giờ Xilinx đã hoàn thiện

mảng cổng về mọi khía cạnh – giá cả, cổng, số các đầu vào ra cũng như hiệu

năng và chi phí.

154

Page 155: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Có hai loại FPGA cơ bản: loại khả trình dựa trên SRAM và loại OTP (lập trình

một lần). Hai loại FPGA này khác nhau về việc thực hiện các tế bào logic và cơ

cấu sử dụng để tạo nên kết nối trong thiết bị.

Loại ưu thế hơn cả là loại dựa trên SRAM và có thể lập trình lại nếu bạn chọn.

Thực tế thì một SRAM FPGA được lập trình lại mổi lần khởi động, vì FPGA là

một vi mạch lưu trữ tích hợp. Điều này giải thích tại sao cần có một số PROM

hay hệ thống nhớ với mọi SRAM FPGA.

SRAM Logic Cell.

Trong các tế bào logic, thay cho các cổng thông thường thì một LUT xác

định đầu ra dựa trên giá trị đầu vào (Trong “tế bào logic SRAM ” trên thì 6 sự

kết hợp khác nhau của 4 đầu vào sẽ xác định giá trị đầu ra). Các bit trong SRAM

cũng được dùng để kết nối.

Các OTP FPGA dùng các đối cầu chì (khác với cầu chì, ở đây các kết nối được

tạo ra chứ không bị cắt như trong quá trình lập trình) tạo nên những kết nối cố

định trong vi mạch. Tuy vậy thì các OTP FPGA không cần SPOM hay các

phương tiện khác để tải chương trình về FPGA. Tuy nhiên mỗi khi muốn thay

đổi thiết kế, bạn phải thay chip khác. Các tế bào logic OTP cũng tương tự như bộ

PLD với các bộ cổng và các flip-flop chuyên dụng.

OTP Logic Cell.

155

Page 156: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

1.4. Hợp nhất công nghệ Logic

Sự hợp nhất của logic chuẩn họ 74 vào trong một CPLD giá rẻ là một gợi ý hấp

dẫn. Không chỉ là vấn đề tiết kiệm diện tích mạch in – vì chi phí hệ thống của

bạn được giảm – mà bạn còn mua và dự trữ được một diện tích rộng lớn của hơn

20 linh kiện logic tiền định nghĩa.

Bằng việc sử dụng các thiết bị của Xilinx CoolRunner bạn có thể có những thuận

lợi từ công suất tiêu thụ thấp và giảm được sự toả nhiệt năng. Điều đó lần lượt

dẫn đến sự giảm chi phí khi phải chế tạo bộ tản nhiệt và tạo ra bộ sản phẩm có độ

tin cậy cao hơn.

2. Các giải pháp công nghệ của Xilinx

2.1. Giới thiệu

Giải pháp logic khả trình của Xilinx giúp tối thiểu rủi ro cho việc chế tạo thiết bị

điện tử bằng cách rút ngắn thời gian cần thiết để phát triển sản phẩm và đưa ra thị

trường. Bạn có thể thiết kế và kiểm tra mạch điện duy nhất trong các thiết bị

logic khả trình của Xilinx nhanh hơn so với việc lựa chọn các phương pháp thiết

kế truyền thống như là mảng cổng logic cố định và lập trình mặt nạ. Hơn nữa các

thiết bị của Xilinx là các phần chuẩn mà chỉ cần lập trình, bạn không mất thời

gian chờ đợi để có được nguyên mẫu hoặc không phải trả tiền cho chi phí nghiên

cứu không tập trung.

Những khách hàng ứng dụng logic khả trình của Xilinx trong các sản phẩm ở

nhiều mảng thị trường. Trong đó có cách lĩnh vực như xử lí dữ liệu, viễn thông,

điều khiển công nghiệp, máy công cụ, điện tử gia dụng, tự động hoá, quốc phòng,

và hàng không.

Những sản phầm mũi nhọn, những giải pháp phần mềm tối tân và sự hỗ trợ kỹ

thuật trên thế giới tạo nên một giải pháp tổng thể mà Xilinx cung cấp. Giải pháp

phần mềm là mấu chốt thành công của dự án. Giải pháp phần mềm của Xilinx

cung cấp công cụ hữu dụng làm cho việc thiết kế logic khả trình trở nên đơn

giản. Những luồng thiết kế ấn phím, những hỗ trợ online được tích hợp, những

tài liệu đa phương tiện, và các công cụ tương tác tự động và tự động có hiệu suất

cao giúp bạn đạt được các kết quả tối ưu.Thêm nữa, công nghệ logic khả trình và

sự linh động tách biệt của cấp phát có chọn lọc của công nghệ tích hợp EDA là

các mảng ứng dụng rộng rãi nhất trong công nghiệp Xilinx đang phát triển về

công nghệ để kích hoạt phần cứng trong các hệ thống của Xilinx được nâng cấp

tính điều khiển đối với các loại mạng, kể cả internet, thậm chí cả sau khi vật dụng

vẫn được chuyển cho khách hàng. Xilinx-“Hệ thống có thể nâng cấp trực

156

Page 157: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

tuyến”sẽ cho phép các nhà máy sản xuất thiết bị thêm từ xa những tính năng và

đặc điểm cho hệ thống cài đặt hoặc sửa lỗi mà không cần thay đổi phần cứng.

2.2. Các thiết bị của Xilinx

2.3. CPLD Xilinx

Hiện tại Xilinx chia các sản phẩm CPLD của mình ra làm 2 loại: XC9500 và

CoolRunner. Tài liệu này tập trung chủ yếu là hai dòng phổ biến nhất đó là

XC9500XL và CoolRunner II. Để có thể lựa chọn được CPLD cho mình hãy

xem phần tính năng sản phẩm bên dưới để xác định dòng sản phẩm phù hợp với

ứng dụng của bạn. Bạn cũng nên lựu chọn cẩn thận để tìm được thiết bị tốt nhất

cho tiêu chuẩn thiết kế của bạn.

Các thiết bị của Xilinx.

Các tính năng sản phẩm

Thiết bị XC9500 - Dòng XC9500XL ISP CPLD: tốc độ cao, chi

phí thiết kế thấp.

CoolRunner-II: tiêu thụ năng lượng cực ít, dẫn đầu trong các thiết

bị cầm tay. Với dòng dự trữ nhỏ cỡ uA và tiêu thụ công suất nhỏ nên

CoolRunner II đặc biệt phù hợp với các ứng dụng cầm tay chạy pin, hay

những ứng dụng có nguồn cung cấp nhạy cảm.

Chú ý chọn lựa

157

Page 158: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Để tìm được thiết bị tốt nhất cho các tiêu chuẩn thiết kế của bạn, cần chú ý tới

các chi tiết thiết kế và đặc điểm sản phẩm để có những thông tin chi tiết về thiết

bị mình cần.

Mật độ: Mỗi phần đều có một lượng cổng hay ước lượng mật độ

logic mỗi phần.

Số lượng thanh ghi: Đếm số thanh ghi cần cho bộ đếm, máy trạng

thái, thanh ghi và khóa. Số lượng các macrocell cần thiết trong một thiết

bị.

Số lượng chân Vào/Ra: Mạch thiết kế cần bao nhiêu lối vào và bao

nhiêu lối ra

Tốc độ: Thành phần nào sẽ quyết định tổ hợp nhanh nhất trong

thiết bị của bạn sẽ quyết định Tpd (cỡ ns) của thiết bị. Mạch dãy nhanh

nhất cho biết fMax của thiết bị.

Đóng gói: Tác động của các điều kiện điện cơ, và các kiểu đóng gói

khác nhau.

Công suất nhỏ: Bạn sử dụng nguồn pin hay nguồn cực. Thiết kế

của bạn có yêu cầu công suất thấp nhất không nhỏ nhất . Bạn có quan tâm

đến giảm nhiệt lượng của thiết bị không?

Cấu trúc của hệ thống bậc cao: Có những thiết bị nhiều điện thế

nào trên bảng? Bạn muốn đổi mức giữa các thiết bị không? Bạn có muốn

tạo ra các xung vuông clock? Bạn có cần giao diện cho bộ nhớ và các chip

vi xử lý không?

Giới thiệu CPLD công suất nhỏ CoolRunner-II

CoolRunner-II CPLDs kết hợp giữa nguồn tiêu thụ cực thấp và tốc

độ cao, nhiều cổng vào ra trên một thiết bị. Dòng CoolRunner-II có từ 32

đến 512 macro cell. CRII-CPLD là nét đặc biệt của công nghệ RealDigital

cho phép các thiết bị gần như không tiêu thụ nguồn ở chế độ chờ. Điều

này làm cho nó trở thành lí tưởng cho các mảng thị trường các thiết bị

điện tử cầm tay, chạy pin đang tăng trưởng nhanh như: Laptop PCs, điện

thoại cầm tay, PDA, trò chơi điện tử,...

Các CPLD cũng được dùng như nguồn khá ổn định trong quá trình

hoạt động thực tế (so sánh với CPLD thông thường). Đây là một đặc điểm

quan trọng cho các thiết bị có hiệu suất cao, nhạy cảm với nhiệt độ như là

158

Page 159: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

các chuyển mạch viễn thông, hệ thống hội nghị bằng hình ảnh, các bộ mô

phỏng, các bộ kiểm tra đầu cuối...

Dòng CR –II của CPLD được dùng cho các ứng dụng công suất

nhỏ bao gồm: ứng dụng về nguồn, thiết bị cầm tay, di động. Mỗi phần

của dòng gồm công nghệ thiết kế RealDigital, kết hợp công suất nhỏ với

tốc độ nhanh. Với kỹ thuật thiết kế này, các dòng yêu cầu tốc độ thật từ

chân này tới chân kia khoảng 5ηs, trong khi nguồn cung cấp cùng lúc nhỏ

hơn 16µA (chờ) mà không cần “power down bits” đặc biệt nào. Bằng cách

thay thế phương pháp khuếch đại thông thường để thực hiện các phép

toán logic (một kỹ thuật được sử dụng trong PLD kể từ kỷ nguyên lưỡng

cực) với một chuỗi cổng CMOS thuần túy, nguồn động cũng thấp hơn bất

kỳ CPLD cùng cạnh tranh.

Các CoolRunner-II CPLDs cấp phát tốc độ cao và không ràng buộc

nhiều với các họ XC9500/XL/XV CPLD và sự đa năng củaXPLA3 công

suất nhỏ. Điều này có nghĩa là các thiết bị giống nhau được dùng cho các

159

Page 160: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

phương tiện truyền dữ liệu tốc độ cao, hệ thống máy tính, sản phẩm cầm

tay cùng với những tiện dụng thêm vào của ISP. Công suất tiêu thụ nhỏ và

tốc độ xử lý nhanh kết hợp vào trong một dòng sản phẩm vói chi phí thấp

và dễ sử dụng nên rất dễ sử dụng và giá cả cũng thực tế. Xilinx đã tạo ra

Fast Zero Power độc quyền với công suất nhỏ mà không cần các phương

pháp thiết kế đặc biệt nào.

Kỹ thuật clocking và các đặc tính tiết kiệm công suất khác mở

rộng các khối công suất của bạn. Những đặc điểm thiết kế này được hỗ trợ

bởi phần mềm Xilinx ISE 4.li. Hình dưới chỉ ra một số yêu cầu của gói

CoolRunner-II CPLD với các kích thước. Tất cả các bộ này là các giá gắn

mặt với nhau, với hơn một nửa là công nghệ lưới hình tròn. Các đóng gói

siêu nhỏ này giới hạn dung lượng lớn nhất trên một diện tích nhỏ nhất có

thể.

Công nghệ CMOS được dùng trong CoolRunner-II CPLD phát ra

nhiệt lượng rất nhỏ, cho phép sử dụng những bộ đóng gói nhỏ trong suốt

quá trình hoạt động ở tốc độ cao. Mỗi đóng gói có ít nhất hai mật độ tồn

tại, với 3 mật độ như trongVQ100 (100-chân, 1.0mm QFP), TQ144(144-

chân,1.4mm QFP) và FT256 (256-chân,1.0mm-spacing FLBGA). Loại

FT256 đặc biệt phù hợp với các sản phẩm cầm tay mỏng với yêu cầu mật

độ logic cao.

Bảng 2-1 chỉ ra sự phân bố của các đặc điểm nổi trội thông qua

dòng CoolRunner-II CPLD. Họ này có những đặc điểm cơ bản và đồng

nhất trong vùng hiệu dụng nhất. Ví dụ, nó có thể không hợp với 4 nhóm

I/O trên các bộ 32 và 64 marcocell nhưng lại đúng cho các bộ 384 và 512

macrocell.

160

Page 161: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Các nhóm I/O là tập hợp của các chân I/O sử dụng bất kỳ một trong

các tập con của chuẩn điện thế thích hợp tức là cùng mức VCCIO. Khả

năng phân chia định thời thì kém hiệu quả đối với các thiết bị nhỏ nhưng

lại hữu dụng và thích hợp cho nhưng thiết bị lớn hơn. Công nghệ

DataGATE™, một khả thi để chốt đầu vào để tiết kiệm năng lượng thì rất

tốt cho các thiết bị lớn nhưng lại có những ứng dụng giới hạn với các thiết

bị nhỏ.

Mô tả kiến trúc CoolRunner-II

CoolRunner-II CPLD là dòng đồng bộ ở mức cao của thiết bị

nhanh, công suất thấp. Kiến trúc cơ bản là kiến trúc CPLD truyền thống,

kết hợp các macrocell thành những khối chức năng được nối với một ma

trận định tuyến kết nối gọi là Xilinx Advanced Interconnect Matrix

(AIM). Các bộ đặc trưng này dùng cấu hình PLA cho phép tất cả những

product term được định hướng và chia sẻ trong bất kỳ các macrocell nào

của các macrocell của khối chức năng này.

Phần mềm thiết kế có thể tổng hợp một cách hiệu quả và tối ưu

logic sau đó phù hợp với khối chức năng và được nối với nhau để có thể

tận dụng lượng lớn các nguồn thiết bị. Phần mềm này quản lý các thay đổi

thiết kế rất dễ và tự động, tận dụng 100% các bộ định thời của PLA trong

mỗi khối chức năng. Phần mềm thiết kế tự động quản lý các nguồn thiết bị

nên chúng ta chỉ có thể biểu thị thiết kế sử dụng các cấu tạo chung hoàn

toàn mà không cần những thông tin về kiến trúc hay cấu tạo. Nếu có kinh

161

Page 162: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

nghiệm hơn chúng ta có thể tham khảo thêm các thông tin để hiểu sâu hơn

nữa về việc chọn phần mềm cũng như đưa ra được kết quả chính xác.

Hình 2-5 chỉ ra kiến trúc bậc cao mỗi khi khối chức năng được kết nối tới các

chân và liên kết với chân khác trong ma trận liên kết nội bộ. Mỗi khối chức năng

chứa 16 macrocell

Khối chức năng CoolRunner-II

Các khối chức năng CoolRunner-II CPLD chứa 16 macrocell với

40 vị trí để tín hiệu chuyển tới các kết nối và thiết lập logic. Cơ cấu logic

bên trong gồm 56 PLA. Tất cả các khối chức năng, không kể số chứa

trong thiết bị, đều cùng loại với nhau. Ở mức cao thì các p-term tồn tại

trong một PLA. Mô hình thực sự rất linh động và thiết thực khi được so

sánh với các khối chức năng p-term cố định và p- term tầng. Loại CPLD

cổ điển có một vài p - term dành cho các đường tốc độ cao đối với các

macrocell được đưa ra. Chúng dựa vào việc bắt các p - term không sử

dụng từ những macrocell cận kề để mở rộng product term khi cần. Kết quả

của kiến trúc này là mô hình thời gian biến thiên và khả năng của logic bất

khả dụng trong khối chức năng.

PLA khác và tốt hơn nhiều. Thứ nhất là bất kỳ p-term nào cũng có

thể liên kết với một cổng OR bên trong macrocell khối chức năng. Thứ

hai, bất kỳ chức năng logic nào cũng có nhiều p- term cần thiết nối với nó

trong khối chức năng, tới một mức giới hạn cao hơn 56. Thứ ba, bạn có

thể dùng lại product term ở chức năng OR macrocell kép nên trong một

khối chức năng bạn có thể cần tạo một sản phẩm logic đặc biệt một lần,

162

Page 163: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

nhưng cũng có thể dùng lại nó tới 16 lần trong khối chức năng. Bình

thường việc này cũng rất dễ với phần mềm phù hợp xác định các product

term có thể được chia sẻ.

1. Phần mềm này đặt rất nhiều chức năng có thể đưa vào trong một

khối chức năng. Không cần thiết đặt các chức năng của macrocell gần

nhau hay có bất kỳ các hạn chế nào khác trừ việc đặt nó ở trong cùng một

khối để được xử lý bởi phần mềm. Các chức năng không cần dùng chung

xung nhịp, chung set/reset hay chung lối ra để có thể có những ứng dụng

đầy đủ của PLA. Hơn nữa, mọi p- term tới cùng thời gian trễ định trước.

Không có những bộ cộng thời gian nối tầng để đặt nhiều hơn product term

trong khối chức năng. Khi khối chức năng p- term đạt được, thì một bộ

định thời liên kết nhỏ định tuyến tín hiệu tới một khối chức năng khác để

tiếp tục tạo mạch logic. Phần mềm thiết kế Xilinx điều khiển việc này một

cách tự động.

II. Lý thuyết chung về VHDL

Hiện nay các mạch tích hợp ngày càng thực hiện được nhiều chức năng hơn, do

đó chúng ngày càng trở nên phức tạp hơn. Các phương pháp thiết kế mạch truyền

thống như dùng tối thiểu hoá hàm Boolean hay dùng sơ đồ các phần tử không

còn đáp ứng được các yêu cầu đặt ra khi thiết kế. Hơn nữa các mạch thiết kế ra

yêu cầu phải được thử nghiệm kỹ lưỡng trước khi đưa vào chế tạo hàng loạt. Hơn

163

Page 164: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

nữa cần phải xây dựng một bộ tài liệu hướng dẫn vận hành hệ thống hoàn chỉnh

dễ hiểu và thống nhất. Vì thế người ta thường sử dụng các ngôn ngữ mô phỏng

phần cứng làm phương tiện thiết kế, mô phỏng thử nghiệm các hệ thống số.

1. Các phương pháp thiết kế số truyền thống

1.1. Phương pháp thiết kế dùng hàm Boolean

Tất cả các mạch dựa trên các phần tử logic cơ bản gồm cổng logic và các mạch

flip-flop đều có thể thiết kế bằng các hàm Boolean. Có nhiều phương pháp đã

được sử dụng để tối thiểu hoá hàm Boolean nhằm tăng tính hiệu quả sử dụng các

phần tử logic, chẳng hạn như phương pháp dùng bìa cácnô. Về mặt lý thuyết bất

kỳ hệ thống số nào cũng có thể biểu diễn dưới dạng các hàm Boolean. Nhưng

việc tối thiểu hoá cũng như xử lý hàng nghìn hàm logic rõ ràng là không thực tế.

Trong khi các yêu cầu thiết kế hệ thống hiện nay đòi hỏi tới hàng nhiều nghìn

hàm Boolean.

Minh họa cho phương pháp thiết kế dùng hàm Boolean.

1.2. Phương pháp thiết kế dựa trên sơ đồ (Là sự mở rộng của phương pháp thiết

kế dùng hàm Boolean)

Trong phương pháp này, người thiết kế có thể sử dụng thêm các mạch chức năng

thông dụng khác ngoài các phần tử cơ bản là cổng và flip-flop. Như vậy, phương

pháp này cho phép thiết kế thiết kế hệ thống một cách có cấu trúc. Phương pháp

thiết kế dựa trên sơ đồ được dùng phổ biến và có rất nhiều phần mềm thiết kế

cung cấp cho người thiết kế một giao diện thiết kế đồ hoạ thuận tiện. Trong nhiều

năm phương pháp này là phương pháp được sử dụng chủ yếu trong ngành công

nghiệp chế tạo phần cứng số.

164

Page 165: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Minh họa cho phương pháp thiết kế dùng sơ đồ.

1.3. Nhược điểm của các phương pháp thiết kế truyền thống

Mặc dù có ưu điểm là dễ hiểu và dễ sử dụng, phương pháp thiết kế dùng hàm

Boolean và phương pháp thiết kế dựa trên sơ đồ có một số nhược điểm. Nhược

điểm lớn nhất của các phương pháp này là chúng chỉ mô tả hệ thống dưới dạng

mạng các phần tử nối với nhau. Nhìn vào một hệ thống được mô tả bằng hai

phương pháp trên (dưới dạng hàm Boolean hay dạng sơ đồ) ta không thể lập tức

chỉ ra được các chỉ tiêu và chức năng chung nhất của hệ thống. Ðể thiết kế một

hệ thống bằng phương pháp truyền thống, người thiết kế cần phải đi qua hai bước

thực hiện hoàn toàn thủ công: Đó là chuyển từ các yêu cầu về chức năng của hệ

thống sang biểu diễn hệ thống bằng hàm Boolean, sau đó chuyển từ hàm Boolean

sang sơ đồ mạch của hệ thống. Cũng tương tự khi cần hiểu được một hệ thống

người phân tích cần phân tích sơ đồ mạch của hệ thống chuyển nó thành các hàm

Boolean sau đó mới lập lại được các chức năng, hoạt động của hệ thống. Và các

bước nói trên hoàn toàn phải thực hiện thủ công không có bất kỳ sự trợ giúp nào

của máy tính. ở đây người thiết kế chỉ có thể sử dụng máy tính làm công cụ hỗ

trợ trong việc vẽ sơ đồ mạch của hệ thống (dùng công cụ CAE – Computer

Aided Tool) và chuyển từ sơ đồ mạch sang công cụ tổng hợp mạch vật lý (dùng

công cụ Synthesis).

Một nhược điểm khác của phương pháp thiết kế truyền thống là sự giới hạn trong

độ phức tạp của hệ thống. Phương pháp dùng hàm Boolean chỉ có thể dùng để

thiết kế các hệ thống lớn nhất biểu diễn bởi vài trăm hàm. Phương pháp dựa trên

sơ đồ chỉ có thể dùng để thiết kế lớn nhất chứa tới 6000 phần tử.

2. Phương pháp thiết kế số bằng ngôn ngữ mô tả phần cứng

165

Page 166: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Ngôn ngữ mô tả phần cứng giải quyết được nhược điểm lớn nhất của các phương

pháp thiết kế trước đây. Nếu các phương pháp cũ đòi hỏi phải chuyển đổi từ mô

tả hệ thống (các chỉ tiêu về chức năng của hệ thống) sang tập hợp các hàm logic

bằng tay thì bước chuyển đổi đó hoàn toàn không cần thiết khi dùng ngôn ngữ

mô phỏng phần cứng. Hầu hết các công cụ thiết kế dùng ngôn ngữ mô phỏng

phần cứng đều cho phép sử dụng biểu đồ trạng thái (finite-state-machine) cho các

hệ thống tuần tự cũng như cho phép sử dụng bảng chân lý cho hệ thống tổng hợp.

Việc chuyển đổi từ các biểu đồ trạng thái và bảng chân lý sang mã ngôn ngữ mô

phỏng phần cứng được thực hiện tự động. Ngôn ngữ mô phỏng phần cứng được

dùng nhiều để thiết kế cho các thiết bị logic lập trình được (PLD-Programmable

Logic Device) từ loại đơn giản đến các loại phức tạp như ma trận cổng lập trình

được (Field Programmable Gate Array).

Phương pháp thiết kế số bằng ngôn ngữ mô tả phần cứng có nhiều ưu điểm hơn

so với phương pháp thiết kế truyền thống. Hãy lấy bộ nhân 16x16 làm ví dụ để so

sánh. Mộ bộ nhân thường phức tạp về mặt sắp xếp các bộ cộng và thanh ghi việc

này yêu cầu khá nhiều cổng. Ví dụ của chúng ta có hai đầu vào 16 bít (A và B)

và đầu ra 32 bit tổng cộng có 64 cổng vào/ra. Mạch này yêu cầu cỡ 6000 cổng.

Thực hiện theo sơ đồ mạch các cổng sẽ phải được lấy ra, đặt vào bản vẽ và nối

với nhau sau đó nối với các cổng vào ra. Như vậy sẽ phải mất khoảng 3 ngày làm

việc.

Design Specification – Multiplier.

166

Page 167: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Việc thực hiện bằng HDL, cũng với khoảng 6000 cổng, cần 8 dòng lệnh và có

thể thực hiện trong 3 phút. Tệp này chứa tất cả những thông tin cần thiết để định

nghĩa một bộ nhân 16x16. Ngoài việc tiết kiệm thời gian ra, phương pháp HDL

còn độc lập hoàn toàn với nhà cung cấp, đây cũng là một lợi thế của HDL.

Để tạo ra bộ nhân 32x32 bạn đơn giản chỉ cần thay đổi một chút xíu. Đối với

phương pháp vẽ mạch, cần phải có 3 bản sao của thiết kế 30 trang trước đó, tức

là 90 trang cần phải vẽ lại, sau đó định địa chỉ lại cho bề rộng đường bus lớn hơn.

Điều này có lẽ phải cần đến 4 giờ chế bản bằng phương pháp đồ hoạ. Theo cách

mô tả bằng phương pháp HDL thì vấn đề chỉ là thay đổi đuờng bus từ 15 thành

31 ở dòng thứ 2 và từ 31 thành 63 ở dòng thứ 3. Việc này có lẽ chỉ mất đến 6

giây. Sau đây là minh hoạ của HDL khi thay đổi 2 bộ nhân trên. Ví dụ thay đổi

file HDL:

Before (16 x 16 multiplier):

entity MULT is

port(A,B:in std_logic(15 downto 0);

Y:out std_logic(31 downto 0));

end MULT;

architecture BEHAVE of MULT is

begin

Y <= A * B;

end BEHAVE;

After (32 x 32 multiplier):

entity MULT is

port(A,B:in std_logic(31 downto 0);

Y:out std_logic(63 downto 0));

end MULT;

architecture BEHAVE of MULT is

begin

Y <= A * B;

end BEHAVE;

3. Các quá trình thực hiện thiết kế số bằng HDL trên FPGA

Các bước chính để thực hiện thiết kế số dùng ngôn ngữ mô tả phần cứng trên

FPGA được mô tả trên hình vẽ.

167

Page 168: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Quy trình thiết kế FPGA.

Quá trình 1: Mô tả ban đầu về thiết kế (Specification). Khi xây dựng một chip

khả trình (FPGA) với ý nghĩa dành cho một ứng dụng riêng biệt, vì xuất phát từ

mỗi ứng dụng trong thực tiễn cuộc sống, sẽ đặt ra yêu cầu phải thiết kế IC thực

hiện tối ưu nhất những ứng dụng đó. Bước đầu tiên của quy trình thiết kế này có

nhiệm vụ tiếp nhận các yêu cầu của thiết kế và xây dựng nên kiến trúc tổng quát

của thiết kế. Các bước gồm:

1. Mô tả thiết kế(Design Specification): Trong bước này, từ những yêu cầu

của thiết kế và dựa trên khả năng của công nghệ hiện có, người thiết kế kiến

168

Page 169: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

trúc sẽ xây dựng nên toàn bộ kiến trúc tổng quan cho thiết kế. Nghĩa là trong

bước này người thiết kế kiến trúc phải mô tả được những vấn đề sau:

- Thiết kế có những khối nào?

- Mỗi khối có chức năng gì?

- Hoạt động của thiết kế và của mỗi khối ra sao ?

- Phân tích các kỹ thuật sử dụng trong thiết kế và các công cụ, phần

mềm hỗ trợ thiết kế.

Một thiết kế có thể được mô tả sử dụng ngôn ngữ mô tả phần cứng, như

VHDL hay Verilog HDL hoặc có thể mô tả qua bản vẽ mạch (schematic

capture). Một thiết kế có thể vừa bao gồm bản vẽ mạch mô tả sơ đồ khối

chung, vừa có thể dùng ngôn ngữ HDL để mô tả chi tiết cho các khối trong

sơ đồ.

2. Mô phỏng chức năng (Function simulation): Sau khi mô tả thiết kế, người

thiết kế cần mô phỏng tổng thể thiết kế về mặt chức năng để kiểm tra thiết kế

có hoạt động đúng với các chức năng yêu cầu.

3. Tổng hợp logic (Logic Synthesis): Tổng hợp logic là quá trình tổng hợp

các mô tả thiết kế thành sơ đồ bố trí mạch (netlist). Quá trình chia thành 2

bước: chuyển đổi các mã RTL, mã HDL thành mô tả dưới dạng các biểu thức

đại số Boolean và dựa trên các biểu thức này kết hợp với thư viện tế bào

chuẩn sẵn có để tổng hợp nên một thiết kế tối ưu.

ECE 545 – Introduction to VHDL 57

architecture MLU_DATAFLOW of MLU is

signal A1:STD_LOGIC;signal B1:STD_LOGIC;signal Y1:STD_LOGIC;signal MUX_0, MUX_1, MUX_2, MUX_3: STD_LOGIC;

beginA1<=A when (NEG_A='0') else

not A;B1<=B when (NEG_B='0') else

not B;Y<=Y1 when (NEG_Y='0') else

not Y1;

MUX_0<=A1 and B1;MUX_1<=A1 or B1;MUX_2<=A1 xor B1;MUX_3<=A1 xnor B1;

with (L1 & L0) selectY1<=MUX_0 when "00",

MUX_1 when "01",MUX_2 when "10",MUX_3 when others;

end MLU_DATAFLOW;

VHDL description Circuit netlist

Logic Synthesis

Logic Synthesis.

169

Page 170: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

II. Hiệu chỉnh các kết nối (Datapath Schematic): Nhập netlist và các

ràng buộc về thời gian vào một công cụ phân tích thời gian (timing

analysic). Công cụ phân tích này sẽ tách rời tất cả các kết nối của thiết

kế, tính thời gian trễ của các kết nối dựa trên các ràng buộc. Dựa trên

kết quả phân tích (report) của công cụ phân tích, xác định các kết nối

không thỏa mãn về thời gian. Tùy theo nguyên nhân dẫn đến không

thỏa mãn mà ta có thể viết lại mã và tiến hành lại tổng hợp logic hoặc

hiệu chỉnh lại các ràng buộc.

Quá trình 2: Thực thi (Implementation). Ta đã có sơ đồ bố trí netlist mô tả tổng

thể thiết kế tại mức cổng (chỉ gồm các cổng logic cơ bản và các mạch logic khác

như: MUX). Quá trình này sẽ đặt sơ đồ netlist này lên chip, gọi là quá trình thực

thi (Device Implementation). Quá trình này gồm các bước:

III. Ánh xạ (mapping hay còn gọi fitting - ăn khớp): Chuẩn bị dữ liệu

đầu vào, xác định kích thước các khối. Các khối này sẽ phải phù hợp

với cấu trúc của 1 tế bào cơ bản của FPGA. (gồm nhiều cổng logic) và

đặt chúng vào các vị trí tối ưu cho việc chạy dây.

ECE 545 – Introduction to VHDL 63

Mapping

LUT2

LUT3

LUT4

LUT5

LUT1FF1

FF2

LUT0

Mapping.

IV.Đặt khối và định tuyến (Place & Route):

Đặt khối tức là đặt các khối ánh xạ vào các tế bào (cell) ở vị trí tối ưu cho việc

chạy dây.

170

Page 171: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

ECE 545 – Introduction to VHDL 64

Placing

CLB SLICES

FPGA

Placing.

Định tuyến tức là thực hiện việc nối dây các tế bào.

ECE 545 – Introduction to VHDL 65

Routing

Programmable Connections

FPGA

Routing.

171

Page 172: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Để thực hiện việc này, chúng ta cần có các thông tin sau:

- Các thông tin vật lý về thư viện tế bào, ví dụ kích thước tế bào, các điểm

để kết nối, định thời, các trở ngại trong khi đi dây.

- Một netlist được tổng hợp sẽ chỉ ra chi tiết các instance và mối quan hệ

kết nối bao gồm cả các đường dẫn bị hạn chế trong thiết kế.

- Tất cả các yêu cầu của tiến trình cho các lớp kết nối, bao gồm các luật

thiết kế cho các lớp chạy dây, trở kháng và điện dung, tiêu thụ năng lượng,

các luật về sự dẫn điện trong mỗi lớp.

Quá trình 3: Nạp (download) và lập trình (program). Sau quá trình thực hiện,

thiết kế cần được nạp vào FPGA dưới dạng dòng bit (bit stream). Quá trình nạp

thiết kế (download) vào FPGA thường nạp vào bộ nhớ bay hơi, ví dụ như

SRAM. Thông tin cấu hình sẽ được nạp vào bộ nhớ. Dòng bit được truyền lúc

này sẽ mang thông tin định nghĩa các khối logic cũng như kết nối của thiết kế.

Tuy nhiên, lưu ý rằng, SRAM sẽ mất dữ liệu khi mất nguồn nên thiết kế sẽ không

lưu được đến phiên làm việc kế tiếp.

Lập trình (program) là thuật ngữ để mô tả quá trình nạp chương trình cho các bộ

nhớ không bay hơi, ví dụ như PROM. Như vậy, thông tin cấu hình vẫn sẽ được

lưu trữ khi mất nguồn.

4. Ngôn ngữ mô tả phần cứng VHDL

4.1. Giới thiệu

VHDL là viết tắt của cụm từ Very High Speed Intergrated Circuit Hardware

Description Language - ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ

rất cao. VHDL là ngôn ngữ mô phỏng phần cứng được phát triển dùng cho

chương trình VHSIC (Very High Speed Intergrated Circuit) của bộ quốc phòng

Mỹ.Mục tiêu của việc phát triển VHDL là có được một ngôn ngữ mô phỏng phần

cứng tiêu chuẩn và thống nhất cho phép phát triển thử nghiệm các hệ thống số

nhanh hơn cũng như cho phép dễ dàng đưa các hệ thống đó vào ứng dụng trong

thực tế. Ngôn ngữ VHDL được ba công ty Intermetics, IBM và Texas

Instruments bắt đầu nghiên cứu phát triển vào 7/1983. Phiên bản đầu tiên được

công bố vào 8/1985. Sau đó VHDL được đề xuất để tổ chức IEEE xem xét thành

một tiêu chuẩn. Năm 1987, đã đưa ra tiêu chuẩn về VHDL – tiêu chuẩn IEEE-

1076-1987.

VHDL được phát triển để giải quyết các khó khăn trong việc phát triển, thay đổi

và lập tài liệu cho các hệ thống số. Như ta đã biết, một hệ thống số có rất nhiều

172

Page 173: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

tài liệu mô tả. Ðể có thể vận hành bảo trì sửa chữa một hệ thông ta cần tìm hiểu

tài liệu đó kỹ lưỡng. Với một ngôn ngữ mô phỏng phần cứng tốt việc xem xét các

tài liệu mô tả trở nên dễ dàng hơn vì bộ tài liệu đó có thể được thực thi để mô

phỏng hoạt động của hệ thống. Như thế ta có thể xem xét toàn bộ các phần tử của

hệ thống hoạt động trong một mô hình thống nhất.

Trước khi VHDL ra đời, có nhiều ngôn ngữ mô phỏng phần cứng được sử dụng

nhưng không có một tiêu chuẩn thống nhất. Các ngôn ngữ mô phỏng phần cứng

đó được phát triển để phục vụ các bộ mô phỏng chạy chúng. Vì các ngôn ngữ mô

phỏng phần cứng đó được các nhà cung cấp thiết bị phát triển, nên mang các đặc

trưng gắn với các thiết bị của nhà cung cấp đó và thuộc sở hữu của nhà cung cấp.

Trong khi đó, VHDL được phát triển như một ngôn ngữ độc lập không gắn với

bất kỳ một phương pháp thiết kế, bộ mô phỏng hay công nghệ phần cứng nào.

Người thiết kế có thể tự do lựa chọn công nghệ, phương pháp thiết kế trong khi

vẫn sử dụng một ngôn ngữ duy nhất.

VHDL có một số ưu điểm hơn hẳn các ngôn ngữ mô tả phần cứng khác là:

Tính công cộng: VHDL được phát triển dưới sự bảo trợ của chính

phủ Mỹ và hiện nay là một tiêu chuẩn của IEEE, VHDL không thuộc sở

hữu của bất kỳ cá nhân hay tổ chức nào. Do đó VHDL được hỗ trợ của

nhiều nhà sản xuất thiết bị cũng như nhiều nhà cung cấp công cụ thiết kế

mô phỏng hệ thống. Ðây là một ưu điểm nổi bật của VHDL, giúp VHDL

trở nên ngày càng phổ biến.

Khả năng hỗ trợ nhiều công nghệ và phương pháp thiết kế: VHDL

cho phép thiết kế bằng nhiều phương pháp như phương pháp thiết kế từ

trên xuống, hay từ dưới lên dựa vào các thư viện có sẵn. VHDL cũng hỗ

trợ cho nhiều loại công nghệ xây dựng mạch như sử dụng công nghệ đồng

bộ hay không đồng bộ, sử dụng ma trận lập trình được hay sử dụng mảng

logic ngẫu nhiên. Như vậy VHDL có thể phục vụ tốt cho nhiều mục đích

thiết kế khác nhau, từ việc thiết kế các phần tử phổ biến đến việc thiết kế

các IC ứng dụng đặc biệt (Application Specified IC).

Ðộc lập với công nghệ: VHDL hoàn toàn độc lập với công nghệ

chế tạo phần cứng. Một mô tả hệ thống dùng VHDL thiết kế ở mức cổng

có thể được chuyển thành các bản tổng hợp mạch khác nhau tuỳ thuộc vào

công nghệ chế tạo phần cứng nào được sử dụng (dùng CMOS, nMOS,

hay GaAs). Ðây cũng là một ưu điểm quan trong của VHDL nó cho phép

người thiết kế không cần quan tâm đến công nghệ phần cứng khi thiết kế

173

Page 174: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

hệ thống, như thế khi có một công nghệ chế tạo phần cứng mới ra đời nó

có thể được áp dụng ngay cho các hệ thống đã thiết kế.

Khả năng mô tả mở rộng: VHDL cho phép mô tả hoạt động của

phần cứng từ mức hệ thống số (hộp đen) cho đến mức cổng. VHDL có

khả năng mô tả hoạt động của hệ thống trên nhiều mức nhưng chỉ sử dụng

một cú pháp chặt chẽ thống nhất cho mọi mức. Như thế ta có thể mô

phỏng một bản thiết kế bao gồm cả các hệ con được mô tả ở mức cao và

các hệ con được mô tả chi tiết.

Khả năng trao đổi kết quả: Vì VHDL là một tiêu chuẩn được chấp

nhận, nên một mô hình VHDL có thể chạy trên mọi bộ mô phỏng đáp ứng

được tiêu chuẩn VHDL-các kết quả mô tả hệ thống có thể được trao đổi

giữa các nhà thiết kế sử dụng công cụ thiết kế khác nhau nhưng cùng tuân

theo chuẩn VHDL. Cũng như, một nhóm thiết kế có thể trao đổi mô tả

mức cao của các hệ thống con trong một hệ thống; trong khi các hệ con đó

được thiết kế độc lập.

Khả năng hỗ trợ thiết kế mức lớn và khả năng sử dụng lại các thiết

kế: VHDL được phát triển như một ngôn ngữ lập trình bậc cao, vì vậy nó

có thể sử dụng để thiết kế một hệ thống lớn với sự tham gia của một nhóm

nhiều người. Bên trong ngôn ngữ VHDL có nhiều tính năng hỗ trợ việc

quản lý, thử nghiệm và chi sẻ thiết kế. VHDL cũng cho phép dùng lại các

phần đã có sẵn.

4.2. Cấu trúc một mô hình hệ thống mô tả bằng VHDL

Thông thường một mô hình VHDL bao gồm ba phần: thực thể, kiến trúc và các

cấu hình. Trong một số trường hợp mô hình còn có thêm phần các môi trường

kiểm tra.

4.2.1. Thực thể (Entity)

Khai báo thực thể trong VHDL là câu lệnh định nghĩa các chỉ tiêu phía ngoài của

một phần tử hay một hệ thống. Các thông tin có trong phần khai báo thực thể cho

phép kết nối phần tử (hệ thống) mà thực thể đó đại diện với các phần tử (hệ

thống) khác. Thực chất việc khai báo thực thể chính là khai báo giao diện của hệ

thống với bên ngoài. Hoạt động thực chất của hệ thống không được mô tả trong

khai báo thực thể. Dưới đây là một ví dụ khai báo thực thể cho một cổng NAND.

174

Page 175: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY nand IS

GENERIC (delay : = 5 ns);

PORT (a : IN std_logic;

b : IN std_logic;

c : OUT std_logic);

END nand;

Khai báo một thực thể NAND.

Câu lệnh LIBRARY IEEE và USE IEEE.std_logic_1164.ALL cho phép thực thể

sử dụng các định nghĩa trong thư viện về các tiêu chuẩn của IEEE. Khai báo thực

thể bao gồm tên của thực thể và một tập các cổng và phần chung. Trong đó phần

chung GENERIC là các hằng số được truyền cho phần tử (hệ thống). Phần chung

có thể coi là các tham số định trước của phần tử, chẳng hạn như độ trễ. Các cổng

là phần giao diện vào ra của phần tử. Các cổng có thể tương ứng với các chân IC,

hay các đầu nối trên bảng mạch. Các cổng được khai báo là cổng vào, cổng ra,

cổng hai chiều hay bộ đệm.

4.2.2. Kiến trúc (Architecture)

Một khai báo thực thể đều phải đi kèm với ít nhất một kiến trúc tương ứng.

VHDL cho phép khai báo nhiều kiến trúc cho một thực thể. Một khai báo kiến

trúc có thể bao gồm các khai báo về các tín hiệu bên trong, các phần tử bên trong

hệ thống, hay các hàm và thủ tục mô tả hoạt động của hệ thống. Có hai cách mô

tả kiến trúc của một phần tử (hệ thống) đó là mô tả theo mô hình hoạt động hay

mô tả theo mô hình cấu trúc. Tuy nhiên một hệ thống có thể bao gồm cả mô tả

theo mô hình hoạt động và mô tả theo mô hình cấu trúc.

a, Mô tả kiến trúc theo mô hình hoạt động

175

Page 176: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Mô hình hoạt động mô tả các hoạt động của hệ thống (hệ thống đáp ứng với các

tín hiệu vào như thế nào và đưa các kết quả gì ra đầu ra) dưới dạng các câu lệnh

cảu ngôn ngữ lập trình bậc cao. Các câu lệnh đó có thể là PROCESS, WAIT, IF,

CASE, FOR-LOOP...Ví dụ, kiến trúc của cổng NAND nói trên có thể mô tả theo

mô hình hoạt động như sau.

ARCHITECTURE behaviour OF IS

BEGIN

c <= NOT(a AND b) AFTER delay;

END behavour;

Ta thấy kiến trúc của phần tử NAND có một lệnh gán tín hiệu mô tả chức năng

của phần tử. Câu lệnh này được thực thi khi một trong hai cổng a,b thay đổi giá

trị. Và câu lệnh gán có độ trễ, tức là tín hiệu ở bên vế trái sẽ thay đổi tương ứng

sau thời gian trễ.

b, Mô tả kiến trúc theo mô hình cấu trúc

Mô hình cấu trúc của một phần tử (hệ thống) có thể bao gồm nhiều cấp cấu trúc

bắt đầu từ một cổng logic đơn giản để xây dựng mô tả cho một hệ thống hoàn

thiện. Thực chất của việc mô tả theo mô hình cấu trúc là mô tả các phần tử con

bên trong hệ thống và sự kết nối của các phần tử con đó. Như với ví dụ mô tả mô

hình cấu trúc một flip-flop RS gồm hai cổng NAND như sau.

Mô tả kiến trúc Flip Flop RS theo mô hình cấu trúc.

176

Page 177: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

4.2.3. Cấu hình

Việc khai báo cấu hình tương tự như việc liệt kê các phần của bản thiết kế. Khai

báo cấu hình thực chất là chỉ ra kiến trúc nào được gắn với thực thể nào. Như vậy

các kiến trúc khác nhau có thể cùng được gắc với một thực thể. Ðiều này cho

phép thay đổi bản mô tả ở thời điểm mô phỏng hay tổng hợp hệ thống. Việc khai

báo cấu hình là tuỳ chọn, cũng có thể sử dụng cấu hình mặc định do VHDL cung

cấp-khi đó kiến trúc được khai báo cuối cùng cho một thực thể sẽ được gắn với

thực thể đó.

4.2.4. Môi trường kiểm tra

Một trong các nhiệm vụ rất quan trọng là kiểm tra bản mô tả thiết kế. Kiểm tra

một mô hình VHDL được thực hiện bằng cách quan sát hoạt động của nó trong

khi mô phỏng. Thông thường các bộ mô phỏng có cung cấp khả năng kiểm tra,

nhưng cũng có thể xây dựng một môi trường kiểm tra VHDL. Môi trường kiểm

tra có thể hiểu như một mạch kiểm tra ảo. Môi trường kiểm tra sinh ra các tác

động lên bản thiết kế và cho phép quan sát hoặc so sánh kết quả hoạt động của

bản mô tả thiết kế.

Minh họa một môi trường kiểm tra ảo bằng VHDL.

177

Page 178: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Phần II: Thực hành

Bài 1: Làm quen với phương pháp thiết kế số bằng VHDL trên phần mềm ISE

của Xilinx

1. Mục đích

- Làm quen với phương pháp thiết kế số sử dụng ngôn ngữ mô tả phần cứng.

- Làm quen với phần mềm thiết kế ISE của Xilinx.

- Thực hành thiết kế số bằng VHDL.

2. Thiết bị sử dụng

- Máy tính PC đã cài đặt phần mềm ISE của Xilinx.

3. Nội dung thực hành

- Thực hiện các phương pháp thiết kế số với phần mềm ISE của Xilinx.

3.1. Tạo dự án mới

- Khởi động ISE WebPACK, lựa chọn:

Start → Programs → Xilinx ISE 8 → Project Navigator

- Tạo dự án mới:

- Chọn: File → New Project.

- Gọi tên project này là “traffic” và đặt nó trong thư mục thiết kế của

bạn.

- Click Next.

- Điền vào như sau trong hộp thoại New Project.

178

Page 179: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Device Family: CoolRunner-II

Device: xc2c256

Package: TQ144

Speed Grade:- -7

Synthesis Tool: XST (VHDL/Verilog)

Simulator:I ISE Simulator (VHDL/Verilog)

- Click next.

- Thêm file nguồn mới vào dự án: Bấm new source.

- Thêm VHDL module và gọi là counter.

179

Page 180: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

- Click Next.

- Tạo bộ đếm 4 bit như hình dưới.

- Khai báo các cổng.

- Kích next cho đên finish, click finish: Một thực thể sẽ tự động được tạo ra

trong một module VHDL tên là counter.vhd và được thêm vào dự án.

180

Page 181: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Mã nguồn sẽ tự động mở ra, nếu nó không mở bạn có thể kich đúp vào biểu

tượng trong cửa sổ bên trên.

181

Page 182: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

3.2. Biên soạn HDL

Kích đúp vào bất cứ cửa file nguồn nào trong cửa sổ nguồn file đó sẽ được hiển

thị trong cửa số biên soạn chính.

Mã nguồn mẫu

Biên soạn module counter

Chèn đoạn mã sau đây vào giữa begin và end sau architecture

process (clock, reset)

begin

if reset='1' then

count <= "0000";

elsif clock='1' and clock'event then

count <= count + 1;

end if;

end process;

Module sẽ như hình dưới đây

182

Page 183: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Môt module gồm những khai báo thư viện, entity, architecture. Những thư viện

được khai báo để nói với trình biên dịch gói nào được sử dụng. Entity khai báo

tất cả những cổng liên quan đến thiết kế. Count (3 down to 0) nghĩa là vector

logic 4 bit.

Thiết kế này có hai đầu vào clock và reset. Chức năng của thiết kế được mô tả

sau dòng architecture.

Lưu module Counter

Bây giờ bạn có thể mô phỏng module đếm của thiết kế. Khi module counter.vhd

được chọn sáng trong cửa Source, cửa sổ Process sẽ hiển thị tất cả những hành

động đã và đang diễn ra của nó. Một file VHDL có thể được tổng hợp sau đó tạo

ra bitstream. Thông thường một thiêt kế bao gồm một vài module mức thấp nối

với nhau bằng một file mức đỉnh. Thiết kế này hiện tại chỉ có duy nhất một

module có thể được mô phỏng.

Mô phỏng chức năng

Để mô phỏng file VHDL trước tiên bạn phải tạo file testbench

1. Từ menu project chọn new source

2. Chọn testbench waveform và đặt tên như hình dưới

3. Chọn Next

4. Testbench sẽ mô phỏng module counter do vậy nó sẽ hỏi bạn sẽ

gắn file nguồn nào cho file nguồn này, chon counter và click next

5. Xem lại thông tin tóm tắt và click Finish

183

Page 184: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

6. Bây giờ công cụ testbench HDL đã có trong thiết kế. Hộp Initialize

timing thiết lập tần số của xung nhịp hệ thống, những yêu cầu thiết lập và

trễ đầu ra. Board demo CPLD Design Kit có bộ dao động 1.842MHz. Do

vậy chúng ta sẽ nhập vào 540ns cho chu kỳ hay là 270ns cho Clock High

Time và Clock Low Time như hình dưới.

7. Click Finish

184

Page 185: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

8. Click chuột vào dòng reset để thay đổi 0 – 1 như hình dưới đây

9. Để mô phỏng trong ISE, Chọn behavioral simulation trong menu

thả xuống của cửa sổ source.

10. Kiểm tra counter vẫn được chọn sáng và tap process được lựa chọn,

click đúp vào simulate behavioral model trong cửa sổ process (phải click

vào dấu cộng bên cạnh Xilinx ISE Simulator để mở nó ra).

185

Page 186: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

11. Mô phỏng tự động được tạo ra

12. Hoạt động của mạch giống như những gì chúng ta mong đợi, nó

tăng tín hiệu đếm lên một sau mỗi sườn lên của clock, do vậy chúng ta có

thể tiếp tục xây dựng thiết kế của chúng ta. Trước tiến chúng ta sẽ thực hiện

snapshot để chúng ta có thể quay lại thời điểm này của tiến trình thiết kế khi

cần.

Chọn Project → Take → Snapshot.

186

Page 187: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Thực hiện snapshot sẽ lưu trạng thái hiện tại của project vào một thư mục con do

vậy sau này chúng ta có thể quay lại. Chúng ta có thể xem snapshot bằng cách

lựa chọn cửa sổ Source. Nếu như thiết kế chỉ có một module (phân cấp một

mức), thì phase thực thi sẽ là bước tiếp theo. Tuy nhiên thiết kế này có thêm một

module nữa.

3.3. Biên soạn lưu đồ trạng thái

Đối với thiết kế đèn giao thông của chúng ta bộ đếm hành động như là một bộ

định thời gian chuyển trạng thái. Lưu đồ sẽ chuyển đổi qua 4 trạng thái, mỗi một

trạng thái điều khiển tổ hợp 3 đèn.

1. Trạng thái 1: đèn Đỏ

2. Trạng thái 2: đèn Đỏ và Vàng

3. Trạng thái 3: đèn Xanh

4. Trạng thái 4: đèn Vàng

Để mở trình biên tập trạng thái:

a. Chọn New Source

b. Chọn State Diagram và đặt tên stat_mac

c. click next, sau đó là finish

187

Page 188: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

d. Mở state machine wizard bằng cách click vào nut State

Machine Wizard sẽ xuất hiện

e. Thiết lập số trạng thái là 4, bấm next

188

Page 189: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

f. Bạn sẽ thấy một hộp thoại để lựa chọn chế độ khởi động lại. Kiểm

tra để thấy synchronous đã được chọn, sau đó chọn next.

g. Tiếp theo bạn sẽ thấy hộp thoại Setup Transitions. Gõ TIMER vào

trường tiếp theo.

h. Click Finish và thả lưu đồ trạng thái này vào bản vẽ bằng cách bấm

vào bất cứ đâu trên trang bản vẽ.

i. Click vào trạng thái khởi động (hình ovan màu vàng) và đổi tên

thành RED.

189

Page 190: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

j. Bấm vào nut Output Wizard

Thiết kế này có 3 đầu ra đặt tên là RD, AMB, và GRN

k. Trong trường DOUT, gõ vào RD để khai báo một đầu ra. Thiết lập

cho RD giá trị là “1” với đầu ra đã đăng ký, như hình dưới:

l. Chọn OK chọn OK tại hộp thoại Edit State

m. Tương tự như thế , biên soạn các trạng thái khác:

Đổi tên States1 thành “REDAMB” và sử dụng Output Wizard để

thiết lập RD=1, và một đầu ra mới AMD = “1” với một đầu ra đã đăng ký.

Ta phải lặp lại Output Wizard hai lần để nhận được hai giá trị đầu ra.

Đổi tên States2 thành “GREEN” và sử dụng Output Wizard để thiết

lập GRN là “1” với đầu ra đã đăng ký.

Đổi tên States3 thành “AMBER” và sử dụng Output Wizard để

thiết lập đầu ra AMB là “1”.

190

Page 191: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Lưu đồ trạng thái sẽ trông giống như hình dưới:

n. Click vào đường chuyển trạng thái giữa trạng thái “RED” và

“REDAMB”.

o. Hộp thoại Edit Condition sẽ xuất hiện. Tại cửa sổ này, thiết lập sự

chuyển trạng thái khi bộ timer bằng 1111 bằng cách thiết TIMER=“1111” tại

trường Condition.

p. Lặp lại cho các đường truyền khác:

Đường truyền REDAMB tới GREEN, TIMER = “0100”.

Đường truyền GREEN tới AMBER, TIMER = “0011”.

Đường truyền AMBER tới RED, TIMER = “0000”.

q. Cuối cùng, khai báo vevtor TIMER bằng cách chọn nút:

191

Page 192: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

r. Thả marker vào trang, click đúp và nhập tên là TIMER và độ rộng

là 4 bit (trong phạm vi từ 3:0).

s. Chọn OK. Lưu đồ trạng thái trông như hình dưới.

t. Chọn nút lệnh Generate HDL tại thanh công cụ.

u. Của sổ Results xuất hiện dòng “Compliled Perfectly”. Đóng hộp

thoại lại, của sổ HDL Browser hiện ra.

192

Page 193: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

v. Khi chọn nút lệnh Close, một danh sách VHDL cho lưu đồ trạng

thái được mở trong hộp thoại StateCAD HDL Browser.

w. Lưu danh sách và đóng cửa sổ.

Lưu đồ trạng thái sẽ được thêm vào đầu cửa sổ Source. (nháy đúp vào tên file sẽ

mở ra biểu đồ trạng thái trong StateCAD)

193

Page 194: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

3.4. Thiết kế VHDL mức đỉnh

Ở khâu này trong luồng thiết kế hai module sẽ được kết nối với nhau bằng một

file mức đỉnh. Một số người thiết kế thích tạo sơ đồ nguyên lí cho mức đỉnh,

trong khi số khác lại thích giữ thiết kế này bằng bằng mã lệnh. Vì phần này sẽ

thảo luận sau, do bộ đếm và lưu đồ trạng thái sẽ được nối bằng file top.vhd.

Để tạo ra file VHDL mức đỉnh:

o Lưu lại những gì bạn đã làm bằng cách thực hiện snapshot project

o Chọn new source, và tạo module VHDL có tên là top

194

Page 195: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

o Bấm next và điền vào Wizard như bên dưới.

o Bấm next, sau đó bấm finish, sẽ có file “top.vhd” như dưới đây

195

Page 196: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

o Trong cửa sổ source, chọn sáng module counter.vhd. Trong cửa sổ

Precesses bấm chuột phải vào View HDL Instantiation Template. Từ phần

Design Utilities chọn Properties và thay đổi Target Language to VHDL. Click

Ok sau đó click đúp vào vào View HDL Instantiation Template.

o Bôi đen và chép phần khai báo đối tượng và instantiation.

o Dán phần khai báo và nguyên instantiation vào file top.vhd

o Sắp xếp lại phần khai báo sao cho nó nằm sau mệnh đề begin trong

architecture. Sắp xếp lại instantiation để nó nằm giữa mệnh đề begin và end.

196

Page 197: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

o Bây giờ chúng ta cần nhập bằng tay các khai báo thành phần và các

instantiation cho lưu đồ trạng thái như sau. Bên dưới phần khai báo các thành

phần của Counter nhập vào như sau

COMPONENT stat_mac

PORT(

timer : IN std_logic_vector(3 downto 0);

clk : IN std_logic;

reset : IN std_logic;

amb : OUT std_logic;

rd : OUT std_logic;

grn : OUT std_logic

);

END COMPONENT;

o Tiếp theo là phần instantiation của module lưu đồ trạng thái. Nhập

vào dưới phần instantiation của Counter đoạn text sau đây :

Inst_stat_mac: stat_mac PORT MAP(

197

Page 198: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

timer => ,

clk => ,

reset => ,

amb => ,

grn => ,

rd =>

);

o Khai báo một tín hiệu là “timer” bằng cách thêm vào bên trên của

phần khai báo thành phần bên trong architecture dòng sau đây:

signal timer : std_logic_vector(3 downto 0);

o Việc kết nối counter và lưu đồ trạng thái đã minh hoạ các module,

do vậy file “top.vhd” của bạn trông sẽ như bên dưới đây

198

Page 199: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

199

Page 200: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

o Kết nối các tín hiệu bằng cách thêm tên của chúng vào PORT MAP

như sau:

200

Page 201: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

o Khi bạn lưu file “top.vhd”, lưu ý thấy các cửa sổ Source tự động

quản lí phân cấp toàn bộ thiết kế, đối với hai file counter.vhd và

stat_mac.dia sẽ là hai module con file top.vhd ngay sau đó được hiển thị là

biểu tượng mức đỉnh.

o Bây giờ là lúc thêm vào VHDL đã tạo ra vào trong dự án để nó có

thể được thực thi và mô phỏng. Click vào tap Libraries ở đáy của cửa sổ

source, mở rộng cây, click chuột phải vào file “STAT_MAC.vhd” và chọn

properties (Source - > properties). Thay đổi sự liên kết của hai file

STAT_MAC Behavior và SHELL_STAT_MAC BEHAVIOR từ None

thành “Synthesis/Imp + Simulation” như dưới đây.

o Click OK để chấp nhận sự thay đổi và khi trở lại tap Source nó

trông sẽ thế này

201

Page 202: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

o Snapshot thiết kế như trước đó (project - > take snapshot ) lần này

đặt tên là “snap3” và gõ vào “VHDL top” trong cửa sổ gợi ý

Mô phỏng thiết kế

Bạn có thể mô phỏng thiết kế ban đầu của bạn

Thêm file nguồn testbench waveform như trước đó, nhưng lần này gán nó

với module “top.” Đặt tên file này là “Simulate_top”.

Hộp thoại nguồn liên kết xuất hiện, đảm bảo là Top được chọn sáng, và

click Next, sau đó click Finish ở hộp thoại tiếp theo.

Trong hộp thoại khởi tạo thời gian thiết lập thời gian xung clock trạng thái

cao và trạng thái thấp là 270 ns như trước đó và đổi độ dài (length) là

100000 chu kỳ. Click OK

202

Page 203: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Trong giản đồ sóng đưa vào một kích thích đầu vào như dưới đây

Lưu ý thời điểm kết thúc là 100000 ns sẽ tạo ra giản đồ sóng xít nhau hơn. Hãy

kích chuột phải vào một trong những khoảng thời gian (ví dụ 2430 ns) và chọn

Rescale Timing để chỉnh tỉ lệ như bên trên. Thiết lập timing là 10000 ns để có tỉ

lệ tương tự bên trên. Bạn phải rescale timing lần nữa để có được tỉ lệ như hình

dưới đây.

Click biểu tượng save

203

Page 204: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

File top_tb.tbw giờ được gắn với module mức đỉnh VHDL khi xem các file ở

trong khung Behavioral Simulation.

Kích đúp vào Simulation Behavioral Model trong cửa sổ Process

Nếu như mô phỏng làm việc đúng, bạn sẽ thấy như hình trên.

3.5. Thiết kế sơ đồ nguyên lí mức đỉnh

ECS hint.

Tạo thiết kế sơ đồ nguyên lí mức đỉnh.

I/O Marker.

Mô phỏng thiết kế sơ đồ nguyên lí mức đỉnh.

Đôi khi thiết kế trực quan sẽ dễ hơn khi có mức đỉnh là sơ đồ nguyên lí với

những thuyết minh là nhưng khối HDL riêng biệt. Các khôi có thể được nối với

nhau theo cách cổ truyền. Đối với những thiết kế trong công cụ ISE, dự án ban

đầu có thể thiết kế dựa trên sơ đồ.

Phần này sẽ thảo luận về phương pháp kết nối các module VHDL qua công cụ

ECS. Nếu bạn đã làm việc hết các phần trước đó, thì trước hết bạn phải bỏ

(remove) file VHDL mức đỉnh “top.vhd” ra khỏi dự án. Để làm như thế, bạn hãy

file trong source ở khung Systhesis/Implementation, click chuột phải và chọn

remove sau đó click yes trong hộp thoại. Sau đó bỏ nó ra khỏi cửa sổ nhìn bằng

cách chọn tap Top và Window - > close. Bạn có thể bỏ những tab simulation

bằng cách tương tự như thế.

Hành động này sẽ đưa bạn trở lại trạng thái trong luồng thiết kế mà chỉ có file

“counter.vhd” và “stat_mac.vhd”. Cửa sổ source giờ trông sẽ như dưới đây

204

Page 205: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

ECS hint

Chương trình vẽ sơ đồ mạch điện ECS được thiết kế để bạn có thể lựa chọn

những hành động mà bạn muốn cho phép bởi những đối tượng mà bạn muốn

thực hiện trên đó. Thông thường đối với những ứng dụng cửa sổ hoạt động kiểu

lựa chọn đối tượng sau đó tác động trên các đối tượng đó. Hiểu được nguyên lí

hoạt động căn bản sẽ làm cho việc học ECS sẽ đơn giản và thú vị hơn.

Tạo thiết kế sơ đồ nguyên lí mức đỉnh

Từ trình đơn Project, chọn lưu source -> Schematic và đặt tên là “top_sch”.

Click Next, Finish. Cửa sổ ECS Schematic Editor sẽ xuất hiện. Sẽ

có những tuỳ chọn trong cửa sổ Processes

Trong cửa sổ Source chọn sáng “counter.vhd”. Nếu bạn không thấy

“counter.vhd” hãy kiểm tra Synthesis/Imlementation hiển thị và tap source

được chọn

205

Page 206: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Trong cửa sổ processes chọn tap Processes và kich đúp vào Create

Schematic Symbol từ phần con Design Utilities (bạn phải kích vào dấu cộng

để thấy nó). Nó sẽ tạo ra một biểu tượng sơ đồ nguyên lí và thêm vào trong

thư viện trong trình biên tập sơ đồ nguyên lí.

Tạo một biểu tượng khác – cho lưu đồ trạng thái bằng cách chọn

vào “stat_mac.vhd” và click đúp vào Create schematic symbol.

Trở lại trình vẽ sơ đồ nguyên lí, những thư viện biểu tượng có thể

thấy dưới tap Symbol bên phải tap trong cửa sổ source (bạn cần mở rộng

cưa sổ để thấy rõ hơn)

Thêm bộ đếm và lưu đồ trạng thái bằng cách click vào new library

(C/Design/Traffic) trong cửa sổ Categories sau đó là chọn “counter”. Di

chuyển con trỏ vào bản vẽ và thả biểu tưởng bằng cách click vào vị trí muốn

đặt. Dich chuyển con trỏ trở lại cửa sổ Categories và đặt biểu tượng

“Stat_mac” vào bản vẽ.

Phóng lớn lên

206

Page 207: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Chọn công cụ add wire trong thanh công cụ vẽ

Để thêm dây nối giữa hai chân click một cái vào chân này rồi một

cái vào chân kia. ECS sẽ để bạn quyết định sử dụng đi dây tự động hay đặt

các đường tín hiệu bằng tay trên trang bản vẽ. Để thêm các dây cheo (dây

bỏ cheo một đầu), bạn click một cái vào biểu tượng chận rồi click đúp vào

chỗ bạn muốn kết thúc.

Nối dây cho lưu đồ trạng thái và bộ đếm như hình dươi đây:

207

Page 208: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Chọn công cụ Add net names từ thanh công cụ vẽ

Gõ “clock” vào ô name của tap Options (cửa sổ Processes) sau đó

click vào net trong bản vẽ.

Thêm các tên net cho các dây sẽ được nối tới các đầu vào/ra của

FPGA/CPLD của bạn, đặt net name vào đầu bỏ trống của dây cheo. Kết

thúc bằng cách thêm các tên nét “reset”, “amber_light”, “green_light”, và

“red_light”. ECS thừa nhận count(3:0) và TIMER(0:3) là các bus và do vậy

các kết nối chúng với nhau bằng bus thì tốt hơn là một nét đơn.

Đánh dấu cổng vào ra

Chọn công cụ Add I/O marker từ thanh công cụ vẽ

Đối với kiểu đầu vào được chọn, click và rê quanh đầu vào mà

muốn thêm đánh dấu đầu vào cho nó. Lặp lại như thế với các đầu ra, lựa

chọn kiểu đầu ra.

Bản vẽ hoàn chỉnh của bạn trông sẽ giống hình dưới. Chu ý rằng khi thêm các

biểu tượng đánh dấu đầu vào/ra các tùy chọn sẽ thay đổi. Bạn lựa chọn Add an

input Marker cho các đầu vào và Add an output marker cho các đầu ra

208

Page 209: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Lưu thiết kế (file -> save). Kiểm tra cửa sổ source, tap source (mở

rộng dấu cộng nếu cần), bạn sẽ thấy phần mềm ISE tự động công nhận file

sơ đồ nguyên lí là file mức đỉnh và do đó công nhận thiết kế. Chọn sau đó

click chuôt phỉ vào top_sch.sch và chọn set as top module. Trong cây tiến

trình bạn có thể xem VHDL được tạo từ sơ đồ nguyên lí khi top_sch được

chọn trong cửa sổ source. Kích đúp vào View VHDL Functional Model

công cụ tổng hợp sẽ làm việc từ file này

209

Page 210: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Mô phỏng thiết kế sơ đồ nguyên lí mức đỉnh

Bạn có thể mô phỏng thiết kế ban đầu của bạn

X. Chọn sáng top_sch.sch trong cửa sổ source

210

Page 211: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

XI. Thêm source testbench wave form mới bằng cách click vào

top_sch.sch sau đó chọn new source, chọn testbench wave form và đặt tên là

top_sch_tb

XII. Click next và gắn nó với “top” rồi click finish

XIII. Khởi tạo thời gian như trươc đó

211

Page 212: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

XIV. Thêm tác nhân kich thích bên ngoài như dưới đây

XV. File -> save

XVI. Chọn top_sch_tb.tbw trong cửa sổ source, click đúp vào Simulate

Behavioral Model trong cửa sổ Process

212

Page 213: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Việc mô phỏng sẽ hiện ra như dưới đây

Bây giờ bạn đã sẵn sàng cho công đoạn thực thi thiết kế (implementation)

4. Các bài thực hành nâng cao

- Module bộ ghép kênh thiết kế bằng VHDL(8 đầu vào – TKế mạch số Tống Văn On)

- Module điều khiển động cơ bước thiết kế bằng VHDL(File hướng dẫn của Xilinx)

- Module bộ giải mã BCD(4bit) sang Led 7 đoạn thiết kế bằng VHDL.

- Module chia xung clock cho 16 thiết kế bằng VHDL(TKế mạch số Tống Văn On)

- Module giải mã địa chỉ 4 bit thiết kế bằng VHDL(TKế mạch số Tống Văn On)

- Module ALU thiết kế bằng VHDL(TKế mạch số Tống Văn On)

- Module mạch dịch bit tổ hợp 6 bit thiết kế bằng VHDL (TKế mạch số Tống

Văn On).

213

Page 214: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Bài 2: Tìm hiểu về cấu trúc phần cứng X-Board

1. Mục đích

- Làm quen với CPLD.

- Tìm hiểu về cấu trúc phần cứng CoolRunner2 Starter Kit – X_Board.

2. Thiết bị sử dụng

- Kit thí nghiệm: CoolRunner2 Starter Kit – X_Board.

- PC.

- Dây cáp tín hiệu.

3. Nội dung thực hành

X- Board là một mạch điện hoàn chỉnh làm nền phát triển cho Xilinx

CoolRunner II CPLD. Nó cung cấp các mạch điện hỗ trợ cần thiết cho Cool

Runnner II, vì thế nguời sử dụng có thể tập trung vào việc tạo ra và download các

thiết kế mới. Một cổng USB 2 trên mạch cung cấp nguồn cho bo mạch và cung

cấp các cổng dữ liệu cho việc cấu hình CPLD cũng như là truyền dữ liệu.

Hơn 75 tín hiệu CPLD được nối tới những kết nối mở rộng, vì vậy thiết kế dễ

dàng được mở rộng. 32 tín hiệu được nối tới các bộ kết nối 6 chân, vì thế nó có

thể cung cấp đủ cho các modul vào ra Pmod của Diligent.PMod là bo mạch nhỏ

với các thiết bị có chi phí thấp cung cấp các mạch điện như bộ chuyển đỏi A/D

và D/A, các cổng vào ra khác nhau và cung cấp các dòng điện đủ lớn cho động

cơ.

Các đặc trưng của X-board gồm:

2. Có 256 macrocell CoolRunner-CPLD trong một bộ TQ-144

3. Một cổng USB2 trên mạch dành cho lập trình JTAG và truyền dữ

liệu người sử dụng.

4. Một bộ biến đổi A/D 16 bit trên mạch cho phép đo đạc dòng CPLD

trong suốt quá trình hoạt động của board ( dữ liệu qua dây cắm USBđược

gửi tới PC để hiển thị)

5. Một bộ dao động Silic có thể thiết lập tần số bởi người dùng

(1000/100/10KHz) thêm vào tạo nên bộ dao động thạch anh thứ hai

6. 12 LED và 2 công tắc cho cổng I/O trên mạch.

Mô tả chức năng

214

Page 215: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

X- Board cung cấp một nền mạnh, rẻ, dễ sử dụng để ngưiời dùng có thể tăng kinh

nghiệm với thiết bị CPLD tiên tiến nhất và các phương pháp thiết kế hiện đại.

Trung tâm của mạch là CPLD CoolRunner II và nó cũng chứa các mạch mạch

điện hỗ trợ cần thiết để thiết kế có thể được thực hiện và hoạt động nhanh chóng.

X- Board là một nền lý tưởng cho thí nghiệm với những thiết kế mới hoặc những

kiến thức về CPLDs và công cụ CAD. Một tập hợp các kết nối mở rộng cho phép

thiết kế được phát triển rộng hơn gồm các mạch người sử dụng thiết kế hoặc các

mạch hàn và các modul thiết bị đầu cuối (PMod) đưa ra bởi Digilent.

Cài đặt phần mềm

Khuyến nghị sử dụng cài đặt phần mềm Digilent Adept trước khi kết nối bo

mạch với PC. Điều này cho phép các driver được cài đặt cho phép Windows XP

nhận ra các thiết bị. Tại thời điểm này, Windows là hệ điều hành duy nhất hỗ trợ

phần mềm Adept. Có thế sử dụng các hệ điều hành khác với bo mạch nhưng

không có khả năng sử dụng đặc tính công suất và dòng điện thực của công cụ X-

Meter.

Khi mở bo mạch, có thể dễ dàng kiểm tra các chức năng cơ bản bằng việc thực

hiện các công việc sau:

Chèn đĩa Resource CD và cài đặt phần mềm Adept.

Cắm dây cắm USB với máy tính và X-Board. Hai đèn LED nhỏ

màu vàng bên cạnh đầu kết nối USB trên X- Board sẽ sáng chứng tỏ rằng

nguồn đã nối với bo mạch.

Kết nối modul Switch với cổng J8.

Kết nối modul PS/2 với cổng J7. Kết nối bàn phím PS/2 nếu có.

Kết nối modul hiển thị LED 7 thanh tới cổng J3/J4.

Nhấn phím BTN0 để khởi động các thiết kế trên CPLD.

Lật SW4 trên modul chuyển mạch để thay đổi hiển thị từ bộ đếm

tới mã quét bàn phím.

Theo gợi ý của Windows để cài đặt các driver.

Nhấn nút Start để quan sát sự tiêu thụ công suất của thiết bị.

Để lập trình với CPLD, phần mềm ISE WebPACK cũng phải đựoc cài đặt.

1. Chèn đĩa WebPACK CD và chạy chương trình cài đặt.

2. Khởi động lại máy tính

3. Đảm bảo rằng X-Board thì đựoc kết nối với máy tính.

215

Page 216: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

4. Khởi động chương trình ExPort từ Start -> Programs-> Digilent ->

Adept -> ExPort

5. Đặt SW1 trên X- Board thành PROG

6. Nhấn nút “ Initialize Chain” trong Export và thiết bị sẽ tự động

được dò tìm. Nếu không, nhảy đến phần Trouble Shooting của hướng dẫn

này.

7. Nhấn nút Browse và định vị file JED mong muốn ( File Jedec có

trên đĩa CD Resource).

8. Kích phải chuột vào biểu tượng CPLD và lựa chọn “ Program

Device” để lập trình CPLD với file Jedec (Xoá sẽ xuất hiện một cách tự

động và không cần phải thực hiện trước khi lập trình).

Cấu hình

CPLD trên X-Board phải được cấu hình (hoặc lập trình) bởi người

sử dụng trước khi nó thực hiện bất kỳ chức năng nào. File cấu hình có thể

được tạo ra từ sơ đồ schematic hoặc từ các các file nguồn HDL sử dụng

phần mềm ISE WebPack miễn phí của Xilinx. Các file cấu hình có thể

được truyền tới các X-Board sử dụng dây cáp USB và phần mềm Adept

Export của Digilent, hoặc sử dụng cáp lập trình ( không đựoc cung cấp bởi

Xilinx) và phần mềm iMPACK của Xilinx. Khi đã được cấu hình, CPLD

sẽ đạt được trạng thái của nó một cách vô hạn.

Khi bo mạch X- Board đựoc bật, cấu hình CPLD được load gần

đây nhất sẽ xuất hiện tức thì. Một cấu hình mới có thể đuợc load bất cứ

thời điểm nào, và miễn là khi cấu hình mới được load, nó sẽ định nghĩa

cách hoạt động của CPLD.

Để cấu hình CPLD sử dụng phần mềm Adept Export của Digilent,

gắn dây cáp USB tới máy tính và tới X-Board. Khởi động Adept Export,

và cho phép nó dò tự động thiết bị USB trên X-Board bằng việc kích vào

“Initialize Chain”. Khi CPLD được dò, sẽ nhìn thấy hình ảnh của CPLD

và hộp thoại đổ xuống ở đó có thể lựa chọn file cấu hình. Lựa chọn các

file cấu hình .jed và sau đó kích phải chuột trên biểu tượng của CPLD và

chọn “Program”.

X- Meter

X-Board bao gồm một bộ đo dòng nằm trêm bo mạch, có thể đo

dòng của lõi CPLD một cách liên tục. X-Meter được xây dựng dựa vào bộ

216

Page 217: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

biến đổi sigma – delta 16 bit LTC2480 công nghệ tuyến tính. LTC 2480

sử dụng một cổng SPI để gửi dữ liệu mẫu tới máy tính và cổng SPI sẽ chia

sẻ cùng chân như là cổng lập trình JTAG. SW1 lựa chọn giữa X-Meter và

cổng lập trình JTAG.X-Meter là một ứng dụng đo đạc dòng điện dựa trên

PC, phát triển cho X-Board. X-Board với nền tảng cơ sở là CPLD

CoolRunner II, chứa bộ biến đổi A/D LTC 2480 công nghệ tuyến tính,

dùng đo dòng và nhiệt độ. X-Meter thu nhận dữ liệu từ LTC2480 sử dụng

cổng USB2 trên X-Board và hiển thị dữ liệu trên máy tính.

Để sử dụng X- Meter, nối X-Board tới máy tính, đạt SW1 ở chế độ

“Meter” và đảm bảo rằng JP1 được đặt tới REG. Khởi động ứng dụng X-

Meter từ menu Window Start, kích chuột vào nút “Start “ trên X- Meter.

X-Meter sẽ đạt được một nhiệt độ và chín dòng mẫu trong khoảng

chu kỳ 2s và truyền dữ liệu đến bộ đệm dữ liệu trên PC qua cáp USB. X-

Meter vẽ biểu đồ dữ liệu bằng một đồ thị dạng sóng chỉ ra dữ liệu lớn nhất

và nhỏ nhất đạt được. Để thay đổi tỷ lệ của dạng sóng, kích vào sự đo

dòng điện mong muốn / nút phân chia.

Dữ liệu về nhiệt độ thì chỉ được hiển thị khi kích hoạt check box

khi “Temperature Measurement” đã được check. Nút Calibrate được sử

dụng để định cỡ sensor nhiệt độ tới một giá trị đúng đắn. Nó chỉ cần thực

hiện một lần.

Nút Stop dùng để dừng việc nhận dữ liệu mới và nút Clear dùng để

dừng thu nhận dữ liệu, làm sạch bộ đệm và xoá dạng sóng hiển thị. \

Để Save giá trị dữ liệu trong bộ đệm tới CSV file (Comma

Seperated Value), kích chọn nút “Save Buffer As ...” và định rõ tên file

(chú ý giá trị nhiệt độ sẽ chỉ được save nếu check box dưới “Temperature

Measurement” được check.

Nguồn cung cấp

X- Board có thể được cấp nguồn toàn bộ từ cổng USB, hoặc từ

nguồn cung cấp bên ngoài gắn vào đầu nối JP3. Jắc JP2 sẽ lựa chọn khi

nào bo mạch sử dụng nguồn USB hoặc nguồn ngoài.

Nếu nguồn USB được sử dụng, jăm J2 sẽ được thiết đặt lên REG

và dây cáp USB – USB sẽ kết nối giữa máy tính và đầu cắm USB nhỏ trên

mạch X-Board. Nếu X-Board nhận nguồn từ máy tính, hai đèn LED màu

vàng bên cạnh của đầu cắm USB trên mạch sẽ sáng rõ.

217

Page 218: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Nguồn cung cấp bên ngoài được cấp qua bộ điều chỉnh tuyến tính.

Điện áp đặt vào chân nguồn thì được cấp qua bộ điều chỉnh điện áp có tác

dụng cung cấp nguồn cho mạch. Để sử dụng nguồn pin bên ngoài, Jăm J2

phải được thiết lập ở BAT và nguồn đặt vào chân J3 ( xem sơ đồ mạch in).

Bộ điều chỉnh sẽ điều chỉnh điện áp từ 3.6 – 9V. Nếu sử dụng pin AA,

cần áp dụng 3 pin mắc nối tiếp nhau.

X-Board sử dụng một mạch in 4 lớp, các lớp bên trong dành cho

Vcc và GND. CPLD và các IC khác trên board mạch cần có bổ sung của

các tụ rẽ ngang đặt gần với mỗi chân Vcc. Bộ điều chỉnh tuyến tính, cùng

với việc cấp nguồn cấp tốt và nhiều các tụ rẽ sẽ tạo ra một một nguồn

cung cấp sạch và nhiễu thấp.

Bộ dao động

X-Board bao gồm bộ dao động Silic có khả năng thiết lập bởi

người sử dụng. Nó có thể tạo ra các tín hiệu xung nhịp tần số 1MHz,

100KHz hoặc 10KHz dựa trên vị trí của xung nhịp lựa chọn Jăm J11 ( J11

được ghi nhãn ở bên dưới của bo mạch). Đầu ra dao động chính, được ghi

là “PCLK” trong schematic, thì được nối tới chân GCLK2 của CPLD (ở

P38) để mà có thể được nối tới bộ phân chia tần số bên trong. Pads cho

một bộ dao động SMT tiêu chuẩn cũng được cung cấp tại xung nhịp IC4

A 48MHz thì cũng được hiển thị trên P30.

Dữ liệu vào ra người dùng

Nút nhấn tạo ra một con số “1” tới CPLD. Nút nhấn chuyển mạch

đầu vào sử dụng một điện trở nối tiếp để bảo vệ khỏi bị ngắn mạch (ngắn

mạch sẽ xảy ra nếu một chân CPLD được phân công tới một nút nhấn

trước đó được định nghĩa một cách vô ý như là một đầu ra)

Các đèn LED

12 đèn LED màu đỏ được cung cấp cho mạch chỉ dẫn, và có khả

năng cấu hình sử dụng. Hai đèn LED màu vàng chỉ ra trạng thái kết nối

nguồn USB (LD13) và nguồn 3.3V (LD14). Hai đèn đó là cố định và

không thể thay đổi được.

218

Page 219: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Bộ kết nối tập trung 6 chân

X- Board cung cấp 8 modul kết nối đầu cuối 6 chân. Mỗi bộ kết nối

cung cấp VDD, GND và bốn tín hiệu đặc trưng CPLD.

Một vài mạch modul 6 chân có thể gắn vào các bộ kết nối được

cung cấp bởi Digilent bao gồm mạch speaker, mạch cầu H, mạch

sensor, ...

Xem sơ đồ thiết kế mạch cho thiết kế các chân.

Modul ngoại vi

Bộ mạch này bao gồm 3 modul ngoại vi: PS/2, Switches, và hai bộ

hiển thị LED 7 thanh.

Thiết kế Demo.

Thiết kế trước khi lập trình trên CPLD chứa một số chức năng có

thể quan sát khi các modul ngoại vi được cung cấp được đặt vào các cổng

thích hợp.

Modul Switches - > cổng J8

Modul PS/2 - > cổng J7

Modul LED 7 thanh - > cổng J5/J6.

Dĩ nhiên là các thiết kế có thể thay đổi để sử dụng các cổng khác

nhau, nhưng đây là các cổng dùng cho thiết kế mẫu.

219

Page 220: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

CPLD thực hiện cả bộ đếm cũng như là bộ giải mã bàn phím PS/2.

Hiển thị thay đổi giữa hai phần này dựa trên giá trị của SW4. SW1, 2 và 3

không được sử dụng trong thiết kế. BTN0 là khởi tạo hên thống cho thiết

kế. Tần số xung nhịp lý tưởng cho thiết kế là 100Hz, sử dụng để giảm bỏ

nhảy cho J11.

Khi SW4 có lựa chọn bộ giải mã PS/2, đầu ra trên hiển thị là mã

quét cho các ký tự. Dưới đây là một số mã quét, những mã còn lại có thể

tìm trên Internet.

Khuyến nghị thiết kế

1. Bộ điều chỉnh cung cấp nguồn 3,3V, vì thế đặt chuẩn mặc định vào

ra một cách thích hợp.

2. Các chân vào ra không sử dụng có thể đặt xuống GND để giảm

thiểu công suất.

3. Đầu vào nên đặt ở Keeper để giảm thiểu công suất tiêu thụ chân bất

kỳ các chân đầu vào có điện thế thay đổi.

4. Yêu cầu sau buổi thực hành

- Dựa vào Kit thí nghiệm: CoolRunner2 Starter Kit – X_Board.

- Dựa vào tài liệu hướng dẫn sử dụng trên PC.

- Yêu cầu viết báo cáo về cấu trúc phần cứng của X_Board.

- Báo cáo được nộp cho GVHD sau buổi thực hành.

Bài 3: Thực hành với Project mẫu trên X-Board

220

Page 221: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

1. Mục đích

- Làm quen với phương pháp thiết kế số bằng VHDL.

- Phân tích một thiết kế mẫu.

- Nắm được các quy trình thiết kế số trên CPLD.

2. Thiết bị thực hành

- Kit thí nghiệm: CoolRunner2 Starter Kit – X_Board.

- PC.

- Dây cáp tín hiệu.

3. Nội dung thực hành

Tổng quan

Demo thiết kế tham khảo của module Digilent X-Board trên PModAMP1 sử dụng Module ngoại vi PModeAMP1 với X-Board để tạo ra âm Audio trên loa hoặc trên Headphone. Thiết kế tham khảo này sử dụng các xung vuông để tạo các âm Audio nhưng các dạng sóng phức tạp hơn cũng có thể dễ dàng được tổng hợp.

X-Board là một board thực hành cho CPLD dựa vào CPLD CoolRunner-2 của

Xilinx. PModAMP là một Module ngoại vi của Digilent chứa một bộ khuếch đại

221

Page 222: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Audio LM4838 2W của National Semiconductor. PModAMP1 có hai Jack

Audio, Jack này có thể cắm vào Speaker hoặc HeadPhone.

Phần mềm Adept của Digilent được dùng để lập trình các thiết kế tham khảo vào

CPLD và truyền dữ liệu vào CPLD để lựa chọn tần số Audio.

Các tài liệu tham khảo thêm

Digilent X-Board Reference Manual Schematic

Digilent PModAMP1 Reference Manual and Schematic

Digilent Adept Reference Manual

Digilent Application Note AN0040 “Digilent Asynchronous Parallel

Interface.

National Semiconductor LM4838 Datasheet

Xilink CoolRunnerII Datasheet

Các thiết bị cài đặt

Thiết kế tham khảo này cần một PC đã cài phần mềm ISE của Xilinx. Phần mềm

Digilent Adept, một X-Board, một module ngoại vi PModAMP1, Speaker hoặc

HeadPhone. Thiết lập tần số xung nhịp lựa chọn Jump J11 trên X-Board và đặt ở

100Khz.

Mô tả

Thiết kế tham khảo này được chia làm hai khối chính.

Một giao diện USB (EPP Controller) tạo ra các thanh ghi trên CPLD mà phần

mềm Adept có thể đọc và ghi thanh ghi đó, và một bộ tạo xung vuông có thể lập

trình được để tạo ra tần số Audio. Một Bus điều khiển 8 bit đơn giản (Đây là bus

giao diện song song không đồng bộ của Digilent) được sử dụng để chuyển dữ

liệu bên trong giữa hai khối.

Các khối giao diện USB làm việc với Firmware trong bộ điều khiển USB để thực

hiện các thanh ghi trong CPLD mà các thanh ghi này có thể truy cập từ phần

mềm Adept được cài đặt trên máy tính. Các thanh ghi CPLD có thể đọc và ghi

trên ứng dụng Transport của Adept.

Trong thiết kế này có hai thanh ghi 8 bit được sử dụng, một thanh ghi địa chỉ và

một thanh ghi dữ liệu. Bởi vì chỉ cần có hai giá trị dữ liệu, thiết kế này minh hoạ

rằng cả thanh ghi dữ liệu và thanh ghi địa chỉ đều được sử dụng để lưu trữ dữ liệu

(thay vì cách tiếp cận điển hình của việc thiết kế hai thanh ghi dữ liệu ở hai địa

chỉ khác nhau như trong hầu hết các thiết kế khác). Một giá trị m đựoc ghi vào

222

Page 223: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

một thanh ghi địa chỉ nào đó sẽ định nghĩa một khoảng thời gian của tín hiệu

audio thành m.20us. Và một giá trị n ghi vào một thanh ghi dữ liệu nào đó sẽ

định nghĩa khoảng thời gian tồn tại của tín hiệu đó bằng n.10ms. Ví dụ, để tạo ra

tần số 1KHz trong 1s, ghi con số 50 vào thanh ghi địa chỉ và con số 100 vào

thanh ghi dữ liệu.

Các bước thực hành

1. Gắn PModAMP1 vào J1 trên X-Board, gắn speaker hoặc Headphone vào

PModAMP1.

2. Nạp file X-Board_PModAMP1.jed bằng phần mềm Digilent Export của

Adept.

3. Chạy ứng dụng Digilent Transport

Lựa chon Tab Register I/O

223

Page 224: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly

Đánh con số tương ứng với tần số vào bất kỳ một box thanh ghi địa chỉ nào

và con số định nghĩa khoảng thời gian của tin hiệu audio trong một box thanh ghi

dữ liệu nào đó.

Kích chuột vào nút Write bên cạnh dữ liệu. Khi đó tín hiệu audio sẽ được

phát ra.

4. Yêu cầu sau buổi thực hành

Sinh viên viết 1 báo cáo về module thực hành. Nội dung báo cáo:

Mục đích của bài thực hành

Phân tích đoạn mã trong bài thực hành mẫu

Các bước chính để thực hiện một thiết kế trên CPLD.

Trả lời các câu hỏi của GVHD.

224

Page 225: Giao Trinh Thuc Hanh Vi Dieu Khien Va Vi Xu Ly