báo cáo vxl (2)

38
Bài tập lớn về led ma trân sử dụng pic 16f877a BÁO CÁO BÀI TẬP LỚN Môn: Kỹ thuật Vi Xử Lí Họ và Tên Lớp MSSV Gmail Tên đề tài 1.Nguyễn Xuân Đồng DTVT01 -K55 20101386 [email protected] Mạch hiển thị led ma trận sử dụng PIC 16F877A thanh ghi dịch 74HC595 2.Bùi Văn Nhân DTVT04 -K55 20101959 buivannhan04bkfet@gmai l.com 3.Dương Văn Thành DTVT04 -K55 20102151 [email protected] m 4.Quán Quang Phúc DTVT09 -K55 20101994 [email protected] m 1

Upload: nhan-bui

Post on 31-Dec-2014

202 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Báo cáo VXL (2)

BÁO CÁO BÀI TẬP LỚN Môn: Kỹ thuật Vi Xử Lí

Họ và Tên Lớp MSSV Gmail Tên đề tài

1.Nguyễn Xuân Đồng

DTVT01-K55

20101386 [email protected]

Mạch hiển thị led ma

trận sử dụng PIC 16F877A và thanh ghi dịch

74HC595

2.Bùi Văn NhânDTVT04

-K5520101959 [email protected]

3.Dương Văn Thành

DTVT04-K55

20102151 [email protected]

4.Quán Quang Phúc

DTVT09-K55

20101994 [email protected]

1

Page 2: Báo cáo VXL (2)

Mục Lục

Phần I: Lời nói đầu………………………………………………………..

Phần II: Phân công công việc……… ……………………………………

Phần III: Thiết kế hệ thống…………………………….………………....

A.Chức năng của mạch…………………………………………………….

B.Chi tiết các phần tử sử dụng trong mạch…………………………….......

3.1 Sơ đồ tổng thể của hệ thống…………………………………………..

3.2 Sơ đồ CALL GRAPH…………………………………………………

3.3 Sơ đồ đặc tả hệ thống…………………………………………………

3.4 Các module trong hệ thống…………………………………………...

3.5 Chi tiết các phần tử trong mạch……………………………………….

3.6 Sơ đồ mô phỏng……………………………………………………….

3.7 Sơ đồ thuật toán……………………………………………………….

Phần VI: Xây dựng hệ thống………………………………………………

Phần V: Kết luận…………………………………………………………...

Phần VII: Tài liệu tham khảo……………………………………………...

2

Page 3: Báo cáo VXL (2)

Phần I : Lời nói đầu. Ngày nay, vi xử lý ngày càng trở nên phổ biến: từ những ứng dụng đơn giản như điều khiển một chốt đèn giao thông định thời, đếm sản phẩm trong một dây chuyền sản xuất, điều khiển tốc độ động cơ điện một chiều, thiết kế một biển quảng cáo dùng Led ma trận, một đồng hồ thời gian thực….đến các ứng dụng phức tạp như hệ thống điều khiển robot, bộ kiểm soát trong nhà máy hoặc hệ thống kiểm soát các máy năng lượng hạt nhân. Các hệ thống tự động trước đây sử dụng nhiều công nghệ khác nhau như các hệ thống tự động hoạt động bằng nguyên lý khí nén, thủy lực, rơle cơ điện, mạch điện tử số, các thiết bị máy móc tự động bằng các cam chốt cơ khí... các thiết bị, hệ thống này có chức năng xử lý và mức độ tự động thấp so với các hệ thống tự động hiện đại được thực hiện bởi các vi xử lí.

Vi xử lý là một vi mạch cỡ lớn hoặc cực lớn với chức năng chính là xử lí dữ liệu. Một số loại vi xử lí thông dụng hiện nay là PIC,8051,AVR,ARM,….

Với mong muốn giới thiệu ứng dụng cơ bản của vi xử lí trong đời sống hiện đại, nhóm chúng em đưa ra mô hình thiết kế điều khiển led ma trận 8x8, sử dụng vi xử lí PIC 16F877A. Nhóm thực hiện bài tập lớn chúng em xin cảm ơn sự hướng dẫn nhiệt tình của PGS. Thắng - Viện Điện tử viễn thong - Đại học Bách Khoa Hà Nội đã giúp nhóm hoàn thành đề tài một cách tốt nhất. Phần II : Phân công công việc.

Tuần Công việc Thành viên thực hiện

3

Page 4: Báo cáo VXL (2)

KHỐI NGUỒN

KHỐIXỬ LÝTRUNG

TÂM

KHỐI ĐIỀU KHIỂN

LEDMA TRẬN

KHỐI HIỂN THỊ

31 Chọn đề tài Đồng + Thành + Nhân + Phúc

31-34 Nghiên cứu về PIC Đồng + Nhân31-34 Nghiên cứu về IC HC595

và UNL2803Phúc + Thành

33-34 Viết code trên CCS để nạp PIC

Đồng+ Nhân

34-36 Mô phỏng mạch trên proteus

Đồng + Thành

36-37 Cắm trên bo mạch thử Đồng + Thành + Nhân + Phúc

