1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Chủ Đề Ứng dụng timer xây dựng mạch Đếm Đồng hồ thời gian thực pic 16f877a dùng led 7 Đoạn

19 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Ứng Dụng Timer Xây Dựng Mạch Đếm Đồng Hồ Thời Gian Thực Pic 16F877A Dùng Led 7 Đoạn
Tác giả Huỳnh Ngọc Thịnh
Người hướng dẫn THS. Nguyễn Trọng Hải
Trường học Trường Đại Học Công Nghệ Tp. Hồ Chí Minh
Chuyên ngành Kỹ Thuật Điện - Điện Tử
Thể loại Báo cáo
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 19
Dung lượng 354,09 KB

Nội dung

Sự kiện này cho phép hệ thống thực hiện một tác vụ ví dụ: tăng giá trị của một biến đếm thời gian hoặc khởi động lại bộ đếm.. 4.2 Chức năng của từng khối: Vi điều khiển PIC16F877A: Đọc d

Trang 1

Mẫu bìa báo cáo TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH

KHOA/VIỆN: Viện Kỹ Thuật Hutech

TÊN CHỦ ĐỀ: ỨNG DỤNG TIMER XÂY DỰNG MẠCH ĐẾM ĐỒNG HỒ THỜI GIAN THỰC PIC 16F877A DÙNG LED 7 ĐOẠN

THÀNH VIÊN: HUỲNH NGỌC THỊNH

GIẢNG VIÊN HƯỚNG DẪN: THS NGUYỄN TRỌNG HẢI

Tp Hồ Chí Minh, ngày…tháng … năm 20…

Trang 2

Mục lục

1.GIỚI THIỆU NỘI DUNG ĐỀ TÀI 4

LINH KIỆN SỬ DỤNG 4

2.1:PIC 16F877A 4

2.1.1: Định Nghĩa 4

2.1.2: Thông số: 4

2.2.3 Trình phiên dịch của PIC16F877A: 6

2.2.4 Cổng nối tiếp của PIC16F877A 6

2.2.5 Giao tiếp I2C của PIC16F877A 6

2.2.6 Ngắt PIC16F877A 6

2.2.7 Nguyên lý hoạt động 7

3 SEG-MPX2-CA 7

3.1 Định nghĩa 7

3.2 Thông số 7

3.3 Nguyên lý hoạt động 8

4 SƠ ĐỒ KHỐI CỦA HỆ THỐNG 8

4.1 Giải thích sơ đồ khối: 9

4.1.1 Vi điều khiển PIC16F877A: 9

4.1.2 Nút nhấn: 9

4.1.3 Mạch hiển thị LED 7 đoạn: 9

4.1.4 Nguồn cung cấp (5V DC): 9

4.2 Chức năng của từng khối: 9

5 MÔ PHỎNG (VẼ SƠ ĐỒ MẠCH) TRÊN PROTEUS 10

5.1 Mạch vi điều khiển 10

5.2 Lưu đồ giải thuật 10

5.2.1 Giải thích lưu đồ: 11

6 CHƯƠNG TRÌNH ĐIỀU KHIỂN 11

7 Timer0 và Tính toán Thời gian 15

8 Giải thích chương trình 15

9 Kết quả mô phỏng 16

9.1 Mô phỏng Hệ thống 16

9.2 Kết quả Hiển thị Thời gian 17

9.3 Phản hồi từ Nút Nhấn: 17

9.4 Khả năng Tương tác: 17

Trang 3

9.5 Nhận xét Chung: 17

10 KẾT LUẬN 17

Trang 4

LỜI NÓI ĐẦU

Lời đầu tiên, em xin cảm ơn đến Ths Nguyễn Trọng Hải người thầy đã tận tình

