giao trinh thuc hanh vi dieu khien va vi xu ly
TRANSCRIPT
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
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
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
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
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
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
Hình 1. Sơ đồ nguyên lí LMD01
7
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
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
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
Hình 4. Sơ đồ nguyên lí LMD04
11
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
Hình 5. Sơ đồ nguyên lí LMD05
13
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
Hình 6. Sơ đồ nguyên lí LMD06
15
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
Hình 8. Sơ đồ nguyên lý mạch LMD09
17
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
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
Để 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
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
- 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
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
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
Để 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
- Đư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
- 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
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
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
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
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
- 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
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
- 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
Để 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
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
- 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
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
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
-
40
- 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
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
- 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
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
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
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
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
- 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
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
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
- 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
- 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
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
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
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
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
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
//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
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
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
- 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
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
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
#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
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
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
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
#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
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
{
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
- 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
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
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
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
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
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
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
Hình 1.2 - Sơ đồ nguyên lí PIC.TS
78
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
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
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
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
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
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
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
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
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
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
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
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
Hình 1.19 - Sơ đồ kết nối PORTB
91
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
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
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
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
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
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
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
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
ứ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
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
độ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
- 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
Đặ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
- 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
- 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
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
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
- 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
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
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
- 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
}
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
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
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
#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
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
//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
}
//===================================
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
#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
}
}
//****************************************************************
//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
//*********************************************
/****************************************************
* 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
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
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
#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
}
//*****************************************************
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
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
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
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
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
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
//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
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
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
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
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
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
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
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
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
}
//
*****************************************************************
*
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
//
*****************************************************************
*
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Để 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
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
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
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
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
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
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
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
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
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
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
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
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
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
Để 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
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
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
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
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
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
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
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
- 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
199
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Đá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