36-37 làm mạch in Đồng + Thành + Nhân + Phúc

35-37 Hoàn thành báo cáo Phúc +Nhân +Thành

Phần III: Thiết kế hệ thốngA.Chức năng của mạch

+ Mạch có thể sử dụng làm biển quảng cáo.

+ Có thể hiển thị thời gian như một chiếc đồng hồ số.

+ Còn nhiều chức năng khác như trang trí, thắp sáng,….

B. Thiết kế mạch.

3.1. SƠ ĐỒ KHỐI TỔNG THỂ CỦA HỆ THỐNG

Sơ đồ khối của hệ thống

4

Page 5: Báo cáo VXL (2)

Module Giải mã ModuleHiển thị

IC Giải mã Led Ma trận

Chương trình điều khiển chính

Khối nguồn: Tạo ra điện áp một chiều ổn định 5V từ nguồn xoay chiều 220V để cung cấp cho các khối và linh kiện trong hệ thống.

Khối xử lý trung tâm: Tạo ra tín hiệu điều khiển khối điều khiển LED ma trận và khối hiển thị để hiển thị các ký tự như chương trình đã định trước.

Khối điều khiển LED ma trận: Nhận tín hiệu từ khối xử lý trung tâm, giải mã và cung cấp nguồn ổn định và đủ lớn để chuyển ra khối hiển thị.

Khối hiển thị: Nhận tín hiệu từ khối xử lý trung tâm và khối điều khiển LED ma trận để hiển thị các ký tự theo chương trình đã trong khối xử lý trung tâm

3.2. SƠ ĐỒ CALL GRAPH

Sơ đồ Callgraph

3.3. SƠ ĐỒ ĐẶC TẢ CỦA HỆ THỐNG

5

Page 6: Báo cáo VXL (2)

Tắt hết LED Hiển thị từng cột

Dịch trái

Bắt đầu

Delay

Hiển thị cộttiếp theo

Delay

Hiển thị hết

6

Page 7: Báo cáo VXL (2)

3.4. CÁC MODULE TRONG HỆ THỐNG 3.4.1. Module điều khiển trung tâm

Khối điều khiển trung tâm dùng vi điều khiển PIC16F877A. Vi điều khiển sẽ xuất tín hiệu để điều khiển khối hiển thị (Led ma trận) và khối điều khiển hiển thị theo các chương trình đã lập trình sẵn.

Bộ tạo dao động dùng thạch anh 20MHz cung cấp ngồn dao động cho vi điều khiển

Bộ reset như trong hình vẽ dưới nhằm tạo ra xung reset, xác lập trạng thái ban đầu cho vi điều khiển khi nút reset được nhấn.

Sơ đồ nguyên lý module điều khiển trung tâm

3.4.2. Module hiển thịModule hiển thị sử dụng 3 led ma trận 8x8 ghép nối lại với nhau thành

một ma trận 8x32. Các LED ma trận được nối chung các chân cho phép hàng với nhau(H1 đến H8). Các chân cho phép cột được tách riêng và nối vào Module điều khiển LED ma trận (C1 đến C32).

7

Page 8: Báo cáo VXL (2)

3.4.3. Module điều khiển LED ma trậnModule điều khiển LED được kết nối như hình dưới đây. Module sử

dụng IC chốt dịch 74HC595 và IC đệm dòng ULN2803.Các chân Clock và Latch của IC 74HC595 được mắc song song như hình

vẽ. Chân Data của IC 74HC595 đầu tiên được nối vào vi điều khiển. Các chân Data của 2 IC còn lại được mắc vào chân số 9 của IC 74HC595 trước đó.

Các đầu ra của IC chốt dịch 74HC595 được mắc vào các cổng vào của IC đệm dòng ULN2803, các đầu ra của ULN2803 sẽ được nối trực tiếp với các chân cho phép cột của các LED ma trận trong module hiển thị.

3.4.4. Module nguồnModule này tạo ra điện áp một chiều từ nguồn xoay chiều

220V để cung cấp cho các linh kiện trong hệ thống. Sử dụng biến áp để biến điện áp xoay chiều 220V thành điện áp xoay chiều 12V, dùng chỉnh lưu từ 12V xoay chiều sang 12V một chiều, dùng IC ổn áp để lấy ra điện áp ổn định 5V ở ngõ ra.

8

Page 9: Báo cáo VXL (2)

J 2

2 2 0 V ~12

L 1

B ie n a p

- +

D io t c a u

2

4

3

1

U 47 8 0 5

I N1

GN

D2

O U T3 V c c -5 V

C 1C

C 2C

1 2 V

Module nguồn

3.5 CHI TIẾT CÁC PHẦN TỬ TRONG MẠCH

3.5.1 Vi xử lý PIC 16F877A

a.PIC là gì?

PIC là từ viết tắt của “Programable Intelligent Coputer”, có thể tạm dịch là “ máy tính thông minh khả trình” do hãng Genenral Instrusment đặt tên cho vi điều khiển đầu tiên của họ: PIC1650 được thiết kế để dùng làm thiết bị ngoại vi cho vi điều khiển CP1600.Vi điều khiển này sau đó được nghiên cứu và phát triển thêm và từ đó hình thành nên dòng vi điều khiển PIC ngày nay.