chỉ dạy và dìu dắt nhóm em trong suốt thời gian học tập và thực hiện bài báo cáo này Cảm ơn những lời chia sẻ tận tình, tâm huyết của thầy đã giúp nhóm em hoàn thành bài báo cáo tốt nhất Đây chắc chắn sẽ là những kiến thức có giá trị sâu sắc, là hành trang để chúng em vững bước sau này Bên cạnh đó, tôi cũng xin gửi lời tự cảm ơn đến những thành viên trong nhóm đã luôn đoàn kết và kiên trì trong suốt thời gian làm báo cáo Làm việc nhóm cùng nhau đã giúp khả năng tư duy và sáng tạo của mỗi người ngày càng phát triển và có thể làm bài báo cáo này một cách hiệu quả nhất và đạt đúng yêu cầu đưa ra

Trang 5

1.GIỚI THIỆU NỘI DUNG ĐỀ TÀI

Vấn đề thời gian thực ở đây được dùng với ý nghĩa thời gian tuyệt đối mà con người đang sử dụng Cái hay khi ta làm đồng hồ đếm thời gian thực đó chính là chúng ta có thể biết thời gian hiện tại chính xác là bao nhiêu, cho dù khi chúng ta không cấp nguồn cho cái đồng hồ này chạy nhưng lúc sau bật nguồn lên nó vẫn chạy đúng vì IC đếm thời gian thực luôn luôn chạy bằng pin

LINH KIỆN SỬ DỤNG.

2.1:PIC 16F877A.

2.1.1: Định Nghĩa

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 Nó có ba bộ định thời trong

đó có 2 bộ định thời 8 bit và 1 bộ định thời là 16

Bit Nó hỗ trợ nhiều giao thức giao tiếp như giao

thức nối tiếp, giao thức song song, giao thức I2C PIC16F877A hỗ trợ cả ngắtchân phần cứng và ngắt bộ định thời

2.1.2: Thông số:

bit

Kích thước bộ nhớ chương trình (Kbyte) 14

Trang 6

Độ phân giải ADC tối đa (bit) 10

Bộ định thời giám sát có cửa sổ (WWDT) Không

Bộ tạo dao động được điều khiển bằng số 0

Hình 1: Thông số PIC16F877A

Trang 7

2.2.3 Trình phiên dịch của PIC16F877A:

- Trình biên dịch chính thức của vi điều khiển PIC là trình biên dịch MPLAB C18, có trên trang web chính thức của Microchip

- Chúng ta viết code trong trình biên dịch PIC và sau đó biên dịch nó Sau khi biên dịch, một file hex được tạo và chúng ta sẽ tải lên trong bộ vi điều khiển PIC

2.2.4 Cổng nối tiếp của PIC16F877A

- PIC16F877a có một cổng nối tiếp trong đó được sử dụng để giao tiếp dữ liệu

- Chân số 25 cũng hoạt động như TX vì vậy nếu bạn muốn thực hiện giao tiếp nối tiếp thì nó sẽ được sử dụng để gửi dữ liệu nối tiếp

- Chân 26 cũng hoạt động như RX, vì vậy nếu bạn muốn thực hiện giao tiếp nối tiếp thì nó sẽ được sử dụng để nhận dữ liệu nối tiếp

2.2.5 Giao tiếp I2C của PIC16F877A

- PIC16F877a cũng có một cổng I2C có thể dễ dàng thực hiện giao tiếp I2C

+ Chân số 18 hoạt động như SCL, viết tắt của Serial Clock Line

+ Chân số 23 hoạt động như SDA, là chữ viết tắt của Serial Data Line

- Bây giờ chúng ta có cổng nối tiếp và cổng I2C trong cổng C, vì vậy chúng ta có thể sử dụng cổng C như một cổng đơn giản nhưng cũng có thể thực hiện hai giao tiếp này với các chân của nó, vì vậy nó hoàn toàn phụ thuộc vào lập trình viên

2.2.6 Ngắt PIC16F877A

PIC16F877a có tổng cộng 8 nguồn ngắt Nguồn ngắt là một số sự kiện tạo ra ngắt, nguồn này có thể là bộ đếm thời gian như các ngắt được tạo sau mỗi 1 giây hoặc cũng có thể là sự kiện thay đổi trạng thái chân, chẳng hạn như nếu trạng thái chân bị thay đổi sau

