You are on page 1of 33

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỂN THÔNG

----------

BÁO CÁO KĨ THUẬT VI XỬ LÝ


Đề tài: Thiết kế hệ thống đèn giao thông ngã tư

Giảng viên hướng TS Nguyễn Hoàng Dũng


dẫn:
Nhóm sinh viên: Lớp KSTN ĐTVT K61
Họ tên MSSV
Đào Duy Hùng 20161923
Đỗ Quốc Hưng 20162007

Hà Nội, tháng 6 năm 2019

1
Lời nói đầu
Trong những năm gần đây, cùng với sự phát triển mạnh mẽ của ngành công
nghiệp chế tạo linh kiện bán dẫn và vi mạch tổng hợp, đã kéo theo sụ ra đời và phát triển
của kĩ thuật vi điều khiển. Với nhiều ưu điểm, kĩ thuật vi điều khiển đã được sử dụng
rộng rãi ở nhiều lĩnh vực khác nhau như: mạch điều khiển hệ thống đèn, mạch đếm sản
phẩm, mạch điều khiển các thiết bị điều khiển từ xa,… Bằng cách áp dụng kĩ thuật vi xử
lý vào trong quá trình sản xuất và vận hành, con người đã giải quyết và tạo ra được nhiều
ứng dụng sản phẩm hữu ích làm thay đổi cuộc sống.
Một trong những ứng dụng thiết thực nhất vi điều khiển chính là hệ thống điều
khiển đèn giao thông tại các ngã tư mà chúng ta vẫn thường thấy. Đối với hệ thống giao
thông của nước ta hiện nay, vấn đề an toàn và tránh ùn tắc tại các ngã tư là một vấn đề
nổi cộm và mang nhiều thách thức được toàn xã hội quan tâm. Vì vậy, con người và các
phương tiện hướng dẫn giao thông đều mang ý nghĩa vô cùng quan trọng. Hệ thống đèn
giao thông không chỉ giúp chỉ dẫn, phân luồng giao thông, mà còn giúp hạn chế những
xung đột xảy ra khi tham gia lưu thông trên các ngã tư, hạn chế ùn tắc. Do đó, cần thiết
phải thiết kế và cho ra đời những mạch điều khiển hệ thống đèn giao thông sao cho thông
minh, hiệu quả và dễ sử dụng. Cũng vì những lý do đó mà nhóm chúng em gồm 2 thành
viên là: Đào Duy Hùng, Đỗ Quốc Hưng đã chọn đề tài “xây dựng hệ thống đèn giao
thông sử dụng vi điều khiển Atmega328p để hoàn thành bài tập lớn cho bộ môn Kĩ thuật
vi xử lý của mình.
Báo cáo của nhóm được xây dựng theo sườn mô hình 9 bước thiết kế một sản
phẩm mạch điện tử, sẽ trình bày đầy đủ quá trình hình thành ý tưởng, nguyên lý hoạt
động, cho đến khi hoàn thiện sản phẩm. Sản phẩm và báo cáo của chúng em có thể còn
nhiều thiết sót, rất mong được thầy góp ý để chúng em có thể hoàn thiện hơn.
Chúng em chân thành cảm ơn thầy Nguyễn Hoàng Dũng đã tận tình chỉ bảo góp
ý, gợi ý giải pháp để nhóm có thể hoàn thành đề tài!

2
Mục lục

Lời nói đầu ....................................................................................................................... 2

Mục lục ............................................................................................................................. 3

Danh sách các bảng biểu .................................................................................................. 6

Chương 1. Mô tả kỹ thuật và xác lập kế hoạch ................................................................ 7

1.1. Tổng quan và xác định đề tài ................................................................................ 7

1.2. Mô tả kỹ thuật ....................................................................................................... 7

1.2.1. Yêu cầu chức năng ......................................................................................... 7

1.2.2. Yêu cầu phi chức năng ................................................................................... 8

1.3. Xác lập kế hoạch ................................................................................................... 8

1.3.1. Xác lập công việc và nhân lực ....................................................................... 8

1.3.2. Kế hoạch chung .............................................................................................. 8

1.3.3. Bảng nhân lực ................................................................................................ 9

1.3.4. Phân chia công việc........................................................................................ 9

Chương 2. Thiết kế kiến trúc ......................................................................................... 10

2.1. Sơ đồ khối ........................................................................................................... 10

2.2. Khối nguồn .......................................................................................................... 11

2.2.1. Giới thiệu 7805............................................................................................. 11

2.2.2. Sơ đồ nguyên lý............................................................................................ 11

2.3. Khối vi điều khiển ............................................................................................... 12

2.3.1. ATMEGA 328P ........................................................................................... 12

2.3.2. Sơ đồ nguyên lý khối xử lý. ......................................................................... 15

2.4. Khối nút điều khiển ............................................................................................. 16


3
2.5. Khối dịch bit ........................................................................................................ 16

2.6. Khối hiển thị ........................................................................................................ 19

Chương 3. Cấu trúc chương trình vi điều khiển............................................................. 21

3.1. Sơ đồ trạng thái ................................................................................................... 21

3.2. Chương trình xử lý tín hiệu từ khối nút điều khiển ............................................ 22

3.3. Chương trình truyền dữ liệu ra khối dịch bit ...................................................... 22

3.4. Chương trình quét led ......................................................................................... 23

3.5. Chương trình mô phỏng thời gian thực ............................................................... 23

Chương 4. Thử nghiệm và mô phỏng ............................................................................ 24

4.1. Mô phỏng proteus ............................................................................................... 24

4.2. Thử nghiệm trên bo trắng .................................................................................... 24

4.3. Vẽ mạch nguyên lí và PCB trên Altium Designer .............................................. 25

4.4. In mạch và hoàn thiện sản phẩm ......................................................................... 26

4.5. Nhận xét .............................................................................................................. 27

4.5.1. Ưu điểm ........................................................................................................ 27

4.5.2 Nhược điểm ................................................................................................... 27

Kết luận .......................................................................................................................... 28