b.Tại sao lại là PIC mà không phải là các dòng VĐK khác?

Họ VĐK khiển này có thể tìm mua dễ dàng trên thị trường

Giá thành không quá đắt.

Có đầy đủ các tính năng của VĐK khi hoạt động độc lập.

Số lượng người sử dụng VĐK khiển PIC .Hiện nay tại Việt Nam cũng như trên thế giới, họ VĐK này được sử dụng khá rộng rãi.Tạo điều kiện thuận lợi cho quá trình tìm hiểu và phát triển các ứng dụng như: số lượng tài liệu,…

Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình ,nạp chương trình từ đơn giản đến phức tạp,…

Các tính năng đa dạng của VĐK PIC , và các tính năng này không ngừng được phát triển.

9

Page 10: Báo cáo VXL (2)

c. Sơ đồ chân vi điều khiển PIC 16F877A.

d. Một vài thông số về vi điều khiển PIC 16F877A

Đây là vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bit. Mỗi lệnh đều được thực thi trong một chu kì xung clock. Tốc độ hoạt động tối đa cho phép là 20 MHz với một chu kì lệnh là 200ns. Bộ nhớ chương trình 8Kx14 bit, bộ nhớ dữ liệu 368x8 byte RAM và bộ nhớ dữ liệu EEPROM với

10

Page 11: Báo cáo VXL (2)

dung lượng 256x8 byte. Số PORT I/O là 5 với 33 pin I/O. Các đặc tính ngoại vi bao gồm các khối chức năng sau:

• Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit.

• Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep.

• Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler. Hai bộ Capture/so sánh/điều chế độ rộng xung.

• Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C. Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ.

• Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD, WR, CS bên ngoài.

• Các đặc tính Analog: 8 kênh chuyển đổi ADC 10 bit. Hai bộ so sánh.

• Bộ nhớ flash với khả năng ghi xóa được 100.000 lần. Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần. Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm. Khả năng tự nạp chương trình với sự điều khiển của phần mềm. Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial Programming) thông qua 2 chân. Watchdog Timer với bộ dao động trong. Chức năng bảo mật mã chương trình. Chế độ Sleep. Có thể hoạt động với nhiều dạng Oscillator khác nhau.

e. Sơ đồ khối vi điều khiển PIC 16F877A.

11

Page 12: Báo cáo VXL (2)

f. Tổ chức bộ nhớ

Cấu trúc bộ nhớ của vi điều khiển PIC16F877A bao gồm bộ nhớ chương trình (program memory) và bộ nhớ dữ liệu (data memory) .Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash ,dung lượng bộ nhớ 8k word (1 word= 14bit) và được phân thành nhiều trang (từ page 0 đến page 3) .Như vậy bộ nhớ chương trinh có khả năng chứa được 8*1024 =8192 lệnh (vì một lệnh sau khi mã hóa sẽ có dung lượng 1 word (14 bit). Để mã hóa được địa chỉ của 8k word bộ nhớ chương trình , bộ đếm chương trình có dung lượng 13 bit (PC<12:0>) . Khi vi điều khiển reset , bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (reset vector). Khi có ngắt xảy ra , bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (interrupt vector). Bộ nhớ chương trình không bao gồm bộ nhớ stack sẽ được đề cập cụ thể trong phần sau.

Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank. Đối với PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank. Mỗi bank có dung lượng 128 byte, bao gồm các thanh ghi có chức năng đặc biệt SFG (Special Function Register) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR (General Purpose Pegister) nằm ở vùng địa chỉ còn lại trong

12

Page 13: Báo cáo VXL (2)

bank. Các thanh ghi SFR thường xuyên được sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất cà các bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của chương trình.

Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là một vùng nhớ đặc biệt không cho phép đọc hay ghi. Khi lệnh CALL được thực hiện hay khi một ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ đếm chương trình PC tự động được vi điều khiển cất vào trong stack. Khi một trong các lệnh RETURN, RETLW hat RETFIE được thực thi, giá trị PC sẽ tự động được lấy ra từ trong stack, vi điều khiển sẽ thực hiện tiếp chương trình theo đúng qui trình định trước.

Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA có khả năng chứa được 8 địa chỉ và hoạt động theo cơ chế xoay vòng. Nghĩa là giá trị cất vào bộ nhớ Stack lần thứ 9 sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ 10 sẽ ghi đè lên giá trị 6 cất vào Stack lần thứ 2. Cần chú ý là không có cờ hiệu nào cho biết trạng thái stack, do đó ta không biết được khi nào stack tràn. Bên cạnh đó tập lệnh của vi điều khiển dòng PIC cũng không có lệnh POP hay PUSH, các thao tác với bộ nhớ stack sẽ hoàn toàn được điều khiển bởi CPU.

g. Các cổng xuất/nhập của PIC16F877A

Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để tương tác với thế giới bên ngoài. Sự tương tác này rất đa dạng và thông qua quá trình tương tác đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng. Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân (I/O pin), tùy theo cách bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và số lượng chân trong mỗi cổng có thể khác nhau. Bên cạnh đó, do vi điều khiển được tích hợp sẵn bên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhập thông thường, một số chân xuất nhập còn có thêm các chức năng khác để thể hiện sự tác động của các đặc tính ngoại vi nêu trên đối với thế giới bên ngoài. Chức năng của từng chân xuất nhập trong mỗi cổng hoàn toàn có thể được xác lập và điều khiển được thông qua các thanh ghi SFR liên quan đến chân xuất nhập đó.

Port A

13

Page 14: Báo cáo VXL (2)

Port A (RPA) bao gồm 6 I/O pin.Đây là các chân “hai chiều” (bidirectional pin), nghĩa là có thể xuất và nhập được. Chức năng I /O này được điều khiển bởi thanh ghi TRISA (địa chỉ 85h). Muốn xác lập chức năng của một chân trong PortA là input,ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại, muốn xác lập chức năng của một chân trong Port A là output, ta “clear” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA. Thao tác này hoàn toàn tương tự đối với các PORT còn lại.Bên cạnh đó Port A còn là ngõ ra của bộ ADC,bộ so sánh,ngõ vào analog ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous

Serial Port). Các thanh ghi SFR liên quan đến Port A bao gồm:

Port A (địa chỉ 05h) : chứa giá trị các pin trong

Port A. TRISA (địa chỉ 85h) : điều khiển xuất nhập.

CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh.

CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp.

ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC.

Port B

Port B (RPB) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISB. Bên cạnh đó một số chân của Port B còn đươc sử dụng trong quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau. Port B còn liên quan đến ngắt ngoại vi và bộ Timer0. Port B còn được tích hợp chức năng điện trở kéo lên được điều khiển bởi chương trình.

Các thanh ghi SFR liên quan đến Port B bao gồm:

Port B (địa chỉ 06h,106h) : chứa giá trị các pin trong

Port B TRISB (địa chỉ 86h,186h) : điều khiển xuất nhập

OPTION_REG(địa chỉ 81h,181h): điều khiển ngắt ngoại vi và bộ Timer0

Port C

PortC (RPC) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISC. Bên cạnh đó Port C còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART.

Các thanh ghi điều khiển liên quan đến Port C:

Port C (địa chỉ 07h) : chứa giá trị các pin trong

14

Page 15: Báo cáo VXL (2)

Port C TRISC (địa chỉ 87h) : điều khiển xuất nhập.

Port D

Port D (RPD) gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng là TRISD. Port D còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port).

Các thanh ghi liên quan đến Port D bao gồm:

Thanh ghi Port D : chứa giá trị các pin trong Port D.

Thanh ghi TRISD : điều khiển xuất nhập.

Thanh ghi TRISE : điều khiển xuất nhập Port E và chuẩn giao tiếp PSP.

Port E

Port E (RPE) gồm 3 chân I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISE. Các chân của PortE có ngõ vào analog. Bên cạnh đó Port E còn là các chân điều khiển của chuẩn giao tiếp PSP.

Các thanh ghi liên quan đến Port E bao gồm:

Port E : chứa giá trị các chân trong PortE.

TRISE : điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp PSP.

ADCON1: thanh ghi điều khiển khối ADC.

h. Ngắt (Interrupt)

PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit điều khiển và cờ ngắt riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuộc vào bit GIE và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE. Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2. Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2.

Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương trình ngắt được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi, bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h.

15

Page 16: Báo cáo VXL (2)

Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại. Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được thời điểm tiếp theo mà ngắt xảy ra.

Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi trạng thái các pin của PORTB (PORTB Interrupt on change), việc xác định ngắt nào xảy ra cần 3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt. Cần chú ý là trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình được cất vào trong Stack, trong khi một số thanh ghi quan trọng sẽ không được cất và có thể bị thay đổi giá trị trong quá trình thực thi chương trình ngắt. Điều này nên được xử lý bằng chương trình để tránh hiện tượng trên xảy

ra.

Ngắt INT

Ngắt này dựa trên sự thay đổi trạng thái của pin RB0/INT. Cạnh tác động gây ra ngắt có thể là cạnh lên hay cạnh xuống và được điều khiển bởi bit INTEDG (thanh ghi OPTION_ REG <6>). Khi có cạnh tác động thích hợp xuất hiện tại pin RB0/INT, cờ ngắt INTF được set bất chấp trạng thái các bit điều khiển GIE và PEIE. Ngắt này có khả năng đánh thức vi điều khiển từ chế độ sleep nếu bit cho phép ngắt được set trước khi lệnh SLEEP được thực thi.

Ngắt do sự thay đổt trạng thái các PIN trong Port B

Các pin PORTB<7:4> được dùng cho ngắt này và được điều khiển bởi bit RBIE (thanh ghi INTCON<4>). Cờ ngắt của ngắt này là bit RBIF (INTCON<0>).

3.5.2 IC ghi dịch 74HC595

a. Chức năng :

16