đó ngắt sẽ được tạo ra

Vì vậy, ngắt PIC16F877a có thể được tạo ra bằng 8 cách sau:

 Ngắt ngoài

 Ngắt bộ định thời (Timer0 / Timer1)

 Thay đổi trạng thái cổng B

Trang 8

 Cổng Slave Song song Đọc / Ghi.

 Bộ chuyển đổi A / D

 Nhận / Truyền nối tiếp

 PWM (CCP1 / CCP2)

 Thao tác ghi EEPROM

2.2.7 Nguyên lý hoạt động

Bắt đầu đếm: Khi bộ đếm thời gian được kích hoạt, nó sẽ bắt đầu đếm từ một giá trị khởi đầu (thường là 0) Bộ đếm sẽ tăng dần theo xung nhịp

Tràn bộ đếm (Overflow): Khi bộ đếm đạt đến giá trị tối đa (255 cho 8-bit, 65535 cho 16-bit), nó sẽ quay lại 0 và tạo ra một ngắt (interrupt) Sự kiện này cho phép hệ thống thực hiện một tác vụ (ví dụ: tăng giá trị của một biến đếm thời gian) hoặc khởi động lại

bộ đếm

Điều chỉnh thời gian: Bộ chia (prescaler) có thể được sử dụng để làm chậm tốc độ đếm, tạo ra khoảng thời gian dài hơn giữa các lần tràn

3 SEG-MPX2-CA

3.1 Định nghĩa

7SEG-MPX2-CA là tên gọi của một loại LED 7 đoạn (7-segment display) có cấu hình chung Anode (CA - Common Anode) Trong loại màn hình LED này, tất cả các chân Anode của các đoạn LED đều được kết nối với nhau và nối chung với nguồn dương (Vcc) Các chân còn lại (Cathode) của mỗi đoạn LED sẽ được điều khiển bằng cách nối xuống GND (đất) thông qua các tín hiệu điều khiển

3.2 Thông số

Hình 2 :Thông số 7SEG-MPX2-CA 3.3 Nguyên lý hoạt động

7SEG-MPX2-CA là màn hình LED 7 đoạn chung Anode Tất cả các Anode được nối chung với nguồn dương (Vcc) Để hiển thị số, các đoạn LED cần được nối

Trang 9

Cathode xuống GND Điều khiển từng đoạn LED bằng cách nối đất các chân tương ứng để tạo ra các số từ 0 đến 9

4 SƠ ĐỒ KHỐI CỦA HỆ THỐNG

Sơ đồ 1: sơ đồ khối hoạt động của thiết bị

Trang 10

4.1 Giải thích sơ đồ khối:

4.1.1 Vi điều khiển PIC16F877A:

Đây là trung tâm của hệ thống, xử lý dữ liệu, điều khiển thời gian và nhận

tín hiệu từ các nút nhấn để điều chỉnh giờ, phút, giây

4.1.2 Nút nhấn:

Nút Tăng Giờ (NUT_GIO): Khi nhấn nút này, giá trị giờ sẽ tăng lên 1 Nút Tăng Phút (NUT_PHUT): Khi nhấn nút này, giá trị phút sẽ tăng lên

1

Nút Reset (NUT_RESET): Đặt lại giá trị giờ, phút và giây về 00:00:00.

4.1.3 Mạch hiển thị LED 7 đoạn:

Bao gồm 6 LED 7 đoạn, trong đó:

2 LED hiển thị giờ (hàng chục và hàng đơn vị)

2 LED hiển thị phút (hàng chục và hàng đơn vị)

2 LED hiển thị giây (hàng chục và hàng đơn vị)

4.1.4 Nguồn cung cấp (5V DC):

Cung cấp điện năng cho vi điều khiển và các linh kiện trong mạch

4.2 Chức năng của từng khối:

Vi điều khiển PIC16F877A: Đọc dữ liệu từ các nút nhấn, thực hiện các phép tính

thời gian và xuất kết quả ra các LED hiển thị

