Upload
nhan-bui
View
204
Download
4
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
#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
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
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
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
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
{
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