Professional Documents
Culture Documents
BÁO CÁO:
Hà Nội – 2023
1
Mục Lục
2
LỜI NÓI ĐẦU
Trong những năm gần đây công nghệ thông tin có những bước phát triển
nhảy vọt, đặc biệt là sự ra đời của máy tính đã tạo cho xã hội một bước phát
triển mới, nó ảnh hưởng đến hầu hết các vấn đề của xã hội và trong công
nghiệp cũng vậy. Hoà cùng với sự phát triển đó, ngày càng nhiều nhà sản xuất
đã ứng dụng các các họ vi xử lý có tính năng mạnh vào trong công nghiệp,
trong việc điều khiển và xử lý dữ liệu.
Những hạn chế của kỹ thuật tương tự như sự trôi thông số, sự làm việc cố
định dài hạn, những khó khăn của việc thực hiện chức năng điều khiển phức
tạp đã thúc đẩy việc chuyển nhanh công nghệ số. Ngoài ra điều khiển số còn
cho phép tiết kiệm linh kiện phần cứng, cho phép tiêu chuẩn hoá. Với cùng
một bộ vi xử lý, một cấu trúc phần cứng có thể dùng cho mọi ứng dụng, chỉ
cần thay mội dung ô nhớ. Tuy nhiên kỹ thuật số có những nhược điểm như xử
lý các tín hiệu rời rạc.... đồng thời tín hiệu tương tự có ưu điểm mà kỹ thuật số
không có được như tác động nhanh và liên tục. Vì vậy ngày nay xu hướng
trong điều khiển là phối hợp điều khiển số và điều khiển tương tự.
Để nắm vững được những kiến thức đã học thì việc nghiên cứu là cần thiết
đối với sinh viên. Bài tập lớn môn học Vi xử lý đã giúp cho em biết thêm
được rất nhiều về cả kiến thức lẫn kinh nghiệm.
Nhân đây em cũng xin cảm ơn rất nhiều đến thầy giáo Ngô Thanh Bình đã
tận tình hướng dẫn và chỉ bảo em để làm bài này.
3
NHIỆM VỤ
1. Giới thiệu đề tài và viết báo cáo – Nguyễn Việt Đức, Tăng Thành
Hưng.
2. Thiết kế hệ thống và làm phần cứng Proteus – Phan Thế Huy,
Nguyễn Chí Long, Phù Văn Huy.
3. Xây dựng lưu đồ thuật Toán và viết chương trình – Nguyễn
Quang Huy, Lương Bá Duy.
4
CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI
1.1 Yêu cầu chức năng:
Ghép nối PIC16F877A với module cảm biến chạm (Touch Sensor)
TTP223B và viết chương trình phát hiện phím được bấm:
1.2 Yêu cầu phi chức năng.
+ Sử dụng vi Điều Khiển PIC 16F877A.
+ Lập trình bằng ngôn ngữ C.
+ Môi trường phát triển MPlab IDE.
+ Các chức năng tương tác dễ sử dụng.
1.3 Sơ đồ khối hệ thống.
5
CHƯƠNG 2: THIẾT KẾ HỆ THỐNG
2.1 Bộ xử lý trung tâm.
6
2.2 Cấu trúc tổng quát PIC 16F877A.
7
▪ Chế độ tiết kiệm năng lượng (Sleep Mode).
▪ Nạp trương trình bằng cổng nối tiếp ( ICSP™ )(In-Circuit Serial
Programming™ -)
▪ Tập lệnh gồm 35 lệnh có độ dài 14 bit.
▪ Tần số hoạt động tối đa 20 MHz.
2.3 Các phần cứng của Vi xử lý được sử dụng trong đề tài.
2.3.1 Bộ định thời Timer 0:
8
Chức năng của các bit:
Timer 0 có thể phát hiện ngắt khi giá trị trong thanh ghi TMR0 tràn từ 0xFF
về 0x00, đưa cờ báo ngắt T0IF lên mức logic 1.
Timer 1 của PIC16F887
Timer 1 là 1 bộ timer 16 bit, có thể chọn được nguồn xung là nội hay
ngoại (thông qua chân T1CKI)
Có bộ chia trước
Có phát hiện ngắt khi tràn bộ đếm từ 0xFFFF về 0x0000
Hoạt động ở cả 2 chế độ đồng bộ và không đồng bộ
Chế độ định thời, capture/ compare
9
2.3.2 Các thanh ghi quan trọng của timer 1:
a. Thanh ghi TMR1L và TMR1H:
2 thanh ghi này dùng để ghi giá trị counter của timer 1.
Ngoài ra, khi khối CCP hoạt động ở chế độ compare/ capture thì 2 thanh ghi
này còn có tác dụng như sau:
Compare: 1 sự kiện được kích hoạt nếu giá trị của cặp thanh ghi
CCPRxH:CCPRxL trùng khớp với giá trị của TMR1L:TMR1H
Capture: giá trị của cặp thanh ghi TMR1L:TMR1H được sao chép vào
cặp CCPRxH:CCPRxL trên 1 sự kiện đã đặt trước
10
Bit 7: Bit đảo cổng của timer 1 (T1GINV)
o TMR1GE = 0: timer 1 mở
Bit 5-4: Các bit chọn bộ chia trước timer 1 (T1CKPS1, T1CKPS0)
Bit 2: Bit đồng bộ ngõ vào xung clock ngoại timer 1 (T1SYNC), bit
này chỉ có tác dụng khi TMR1CS = 1
11
o T1SYNC = 1: không đồng bộ ngõ vào clock từ bên ngoài Bộ
đếm tiếp tục tăng bất đồng bộ với xung bên trong. Bộ đếm vẫn
đếm khi CPU ở trong chế độ ngủ và khi tràn sẽ phát sinh ngắt và
đánh thức CPU. Ngắt T1 có thể ngăn được.
12
2.4 Các thiết bị ngoại vi.
2.4.1 cảm biến Flame sensor
13
2.4.3 THÔNG SỐ CẢM BIẾN PHÁT HIỆN LỬA
Nguồn cấp: 3.3V – 5VDC
Dòng tiêu thụ: 15mA
Tín hiệu ra: Digital 3.3 – 5VDC tùy nguồn cấp hoặc Analog.
Khoảng cách: 80cm
Góc quét: 60 độ
Kích thước: 3.2 x 1.4 cm
2.4.4 SƠ ĐỒ CHÂN
VCC –> 3.3V ~ 5.3V
GND –> power supply ground
AOUT (AO) –> analog output
DOUT (DO) –> digital output
2.4.5 SƠ ĐỒ NGUYÊN LÝ
14
Điện áp hoạt động là 5V.
Kích thước: 80 x 36 x 12.5mm
Chữ trắng, nền xanh dương
Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối
với Breadboard.
Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết
nối, đi dây điện.
Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ
sáng để sử dụng ít điện năng hơn.
Có thể được điều khiển với 6 dây tín hiệu
Có bộ ký tự được xây dựng hỗ trợ tiếng Anh và tiếng Nhật, xem
thêm HD44780 datasheet để biết thêm chi tiết.
15
2.4.7 Khối tạo dao động thạch anh ngoài.
Để tạo xung nhịp cho mạch hoạt động chúng em đã sử mạch dao
động thạch anh ngoài. Thạch anh (20MHz) được nối với hai tụ gốm
22p để tang sự ổn định tần số. Tụ điện trong trường hợp này có chức
năng bù nhiệt, ổn tần.
16
2.5 Sơ đồ nguyên lý.
17
CHƯƠNG 3: XÂY DỰNG LƯU ĐỒ THUẬT TOÁN VÀ VIẾT
CHƯƠNG TRÌNH.
3.1 Lưu đồ thuật toán
+ Chế độ hoạt động:
18
3.2 Viết chương trình:
Main.c
#define RS RB2
#define EN RB3
#define D4 RB4
#define D5 RB5
#define D6 RB6
#define D7 RB7
#include <xc.h>
#define _XTAL_FREQ 20000000
#include "lcd.h"
// BEGIN CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS
oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT
enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit
(PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit
(BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-
Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on
MCLR must be used for programming)
19
#pragma config CPD = OFF // Data EEPROM Memory Code
Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write
Enable bits (Write protection off; all program memory may be
written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code
Protection bit (Code protection off)
//END CONFIG
#define IsFlame RD0
void main(void) {
TRISB = 0x00;
TRISDbits.TRISD0 = 1;
Lcd_Init();
Lcd_Clear();
Lcd_Set_Cursor(1, 1);
Lcd_Write_String("UTC-TDH");
while (1) {
if (IsFlame == 1) {
Lcd_Set_Cursor(2, 1);
Lcd_Write_String("Flame Detected");
} else {
Lcd_Set_Cursor(2, 1);
20
Lcd_Write_String(" "); // Clear
}
}
}
lcd.h
void Lcd_Port(char a)
{
if(a & 1)
D4 = 1;
else
D4 = 0;
if(a & 2)
D5 = 1;
else
D5 = 0;
if(a & 4)
D6 = 1;
else
D6 = 0;
if(a & 8)
21
D7 = 1;
else
D7 = 0;
}
void Lcd_Cmd(char a)
{
RS = 0; // => RS = 0
Lcd_Port(a);
EN = 1; // => E = 1
__delay_ms(4);
EN = 0; // => E = 0
}
Lcd_Clear()
{
Lcd_Cmd(0);
Lcd_Cmd(1);
}
22
temp = 0x80 + b - 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
else if(a == 2)
{
temp = 0xC0 + b - 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
}
void Lcd_Init()
{
Lcd_Port(0x00);
__delay_ms(20);
Lcd_Cmd(0x03);
__delay_ms(5);
Lcd_Cmd(0x03);
__delay_ms(11);
23
Lcd_Cmd(0x03);
/////////////////////////////////////////////////////
Lcd_Cmd(0x02);
Lcd_Cmd(0x02);
Lcd_Cmd(0x08);
Lcd_Cmd(0x00);
Lcd_Cmd(0x0C);
Lcd_Cmd(0x00);
Lcd_Cmd(0x06);
}
void Lcd_Write_Char(char a)
{
char temp,y;
temp = a&0x0F;
y = a&0xF0;
RS = 1; // => RS = 1
Lcd_Port(y>>4); //Data transfer
EN = 1;
__delay_us(40);
EN = 0;
Lcd_Port(temp);
EN = 1;
__delay_us(40);
24
EN = 0;
}
void Lcd_Shift_Right()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x0C);
}
void Lcd_Shift_Left()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x08);
}
25
3.3 Hình ảnh mô phỏng:
26