Nút nhấn: Dùng để điều chỉnh giờ, phút, giây và đặt lại thời gian.

Mạch hiển thị LED 7 đoạn: Hiển thị giá trị thời gian (giờ, phút) hiện tại.

Nguồn cung cấp: Cung cấp điện áp ổn định cho toàn bộ hệ thống hoạt động.

Trang 11

5 MÔ PHỎNG (VẼ SƠ ĐỒ MẠCH) TRÊN PROTEUS.

5.1 Mạch vi điều khiển

Hình 3 : Sơ đồ mô phỏng 5.2 Lưu đồ giải thuật

Sơ đồ 2: Lưu đồ giải thuật

Trang 12

5.2.1 Giải thích lưu đồ:

a.Khởi tạo hệ thống:

Bước đầu tiên là khởi tạo các biến, cài đặt Timer và các ngắt để theo dõi thời gian thực

b Cài đặt Timer và ngắt:

Cấu hình Timer 0 để tạo ra gián đoạn sau mỗi khoảng thời gian định sẵn (ví dụ, sau mỗi 1 giây)

c Kiểm tra nút nhấn:

Kiểm tra các nút nhấn (giờ, phút,) và nút reset Nếu nút được nhấn, thực hiện tăng giá trị tương ứng

d Hiển thị thời gian:

Khi không có nút nào được nhấn, hệ thống tiếp tục hiển thị thời gian hiện tại lên LED 7 đoạn

e Tăng giây tự động:

Timer được sử dụng để tăng giây theo thời gian thực Khi giây đạt 60, hệ thống tự động tăng phút và làm lại từ đầu

f Cập nhật hiển thị:

Hiển thị giá trị giờ, phút, giây lên LED 7 đoạn

g Kiểm tra Reset:

Kiểm tra nút Reset và thiết lập lại thời gian về giá trị ban đầu (00:00:00) nếu cần

h Lặp lại:

Hệ thống tiếp tục lặp lại chu trình từ việc kiểm tra nút nhấn và hiển thị thời gian

6 CHƯƠNG TRÌNH ĐIỀU KHIỂN

#include <16F877A.h> // Nhung thu vien cho vi dieu khien PIC16F877A

#use delay(clock=20M) // Dat tan so dong ho la 20 MHz

// Mang chua ma hien thi cho LED 7 doan