Page 17: Báo cáo VXL (2)

Là ic ghi dịch 8bit kết hợp chốt dữ liệu , đầu vào nối tiếp đầu ra song song .Chức năng: Thường dùng trong các mạch quét led 7 , led matrix …để tiết kiệm số chân VDK tối đa (3 chân) . Có thể mở rộng số chân vi điều khiển bao nhiêu tùy thích mà k ic nào có thể làm dc bằng việc mắc nối tiếp đầu vào dữ liệu các ic với nhau .

b. Sơ đồ chân:

Giải thích ý nghĩa hoạt động của một số chân quan trọng:

Chân 14 : đầu vào dữ liệu nối tiếp .Tại 1 thời điểm xung clock chỉ đưa vào được 1 bit.

QA=>QH : trên các chân (15,1,2,3,4,5,6,7) : Xuất dữ liệu khi chân chân 13 tích cực ở mức thấp và có một xung tích cực ở sườn âm tại chân chốt 12 .

Chân 13 : Chân cho phép tích cực ở mức thấp (0) .Khi ở mức cao, tất cả các đầu ra của 74595 trở về trạng thái cao trở, không có đầu ra nào được cho phép.

Chân 9: Chân dữ liệu nối tiếp . Nếu dùng nhiều 74595 mắc nối tiếp nhau thì chân này đưa vào đầu vào của con tiếp theo khi đã dịch đủ 8bit.

Chân 11: Chân vào xung clock . Khi có 1 xung clock tích cực ở sườn dương(từ 0 lên 1) thì 1bit được dịch vào ic.

Chân 12 : xung clock chốt dữ liệu . Khi có 1 xung clock tích cực ở sườn dương thì cho phép xuất dữ liệu trên các chân output . lưu ý có thể xuất dữ liệu bất kỳ lúc nào bạn muốn ,ví dụ đầu vào chân 14 dc 2 bit khi có xung clock ở chân 12 thì dữ liệu sẽ ra ở chân Qa và Qb (chú ý chiều dịch dữ liệu từ Qa=>Qh).

Chân 10: khi chân này ở mức thấp(mức 0) thì dữ liệu sẽ bị xóa trên chip). Sơ đồ hoạt động của chip:

17

Page 18: Báo cáo VXL (2)

3.5.3. IC đệm dòng ULN2803

Đây là IC gồm 8 transistor NPN ghép Darlington gắn mạch

điện tử trong dãy này của chuổi là một bộ lý tưởng để giao tiếp

với mạch điện dạng số mức logic thấp như: TTL, CMOS hoặc

PMOS/NMOS

Sơ đồ khối IC ULN2803

18

Page 19: Báo cáo VXL (2)

ULN2803 được thiết kế để phù hợp với chuẩn TTL

Vài chỉ số kĩ thuật của IC ULN2803:

Dòng điện ngõ vào khoảng 25mA

Điện áp ngõ vào khoảng 0.5V – 30V

Dòng ra tới 500 mA/ 50 V

Đệm 8 kênh riêng biệt

Đầu ra đảo.

Sơ đồ cấu tạo 1 kênh đệm dòng của ULN2803

Hình ảnh thực tế IC ULN2803

19

Page 20: Báo cáo VXL (2)

3.5.4 Led ma trận 8x8

Mỗi LED ma trận 8x8 được tạo nên bằng cách ghép 64 LED đơn vào với nhau theo sơ đồ dưới đây:

Sơ đồ nguyên lý LED ma trận 8x8

Hình ảnh thực tế của một LED ma trận 8x8

Kết nối 3 LED ma trận 8x8 như trên theo nguyên tắc nối chung hàng hoặc chung cột ta sẽ được một LED ma trận 8x32 với 40 chân điều khiển. Nếu nối chung hàng thì sẽ có 8 chân điều khiển hàng và 32 chân điều khiển cột. Và ngược lại, nếu nối chung cột thì sẽ có 8 chân điều khiển cột và 32 chân điều khiển hàng.

20

Page 21: Báo cáo VXL (2)

Hình ảnh thực tế một mạch LED ma trận 8x32

3.5.5 Khối nguồn

Khối nguồn của mạch sử dụng IC ổn áp LM7805 thuộc dòng 78xx. 78xx

là loại IC dùng để ổn định điện áp dương với điều kiện điện áp đầu vào luôn

luôn lớn hơn đầu ra 3V. Dòng IC 78xx có nhiều loại, ổn định nhiều mức điện áp

khác nhau, cụ thể ở đây 7805 là dùng để ổn định điện áp đầu ra ở mức 5V.

Sơ đồ chân và hình ảnh thực tế IC 7805

7805 đóng gói dạng TO-220 gồm có 3 chân:

1. Vin: Chân đầu nguồn vào

2. GND: Chân nối đất

3. Vo: Chân đầu nguồn ra

Như chúng ta biết, mạch ổn áp dùng Diode Zener tuy nhỏ gọn, đơn giản

nhưng có nhược điểm cho dòng điện nhỏ (~20mA). Để tạo ra một điện áp cố