Tài liệu tham khảo .......................................................................................................... 29

Phụ lục ............................................................................................................................ 30

Phụ lục 1: Code chương trình xử lý tín hiệu khối nút điều khiển .............................. 30

Phụ lục 2: Code chương trình truyền dữ liệu ra khối dịch bit.................................... 31

Phụ luc 3: Code chương trình quét led ....................................................................... 32

Phụ lục 4: Code chương trình mô phỏng thời gian thực ............................................ 33

4
Danh sách hình vẽ
Hình 2.1: Sơ đồ khối hệ thống đèn giao thông .............................................................. 10
Hình 2.2: Sơ đồ chân 7805 ............................................................................................. 11
Hình 2.3: Sơ đồ nguyên lý khối nguồn .......................................................................... 11
Hình 2.4: Atmega328 ..................................................................................................... 12
Hình 2.5: Bộ dao động thạch anh cấp tín hiệu dao động cho VĐK ............................... 13
Hình 2.6: Bộ reset bằng nút của vi điều khiển atmega328 ............................................ 14
Hình 2.7: Sơ đồ nguyên lý khối xử lý ............................................................................ 15
Hình 2.8: Tín hiệu vào ra khối vi xử lý .......................................................................... 15
Hình 2.9: Sơ đồ khối nút điều khiển .............................................................................. 16
Hình 2.10: IC 74HC595 ................................................................................................. 17
Hình 2.11: Sơ đồ nguyên lý IC74HC595 ....................................................................... 18
Hình 2.12: Sơ đồ chân led 7 thanh 2 chữ số catot chung ............................................... 19
Hình 2.13: Hiển thị số 1 trên led 7 thanh 2 chữ số ........................................................ 19
Hình 3.1: Sơ đồ chuyển trạng thái của chương trình ..................................................... 21
Hình 4.1: Mô phỏng sơ đồ nguyên lý mạch trên proteus 8.6 ......................................... 24
Hình 4.2: Mạch thử nghiệm thực tế trên bo mạch trắng ................................................ 24
Hình 4.3: Mạch in thiết kế trên altium ........................................................................... 25
Hình 4.4: Hình ảnh 3d của mạch .................................................................................... 26
Hình 4.5: Bottom layer mạch đèn giao thông ................................................................ 26
Hình 4.6: Mạch hoàn thiện ............................................................................................. 27

5
Danh sách các bảng biểu
Bảng 1.1: Bảng kế hoạch chung ....................................................................................... 8
Bảng 1.2: Bảng nhân lực .................................................................................................. 9
Bảng 1.3: Bảng phân chia công việc ................................................................................ 9
Bảng 2.1: Bảng mô tả chức năng chân Atmega 328 ...................................................... 12
Bảng 2.2: Bảng mô tả chân IC 74HC595....................................................................... 17
Bảng 2.3: Bảng mô tả tín hiệu vào/ra các chân IC74HC595 ......................................... 19
Bảng 2.4: Bảng giải mã chân hiển thị trên led 7 đoạn 2 chữ số ..................................... 20
Bảng 3.1: byte dịch ra khối dịch bit ............................................................................... 22

6
Chương 1. Mô tả kỹ thuật và xác lập kế hoạch
1.1. Tổng quan và xác định đề tài
Đề tài của chúng em được phân công là thiết kế và xây dựng hệ thống đèn giao thông
ngã tư dạng mô hình. Chi tiết hệ thống của đèn giao thông sẽ gồm 2 tập hợp đèn (đỏ,
xanh, vàng) cùng với linh kiện số hiển thị thời gian đếm của các đèn. Mô hình được xây
dựng với các chức năng cơ bản và một số chức năng thêm sẽ được trình bày trong phần
1.2. Mô tả kỹ thuật
1.2.1. Yêu cầu chức năng
- Hiển thị đèn 3 màu: Xanh – đỏ - vàng ứng với 2 hướng đi tại một ngã tư. Ý nghĩa
của từng đèn như sau: Xanh - các phương tiện được phép đi thẳng hoặc rẽ phải; Đỏ - các
phương tiện không được đi quá giới hạn vạch kẻ đường ; Vàng – báo hiệu các phương
tiện chuẩn bị dừng lại vì sắp đến tín hiệu đèn đỏ.
- Hiển thị thời gian trùng khớp với sự xuất hiện của 3 màu. Do tính chất của giao
thông nước ta, thời gian đèn đỏ thường lớn nhất và bằng tổng thời gian đèn xanh với đèn
vàng cộng lại.
- Cho phép người dùng điều chỉnh thời gian hiển thị trực tiếp cho đèn vàng và đèn
xanh. Người dùng tự cân đối điều chỉnh thời gian hiển thị của đèn vàng và đèn xanh sao
cho đèn đỏ (thời gian hiển thị đèn đỏ bằng tổng thời gian hiển thị đèn vàng và đèn xanh)
có thời gian hiển thị từ 00 đến 99 giây.
- Hệ thống có thể reset bằng tay hoặc sẽ tự reset khi mất nguồn. Chế độ ban đầu khi
khởi động sau reset cho phép người dùng có thể cài đặt thời gian gốc bắt đầu (với giờ và
phút). Ngoài ra có thể thay đổi chương trình vi điều khiển qua thiết bị USB PL 2303.
- Sau khi cài đặt thời gian bắt đầu hoạt động (thời gian gốc). Hệ thống lấy đó làm
mốc quy chiếu để hoạt động theo chế độ: hoạt động điều khiển giao thông từ 5 giờ sáng
đến 11 giờ tối và chuyển sang đèn vàng từ 11 giờ tối đến 5 giờ sáng hôm sau.
- Ngắt trạng thái hoạt động điều khiển giao thông chuyển sang trạng thái chỉ đèn đỏ
hoặc chỉ đèn xanh hoặc chỉ đèn vàng để phục vụ một số mục đích nhất định.

