You are on page 1of 35

TRƯỜNG ĐẠI HỌC GIAO THÔNG VÂN TẢI

KHOA Điện-Điện Tử
---------------o0o---------------

BÁO CÁO: BÀI TẬP LỚN MÔN HỌC

KỸ THUẬT VI XỬ LÝ

GIẢNG VIÊN HƯỚNG DẪN : TS. NGUYỄN TRUNG THỊ HOA TRANG
SINH VIÊN THỰC HIỆN : ĐÀO THỊ LAN HƯƠNG(Nhóm trưởng)
NGUYỄN ANH SƠN
ĐÀO THỊ My
LÊ THỊ TỐ UYÊN
NGUYỄN CÔNG BÁCH
HỒ SỸ KIÊN

NHÓM : 01
ĐỀ SỐ : 01

Hà Nội, ngày 17, tháng 04, năm 2023


Đề bài: Thiết kế hệ thống đèn quảng cáo (ít nhất 4 hiệu ứng) cho cổng trại sử
dụng Timer nháy đèn theo chu trình dòng chữ: TĐH3-K62. Sử dụng thêm một nút
nhấn để tạo 4 hiệu ứng đơn.
- Nhấn 1 lần thì hiệu ứng 1
- Nhấn 2 lần thì hiệu ứng 2
- Nhấn 3 lần thì hiệu ứng 3
- Nhấn 4 lần thì hiệu ứng 4
I - Thực hiện:
- Mô phỏng mạch trên phần mềm Proteous ( Nguyễn Anh Sơn)
- Lập trình vi xử lý trên MPLAP XIDE (Nguyễn Anh Sơn)
- Lưu đồ thuật toán (Hồ Sỹ Kiên)
- Phân tích mạch(Nguyễn Anh Sơn)
- Mô phỏng mạch trên phần mềm Fritzing ( Nguyễn Công Bách)
- Lắp mạch và linh kiện trên Board test mạch (6 thành viên nhóm)
- Câu hỏi Quizizz ( Đào Thị Lan Hương)
- Nội dung báo cáo ( Đào Thị Lan Hương)
- Slide ( Đào Thị My)
- Thuyết trình ( Lê Thị Tố Uyên)
II – Phần mềm sử dụng:
+ Sử dụng phần mềm MPLAP XIDE: là phần mềm chạy trên máy tinh nhằm phát
triển các ứng dụng cho các Bộ vi điều khiển và các Bộ điều khiển tín hiệu số của
Microchip.
+ Sử dụng phần mềm Proteous: là phần mềm mô phỏng vật lý các mạch điện tử
( giả lập linh kiện trên máy tính. Phần mềm gồm 2 chương trình chính:

- ISIS cho phép vẽ sơ đồ nguyên lý và mô phỏng mạch.


- ARES dùng để vẽ mạch in.

+ Sử dụng phần mềm Tritzing vẽ mô phỏng mạch lắp trên board mạch.
III - Linh kiện sử sụng:

1. PIC16F877A
2. LED đơn
3. Board test mạch
4. 2 nút nhấn: nút nhấn dùng để reset mạch và nút nhấn tạo 4 hiệu ứng
5. Thạch anh 8MHz
6. Transistor NPN(C
7. Điện trở vòng màu
8. Tụ điện
9. Bộ nạp PIC Kit2
10.Dây nối

VI - Cơ sở lý thuyết:
1. Tìm hiểu về PIC16F877A.
- PIC16F877A là loại vi điều 8 bit tầm trung của hãng Microchip.
- PIC16F877A là một Vi điều khiển PIC 40 chân và được sử dụng hầu hết
trong các dự án và ứng dụng nhúng.
- Nó có năm cổng bắt đầu từ cổng A đến cổng E.
- PIC16F877A hỗ trợ cả ngắt chân phần cứng và ngắt bộ định thời.
- PIC16F877A có kiến trúc Havard, sử dụng tập lệnh kiểu RISC với chỉ 35
lệnh cơ bản.
- Tốc độ hoạt động tối đa cho phép là20MHz, tương ứng với mỗi chu kỳ lệnh
là 200ns.
- Bộ nhớ dữ liệu: Là bộ nhớ EEPROM chia thành 4 bank. Mỗi bank có dung
lượng 128 byte gồm các thanh ghi có chức năng đặc biệt SFR( nằm ở vùng
địa chỉ thấp) và các thanh ghi mục đích chung GPR (nằm ở vùng địa chỉ còn
lại trong bank).
- Các thanh ghi PORTA, PORTB , PORTC, PORTD, PORTE đều chứa ở
bank 0.
- Các ngắt cơ bản của PIC16F877A:
 External: Ngắt ngoài.
 Timer0;
 Timer1;
 Timer2;
 RB Port Change: Thay đổi cổng RB.
 Parallel Slave Port Read/Write: Cổng Slave song song Đọc/Ghi.
 Công cụ chuyển đổi A/D;
 USART nhận;
 UART truyền;
 Synchronous Serial Port: Cổng tiếp nối đồng bộ.
 CCP1 (Capture,So sánh, PWM);
 CCP2 (Capture,So sánh, PWM);
 TMR2 to PR2 Match: Kết hợp TMR2 đến PR2;
 Comparator: Bộ so sánh;
 Thao tác ghi EEPROM;
 Bus Collision: Va chạm bus.
- Các thanh ghi chính được sử dụng cho ngắt bao gồm:
 Thanh ghi INTCON
 Thanh ghi OPTION_REG, T1CON, T2CON
 Thanh ghi PIE1
 Thanh ghi PIR1
 Thanh ghi PIE2
 Thanh ghi PIR2

2. Ghép nối LED đơn.


- Phân loại 2 chế độ:
+ Chế độ bơm dòng:
Đưa ra giá trị logic 1 (ứng với điện áp +5V) để phân cực thuận cho LED .
Dòng điện I sẽ chảy từ cổng vi xử lý qua điện trở hạn dòng, qua LED về đất
(Hình a):

I/O port
LED

Hình a. Chế độ bơm dòng


+ Chế độ nuốt dòng:
Đưa ra giá trị logic 0 (ứng với điện áp đưa ra là 0V) .
Dòng điện lúc này sẽ chảy từ dương nguồn qua điện trở hạn dòng, qua LED
vào chân vi xử lý.( Hình b)
VCC

LED
R

I/O port
Hình b. Chế độ nuốt dòng

3. Board test mạch:

- Bread board (hay còn gọi là test board) là công cụ được sử dụng rất nhiều để
thiết kế và thử nghiệm mạch mà không cần hàn các linh kiện để tạo mạch.
- Nó giúp gắn các linh kiện cũng như tái sử dụng rất dễ, có thể thay đổi thiết
kế mạch một cách dễ dàng.
- Cấu tạo của Breadboard:
+ Khu vực trung tâm chính của Breadboard là một khối gồm 2 cột.
+ Mỗi cột được tạo thành từ nhiều hàng .
+ Mỗi hàng được nối điện theo từng hàng.
+Dọc hai bên là hai bus dọc để cấp điện vào cột bên trong.
- Cách sử dụng Breadboard:
Trong hình trên vi xử lý 16F877A được đặt trên các hàng từ 42 đến 61 của
cột B và F.
Nếu nối điện tại bất kỳ điểm nào ở vị trí A42, C42, D42, E42 cũng đều tương
tự như nối với chân chip ở B42 ( vì hàng A42-E42 được nối điện với nhau).
Có một khoảng cách giữa hàng E và F nên hai chân của chip trong hàng 5
không được nối với nhau.
Tương tự nếu nối điện tại bất kỳ điểm nào ở vị trí G42, H42, I42, J42 cũng
đều tương tự như nối với chân chip ở F42 ( vì hàng F42-J42 được nối điện
với nhau).
- Tóm tắt lại đường dẫn điện:

Lưu ý cách nối:


+Nếu nối dây trên cùng 1 hàng thì sẽ không có ý nghĩa gì vì các hàng đã
được nối với nhau.
+Để nối các linh kiện điện tử với nhau ta nối dây giữa các hàng.
+Trên bus dọc nối điện với nguồn và nối dây từ bus dọc tới hàng để cấp
nguồn.
4. BJT:
+ BJT NPN: Ghép nhiều LED song song, để các LED phát sáng cần đưa ra
giá trị logic 1.
+ BJT PNP: Ghép nhiều LED song song, để các LED phát sáng cần đưa ra
giá trị logic 0.
5. LED:
LED (viết tắt của Light Emitting Diode, có nghĩa là điốt phát quang) là các
điốt có khả năng phát ra ánh sáng hay tia hồng ngoại, tử ngoại. Cũng giống
như điốt, LED được cấu tạo từ một khối bán dẫn loại p ghép với một khối
bán dẫn loại n. Độ sáng của LED phụ thuộc vào cường độ năng lượng phát ra
từ điốt hoặc từ 2 điện cực bên trong.
+Cấu tạo của LED:
6. Nút nhấn nhả:
Cấu tạo của nút nhấn gồm: hệ thống lò xo, hệ thống các tiếp điểm thường
hở (NO) – thường đóng (NC) và vỏ bảo vệ.
Các tiếp điểm sẽ chuyển trạng thái khi có lực tác động vào nút ấn. Ngược
lại, tiếp điểm sẽ trở lại trạng thái ban đầu khi không còn lực tác động vào
nút ấn.
7. Bộ nạp PIC KIT2( Khối mạch nạp và reset)
Khi muốn nạp chương trình từ trên máy tính xuống ta phải kết nối cổng USB
với mạch nạp và đồng thời kết nối đầu ra của mạch nạp tới cổng nạp P1.

8. Ghép nối với phím đơn:


+ Khi nhấn nút đọc được giá trị GPIO ở mức 0 ( Hình c).

Hình c. Pull up resistor


+ Khi ấn nút đọc được giá trị GPIO ở mức 1( Hình d).

Hình d. Pull down resistor

V – Mô Phỏng:
1. Mô phỏng mạch trên phần mềm Proteous:
- Sử dụng transistor NPN
- Khối dao động sử dụng tinh thể thạch anh tần số 8MHz
- Sử dụng BJT NPN: Ghép nhiều LED song song tạo hình lần lượt các ký tự:
“T”, “Đ”, “H”, “3”, “-“, “K”, “6”, “2”, để các LED phát sáng cần đưa ra giá
trị logic 1.
- Sử dụng Pull up resistor để reset lại mạch.
- Nút nhấn nối vào chân RB0/INT của PIC16F877A để thay đổi các hiệu ứng.
Hình ảnh:

Link file mô phỏng trên Proteous:

Video chạy các hiệu ứng:


2. Lập trình vi xử lý trên phần mềm MPLAP XIDE.
- Phân tích:
a. Bốn hiệu ứng được sử dụng là:
+ Hiệu ứng 1: hiệu ứng sáng đuổi “sangduoi”
+ Hiệu ứng 2: hiệu ứng sáng dần “sangdan”
+ Hiệu ứng 3: hiệu ứng sáng đơn “sangdon”
+ Hiệu ứng 4: hiệu ứng sáng đơn hai bên “sangdonhaiben”
b. Sử dụng hàm delay_ms() sử dụng timer0 với độ trễ 1ms, FOSC=8MHz.
-Cách tính nạp giá trị cho Timer0:

Ghi nhớ:
-Tần số mạch dao động: Fosc
-Tần số lệnh: Fosc/4
-Onetick = Prescaler/(Fosc/4) =(Prescaler*4)/Fosc
-Độ trễ: Delay = Timer Count*tick
-Số đếm thời gian( Timer Count): Count=Delay/tick
-Giá trị đặt cho thanh ghi: RegValue=TimerMax- Count
Tương đương: RegValue=TimerMax-((Delay*Fosc)/(Prescaler*4))
Ví dụ:
 Với FOSC=8MHz, độ trễ 1ms

3. Sơ đồ thuật toán:
- delayTimer_ms (unsigned int t)
__interrupt() ISR (void)

Sangduoi()
Sangdan()

Sangdon()
Sangdonhaiben()
Main()

* Link file code:


4. Phân tích code:
a. Đầu tiên chúng ta sẽ tìm hiểu về các biến, hàm, thư viện được khai báo để
nắm rõ chức năng của từng biến và từng hàm.
 Đầu tiên là khai báo sử dụng thạch anh 8MHZ.

 Tiếp theo là khai báo sử dụng thư viện xc.h

 Khai báo biến count

- Biến count được sử dụng để đếm số lần nút RB0 được bấm qua đó sẽ giúp
điều khiển hiệu ứng của các led trên PORTD.
 Khai báo hàm delayTimer_ms(unsigned int t)
- Hàm delayTimer_ms được sử dụng để tạo độ trễ t ms giây với tham số t
được truyền vào.

- Hàm while(t--): với mỗi giá trị của t ta sẽ cài đặt là hàm while(t--) chạy mất
1 ms bằng cách cài đặt giá trị ban đầu cho timer0 và sử dụng hàm while(!
TMROIF)( Hàm này sẽ chạy cho đến khi cờ báo timer0 tràn =1)
- Để nạp ban đầu cho Tỉmer0 chúng ta sử dụng công thức:
Chọn prescaler = 8(khai báo OPTION_REG = 0x02 đề cài đặt prescaler = 8)
−3 6
Delay∗Fosc 10 ∗8∗10
R egValue = 256 - = 256- =6
4∗Prescaler 4∗8
- Timer0 được nạp ban đầu = 6 và sẽ đếm đến 256.

- Khi nút bấm trên chân RB0 được bấm, chương trình sẽ tạm dừng để chạy
hàm ngắt trước. Khi hàm ngắt được kích hoạt thì biến đếm count sẽ tăng
thêm 1 đơn vị và cờ báo ngắt ngoài INTF trên chân RB0/INT được tắt.
- Để sử dụng ngắt trên chân RB0 thì trong hàm main chúng ta khai báo thanh
ghi INTCON với bit 7 (GIE: bit cho phép ngắt toàn cục), bit 6 ( PEIE: bit
kích hoạt ngắt ngoại vi ) và bit 4 (INTE: bit cho phép ngắt ngoại vi ở chân
RB0) ở mức 1.
 Hàm tạo hiệu ứng led sangduoi()
-Dùng để tạo hiệu ứng các led sáng đuổi nhau.
 Hàm tạo hiệu ứng led sangdan()
- Dùng để tạo hiệu ứng các led sáng dần.

 Hàm tạo hiệu ứng led sangdon()


- Dùng để tạo hiệu ứng các led sáng dồn nhau.

 Hàm tạo hiệu ứng led sangdonhaiben()

- Dùng để tạo hiệu ứng led sáng dồn hai bên

b. Cách thức hoạt động:


 Hàm main
- Đầu tiên chúng ta khai báo TRISB = 0xFF để cài đặt PORTB là đầu vào và
TRISD = 0x00 để cài đặt PORTD là đầu ra. Tiếp theo là đặt giá trị ban đầu
cho PORTD ở mức logic 0.

- Cài đặt prescaler = 8 và cho phép bit 7,6,4 trên thanh ghi INTCON ở mức 1.
-Hàm while (1): Dùng để lặp vô hạn

- Với giá trị ban đầu của biến count = 0 thì không có hàm if nào thỏa mãn điều
kiện
- Khi nút bấm trên RB0 được bấm 1 lần thì hàm ngắt sẽ chạy và biến count sẽ
tang lên 1, khi đó count % 4 ==1(count chia lấy dư 4 bằng 1) và hàm
sangduoi() sẽ được gọi và chạy.
- Tương tự với khi nút bấm được bấm 2, 3 ,4 lần thì lần lượt hàm sangdan(),
sangdon() và sangdonhaiben() sẽ được gọi và chạy.
- Khi nút bấm được bấm n lần thì câu lệnh if nào thỏa mãn (n%4 ==x) thì sẽ
chạy hiệu ứng led trong hàm đó.
5. Mô phỏng mạch trên phần mềm Fritzing:

Phân tích mạch:


- Đề bài mô phỏng đèn tín hiệu hiển thị dòng chữ “ TĐH3-K62”.
- Lắp PIC16F877A vào board mạch từ hàng 42 đến hàng 61.
- Thực hiện lắp LED trên board mạch coi một ký tự là một LED. Tương ứng 8
ký tự là 8 đèn LED.( 2 chân của LED : chân dài ứng với cực dương, chân
ngắn nối với cực âm)
- Sử dụng Transistor NPN. Với 8 LED trên board mạch ta dùng 8 transistor
NPN.
- 2 nút nhấn tương ứng 1 nút reset mạch và 1 nút cho các hiệu ứng.
- Thạch anh 8MHz
- 2 loại tụ: 1 tụ phân cực cho mạch dao động thạch anh tần số 8MHz và 8 tụ
vòng màu.
Cách đấu nối:
+ Cắm lần lượt các Transistor vào vị trí A
+ Dựa vào sơ đồ đấu nối LED đơn dùng BJT NPN:

- Transistor:
Chân B: nối với một chân của điện trở vòng màu
Chân C: nối với cực âm của LED
Chân E: nối với Ground(âm nguồn)
- LED:
Cực âm( chân ngắn) nối với chân B của Transistor
Cực dương(chân dài) nối với dương nguồn.
- Điện trở vòng màu:
Một chân nối với chân B của Transistor
Một chân nối với
- Cực âm của LED nối với chân C của Transistor
- 1 chân điện trở vòng màu nối với cực B của Transistor
- Còn lại chân E của Transistor nối với Ground(âm nguồn).
6. VI – Tiến hành lắp mạch thực tế trên board mạch và chạy thử.
Hình ảnh:
Video:
VII – Câu hỏi trắc nghiệm QUIZIZZ:
Câu hỏi 1: Sử dụng Timer0 tạo độ trễ 1ms với FOSC=4MHz, RegValue=131
thì Prescaler bằng bao nhiêu?
A.2 B.8
C.32 D.64

Câu hỏi 2: Sử dụng Timer2 tạo độ trễ 500us với FOSC=4MHz, tỉ lệ chia phù
hợp là 16 đúng hay sai?
A. ĐÚNG B. SAI

Câu hỏi 3: Hình trên ghép nối LED đơn


Dùng BJT loại nào?

A. BJT loại PNP B. BJT loại NPN

Câu 4: Hình trên cho biết chức năng reset kiểu nào?
A. Reset khi bật nguồn
B. Reset bằng chân
MCLR
C. Reset bằng chương
trình
D. Reset bằng
Watchdog timer

Câu 5: Sử dụng Timer1 tạo độ trễ 100ms với FOSC=20MHz thì giá trị bộ đếm thời
gian là?
A. 3036 B. 34286
C. 4991 D. 131

Câu 6: Cho chương trình sau:


TOSC=0;
PSA=0;
PS2=1;
PS1=1;
PS0=0;
Chọn các phương án đúng:

A. Chương trình trên tương đương B. Chương trình trên tương đương
với OPTION_REG=0X06; và hệ với OPTION_REG=0X05; và hệ
số chia là 00110=1:32 số chia là 00110=1:32
C. Chương trình trên tương đương D. Chương trình trên tương đương
với: OPTION_REG=0X06; và hệ với OPTION_REG=0X05; và hệ
số chia là 00110=1:128 số chia là 00110=1:128

Câu 7: Để các LED phát sáng cần đưa ra giá trị logic?

A. Mức logic 0
B. Mức logic 1

Câu 8: Sử dụng Timer2 tạo độ trễ 500us với FOSC=4MHz, tỉ lệ chia phù hợp là?
A. 1 B. 2
C. 4 D. 8
Câu 9: Chương trình trên để tạo hiệu ứng sangdonhaiben đúng hay sai?

A. Đúng

B. Sai

Câu 10: Mạch Reset như hình trên là kiểu Reset bằng chân MCLR đúng hay
sai?

A. Đúng

B. Sai

Câu 11: Chương trình trên dùng để tạo hiệu ứng?


A. Hiệu ứng sangdon

B. Hiệu ứng sangdan

C. Hiệu ứng sangduoi

D. Hiệu ứng
sangduoihaiben

Câu 12: Cho chương trình tạo độ trễ 1s dùng timer2 với FOSC=4MHz, tỉ lệ
chia là 4. Chương trình trên đúng hay sai?

A. Đúng

B. Sai

Câu 13: Chọn đáp án đúng:


Thanh ghi sử dụng cho chương trình ngắt là?
A. Thanh ghi PRI1 C. Thanh ghi INTCON
B. Thanh ghi PEI1
Câu 14: Chương trình trên dùng để tạo hiệu ứng nào?
A. Hiệu ứng sangdon

B. Hiệu ứng sangdan

C. Hiệu ứng sangduoi

D. Hiệu ứng
sangduoihaiben

Câu 15: Để LED phát sáng cần đưa ra giá trị logic?
A. Mức logic 0
B. Mức logic 1

Câu 16: Cho ví dụ sau:PORTCbits.RC1=1 và PORTB=0b10000000 thuộc kiểu cấu


trúc gán dữ liệu nào?
A. Gán dữ liệu theo byte/Gán dữ liệu theo byte
B. Gán dữ liệu theo bit/Gán dữ liệu theo bit
C. Gán dữ liệu theo byte/Gán dữ liệu theo bit
D. Gán dữ liệu theo bit/Gán dữ liệu theo byte
Cau 17: Khi tác động ấn nút sẽ đọc được giá trị GPIO là mức 1 đúng hay sai?

A. Đúng

B. Sai

Câu 18: Chọn câu trả lời đúng:


Các thanh ghi TRISA, TRISB, TRISC, TRISD, TRISE được chứa ở bank nào của
PIC16F877A?
A. Bank0 B. Bank1
C. Bank2 D. Cả 3 phương án sai
Câu 19: Hình trên ghép nối LED đơn dùng BJT loại nào?
A. BJT loại PNP

B. BJT loại NPN

Câu 20: Chọn câu trả lời đúng:


Các thanh ghi PORTA, PORTB, PORTC, PORTD, PORTE được chứa ở bank nào
của PIC16F877A?
A. Bank0 B. Bank1
C. Bank2 D. Cả 3 phương án sai

You might also like