định nhưng dòng điện lớn hơn người ta mắc thêm một Tranzitor để khuếch đại

như sơ đồ dưới đây:

21

Page 22: Báo cáo VXL (2)

Sơ đồ cấu tạo IC ổn áp 7805

Đây cũng chính là sơ đồ cấu tạo của IC 7805. Thông qua R và Dz ghim

điện áp cố định trên chân E của Tranzitor Q1

Mạch ổn áp dùng trên ổn áp 7805 (78xx nói chung) rất ổn định và hiệu

quả nên được sử dụng rộng rãi, sơ đồ lắp mạch đơn giản như sau:

Sơ đồ mạch ổn áp dùng IC ổn áp 7805

3.6 SƠ ĐỒ MÔ PHỎNG

Sơ đồ mô phỏng mạch hiển thị dùng LED ma trận 8x32 được thiết kế trên

phần mềm Proteus 7.5 Sp2. Do những đặc thù của phần mềm và những linh

kiện trong đó nên trong mạch mô phỏng không cần khối nguồn, mạch tạo dao

động cũng như mạch reset cho vi điều khiển.

22

Page 23: Báo cáo VXL (2)

Begin

Lấy độ dài chuỗi ký tự

Kiểm tra chuỗi ký tự

End

Hiển thị

a1 a2 a3

a1 a2

clkstrobe

clkstrobe

data

data

os1os2

Vcc

C1C2C3C4C5C6C7C8

C9C10C11C12C13C14C15C16

C18C19C20C21C22C23C24

C17

Vcc

Vcc

Vcc

Vcc

GN

D

os1

os2

c1 c2 c3 c4 c5 c6 c7 c8 c9 c10

c11

c12

c13

c14

c15

c16

c17

c18

c19

c20

c21

c22

c23

c24

Vcc

Vcc

GN

D

Vcc

F0

F7

F1

F2

F3

F4

F5

F6

F7

F8

F9

F1

0F

11F

12

F1

3F

14

F1

5

F1

6F

17

F1

8F

19

F2

0F

21

F2

2F

23

F1

6F

17

F1

8F

19

F2

0F

21

F2

2F

23

F8

F9

F1

0F11

F1

2F

13

F1

4F

15

F0

F1

F2

F3

F4

F5

F6

h8h7h6h5h4h3h2h1

Vcc

C8

C7

C6

C5

C4

C3

C2

C1

C16

C15

C14

C13

C12

C11

C10

C9 C

24C

23C

22C

21C

20C

19C

18C

17

h8h7h6h5h4h3h2h1h8h7h6h5h4h3h2h1

h1h2h3h4h5h6h7h8

h1 h2 h3 h4 h5 h6 h7 h8

C25

C26

C27

C28

C29

C30

C31

C32

a3C

32C

31C

30C

29C

28C

27C

26C

25

Vcc

F3

1F

30

F2

9F

28

F2

7F

26

F2

5F

24

F3

1F

30

F2

9F

28

F2

7F

26

F2

5F

24

GN

D

Vcc

c25c26

c27c28c29c30c31c32

RA0/AN02

RA1/AN13

RA2/AN2/VREF-/CVREF4

RA4/T0CKI/C1OUT6

RA5/AN4/SS/C2OUT7

RE0/AN5/RD8

RE1/AN6/WR9

RE2/AN7/CS10

OSC1/CLKIN13

OSC2/CLKOUT14

RC1/T1OSI/CCP2 16

RC2/CCP1 17

RC3/SCK/SCL18

RD0/PSP019

RD1/PSP120

RB7/PGD40

RB6/PGC39

RB538

RB437

RB3/PGM36

RB235

RB134

RB0/INT33

RD7/PSP730

RD6/PSP629

RD5/PSP528

RD4/PSP427

RD3/PSP322

RD2/PSP221

RC7/RX/DT26

RC6/TX/CK25

RC5/SDO24

RC4/SDI/SDA23

RA3/AN3/VREF+5

RC0/T1OSO/T1CKI15

MCLR/Vpp/THV1

U1

PIC16F877AQ

015

Q1

1

Q2

2

Q3

3

Q4

4

Q5

5

Q6

6

Q7

7

Q7

'9

SH

_CP

11

ST

_C

P12

DS

14

MR

10

OE

13

U374HC595

Q0

15

Q1

1

Q2

2

Q3

3

Q4

4

Q5

5

Q6

6

Q7

7

Q7

'9

SH

_CP

11

ST

_C

P12

DS

14

MR

10

OE

13

U474HC595

Q0

15

Q1

1

Q2

2

Q3

3

Q4

4

Q5

5

Q6

6

Q7

7

Q7

'9

SH

_CP

11

ST

_C

P12

DS

14

MR

10

OE

13

U574HC595

R110k

1B1

2B2

3B3

4B4

5B5

6B6

7B7

8B8

1C18

2C17

3C16

4C15

5C14

6C13

7C12

8C11

CO

M10

U7ULN2803

1B1

2B2

3B3

4B4

5B5

6B6

7B7

8B8

1C18

2C17

3C16

4C15

5C14

6C13

7C12

8C11

CO