7
1.2.2. Yêu cầu phi chức năng
- Mạch sử dụng nguồn hoạt động công suất thấp. tiêu tốn ít năng lượng, có khả năng
hoạt động lâu dài.
- Sử dụng 1 cặp led 7 thanh 2 chữ số để hiện thời gian đèn sáng ứng với từng màu,
hiển thị rõ nét, dễ quan sát trong điều kiện ánh sáng ban ngày.
- Sử dụng con vi xử lý thuộc họ điều khiển AVR lập trình ghép nối vi điều khiển với
các thiết bị ngoại vi.
- Hoạt động tốt ở nhiệt độ từ 2 đến 60 độ C, phù hợp với điều kiện thời tiết của nước
ta.
- Mạch có kích thước nhỏ gọn, dễ dàng di chuyển, tối ưu về mặt không gian sắp xếp
linh kiện.
- Giá thành để hoàn thiện: không quá 200.000 VNĐ.

1.3. Xác lập kế hoạch


1.3.1. Xác lập công việc và nhân lực
Kế hoạch của nhóm bắt đầu tư khi có thông báo của giáo viên hướng dẫn, cả nhóm
họp bàn phương hướng công việc, đánh giá năng lực từng cá nhân qua đó để lập danh
sách các bước công việc cần làm và để có dược người đảm nhiệm tốt nhất.
1.3.2. Kế hoạch chung
Bảng 1.1: Bảng kế hoạch chung
Thời gian Công việc thực hiện
27/04 – 02/05 Tìm hiểu chung về đề tài và phân tích yêu cầu kĩ thuật
02/05 – 04/05 Lập kế hoạch
04/05 – 08/05 Thiết kế sơ đồ khối và nguyên lí
08/05 – 15/05 Lập trình và mô phỏng mạch
15/05 – 22/05 Mua linh kiện, test mạch trên bo trắng
22/05 – 24/05 Làm mạch in
24/05 – 30/05 Hàn mạch, hoàn thiện sản phẩm, viết báo cáo

Bảng 1.1 là lịch trình các công việc cần thực hiện trong suốt quá trình làm dự án.

8
1.3.3. Bảng nhân lực
Bảng nhân lực là bảng thống kê lại tất cả những thông tin về từng cá nhân trong
một nhóm. Bảng nhân lực bao gồm: điểm mạnh, điểm yếu, kĩ năng, thời gian làm việc…
của các thành viên trong nhóm. Chính vì vậy, bảng nhân lực sẽ giúp chúng ta phân công
công việc một cách hợp lý nhất, phù hợp với từng cá nhân trong nhóm nhất. Dưới đây
Bảng 1.2 là bảng nhân lực của nhóm cho bài tập lớn.
Bảng 1.2: Bảng nhân lực
MSSV Tên Điểm mạnh Điểm yếu
20162007 Đỗ Quốc Hưng báo cáo, hàn mạch code
20161923 Đào Duy Hùng coding, lắp mạch hàn mạch
1.3.4. Phân chia công việc
Ta tiến hành phân công các thành viên trong nhóm vào các công việc dựa theo các
tiêu chí:
− Công việc được phân chia đều cho các thành viên trong nhóm.
− Các công việc được giao cho từng thành viên phải phù hợp với ưu nhược điểm
cũng như thời gian làm việc.

Bảng 1.3: Bảng phân chia công việc


Công việc Nhân lực Thời gian
Tìm hiểu chung về đề tài Hùng, Hưng 27/04 – 02/05
Phân tích yêu cầu kĩ thuật Hưng 02/05 – 04/05
Lập kế hoạch Hùng 04/05 – 08/05
Thiết kế sơ đồ nguyên lí Hùng, Hưng 08/05 – 15/05
Coding Hùng, Hưng 15/05 – 22/05
Mua linh kiện Hùng, Hưng 22/05 – 24/05
Lắp mạch và test trên bo trắng Hùng, Hưng 24/05 – 30/05
Làm mạch in Hưng 02/05 – 04/05
Hàn mạch Hùng 04/05 – 08/05
Viết báo cáo Hùng, Hưng 08/05 – 15/05

9
Chương 2. Thiết kế kiến trúc
2.1. Sơ đồ khối
Từ ý tưởng xây dựng hệ thống, mô hình được thiết kế sơ đồ khối như Hình 2.1.

Hình 2.1: Sơ đồ khối hệ thống đèn giao thông


Hình 2.1 mô tả kết cấu của hệ thống đèn giao thông gồm 4 khối chính:
- Khối nguồn: chuyển đổi nguồn DC từ 7 đến 18V thành nguồn DC 5V.
- Khối nút điều khiển: tạo các tín hiệu điện áp khác nhau đưa và khối vi điều khiển
xử lý
- Khối vi điều khiển: sử dụng atmega328 xử lý các tín hiệu tương tự từ khối nút
điều khiển, xử lý và đưa ra các tín hiệu điều khiển khối dịch bit và khối hiển thị
- Khối dịch bit: sử dụng IC dịch bit 74HC595 nhân dữ liệu liên tiếp từ khối vi điều
khiển và chuyển thành song song.
- Khối hiển thị: gồm đèn led ba loại màu và led 7 đoạn 2 chữ số phục vụ hiển thị.

10
2.2. Khối nguồn
2.2.1. Giới thiệu 7805

Hình 2.2: Sơ đồ chân 7805


Hình 2.2 mô tả sơ đồ chân của IC ổn áp LM7805 với hình bên trái là sơ đồ chân và
hình dạng thực tế của LM7805 còn hình bên phải là ký hiệu của LM7805 trong mô phỏng
và chức năng tương ứng của mỗi chân. Dựa vào hình có thể thấy chân 1 là chân nối với
tín hiệu đầu vào là điện áp muốn hạ xuống và thường ít nhất phải lớn hơn 3V so với điện
áp ra cần ổn định, chân 3 là đầu ra ứng với nguồn nuôi 5V cho mạch, chân 2 là chân nối
đất.
2.2.2. Sơ đồ nguyên lý
Sơ đồ nguyên lý của khối nguồn để tạo ra nguồn nuôi 5V cho mạch thể hiện trong
Hình 2.3. Sử dụng tụ lắp ở hai đầu để lọc nhiễu nguồn giúp nguồn ổn định.