int maled[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; int gio = 0, phut = 0, giay = 0; // Bien luu gia tri gio, phut, giay

int t = 1; // Thoi gian delay cho hien thi LED

Trang 13

int16 count; // Bien dem thoi gian

// Dinh nghia chan cho nut nhan

#define NUT_GIO PIN_B0 // Chan nut nhan de tang gio

#define NUT_PHUT PIN_B1 // Chan nut nhan de tang phut

#define NUT_GIAY PIN_B2 // Chan nut nhan de tang giay

// Ngat Timer0

#INT_TIMER0

void timer() {

count++; // Tang bien dem

if (count == 5000) { // Neu dem duoc 5000

count = 0; // Reset dem

giay++; // Tang giay

if (giay > 59) { // Neu giay lon hon 59

giay = 0; // Reset giay

phut++; // Tang phut

if (phut > 59) { // Neu phut lon hon 59

phut = 0; // Reset phut

gio++; // Tang gio

if (gio > 23) gio = 0; // Reset gio neu lon hon 23 }

}

}

}

// Ham hien thi gia tri gio, phut, giay len LED 7 doan

void hienthiled() {

int gio1 = gio / 10; // Phan nguyen cua gio

int gio2 = gio % 10; // Phan thap phan cua gio

Trang 14

int phut1 = phut / 10; // Phan nguyen cua phut

int phut2 = phut % 10; // Phan thap phan cua phut

int giay1 = giay / 10; // Phan nguyen cua giay

int giay2 = giay % 10; // Phan thap phan cua giay

// Hien thi gio

output_low(pin_D0); // Bat LED 7 doan cho gio

output_C(maled[gio1]); // Hien thi chu so dau tien cua gio delay_ms(t); // Delay

output_high(pin_D0); // Tat LED

output_low(pin_D1); // Bat LED 7 doan cho gio

output_C(maled[gio2]); // Hien thi chu so thu hai cua gio delay_ms(t); // Delay

output_high(pin_D1); // Tat LED

// Hien thi phut

output_low(pin_D2); // Bat LED 7 doan cho phut

output_C(maled[phut1]); // Hien thi chu so dau tien cua phut delay_ms(t); // Delay

output_high(pin_D2); // Tat LED

output_low(pin_D3); // Bat LED 7 doan cho phut

output_C(maled[phut2]); // Hien thi chu so thu hai cua phut delay_ms(t); // Delay

output_high(pin_D3); // Tat LED

// Hien thi giay

output_low(pin_D4); // Bat LED 7 doan cho giay

output_C(maled[giay1]); // Hien thi chu so dau tien cua giay

Trang 15

delay_ms(t); // Delay

output_high(pin_D4); // Tat LED

output_low(pin_D5); // Bat LED 7 doan cho giay

output_C(maled[giay2]); // Hien thi chu so thu hai cua giay

delay_ms(t); // Delay

output_high(pin_D5); // Tat LED

}

// Ham kiem tra nut nhan

void kiemtra_nutnhan() {

// Nut tang gio

if (input(NUT_GIO) == 0) { // Neu nut duoc nhan

gio++; // Tang gio

if (gio > 23) gio = 0; // Reset gio neu lon hon 23

delay_ms(300); // Thoi gian de tranh nhan qua nhanh

}

// Nut tang phut

if (input(NUT_PHUT) == 0) { // Neu nut duoc nhan

phut++; // Tang phut

if (phut > 59) phut = 0; // Reset phut neu lon hon 59

delay_ms(300); // Thoi gian de tranh nhan qua nhanh

}

}

// Ham chinh

void main() {

output_C(0b00000000); // Dat gia tri ban dau cho cong C

output_D(0b11111111); // Dat gia tri ban dau cho cong D

setup_timer_0(T0_INTERNAL | T0_DIV_4); // Thiet lap Timer0 voi tan so noi bo

va chia 4

Trang 16

set_timer0(6); // Dat gia tri ban dau cho Timer0

get_timer0(); // Lay gia tri hien tai cua Timer0

enable_interrupts(GLOBAL); // Bat ngat toan cuc

enable_interrupts(INT_TIMER0); // Bat ngat Timer0

// Vong lap chinh

while(TRUE) {

hienthiled(); // Hien thi thoi gian

kiemtra_nutnhan(); // Kiem tra nut nhan

}

}

7 Timer0 và Tính toán Thời gian

Timer0: 0-255

000000000->11111111

F=20Mhz=>f= 20/4=5

Dùng bộ chia mềm : 4

F=5/4=1,25mhz

T=1/f=1/1,25=0,8us (khoảng th gian nó đếm lên 1 đơn vị)

Set giá trị ban đầu của timer=6

Số chu kỳ tràn: 256-6=250

→ Tổng thời gian từ 6 đếm đến 256:

250x0,8=0,0002us=0,2ms

Sau 1s nó tăng lên 1 đơn vị:

→ 1s=1000ms=x.0,2=> x=5000

8 Giải thích chương trình

Trong quá trình chạy, Timer0 của vi điều khiển được cấu hình để tạo ra tín hiệu ngắt mỗi khi hết một khoảng thời gian nhất định (ở đây là mỗi giây) Khi có tín hiệu ngắt, hệ thống sẽ tăng giá trị giây lên 1 Nếu giá trị giây vượt quá 59, hệ thống sẽ đặt giây về 0 và tăng giá trị phút lên 1 Khi phút vượt quá 59, hệ thống sẽ tăng giá trị giờ,

và nếu giờ vượt quá 23, giờ sẽ trở về 0

Trang 17

Việc hiển thị thời gian trên các LED 7 đoạn được thực hiện bằng cách chia nhỏ các giá trị giờ, phút, và giây thành các chữ số hàng chục và hàng đơn vị Mỗi chữ số được mã hóa và xuất ra các chân điều khiển của LED để hiển thị Ví dụ, nếu giờ là 12, thì hệ thống sẽ hiển thị chữ số 1 trên một LED và chữ số 2 trên LED tiếp theo

Ngoài việc hiển thị thời gian, người dùng có thể điều chỉnh giá trị giờ, phút thông qua các nút nhấn Khi nhấn nút giờ, hệ thống sẽ tăng giá trị giờ lên 1 Nếu nhấn nút khi giá trị giờ đã đạt 23, nó sẽ quay về 0 Các nút nhấn được kiểm tra liên tục để phát hiện khi nào người dùng nhấn và giữ

9 Kết quả mô phỏng

Hình 7.1 Kết quả Mô phỏng

Trong quá trình thực hiện dự án "Thiết kế và điều khiển đồng hồ điện tử sử dụng vi điều khiển PIC16F877A," chúng tôi đã tiến hành mô phỏng hệ thống trên phần mềm Proteus để kiểm tra tính khả thi của thiết kế mạch và mã lập trình

9.1 Mô phỏng Hệ thống

Sơ đồ mạch: Sơ đồ mạch được thiết kế bao gồm vi điều khiển PIC16F877A,

mạch LED 7 đoạn, và các nút nhấn dùng để điều chỉnh thời gian Sơ đồ mạch này

Trang 18

cho phép người dùng dễ dàng theo dõi thời gian cũng như thực hiện các chức năng điều chỉnh

Giao diện Mô phỏng: Giao diện mô phỏng trên Proteus cho phép chúng tôi

theo dõi sự thay đổi của các giá trị thời gian khi người dùng tương tác với nút nhấn

9.2 Kết quả Hiển thị Thời gian

Thời gian Hiển thị: Đồng hồ điện tử hiển thị giờ, phút và giây trên màn hình

LED 7 đoạn Các giá trị thời gian được cập nhật liên tục và chính xác theo thời gian thực

Chức năng Tăng Giảm: Các nút nhấn tương ứng với chức năng tăng giờ,

phút và giây hoạt động ổn định, cho phép người dùng điều chỉnh thời gian một cách dễ dàng

9.3 Phản hồi từ Nút Nhấn:

Thời gian Phản hồi: Khi người dùng nhấn nút, thời gian được điều chỉnh

ngay lập tức, không có độ trễ đáng kể, thể hiện tính nhạy bén của hệ thống

Kiểm tra Lỗi: Không phát hiện lỗi nào trong quá trình mô phỏng, cho thấy

thiết kế và lập trình đã được thực hiện một cách cẩn thận và chính xác

9.4 Khả năng Tương tác:

Hệ thống cho phép người dùng tương tác trực tiếp thông qua các nút nhấn, làm cho quá trình điều chỉnh thời gian trở nên thân thiện và dễ sử dụng

9.5 Nhận xét Chung:

Mô phỏng đã chứng minh rằng thiết kế và mã lập trình cho đồng hồ điện tử hoạt động hiệu quả Các tính năng chính của đồng hồ được hiện thực hóa đầy đủ, đồng thời cũng mở ra cơ hội phát triển thêm các tính năng mới trong tương lai, như chức năng báo thức hoặc đồng hồ bấm giờ

10 KẾT LUẬN.

Quá trình thiết kế và xây dựng mạch đồng hồ đã diễn ra thành công, với hệ thống hoạt động ổn định và chính xác Việc sử dụng timer để tạo ra các ngắt định kỳ cho phép chúng tôi cập nhật thời gian một cách hiệu quả, đồng thời đảm bảo sự đồng bộ giữa các phần của hệ thống Chúng tôi cũng đã phát triển giao diện người dùng đơn giản, cho phép điều chỉnh giờ, phút và giây một cách dễ dàng thông qua các nút nhấn

Ngày đăng: 18/11/2024, 15:25

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

TÀI LIỆU LIÊN QUAN

w