M10

U8ULN2803

23456789

1

RP1

10k

h1h2h3h4h5h6h7h8

23456789

1

RP2

1k

23456789

1

RP3

1kPACKAGE=RESPACK-8

23456789

1

RP4

1k

1B1

2B2

3B3

4B4

5B5

6B6

7B7

8B8

1C18

2C17

3C16

4C15

5C14

6C13

7C12

8C11

CO

M10

U2ULN2803

X1CRYSTAL

C1

30p

C2

30p

9 10 11 12 13 14 15 16

1 2 3 4 5 6 7 8

A1MATRIX-8X8-GREEN

9 10 11 12 13 14 15 16

1 2 3 4 5 6 7 8

A2MATRIX-8X8-GREEN

9 10 11 12 13 14 15 16

1 2 3 4 5 6 7 8

A3MATRIX-8X8-GREEN

9 10 11 12 13 14 15 16

1 2 3 4 5 6 7 8

A4MATRIX-8X8-GREEN

Q0

15

Q1

1

Q2

2

Q3

3

Q4

4

Q5

5

Q6

6

Q7

7

Q7

'9

SH

_CP

11

ST

_C

P12

DS

14

MR

10

OE

13

U674HC595

1B1

2B2

3B3

4B4

5B5

6B6

7B7

8B8

1C18

2C17

3C16

4C15

5C14

6C13

7C12

8C11

CO

M10

U9ULN2803

23456789

1

RP5

RESPACK-8

3.7 SƠ ĐỒ THUẬT TOÁN

3.7.1 Sơ đồ thuật toán tổng thể

Sơ đồ thuật toán tổng thể

23

Page 24: Báo cáo VXL (2)

Ký tự = 0

Cột > 5

Copy font ký tự vào bộ đệm

Ký tự ++

Hiển thị ra cột

Cột = 0

Cột ++

Ký tự > Độ dài chuỗiĐ

S

Đ

3.7.2 Sơ đồ thuật toán khối hiển thị

Sơ đồ thuật toán khối hiển thị

24

Page 25: Báo cáo VXL (2)

Phần IV: Xây dựng hệ thống4.1 XÂY DỰNG PHẦN MỀM

4.1.1 Sơ đồ thuật toán cho hệ thống

Việc thiết kế phần mềm cho hệ thống chính là việc xây

dựng chương trình điều khiển nạp vào Vi xử lý. Trước tiên phải

có sơ đồ thuật toán điều khiển để xử lý các vấn đề về nguyên

tắc hoạt động của mạch.

Các vấn đề đặt ra là:

- Xuất ra khối điều khiển một mảng kí tự đã được đặt

sẵn.

- Cho các ký tự chạy từ phải sang trái

- Chỉ cần nhập một mảng ký tự vào phần mềm là có

thể thay đổi được mà không cần lập trình lại

Sau đây là sơ đồ thuật toán

4.1.2 Chương trình nạp vào vi điều khiển 16F877A

Chương trình cho hệ thống quang báo sử dụng LED ma trận 8x32 được

soạn thảo trên trình biên dịch CCS 4.104 bằng ngôn ngữ C. Sau đây là chương

trình:

//-------------------------------DO AN MON HOC VI XU LI-------------------------//

//---------------------------------LED MATRIX 8X32----------------------------------//

// Phan cung : PIC 16F877A - Thach anh 20MHz //

// IC ghi dich 74HC595 //

// IC khuyech dong ULN2803 //

//--------------------------------------------------------------------------------------------//

#include "16f877a.h"

#include "font1.h"

#include "font2.h"

#include "font3.h"

#use delay(clock = 20000000)

25

Page 26: Báo cáo VXL (2)

#byte PortB = 0x06 //Dinh nghia thanh ghi

#byte PortC = 0x07

#bit data = PortC.4

#bit clk = PortC.5

#bit strobe = PortC.6