Hình 2.3: Sơ đồ nguyên lý khối nguồn

11
2.3. Khối vi điều khiển
Khối vi điều khiển hoạt động bởi nguồn nuôi 5VDC. Khối nhận tín hiệu từ khối nút
điều khiển và thực hiện đưa ra các tín hiệu điều khiển khối hiển thị và khối dịch bit.

2.3.1. ATMEGA 328P


ATMEGA 328P (Hình 2.4) là dòng vi điều khiển phổ biến thuộc họ AVR với tốc độ
xử lý nhanh 1MIPS trên 1MHz, bộ nhớ chương trình 32KB ISP flash có thể ghi xóa hàng
nghìn lần, 1KB EEPROM, một bộ nhớ RAM vô cùng lớn trong các dòng vi xử lý 8 bit
(2KB SRAM). Đặc biệt ATMEGA 328P còn có bộ chuyển đổi tương tự sang số ADC
(analog to digital converter) phù hợp để ứng dụng sản xuất các mạch đo tín hiệu tương
tự: điện áp, dòng điện, nhiệt độ, …

Hình 2.4: Atmega328


Mô tả các chân và chức năng của từng chân được thể hiện trong Bảng 2.1.
Bảng 2.1: Bảng mô tả chức năng chân Atmega 328
Chân số Mô tả Chức năng
1 PC6 reset chương trình khi về 0
2 PD0 chân digital 0 (RX)
3 PD1 chân digital 1 (TX)
4 PD2 chân digital 2
5 PD3 chân digital 3
6 PD4 chân digital 4

12
7 VCC chân nguồn (1.5V – 5.5V)
8 GND chân nối đất
9 XTAL 1 chân dao động thạch anh 1
10 XTAL 2 chân dao động thạch anh 2
11 PD5 chân digital 5 (PWM)
12 PD6 chân digital 6 (PWM)
13 PD7 chân digital 7
14 PB0 chân digital 8
15 PB1 chân digital 9 (PWM)
16 PB2 chân digital 10(PWM)
17 PB3 chân digital 11(PWM)
18 PB4 chân digital 12
19 PB5 chân digital 13
20 AVCC cấp điện áp dương cho bộ ADC
21 AREF điện áp tham chiều bộ ADC
22 GND chân nối đất
23 PC0 tín hiệu vào analog 0
24 PC1 tín hiệu vào analog 1
25 PC2 tín hiệu vào analog 2
26 PC3 tín hiệu vào analog 3
27 PC4 tín hiệu vào analog 4
28 PC5 tín hiệu vào analog 5

Từ Bảng 2.1 ta thấy các chân để vi điểu khiển có thể hoạt động là chân VCC, GND,
AVCC (cung cấp năng lượng), hai chân XTAL1 và XTAL 2 nhận tín hiệu dao động từ
bộ dao động thạch anh (Hình 2.5).

Hình 2.5: Bộ dao động thạch anh cấp tín hiệu dao động cho VĐK
Bộ dao động thạch anh cho atmega 328 yêu cầu thạch anh 16MHz và 2 tụ 22pF.

13
Bộ chuyển đổi ADC:
Chân AVCC được dùng để cấp nguồn nuôi cho bộ ADC, ngay cả khi các chân analog
không được sử dụng thì AVCC vẫn được nối Vcc.
Bộ ADC gồm 6 kênh 10bit từ A0 đến A5 (PC0 – PC5). Các giá trị tương tự đọc vào từ
chân analog được chuyển đổi sang dạng số 10bit (có 210 giá trị). Chân AREF mang điện
áp tham chiếu cho bộ chuyển đổi ADC. Điện áp đưa vào chân analog yêu cầu nhỏ hơn
điện áp trên AREF, giá trị số thu được phụ thuộc vào tỉ lệ giữa điện áp trên chân analog
và điện áp tham chiếu. Ví dụ, Vref (trên chân AREF) là 5 V, Vin trên A0 là 3.2V thì giá
𝑉𝑖𝑛 3.2
trị số thu được sẽ là: [ x 1024] = [ x 1024] = 655. Nếu Vin < 0 thì giá trị thu được
𝑉𝑟𝑒𝑓 5

là 0 hoặc nếu Vin >= Vref thì giá trị thu được là 1023.
Bộ reset:
Chân reset của vi điều khiển là chân số 1, ở trạng thái thấp vi điều khiển reset chạy
lại chương trình. Chân reset được nối qua trở và nút bấm để reset bằng tay như trong
Hình 2.6

.
Hình 2.6: Bộ reset bằng nút của vi điều khiển atmega328

14
2.3.2. Sơ đồ nguyên lý khối xử lý.
Sơ đồ nguyên lý khối xử lý mô tả trong Hình 2.7. Các chân VCC và AVCC đều được
nối lên nguồn 5V-DC. Chân AREF đặt vào điện áp tham chiếu Vref là 5V. Chân A0 hay
chân analog 0 nhận tín hiệu vào là điện áp Vpa đi ra từ khối nút điều khiển (0 < Vpa <
Vref).

Hình 2.7: Sơ đồ nguyên lý khối xử lý


Các tín hiệu vào ra trên khối xử lý thể hiện trên Hình 2.8.

Hình 2.8: Tín hiệu vào ra khối vi xử lý


Bảng 2.2 mô tả nhiệm vụ của các tín hiệu thể hiện trong Hình 2.8.
Tín hiệu Loại Mô tả
reset Input Tín hiệu reset đi từ bộ reset, trạng thái thấp reset mạch
A0 Input Tín hiệu điện áp từ bộ nút điều khiển qua chân analog 0
digital 5,6,7 Output Tín hiệu điều khiển khối dịch bit
digital 8 ÷ 13 Output Tín hiệu điều khiển 6 led đèn
digital 3,4 Output Tín hiệu điều khiển bật tắt các led 7 thanh 2 chữ số

