1. Trang chủ
  2. » Tất cả

BÁO CÁO BÀI TẬP LỚN MÔN KỸ THUẬT VI XỬ LÝ ĐỀ TÀI: THIẾT KẾ HỆ MẠCH HIỂN THỊ LED

20 26 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết Kế Hệ Mạch Hiển Thị LED
Tác giả Ngô Hồng Phong, Doãn Đình Phấn, Nông Thị Oanh
Người hướng dẫn TS. Nguyễn Huy Hoàng
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Kỹ thuật vi xử lý
Thể loại Báo cáo bài tập lớn
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 20
Dung lượng 362,28 KB
File đính kèm OneDrive_3_02-03-2023.zip (24 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ VIỄN THÔNG BÁO CÁO BÀI TẬP LỚN MÔN KỸ THUẬT VI XỬ LÝ ĐỀ TÀI THIẾT KẾ HỆ MẠCH HIỂN THỊ LED Giáo viên hướng dẫn TS Nguyễn Huy Hoàng Mã lớp 124829 Nhóm. LỜI MỞ ĐẦU Với sự phát triển không ngừng của khoa học kỹ thuật đặc biệt là ngành điện tử đã được ứng dụng rất nhiều trong công nghiệp. Trong lĩnh vực điều khiển, từ khi công nghệ chế tạo loại vi mạch lập trình phát triển đã đem đến các kỹ thuật điều khiển hiện đại có nhiều ưu điểm hơn so với việc sử dụng các mạch điều khiển lắp ráp các linh kiện rời kích thước nhỏ, giá thành rẻ, độ làm việc tin cậy, công suất tiêu thụ nhỏ. Ngày nay, trong lĩnh vực điều khiển đã được ứng dụng rộng rãi trong các thiết bị, sản phẩm phục vụ cho nhu cầu sinh hoạt hàng ngày của con người như máy giặt, đồng hồ báo thức,… đã giúp cho đời sống của chúng ta càng hiện đại và tiện nghi hơn. Chúng em đã chọn đề tài “Thiết kế mạch hiển thị LCD đơn giản, sử dụng vi điều khiển ATmega328P” để hoàn thành bài tập lớn môn Kỹ thuật vi xử lý, cũng như để đáp ứng mong muốn tìm hiểu và làm một sản phẩm điện tử cụ thể từ một dòng vi điều khiển. Đề tài “Thiết kế mạch hiển thị LCD” là một đề tài quen thuộc, có thể thực hiện trên rất nhiều dòng vi điều khiển nhưng do kiến thức còn hạn chế nên đề tài chúng em làm còn nhiều thiếu sót. Chúng em mong nhận được những ý kiến nhận xét từ phía thầy cũng như các bạn để góp phần hoàn thiện sản phẩm hơn.

Trang 1

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

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

*****

BÁO CÁO BÀI TẬP LỚN MÔN KỸ THUẬT VI XỬ LÝ

ĐỀ TÀI: THIẾT KẾ HỆ MẠCH HIỂN THỊ LED

Giáo viên hướng dẫn: TS Nguyễn Huy Hoàng

Mã lớp: 124829

Nhóm: 14

HÀ NỘI – 6/2021

1

Trang 2

MỤC LỤC

LỜI MỞ ĐẦU 3

DANH MỤC HÌNH ẢNH 4

DANH MỤC BẢNG 4

CHƯƠNG 1: MÔ TẢ ĐỀ TÀI 5

CHƯƠNG 2: LẬP KẾ HOẠCH 6

2.1 Bảng công việc 6

2.2 Bảng phân công công việc 6

CHƯƠNG 3: THIẾT KẾ HỆ THỐNG 7

3.1 Sơ đồ khối chức năng 7

3.2 Giới thiệu về vi điều khiển atmega328p 7

3.3 Giới thiệu về LCD 16x2 10

3.4 Mô phỏng trên proteus 12

3.5 Code 12

3.6 Kết quả 18

CHƯƠNG 4: KẾT LUẬN 19

TÀI LIỆU THAM KHẢO 20

Trang 3

LỜI MỞ ĐẦU

Với sự phát triển không ngừng của khoa học kỹ thuật đặc biệt là ngành điện tử đã được ứng dụng rất nhiều trong công nghiệp Trong lĩnh vực điều khiển, từ khi công nghệ chế tạo loại vi mạch lập trình phát triển đã đem đến các kỹ thuật điều khiển hiện đại có nhiều ưu điểm hơn so với việc sử dụng các mạch điều khiển lắp ráp các linh kiện rời kích thước nhỏ, giá thành rẻ, độ làm việc tin cậy, công suất tiêu thụ nhỏ

Ngày nay, trong lĩnh vực điều khiển đã được ứng dụng rộng rãi trong các thiết bị, sản phẩm phục vụ cho nhu cầu sinh hoạt hàng ngày của con người như máy giặt, đồng hồ báo thức,… đã giúp cho đời sống của chúng ta càng hiện đại và tiện nghi hơn

Chúng em đã chọn đề tài “Thiết kế mạch hiển thị LCD đơn giản, sử dụng vi điều khiển ATmega328P ” để hoàn thành bài tập lớn môn Kỹ thuật vi xử lý, cũng như để

đáp ứng mong muốn tìm hiểu và làm một sản phẩm điện tử cụ thể từ một dòng vi điều khiển

Đề tài “Thiết kế mạch hiển thị LCD” là một đề tài quen thuộc, có thể thực hiện

trên rất nhiều dòng vi điều khiển nhưng do kiến thức còn hạn chế nên đề tài chúng em làm còn nhiều thiếu sót Chúng em mong nhận được những ý kiến nhận xét từ phía thầy cũng như các bạn để góp phần hoàn thiện sản phẩm hơn

3

Trang 4

DANH MỤC HÌNH ẢNH

Hình 1: Sơ đồ khối chức năng 7

Hình 2:Vi điều khiển ATmega328P 8

Hình 3: LCD16x2 10

Hình 4: Mô phỏng bằng Proteus 12

Hình 5: Kết quả mô phỏng mạch 18

DANH MỤC BẢNG Bảng 1: Bảng thời gian thực hiện công việc 6

Bảng 2: Bảng phân công công việc 6

Bảng 3: Chức năng các chân 9

Bảng 4: Chức năng các chân LCD16x2 11

Trang 5

CHƯƠNG 1: MÔ TẢ ĐỀ TÀI

 Đặt vấn đề

Bài toán đặt ra là thiết kế mạch hiển thị trên LCD, sử dụng vi điều khiển

ATmega328P Đây là bài toán khá quen thuộc, có nhiều cách giải quyết bài toán này Vi điều khiển có tác dụng nhận tín hiệu rồi xử lý thông tin và hiển thị ra màn hình LCD

Từ việc phân tích và khảo sát trên đây, nhóm đã đưa ra các vấn đề

chính cần giải quyết của bài toán đặt ra là:

- Tìm hiểu kiến thức về ATmega328P, LED 7 thanh và LCD

- Xây dựng sơ đồ khối

- Mô phỏng mạch trên phần mềm proteus

- Nạp code cho vi xử lý

- Tổng hợp và viết báo cáo

5

Trang 6

CHƯƠNG 2: LẬP KẾ HOẠCH

2.1 Bảng công việc

thông tin về vi điều khiển

ATmega328P

năng của mạch

khối có trong mạch

mạch hiển thị đèn giao thông

phỏng lại mạch

Bảng 1: Bảng thời gian thực hiện công việc

2.2 Bảng phân công công việc

Tìm hiểu đề tài

Thiết kế hệ thống

Hoàn thiện sản phẩm

Bảng 2: Bảng phân công công việc

Trang 7

CHƯƠNG 3: THIẾT KẾ HỆ THỐNG

3.1 Sơ đồ khối chức năng

Hình 1: Sơ đồ khối chức năng

3.2 Giới thiệu về vi điều khiển ATmega328P

ATmega328P là một bộ vi điều khiển tiên tiến và nhiều tính năng Nó là một trong những vi điều khiển nổi tiếng của Atmel vì nó được sử dụng trong bo mạch arduino UNO Nó là một bộ vi điều khiển thuộc họ vi điều khiển megaMVR của Atmel (Cuối năm 2016, Atmel được Microchip Technology Inc mua lại) Các vi điều khiển được sản xuất trong họ megaMVR được thiết kế để xử lý các bộ nhớ chương trình lớn và mỗi vi điều khiển trong họ này chứa lượng ROM, RAM, các chân I / O và các tính năng khác nhau và được sản xuất với các chân đầu ra khác nhau, từ 8 chân đến hàng trăm chân Mạch bên trong của ATmega328P được thiết kế với tính năng tiêu thụ dòng điện thấp Con chip này chứa 32 kilobyte bộ nhớ flash trong, 1 kilobyte EEPROM và 2 kilobyte SRAM EEPROM và bộ nhớ flash là bộ nhớ lưu thông tin và thông tin đó vẫn thoát ra

7

Trang 8

mỗi khi nguồn điện bị ngắt nhưng SRAM là bộ nhớ chỉ lưu thông tin cho đến khi có điện

và khi ngắt nguồn điện tất cả thông tin được lưu trong SRAM sẽ bị xóa

Hình 2:Vi điều khiển ATmega328P

Đặc tính / Thông số kỹ thuật của ATmega328P

Thiết kế hiệu suất cao

Tiêu thụ ít điện năng

Tổng số chân ngõ vào Analog là 6

Chứa 32 kilobyte bộ nhớ flash

Chứa 2 kilobyte SRAM

Chứa 1 kilobyte EEPROM

Tốc độ xung nhịp 16 megahertz

Nhiệt độ tối thiểu và tối đa -40 độ C đến 105 độ C

Tổng số chân I / O kỹ thuật số là 14 chân

RISC tiên tiến

Khóa chức năng chương trình để bảo mật mã lập trình

Chứa tổng cộng ba bộ định thời, hai 8bit và một 16 bit

Tổng số chân I / O là 23 chân

Tổng số kênh PWM là 6

Điện áp hoạt động tối thiểu và tối đa từ 1.8V DC đến 5.5V DC

Sơ đồ chân

Trang 9

Số thứ

tự

chân

Mô tả Chức năng Mô tả chức năng

Khi chân reset này ở mức thấp, bộ vi điều khiển và chương trình của nó sẽ được reset

2 PD0 Chân kỹ thuật số (RX) Chân đầu vào cho giao tiếp nối tiếp

3 PD1 Chân kỹ thuật số (TX) Chân đầu ra cho giao tiếp nối tiếp

4 PD2 Chân kỹ thuật số Chân 4 được sử dụng làm ngắt ngoài 0

5 PD3 Chân kỹ thuật số(PWM) Chân 5 được sử dụng làm ngắt ngoài 1

6 PD4 Chân kỹ thuật số Chân 6 được sử dụng cho nguồn bộ đếmbên ngoài Timer0

7 Vcc Điện áp dương Nguồn dương của hệ thống

9 XTAL Dao động tinh thể

Chân này nối với một châncủa bộ dao động tinh thể để cung cấp xung nhịp bên ngoài cho chip

10 XTAL Dao động tinh thể Chân này nối với chân còn lại của bộ daođộng tinh thể để cung cấp xung nhịp bên

ngoài cho chip

11 PD5 Chân kỹ thuật số(PWM) Chân 11 được sử dụng cho nguồn bộ đếmbên ngoài Timer1

12 PD6 Chân kỹ thuật số(PWM) Bộ so sánh analog dương i / ps

13 PD7 Chân kỹ thuật số  Bộ so sánh analog âm i / ps

14 PB0 Chân kỹ thuật số  Nguồn đầu vào bộ đếm hoặc bộ hẹn giờ

15 PB1 Chân kỹ thuật số(PWM) Bộ đếm hoặc bộ hẹn giờ so sánh khớp A

16 PB2 Chân kỹ thuật số(PWM) Chân này hoạt động như lựa chọn slave i /p.

17 PB3 Chân kỹ thuật số(PWM)

Chân này được sử dụng làm đầu ra dữ liệu master và đầu vào dữ liệu slave cho SPI

18 PB4 Chân kỹ thuật số 

Chân này hoạt động như một đầu vào xung nhịp master và đầu ra xung nhịp slave

Trang 10

Bảng 3: Chức năng các chân

3.3 Giới thiệu về LCD 16x2

Hình 3: LCD16x2

3 VEE Điều chỉnh độ tương phản ( cần được gắn với biến trở)

RS = 0: Đưa LCD vào chế độ ghi lệnh

RS = 1: Đưa LCD vào chế độ ghi dữ liệu(dữ liệu xuất lên màn hình)

RW = 0: Vi điều khiển truyền dữ liệu vào LCD

Trang 11

RW =1: Vi điều khiển đọc dữ liệu từ LCD

6 E E = 0: Vô hiệu hóa đọc/ghi E = 1: Cho phép LCD đọc/ghi

E chuyển từ mức 1 về 0(hoặc 0 về 1): bắt đầu đọc/ghi LCD

Bảng 4: Chức năng các chân LCD16x2

11

Trang 12

3.4 Mô phỏng trên proteus

Hình 4: Mô phỏng bằng Proteus

3.5 Code

/*

* AssemblerApplication1.asm

*

* Created: 6/10/2021 7:26:25 AM

* Author: DELL

*/

;//////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////

.equ fclk = 16000000

.def temp = R16

.equ lcd_D7_port = PORTD

.equ lcd_D7_bit = PORTD7

.equ lcd_D7_ddr = DDRD

.equ lcd_D6_port = PORTD

.equ lcd_D6_bit = PORTD6

.equ lcd_D6_ddr = DDRD

.equ lcd_D5_port = PORTD

.equ lcd_D5_bit = PORTD5

.equ lcd_D5_ddr = DDRD

.equ lcd_D4_port = PORTD

Trang 13

.equ lcd_D4_bit = PORTD4

.equ lcd_D4_ddr = DDRD

.equ lcd_D3_port = PORTD

.equ lcd_D3_bit = PORTD3

.equ lcd_D3_ddr = DDRD

.equ lcd_D2_port = PORTD

.equ lcd_D2_bit = PORTD2

.equ lcd_D2_ddr = DDRD

.equ lcd_D1_port = PORTD

.equ lcd_D1_bit = PORTD1

.equ lcd_D1_ddr = DDRD

.equ lcd_D0_port = PORTD

.equ lcd_D0_bit = PORTD0

.equ lcd_D0_ddr = DDRD

.equ lcd_E_port = PORTB

.equ lcd_E_bit = PORTB1

.equ lcd_E_ddr = DDRB

.equ lcd_RS_port = PORTB

.equ lcd_RS_bit = PORTB0

.equ lcd_RS_ddr = DDRB

; LCD module information

.equ lcd_LineOne = 0x00 ; start of line 1

.equ lcd_LineTwo = 0x40 ; start of line 2

; LCD instructions

.equ lcd_Clear = 0b00000001

.equ lcd_Home = 0b00000010

.equ lcd_EntryMode = 0b00000110

.equ lcd_DisplayOff = 0b00001000

.equ lcd_DisplayOn = 0b00001100

.equ lcd_FunctionReset = 0b00110000

.equ lcd_FunctionSet8bit = 0b00111000

.equ lcd_SetCursor = 0b10000000

;//////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////

.org 0x0000

jmp start

.org INT_VECTORS_SIZE

title1:

.db "BTL VXL- Nhom 14",0

mssv1:

.db "Mssv : 20163142 ",0

mssv2:

.db "Mssv : 20182718 ",0

mssv3:

.db "Mssv : 20182717 ",0

author1:

.db "1 : NgoHongPhong",0,0

author2:

.db "2 : DoanDinhPhan",0,0

author3:

.db " 3 : NongThiOanh",0,0

start:

13

Trang 14

ldi temp,low(RAMEND)

out SPL,temp

ldi temp,high(RAMEND)

out SPH,temp

; C?u hình c?ng giao ti?p

sbi lcd_D7_ddr, lcd_D7_bit

sbi lcd_D6_ddr, lcd_D6_bit

sbi lcd_D5_ddr, lcd_D5_bit

sbi lcd_D4_ddr, lcd_D4_bit

sbi lcd_D3_ddr, lcd_D3_bit

sbi lcd_D2_ddr, lcd_D2_bit

sbi lcd_D1_ddr, lcd_D1_bit

sbi lcd_D0_ddr, lcd_D0_bit

sbi lcd_E_ddr, lcd_E_bit

sbi lcd_RS_ddr, lcd_RS_bit

; lcd_init_8d(void)

call lcd_init_8d

; lcd_write_string(title)

ldi ZH, high(title1)

ldi ZL, low(title1)

ldi temp, lcd_LineOne

call lcd_write_string_8d

call delayTx1mS

; lcd_write_string(author)

ldi ZH, high(author1)

ldi ZL, low(author1)

ldi temp, lcd_LineOne

call lcd_write_string_8d

//call delayTx1mS

ldi ZH, high(mssv1)

ldi ZL, low(mssv1)

ldi temp, lcd_LineTwo

call lcd_write_string_8d

call delayTx1mS

ldi ZH, high(author2)

ldi ZL, low(author2)

ldi temp, lcd_LineOne

call lcd_write_string_8d

//call delayTx1mS

ldi ZH, high(mssv2)

ldi ZL, low(mssv2)

ldi temp, lcd_LineTwo

call lcd_write_string_8d

call delayTx1mS

ldi ZH, high(author3)

ldi ZL, low(author3)

ldi temp, lcd_LineOne

call lcd_write_string_8d

Trang 15

//call delayTx1mS

ldi ZH, high(mssv3)

ldi ZL, low(mssv3)

ldi temp, lcd_LineTwo

call lcd_write_string_8d

call delayTx1mS

loop:

rjmp loop

;//////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////

lcd_init_8d:

; Power-up delay

ldi temp, 100

call delayTx1mS

; Reset the LCD controller.

ldi temp, lcd_FunctionReset

call lcd_write_instruction_8d

ldi temp, 10

call delayTx1mS

ldi temp, lcd_FunctionReset

call lcd_write_instruction_8d

ldi temp, 200

call delayTx1uS

ldi temp, lcd_FunctionReset

call lcd_write_instruction_8d

ldi temp, 200

call delayTx1uS

; Function Set instruction

ldi temp, lcd_FunctionSet8bit

call lcd_write_instruction_8d

ldi temp, 80

call delayTx1uS

; Display On/Off Control instruction

ldi temp, lcd_DisplayOff

call lcd_write_instruction_8d

ldi temp, 80

call delayTx1uS

; Clear Display instruction

ldi temp, lcd_Clear

call lcd_write_instruction_8d

ldi temp, 4

call delayTx1mS

; Entry Mode Set instruction

ldi temp, lcd_EntryMode

call lcd_write_instruction_8d

15

Trang 16

ldi temp, 80

call delayTx1uS

; Display On/Off Control instruction

ldi temp, lcd_DisplayOn

call lcd_write_instruction_8d

ldi temp, 80

call delayTx1uS

ret

lcd_write_string_8d:

push ZH

push ZL

lsl ZL

rol ZH

ori temp, lcd_SetCursor

call lcd_write_instruction_8d

ldi temp, 80

call delayTx1uS

lcd_write_string_8d_01:

lpm temp, Z+ ; get a character

cpi temp, 0 ; check for end of string

breq lcd_write_string_8d_02

call lcd_write_character_8d

ldi temp, 80

call delayTx1uS

rjmp lcd_write_string_8d_01

lcd_write_string_8d_02:

pop ZL

pop ZH

ret

lcd_write_character_8d:

sbi lcd_RS_port, lcd_RS_bit

cbi lcd_E_port, lcd_E_bit

call lcd_write_8

ret

lcd_write_instruction_8d:

cbi lcd_RS_port, lcd_RS_bit

cbi lcd_E_port, lcd_E_bit

call lcd_write_8

ret

lcd_write_8:

sbi lcd_D7_port, lcd_D7_bit

sbrs temp, 7

cbi lcd_D7_port, lcd_D7_bit

sbi lcd_D6_port, lcd_D6_bit

sbrs temp, 6

cbi lcd_D6_port, lcd_D6_bit

sbi lcd_D5_port, lcd_D5_bit

sbrs temp, 5

cbi lcd_D5_port, lcd_D5_bit

sbi lcd_D4_port, lcd_D4_bit

sbrs temp, 4

Trang 17

cbi lcd_D4_port, lcd_D4_bit

sbi lcd_D3_port, lcd_D3_bit

sbrs temp, 3

cbi lcd_D3_port, lcd_D3_bit

sbi lcd_D2_port, lcd_D2_bit

sbrs temp, 2

cbi lcd_D2_port, lcd_D2_bit

sbi lcd_D1_port, lcd_D1_bit

sbrs temp, 1

cbi lcd_D1_port, lcd_D1_bit

sbi lcd_D0_port, lcd_D0_bit

sbrs temp, 0

cbi lcd_D0_port, lcd_D0_bit

sbi lcd_E_port, lcd_E_bit

call delay1uS

cbi lcd_E_port, lcd_E_bit

call delay1uS

ret

;//////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////

delayYx1mS:

call delay1mS ; delay for 1 mS

sbiw YH:YL, 1 ; update the the delay counter

brne delayYx1mS ; counter is not zero

delayTx1mS:

call delay1mS

dec temp

brne delayTx1mS

delay1mS:

push YL

push YH

ldi YL, low (((fclk/1000)-18)/4)

ldi YH, high(((fclk/1000)-18)/4)

delay1mS_01:

sbiw YH:YL, 1

brne delay1mS_01

; arrive here when delay counter is zero

pop YH

pop YL

ret

delayTx1uS:

call delay1uS

dec temp

brne delayTx1uS

delay1uS:

push temp

pop temp

push temp

pop temp

ret

17

Trang 18

;//////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////

3.6 Kết quả

Hình 5: Kết quả mô phỏng mạch

Mạch hiển thị tên và mã số sinh viên từng thành viên trong nhóm trên màn hình LCD

CHƯƠNG 4: KẾT LUẬN

Sau một thời gian tìm hiểu và được sự hướng dẫn tận tình của thầy Nguyễn

Huy Hoàng chúng em đã hoàn thành bài tập lớn “Thiết kế mạch hiển thị

LED” Với đề tài này chúng em đã ứng dụng một phần nhỏ kiến thức về vi

điều khiển ATmega328P Trong thời gian thực hiện bài tập lớn này chúng em

đã thu được những kết quả như sau:

Ngày đăng: 02/03/2023, 03:05

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w