/*typedef struct{

int8 b[8]; //Data

}T_font;

const T_font

font[]={0xFF,0x80,0x80,0xB6,0xB6,0xC9,0xFF,0xFF,//B

0xFF,0xFE,0xFE,0x80,0x80,0xFE,0xFE,0xFF,//T

0xFF,0x80,0x80,0xBF,0xBF,0x9F,0xFF,0xFF,//L

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE

0xFF,0xE0,0xC0,0xBF,0xDF,0xE0,0xFF,0xFF,//V

0xFF,0x9C,0xEB,0xF7,0xEB,0x9C,0xFF,0xFF,//X

0xFF,0x80,0x80,0xBF,0xBF,0x9F,0xFF,0xFF,//L

0xFF,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,//-

0xFF,0xFE,0xFE,0x80,0x80,0xFE,0xFE,0xFF,//T

0xFF,0x80,0xF7,0xFB,0xFB,0x87,0xFF,0xFF,//h

0xFF,0xFF,0xBB,0x82,0xBF,0xFF,0xFF,0xFF,//i

0xFF,0xC7,0xAB,0xAB,0xAB,0xF7,0xFF,0xFF,//e

0xFF,0xFF,0xFB,0xC0,0xBB,0xBB,0xFF,0xFF,//t

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//

0xFF,0xFF,0x80,0xEF,0xD7,0xBB,0xFF,0xFF,

0xFF,0xC7,0xAB,0xAB,0xAB,0xF7,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xBE,0x80,0xBF,0xFF,0xFF,0xFF,

0xFF,0xC7,0xAB,0xAB,0xAB,0xF7,0xFF,0xFF,

0xFF,0xC7,0xBB,0xBB,0xC7,0x80,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0x83,0xFB,0x87,0xFB,0x87,0xFF,0xFF,

0xFF,0xDF,0xAB,0xAB,0xAB,0xC7,0xFF,0xFF,

26

Page 27: Báo cáo VXL (2)

0xFF,0xFF,0xFB,0xC0,0xBB,0xBB,0xFF,0xFF,

0xFF,0x83,0xF7,0xFB,0xFB,0xF7,0xFF,0xFF,

0xFF,0xFF,0xBB,0x82,0xBF,0xFF,0xFF,0xFF,

0xFF,0xBB,0xD7,0xEF,0xD7,0xBB,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xC9,0xB6,0xB6,0xB6,0xC9,0xFF,0xFF,

0xFF,0xBB,0xD7,0xEF,0xD7,0xBB,0xFF,0xFF,

0xFF,0x8D,0xB6,0xB6,0xB6,0xB9,0xFF,0xFF,

0xFF,0xE7,0xEB,0xED,0x80,0xEF,0xFF,0xFF,};

*/

char string_t[] = "Hello! BTL VXL-Mach hien thi led ma tran su

dung pic16f877a ";

unsigned char led[32];

unsigned char

font_buffer[8]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF} ;

unsigned char len,vi_tri,ki_tu,addr,i;

//Chuong trinh day du lieu vao HC595

void HC595(char cot)

{

for (i =0;i<cot;i++)

{

data = 1;

clk = 1;

clk = 0;

}

data = 0;

clk =1;

clk =0;

for( i = (cot+1); i<32;i++)

{

27

Page 28: Báo cáo VXL (2)

data = 1;

clk = 1;

clk = 0;

}

strobe =1 ;

strobe =0 ;

}

#int_timer0 //khai bao su dung ngat timer0

void hamngat(void)

{

set_timer0(87);

PortB =0xFF;

HC595(addr);

PortB = led[addr];

addr++;

if(addr>=32) addr =0;

}

void len_string() //lay do dai cua xau

{

len =0;

while((string_t[len])!='\0') len++;

}

// Chuong trinh con Copy font chu vao bo dem

void copy_font(void)

{

char j;

if(string_t[ki_tu]<64)

for(j=0;j<=7;j++) font_buffer[j]=font1[(string_t[ki_tu])-

32].b[j];

else if(string_t[ki_tu]>96)

28

Page 29: Báo cáo VXL (2)

for(j=0;j<=7;j++) font_buffer[j]=font3[(string_t[ki_tu])-

97].b[j];

else for(j=0;j<=7;j++) font_buffer[j]=font2[(string_t[ki_tu])-

64].b[j];

}

/*void copy_font(void)

{

char j;

for(j=0;j<=7;j++) font_buffer[j]=font[len].b[j];

len++;

if(len>31) len =0;

} */

//Ham tao hieu ung chu dich trai

void dich_trai()//Ham hien thi dich

{

char j;

if(vi_tri>7){

vi_tri=0;

copy_font();

ki_tu++;

}

else{

led[0]=font_buffer[vi_tri];

vi_tri++;

}

delay_ms(30);

for(j=31;j>0;j--)

led[j]=led[j-1];

}

//Chuong trinh khi do dai cua sau <=3

29

Page 30: Báo cáo VXL (2)

void hien_thi()

{

i =0;

for(ki_tu =0;ki_tu<=len-1;ki_tu ++)

{

copy_font();

for(vi_tri = 0;vi_tri <=7;vi_tri++)

{

led[31-i] = font_buffer[vi_tri];

i++;

}

}

}

//Chuong trinh turn off cac led

void turn_off_all()

{

for(i=0;i<=31;i++) led[i] = 0xff;

}

//Chuong trinh chinh

void main()

{

set_tris_b(0);

set_tris_c(0); enable_interrupts(int_rtcc);

set_timer0(87);

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);

enable_interrupts(global); len_string();

addr=0;

turn_off_all();

while(1)

30

Page 31: Báo cáo VXL (2)

{

while(ki_tu <len) dich_trai();

ki_tu = 0;

}

}

Phần V : Kết luận.

Đã tạo được dòng chữ chạy từ phải qua trái trên bảng LED ma

trận 8x32 tuy nhiên do trình độ còn hạn chế nên chưa tạo được

thêm nhiều hiệu ứng đẹp mắt cũng như chưa kết nối được hệ

thống với các thiết bị khác như máy tính, bàn phím cũng như

các module khác.

Phần VI: Tài liệu tham khảo.

http://www.picvietnam.com/forum/

http://www.dientuvietnam.net/forums/

Tài liệu CCS tiếng Việt

31