15
2.4. Khối nút điều khiển
Khối nút điều khiển sử dụng 4 nút điều kết hợp với các điển trở khác nhau để đưa ra
tín hiệu điện áp A0 như Hình 2.9.

Hình 2.9: Sơ đồ khối nút điều khiển

Sử dụng nguyên lý phân áp để đưa ra các mức điện áp khác nhau cho các tín hiệu
R
A0 khác nhau. Khi nút 1 được ấn điện áp A0 sẽ là Vcc. . Với các giá trị điện trở
R+R1

R1,R2,R3,R4 khác nhau khi các nút b1 đến b4 được ấn sẽ đưa ra các tín hiệu điện áp A0
khác nhau, các tín hiệu tương tự này khi qua bộ chuyển đổi ADC của vi điều khiển sẽ
được phân biệt bằng các số khác nhau trong khoảng 0 đến 1023.
Giá trị R, R1, R2, R3, R4 được lựa chọn lần lượt là 10k, 1k, 2.2k, 3k, 3.9k.
2.5. Khối dịch bit
Để nhận tín hiệu điều khiển từ khối xử lý trung tâm của Atmega328, ta cần một IC
có khả năng xử lý dịch bit qua đó điều khiển hiển thị của led 7 đoạn. IC 74HC595 chính
là lựa chọn phù hợp. IC 74HC595 là thanh 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

16
matrix…để tiết kiệm số chân vi điều khiển 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à không IC nào làm được bằng việc nối tiếp đầu vào dữ
liệu các IC với nhau. Nói một cách chính xác, IC này là IC “dịch chốt”.
Dịch được dùng cho IC này thực chất là cách nói của dân kỹ thuật về đặc tính ngõ
vào nối tiếp của IC. Vậy "đặc tính ngõ vào nối tiếp của IC" là như thế nào? Có thể nói 1
cách đơn giản là ta có thể đưa lần lượt nhiều giá trị logic vào 1 ngõ vào của IC đó để nó
lưu vào bộ nhớ chờ đến khi có lệnh xử lí. Có thể hiểu ngõ vào nối tiếp tức là các giá trị
được nạp vào IC một cách từ từ ở từng thời điểm khác nhau trên cùng 1 ngõ vào, còn
nếu nói vào song song thì có nghĩa là sẽ có nhiều ngõ vào và các giá trị sẽ được nạp vào
IC cùng 1 lúc. Thuật ngữ này đối với ngõ ra cũng tương tự.
Chốt là khi thỏa mản 1 điều kiện nào đó nó sẽ cho phép IC giữ nguyên giá trị ngõ
ra, không cho nó thay đổi mặc dù tín hiệu ngõ vào có thay đổi thế nào.

Hình 2.10: IC 74HC595


Hình 2.10 là hình ảnh sơ đồ các chân của ic 74HC595. Các chân quan trọng của IC
này được mô tả trong Bảng 2.2.
Bảng 2.2: Bảng mô tả chân IC 74HC595
Chân số Mô tả Chức năng
1 Q1 chân ra song song bit số 1
2 Q2 chân ra song song bit số 2
3 Q3 chân ra song song bit số 3
4 Q4 chân ra song song bit số 4
5 Q5 chân ra song song bit số 5

17
6 Q6 chân ra song song bit số 6
7 Q7 chân ra song song bit số 7
8 GND chân nối đất
9 Q7’ chân ra nối tiếp ở chế độ ghép nối nhiều IC74HC595
10 ~MR tích cực mức thấp reset dòng bit cũ của IC
chân vào xung, khi có sườn dương IC đưa tín hiệu vào
11 SH_CP
từ chân DS
chân vào xung, khi có sườn dương IC đưa tín hiệu chờ
12 ST_SP
trong IC ra ngõ ra song song
13 ~OE tích cực thấp cho điều chỉnh trạng thái ngõ ra
14 DS chân vào data nhận chuỗi 8 bit 1 lần
15 Q0 chân ra song song bit số 0
16 VCC chân cấp nguồn

Nguyên lý của IC74HC595 có thể được hiểu rõ rang hơn qua Hình 2.11.

Hình 2.11: Sơ đồ nguyên lý IC74HC595


Nhìn vào Hình 2.11 có thể hiểu nguyên lý hoạt động của IC. Dữ liệu 8bit được đưa
vào chân 14 DS. Khi gặp sườn dương của xung SHCP, dữ liệu 8 bit được đưa vào thanh
ghi lưu trữ. Với ~MR ở trạng thái tích cực thấp, dữ liệu lưu trữ sẽ bị xóa đi. Chân Q7’
sẽ chuyển chuỗi dữ liệu nối tiếp truyền sang đưa vào DS của IC74HC595 khác ở chế độ
nối tiếp. Các bit được lưu trữ ở thanh ghi lưu trữ khi có sườn dương của xung STCP

18
được đưa ra ngõ ra song song từ Q0 đến Q7, với điều kiện ~OE tích cực thấp. Khi ~OE
ở trạng thái cao thì các chân ra Q sẽ ở trạng thái trở kháng cao.
Tín hiệu của khối dịch bit được mô tả trong Bảng 2.3.
Bảng 2.3: Bảng mô tả tín hiệu vào/ra các chân IC74HC595
Chân Tín hiệu loại Mô tả
SHCP Input Nhận tín hiệu xung từ chân digital 7
STCP Input Nhận tín hiệu xung từ chân digital 6
DS Input Nhân dữ liệu từ chân digital 5
Q1 – Q7 Output Đưa dữ liệu song song ứng với các giá trị từ a đến f

2.6. Khối hiển thị

Hình 2.12: Sơ đồ chân led 7 thanh 2 chữ số catot chung


Led 7 đoạn 2 chứ số gồm 2 loại: anot chung và catot chung. Mạch nhóm sử dụng
loại catot chung. Nhìn Hình 2.12 từ trái sang phải các chữ số hiển thị lần lượt phụ thuộc
vào các chân D1, D2. Led ở trạng thái hoạt động khi các chân D ở mức thấp (L). Khi các
chân D đều ở mức thấp các số hiển thị trên 4 chữ số đều giống nhau (Hình 2.9).

Hình 2.13: Hiển thị số 1 trên led 7 thanh 2 chữ số


19
Hiển thị các chữ số từ 0 đến 9 khi các chân A,B,C,D,E,F,G ở trạng thái như Bảng 2.4.
Bảng 2.4: Bảng giải mã chân hiển thị trên led 7 đoạn 2 chữ số
A B C D E F G Hiển thị
H H H H H H L 0
L H H L L L L 1
H H L H H L H 2
H H H H L L H 3
L H H L L H H 4
H L H H L H H 5
H L H H H H H 6
H H H L L L L 7
H H H H H H H 8
H H H H L H H 9

Trong Bảng 2.2 H là mức cao và L là mức thấp. Vì khi hiển thị các chữ số chỉ có thể
hiện thì đồng thời một số nên nhóm dùng Atmega 328 để điều khiển led hiển thị các chữ
số khác nhau theo mong muốn bằng phương pháp quét led.
Phương pháp quét led: Ta sẽ thực hiện bật tắt liên tục các đèn D1, D2 để có thể
hiển thị số mong muốn. Gọi thời gian để hiển thị một số có 2 chữ số trên led là một chu
kì hiển thị. Khi đó chu kì hiển thị sẽ gồm 2 giai đoạn. Giai đoạn 1: D2 tắt, chuyển dữ
liệu hiển thị cho chữ số thứ nhất vào, bật D1. Giai đoạn 2: D1 tắt, chuyển dữ liệu cho
chữ số thứ hai vào, bật D2. Như vậy trong một chu kì hiển thị các đèn sẽ hiện thị đầy đủ
2 chữ số đưa vào. Nếu tần số hiện thỉ lớn hơn 24Hz thì mắt sẽ không cảm nhận được sự
gián đoạn của các led, ta có được sự hiển thị đầy đủ như mong muốn.
Các chân digital 3, 4 của vi điều khiển thực hiện việc bật hoặc tắt D1, D2. Còn các
chân led sẽ nhận tín hiệu từ đầu ra song song của bộ dịch bit từ Q1 đến Q7. Ngoài ra
khối hiển thị còn các 3 cặp led: xanh, đỏ, vàng. Các led này được điều khiển bởi chân
digital 8 đến 13. Thời gian hiển thị phụ thuộc vào thời gian setup cho đèn vàng và xanh.

20
Chương 3. Cấu trúc chương trình vi điều khiển
3.1. Sơ đồ trạng thái
Sơ đồ chuyển trạng thái của chương trình trong vi điều khiển thể hiện trong Hình
3.1.

Hình 3.1: Sơ đồ chuyển trạng thái của chương trình


Nhìn vào Hình 3.1 ta thấy có 4 trạng thái chính có thể coi là 4 chương trình con của
chương trình. Trạng thái C1 là trạng thái sau khi reset, chương trình con là set thời gian
bắt đầu cho hệ thống. Khi nút thứ nhất ấn và được nhả ra, ta coi B1 = 1 biểu thị cho sự
kiện đó và khi B1 = 0 nghĩa là không có sự chuyển đổi trạng thái từ nhấn sang nhả. Khi
B1 = 1, chương trình chuyển sang trạng thái C2 ứng với chương trình set thời gian hiển
thị cho đèn vàng và đèn xanh. C3 là trạng thái ứng với chương trình hoạt động bình
thường của đèn giao thông (hoạt động từ 5 giờ đến 23 giờ trong ngày, từ 23 giờ đến 5
giờ ngày hôm sau sẽ là bật mỗi đèn vàng). C4 là trạng thái hiển thị đèn đỏ, vàng, hoặc
xanh theo ý muốn. Trạng thái C1 chỉ có được khi ấn nút reset hay có nghĩa là ta chỉ set
thời gian bắt đầu cho hệ thống khi hệ thống khởi động lại.
Trong các trạng thái C1, C2, C4 ta sử dụng nút thứ 2 để chuyển đổi theo mong muốn.
Cụ thể ở trạng thái C1 khi set thời gian giờ và phút, nút 2 sẽ dùng để chuyển đổi giữa
việc set giờ và phút bắt đầ. Ở C2 khi set thời gian cho đèn vàng và xanh, nút 2 sẽ chuyển

21
đổi lựa chọn giữa việc set thời gian cho vàng hoặc là cho xanh. Còn ở trạng thái thứ 4,
nút thứ 2 sẽ lựa chọn việc chỉ hiện thị loại đèn nào trong 3 loại: đỏ, xanh, hoặc vàng.
3.2. Chương trình xử lý tín hiệu từ khối nút điều khiển
Hàm analogRead(): luôn trả về một giá trị nguyên trong khoảng từ 0 đến 1023 tùy
thuộc và điện áp tham chiếu từ 0 đến 5V. Đề tài này, nhóm sử dụng điện áp tham chiếu
là 5V. Phần 2.3 đã trình bày về cách tính toán từ tín hiệu tương tự sang giá trị số. Từ các
giá trị điện trở lựa chọn, ta tính được các giá trị số tương ứng với việc nhấn các nút từ 1
đến 4 lần lượt là: 931, 839, 788, 737.
Vì giá trị thực tế không ổn định hoặc có thể có sai số nên khi xử lý trong code ta sẽ
để các giá trị xác định việc ấn các nút chạy trong khoảng chênh lệch ±10. Ví dụ 931 thì
cho 920 < analogRead() < 940.
Phần code xử lí tín hiệu nhận biết việc ấn các nút để trong Phụ lục 1.

3.3. Chương trình truyền dữ liệu ra khối dịch bit


Hàm shiftOut(): có nhiệm vụ chuyển 1 byte ra ngoài từng bit một. Bit được chuyển
đi có thể bắt đầu từ bit nằm bên trái nhất hoặc bit nằm bên phải nhất. Các bit này được
xuất ra tại chân dataPin (lựa chọn là digital 5) sau khi chân clockPin được kéo xuống (từ
High xuống Low) hoặc được kéo lên (từ Low lên High).
Các byte dịch ra ngoài chương trình phù hợp với việc hiển thị các số của led 7 thanh
2 chữ số từ 0 đến 9. Các byte dịch ra khối chuyển đổi nối tiếp song song thể hiện trong
Bảng 3.1.
Bảng 3.1: byte dịch ra khối dịch bit
0gfedcba Số tương ứng 0gfedcba Số tương ứng
00111111 0 01101101 5
00000110 1 01111101 6
01011011 2 00000111 7
01001111 3 01111111 8
01100110 4 01101111 9

22
Phần code chương trình dịch bit trong Phụ lục 2.
3.4. Chương trình quét led
Theo nguyên lý quét led được trình bày trong Phần 2.6, code chương trình quét led
trong Phụ lục 3.
3.5. Chương trình mô phỏng thời gian thực
Một chức năng quan trọng của hệ thống đèn giao thông là với thời gian setup ban
đầu khi khởi động (reset), hệ thống sẽ thực hiện việc bật tắt đèn (từ vàng sang điều khiển
giao thông) theo đúng khoảng thời gian thực tế. Để thực hiện khả năng này, hàm millis()
được sử dụng.
Hàm millis(): có nhiệm vụ một số thuộc kiểu unsigned long (32 bit) là thời gian tính
theo mili giây kể từ lúc mạch Arduino bắt đầu chương trình. Nó sẽ tràn số sau khi vượt
quá giá trị 232-1 tương đương với 50 ngày. Tuy nhiên ta có thể dùng phương pháp ép
kiểu về unsigned long để xử lý vấn đề này.
Phần code sử dụng millis để tính toán thời gian thực để trong Phụ lục 4.

23
Chương 4. Thử nghiệm và mô phỏng
4.1. Mô phỏng proteus
Sau khi thiết kế sơ đồ khối và mạch nguyên lí hoàn chỉnh, nhóm đi và mô phỏng trên
proteus như Hình 4.1 để kiểm tra lại tính chính xác cũng như có những sự thay đổi phù
hợp với thực tế.

Hình 4.1: Mô phỏng sơ đồ nguyên lý mạch trên proteus 8.6


4.2. Thử nghiệm trên bo trắng

Hình 4.2: Mạch thử nghiệm thực tế trên bo mạch trắng

24
Hình 4.2 là hình ảnh mạch sau khi lắp đặt thử nghiệm thành công trên thực tế, sau
khi hiệu chỉnh một số các thành phần phù hợp yêu cầu đầu ra.
4.3. Vẽ mạch nguyên lí và PCB trên Altium Designer
Dựa trên sơ đồ nguyên lí đã xây dựng, nhóm chúng em đã tiến hành vẽ lại mạch
nguyên lí và mạch in PCB trên phần mềm Altium Designer với các tiêu chí như sau:
• Mạch in 1 lớp, hạn chế sử dụng dây câu
• Kích thước mạch 7x6 𝑐𝑚2
• Chiều rộng dây lớn hơn 1mm.
Dưới đây Hình 4.3 và Hình 4.4 là hình ảnh 3D và mạch in của mạch.

Hình 4.3: Mạch in thiết kế trên altium

25
Hình 4.4: Hình ảnh 3d của mạch

4.4. In mạch và hoàn thiện sản phẩm


Dưới đây là ảnh bottom layer của mạch (Hình 4.5) và mạch khi đã hoàn thiện (Hình 4.6).

Hình 4.5: Bottom layer mạch đèn giao thông


26
Hình 4.6: Mạch hoàn thiện
4.5. Nhận xét
4.5.1. Ưu điểm
Sau khi hoàn thiện sản phẩm mạch đèn giao thông, nhóm đã nhận thấy ưu điểm của mạch
như sau:
- Đáp ứng đầy đủ các yêu cầu chức năng và phi chức năng đã đề ra ở chương 1.
- Mạch chạy hiển thị chính xác, rõ ràng, hiệu quả và liên tục trong thời gian dài và trong
nhiều điều kiện môi trường thời tiết khác nhau (không tính trời mưa).
- Mạch có kích thước nhỏ gọn, đảm bảo yếu tố về mặt thẩm mỹ, các mối hàn đều chắc
chắn và chính xác.
- Giá thành rẻ, có khả năng ứng dụng vào thực tiễn.
4.5.2 Nhược điểm
Song hành cùng với những ưu điểm kể trên thì sản phẩm vẫn còn một số hạn chế:
- Chưa có đóng hộp theo như yêu cầu của đề tài.
- Các thay đổi chức năng khi mạch hoạt động cần phải điều khiển bằng tay, dẫn đến mất
thời gian thao tác.
- Các phím bấm cơ học chưa thật sự nhậy, cần bấm ở tốc độ bình thường.

27
Kết luận
Sau khi hoàn thiện sản phẩm, chúng em đã tiếp thu và bồi dưỡng cho mình thêm
nhiều kinh nghiệm trong công việc thiết kế xây dựng một mạch điện tử sử dụng kĩ
thuật vi điều khiển và vi xử lý. Các thành viên trong nhóm đều đã cố gắng tích lũy, tìm
hiểu và training cho nhau các kĩ năng mà người này mạnh, người kia còn yếu, các công
việc trong quá trình học đều được mọi người nỗ lực hoàn thành.
Chúng em xin chân thành cảm ơn nhà trường đã tạo điều kiện cho chúng em có cơ
hội thực hành và tiếp xúc với nội dung của môn học Kĩ thuật vi xử lý, cảm ơn thầy
Nguyễn Hoàng Dũng đã tận tình hướng dẫn, giải đáp thắc mắc, góp ý và chỉ bảo nhóm
trong suốt thời gian chúng em hoàn thành bài tập lớn.
Mặc dù đã cố gắng hoàn thành đề tài tốt nhất nhưng do thời gian eo hẹp và kiến
thức, kĩ năng còn hạn chế nên sản phẩm của chúng em sẽ không tránh khỏi những hạn
chế, thiếu sót nhất định, rất mong nhận được sự cảm thông, chia sẻ và tận tình đóng
góp của quý thầy và các bạn.
Chúng em xin chân thành cảm ơn!

28
Tài liệu tham khảo
1. Datasheet ATMEGA 328P,
http://www.datasheetspdf.com/datasheet/search.php?sWord=pic16f877a
2. http://mualinhkien.vn/
3. https://electrosome.com/adc-pic-microcontroller-hi-tech-c/
4. http://xcvn.blogspot.vn/
5. http://arduino.vn/reference/millis
6. http://arduino.vn/bai-viet/214-cach-lap-trinh-nhieu-con-led-7-doan-loai-don

29
Phụ lục
Phụ lục 1: Code chương trình xử lý tín hiệu khối nút điều khiển
/*BUTTON
- BUTTON1 analogRead(A0) >= 925 && analogRead(A0) <= 935
- BUTTON2 analogRead(A0) >= 830 && analogRead(A0) <= 850
- BUTTON3 analogRead(A0) >= 780 && analogRead(A0) <= 795
- BUTTON4 analogRead(A0) >= 725 && analogRead(A0) <= 745
*/

//KHỐI KIỂM TRA TRẠNG THÁI ẤN CÁC NÚT


byte checkbutton(){
if(analogRead(A0) >= 925 && analogRead(A0) <= 935)return 1;
else return 0;
}
byte checkbutton2(){
if(analogRead(A0) >= 830 && analogRead(A0) <= 850)return 1;
else return 0;
}
byte checkbutton3(){
if((analogRead(A0) >= 780 && analogRead(A0) <= 795) ||
(analogRead(A0) >= 725 && analogRead(A0) <= 745))return 1;
else return 0;
}
//Cấu trúc câu lệnh nhận diện một lần ấn (chuyển từ ấn sang nhả) của
nút
//Ví dụ với button3
if(analogRead(A0) >= 780 && analogRead(A0) <= 795){while(analogRead(A0)
>= 780 && analogRead(A0) <= 795); /*do sthg*/}

30
Phụ lục 2: Code chương trình truyền dữ liệu ra khối dịch bit
// hàm truyền bit từ nối tiếp sang con HC595 thành song song
void truyenbit(int sotruyen, byte soled){
byte *a = new byte[soled];
for(byte i = 0; i<soled; i++){
a[i] = (byte)(sotruyen % 10);
sotruyen = (int)(sotruyen / 10);
}
digitalWrite(latchPin,LOW);
for(int i = soled; i>=0 ; i--)
shiftOut(dataPin,clockPin,MSBFIRST,seg[a[i]]);
digitalWrite(latchPin,HIGH);
free(a);
}

31
Phụ luc 3: Code chương trình quét led
//HÀM HIỂN THỊ TRÊN LED 7 ĐOẠN
void hienthiLED7doan(int so1, int so2){
int c1, dv1, c2, dv2;
c1 = so1;
c2 = so2;
laychuso(c1,dv1);
laychuso(c2,dv2);
so1 = c1*10 + c2;
so2 = dv1*10 + dv2;
for(byte i = 0; i<2; i++){
if((a == 1 || a == 3) && checkbutton())break;
else if(a == 2 && (checkbutton2() || checkbutton3()))break;
digitalWrite(led1onoff,HIGH);
truyenbit(so2,2);
digitalWrite(led2onoff,LOW);
delay(timehienthi);

digitalWrite(led2onoff,HIGH);
truyenbit(so1,2);
digitalWrite(led1onoff,LOW);
delay(timehienthi);
}
}

32
Phụ lục 4: Code chương trình mô phỏng thời gian thực
// hàm setup thời gian
void settime(){
int mode = 1;
while(a == 0){
if(analogRead(A0) >= 925 && analogRead(A0) <= 935){
starttime = (unsigned long)((unsigned long)(hours)*60*60*1000 +
(unsigned long)(mins)*60*1000);
lasttime = millis();
timeto23 = (starttime <= 82800000) ? 82800000 - starttime :
82800000 - starttime + timetostart;
timeto5 = (starttime <= 18000000) ? 18000000 - starttime :
18000000 - starttime + timetostart;
if(starttime >= 82800000 || starttime < 18000000) onoff = 0;
else onoff = 1;
break;
}
if(analogRead(A0) >= 830 && analogRead(A0) <= 850){
while(analogRead(A0) >= 830 && analogRead(A0) <= 850);mode
=!mode;
}

if(mode){
if(analogRead(A0) >= 780 && analogRead(A0) <=
795){while(analogRead(A0) >= 780 && analogRead(A0) <=
795);hours++;if(hours == 24)hours = 0;}
else if(analogRead(A0) >= 725 && analogRead(A0) <=
745){while(analogRead(A0) >= 725 && analogRead(A0) <= 745);hours--
;if(hours == -1)hours = 23;}
hienthiLED7doan(hours,mins);
digitalWrite(ledye1,HIGH);
digitalWrite(ledye2,LOW);
}
else {
if(analogRead(A0) >= 780 && analogRead(A0) <=
795){while(analogRead(A0) >= 780 && analogRead(A0) <= 795);mins++;if(mins
== 60)mins = 0;}
else if(analogRead(A0) >= 725 && analogRead(A0) <=
745){while(analogRead(A0) >= 725 && analogRead(A0) <= 745);mins--;if(mins
== -1)mins = 59;}
hienthiLED7doan(hours,mins);
digitalWrite(ledye2,HIGH);
digitalWrite(ledye1,LOW);
}
}
}
//xét điều kiện bật tắt chuyển đổi giữa hoạt động và nghỉ đêm với hàm
millis()
if((unsigned long)(millis() - lasttime + 1)% timetostart ==
timeto23)onoff = 0;
else if((unsigned long)(millis() - lasttime + 1)% timetostart ==
timeto5)onoff = 1;

33

You might also like