Là loại cảm biến nhiệt có áp ra tỉ lệ tuyến tính với thang nhiệt độ bách phân. Vì vậy một mạch bù điểm zero của thang Kelvin không cần thiết. Hệ số tỉ lệ tuyến tính là 10mV/oC. Sai số do không tuyến tính là 1.8mV cho toàn thang.
Tầm nhiệt độ hoạt động:
LM35, LM35A : -55°C 150°C
LM35C, LM35CA -40°C - 110°C
LM35D 0°C + 100°C
21 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 4178 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đồ án Đo nhiệt độ sử dụng on chip 89c51, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
PHẦN I : MỤC ĐÍCH NGHIÊN CỨU VÀ LỰA CHỌN LINH KIỆN
MỤC ĐÍCH NGHIÊN CỨU:
ỨNG DỤNG CỦA : AT89C51
Thiết kế cảm biến nhiệt điện tử, báo giá trị nhiệt bằng số trên màm hình LCD cho người sử dụng biết.
Thiết bị này có thể cảnh báo được khi nhiệt độ vượt quá giới hạn trên hay giới hạn dưới để người sử dụng biết.
LÍ DO CHỌN LINH KIỆN:
AT89C51:
Đây là ứng dụng không quá phước tạp.
Tốc độ thược hiện lệnh không đòi hỏi nhanh.
Vi điều khiển này có bộ nhớ kiểu EPROM.
Công suất tổn hao năng lượng thấp.
ADC0804:
Do chúng ta chỉ sử dụng một kênh nhiệt độ đầu vào.
Tốc độ biến thiên của nhiệt độ đầu vào là không nhanh nên tốc độ xử lý của ADC không yêu cầu nhanh.
ADC0804 có giá thành rẻ và dễ sử dụng và điều khiển.
LCD LM016L :
Ghép nối với hệ vi xử lý không quá phức tạp.
Dễ quan sát kết quả.
Có thể hiện thị chữ và số.
Có thể hiện thị được nhiều kí tự cùng một lúc.
Không cồng kềnh và chiếm nhiều diện tích như các thiết bị cùng hiển thị khác.
Có thể điều chỉnh được mức độ nét của màn hình.
Cảm biến LM35 :
Có điện áp ra tỉ lệ tuyến tính với thang nhiệt độ bách phân.
Không cần mạch bù điểm 0 của thang Kelvin.
Sai số toàn thang nhỏ 1.8mV.
PHẦN I I : GIỚI THIỆU CÁC LINH KIỆN SỬ DỤNG TRONG MẠCH
ADC 0804:
Sơ đồ chân:
Sơ đồ chân của ADC0804
DB0 -DB7: 8 chân lối ra dữ liệu.
RD :lối vào đọc.
WR : lối vào ghi.
INTR : lối ra ngắt.
CLKR/CLK IN: lối vào điều khiển xung nhịp.
VIN + : lối vào analog dương.
ADC 0804
Chức năng các chân chính của ADC0804:
DB0 – BD7: Là lối ra số, dữ liệu đã chuyển đổi xuất hiện trên 8 cổng ra này. Bộ biến đổi 8 bít có 256 khả năng kết hợp (từ 0 tới 256) các mẫu bít lối ra. Với dòng áp toàn dãi là +5V, bộ biến đổi có độ phân giải là 5/256 = 19.53 mV.
RD :Là chân điều khiển đọc dữ liệu và khi RD ở mức thấp (logic 0) dữ liệu xuất hiện trên 8 chân lối ra . Khi đầu ra ở mức cao dữ liệu không tồn tại ở đầu ra.
WR : Lối vào WR bình thường ở mức logic cao và lối vào này sec được kéo xuống mức logic thấp ,sau đó lại trở lại mức logic cao để bắt đầu quá trình biến đổi.
INTR : Là lối ra ngắt của bộ biến đổi ADC . Một sườn xung sau ( từ mức cao xuống mức thấp ) được tạo ra trên chân này khi quá trình chuyển đổi kết thúc .Lối này thường được sử dụng để tạo ra một ngắt trong vi điều khiển sao cho dữ liệu đã được chuyển đổi có thể được đọc.
ADC0804 chứa một bộ tạo dao động bên trong và cần có một tụ điện và điện trở bên ngoài nối với chân CKLR và CKL IN để khởi động bộ dao động.
VIN +: Là chân lối vào của điện áp tương tự.
VREF\2: chân điện áp tham chiếu xác định độ phân giải, dải đầu vào của ADC
Quan hÖ ®iÖn ¸p Vref/2 víi Vin
Vref/ 2(V)
Vin(V)
KÝch th−íc b−íc (mV)
Hë *
0 ®Õn 5
5/256 = 19.53
2.0
0 ®Õn 4
4/255 = 15.62
1.5
0 ®Õn 3
3/256 = 11.71
1.28
0 ®Õn 2.56
2.56/256 = 10
1.0
0 ®Õn 2
2/256 = 7.81
0.5
0 ®Õn 1
1/256 = 3.90
Hoạt động của ADC trong qua trình biến đổi
Đặt WR và RD lên mức cao.
Bắt đầu quá trình biến đổi bằng cách đặt WR xuống mức thấp.
Đặt WR trở về mức cao.
Phát hiện điểm kết thúc của quá trình biến đổi khi INTR xuống mức thấp.
Đặt RD xuống mức thấp và đọc dữ liệu từ DB0 –DB7.
Đặt RD lên mức cao.
( Quá trình trên sẽ được lặp lại nhiều lần khi cần nhiều quá trình biến đổi)
VI ĐIỀU KHIỂN AT8951 :
Port 0 : Có 2 chức năng ở các chân 32-39. Thiết kế bộ nhớ nhỏ là chân I/O, thiết kế bộ nhớ lớn nó được kết hợp bus địa chỉ và bus dữ liệu.
Port 1: Có chức năng là Port I/O ở các chân P1.0 đến P1.7.
Port 3 :Có các chân P3.0 đến P3.7, là port có tác dụng kép và là port có nhiều chức năng đặc biết trong vi xử lý.
bit
tên
Chức năng chuyển đổi
P3.0
RXD
Ngõ vào dữ liệu nối tiếp
P3.1
TXD
Ngõ xuất dữ l
ệu nối tiếp
P3.2
INT0\
Ngõ vào ngắt cứng thứ 0
P3.3
INT1\
Ngõ vào ngắt cứng thứ 1
P3.4
T0
Ngõ vào T/C thứ 0
P3.5
T1
Ngõ vào T/C thứ 1
P3.6
WR\
Tín hiệu ghi dữ liệu lên bộ nhớ ngoài
P3.7
RD\
Tín hiệu đọc bộ nhớ dữ liệu ngoài
AT 89C51
LCD LM016L 20x2
Sơ đồ chân :
D0 –D7 : Chân vào ra dữ liệu.
E :chân cho /không cho giao tiếp với LCD.
RS :Chân qui định dữ liệu/lệnh gửi tới LCD.
RW : Chân qui định hướng truyền dữ liệu giữa LCD và vi điều khiển.
Nguyên lý hoạt động :
Đường E cho phép hay không việc giao tiếp với LCD. Nếu E=1 cho phép, sau đó kiểm tra trạng thái chân RS và RW. Nếu E=0 cấm.E khởi tạo quá trình truyền dữ liệu từ vi điều khiển tới LCD.
Đường RS qui định dữ liệu/ lệnh được gửi tới LCD. RS=1 Dữ liệu (kí tự) đang được viết lên LCD.RS=0 Lệnh đang được viết lên LCD.
Đường RW - Qui định hướng truyền dữ liệu giữa LCD và VĐK. Nếu RW=0 VĐK viết dữ liệu lên LCD. RW=1 vi điều khiển đọc dữ liệu từ LCD.
Chân D0 - D7: Đây là 8 chân dữ liệu 8 bít, được dùng để gửi thông tin lên LCD ,hoặc đọc nội dung của các thanh ghi trong LCD. Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0 - 9 đến các chân này khi bật RS = 1.
Một số lệnh của LCD:
Mã (Hex)
Lệnh đến thanh ghi của LC
1
Xoá màn hình hiển thị
2
Trở về đầu dòng
4
Giảm con trỏ
6
Tăng con trỏ
5
Dịch hiển thị sang phải
7
Dịch hiển thị sang trái
8
Tắt con trỏ, tắt hiển thị
A
Tắt hiển thị, bật con trỏ
C
Bật hiển thị, tắt con trỏ
E
Bật hiển thị, nhấp nháy con trỏ
F
Tắt con trỏ, nhấp nháy con trỏ
10
Dịch vị trí con trỏ sang trái
14
Dịch vị trí con trỏ sang phải
18
Dịch toàn bộ hiển thị sang trái
1C
Dịch toàn bộ hiển thị sang phả
80
ép con trỏ về đầu dòng thứ nhất
C0
ép con trỏ về đầu dòng thứ hai
38
Hai dòng và ma trận 5 × 7
Quá trình điều khiển LCD:
Bước 1 : Khởi tạo cho LCD.
Bước 2 : Gán các giá trị cho các bit điều khiển các chân RS,RW,E cho phù hợp với các chế độ : Hiển thị kí tự lên LCD hay thực hiện 1 lệnh của LCD.
Bước 3: Xuất 1 byte dữ liệu ra cổng điều khiển 8 bit dữ liệu của LCD.
Bước 4: delay.
Bước 5: Quay vòng lại bước 1.
Cảm biến nhiệt LM35
LM35 : Precision Centigrade Temperature Sensors
Là loại cảm biến nhiệt có áp ra tỉ lệ tuyến tính với thang nhiệt độ bách phân. Vì vậy một mạch bù điểm zero của thang Kelvin không cần thiết. Hệ số tỉ lệ tuyến tính là 10mV/oC. Sai số do không tuyến tính là 1.8mV cho toàn thang.Tầm nhiệt độ hoạt động: LM35, LM35A : -55°C 150°CLM35C, LM35CA -40°C - 110°CLM35D 0°C + 100°C
PHẦN III : THIẾT KẾ
Phần cứng
HIỂN THỊ
( LCD)
Sơ đồ khối của mạch:
VI XỬ LÍ
(AT89C51)
CONVERTER
(ADC 0804)
CẢM BIẾN
(LM35)
CẢNH BÁO
(ĐÈN LED)
Sơ đồ mạch chi tiết :
Phần mềm:
Lưu đồ thuật toán :
START
Khởi tạo giá trị ban đầu
Bắt đầu chuyển đổi (/WR=0 /WR=1)
/INTR=0
Sai
Đúng
RD=0
Hiển thị ra LCD
Kiểm tra P1≤100
Cảnh báo
Sai
Đúng
END
RD=1
Chương trình:
Chương trình điều khiển LCD:
#define RS P3_0 // Chan dieu khien LCD
#define RW P3_1 // Chan doc/ghi LCD
#define E P3_2 // Chan bat/tat LCD
char i,j,k,m,n;
/*************** Ham tao tre *****************/
void delay(int i)
{ while(i--);
}
/************ Ham lenh cho LCD hien thi ***************/
void LCDwrite(char a)
{ RS=1;
RW=0;
P2=a;
E=1;
E=0;
}
/********* Ham dieu khien LCD thuc hien 1 lenh *********/
void LCDcontrol(char a)
{ RS=0;
RW=0;
P2=a;
E=1;
E=0;
}
Chương trình điều khiển quá trình chuyển đổi:
#define RD P3_5
#define WR P3_6
#define INTR P3_7
while(1)
{ WR=0;
WR=1;
while(INTR);
RD=0;
RD=1;
}
Chương trình kiểm tra điều kiện nhiệt độ:
if (P1>CB) // Neu nhiet do cao hon CB
{ n++;
if(n==2) n=0;
P3_3=1; // Nhap nhay den LED
delay(10000);
P3_3=0;
}
else P3_3=0;
Chương trình phần mềm cho hệ thống cảm biến nhiệt:
/*========== Bài tập lớn môn học KT Vi xử lý ===============*/
// Chương trình đo , cảnh báo nhiệt độ sử dụng AT89C51
// Học viên thực hiện : Đỗ Tiến Hướng
// Hồ Văn Linh
// Ngày thực hiện : 22/5/2010
// Linh kiện : AT89C51 - ADC0804 - LM016L - LM35
/*===================================================*/
#include "AT89X51.h"
#include "string.h" // Thư viện xử lý chuỗi ký tự
#define RD P3_5 // Chan doc ADC
#define WR P3_6 // Chan ghi ADC
#define INTR P3_7 // Chan ngat ADC
#define RS P3_0 // Chan dieu khien LCD
#define RW P3_1 // Chan doc/ghi LCD
#define E P3_2 // Chan bat/tat LCD
#define CB 100 // Nhiet do canh bao
//=========================================================
char line1 [] = " HE THONG DO NHIET DO SU DUNG AT89C51 HOC VIEN :$ DO TIEN HUONG &$ HO VAN LINH ";
char line2 [] = " NHIET DO : \337C";
char i,j,k,m,n;
/********************* Ham tao tre **************************/
void delay(int i)
{ while(i--);
}
/************** Ham lenh cho LCD hien thi **********************/
void LCDwrite(char a)
{ RS=1;
RW=0;
P2=a;
E=1;
E=0;
}
/************* Ham dieu khien LCD thuc hien 1 lenh **************/
void LCDcontrol(char a)
{ RS=0;
RW=0;
P2=a;
E=1;
E=0;
}
/*************** Chuong trinh chinh *********************/
void main()
{ LCDcontrol(0x38); delay(40); // LCD 2 dong 5x7
LCDcontrol(0x0C); delay(40); // Bat hien thi , tat con tro
j=0; k=0; m=0; n=0;
while(1) ; vong lap vo han
{ k++;
if(k==3)
{ j++;
k=0;
}
if(j==strlen(line1)) j=0;
i=0;
LCDcontrol(0x80); delay(40); // Dua con tro ve dau dong 1
/*************** Hien thi dong 1 LCD ***************/
while(i!=20) // Hien thi 20 ky tu
{ if ((line1[(i+j)%strlen(line1)]=='$')&&(i==0))
{ m++;
if (m!=15) { k--; }
else m=0;
}
if(line1[(i+j)%strlen(line1)]!='$') // Khong hien thi ky tu '$'
{ LCDwrite(line1[(i+j)%strlen(line1)]); delay(40);
}
else
{ LCDwrite(' '); delay(40); // Thay the '$' bang ' '
}
i++;
}
/************ Hien thi dong 2 LCD ******************/
LCDcontrol(0xC0); delay(40); // Dua con tro ve dau dong 2
i=0;
while(line2[i])
{ LCDwrite(line2[i]); delay(40);
i++;
}
LCDcontrol(0x10); delay(40); // Dich con tro sang trai 2 o hien thi LCDcontrol(0x10); delay(40);
P1=0xff;
/************ Hien thi so chi nhiet do **************/
if(n!=1) // Neu co canh bao , nhap nhay so chi nhiet do tren LCD
{ WR=0;
WR=1;
while(INTR); // Cho den khi ADC bien doi xong RD=0; // cho phep dau ra ADC LCDcontrol(0x10); delay(40); // Dich con tro sang trai 3 o hien thi
LCDcontrol(0x10); delay(40);
LCDcontrol(0x10); delay(40);
// Tinh toan , chuyen thanh ma ASCII va hien thi nhiet do ra LCD
LCDwrite(P1/100+48); delay(40); // Hien thi chu so hang tram
LCDwrite((P1%100)/10+48); delay(40);//Hien thi chu so hang chuc
LCDwrite(P1%10+48);delay(40); // Hien thi chu so hang don vi
RD=1;
}
/******** Canh bao ***********/
if (P1>CB) // Neu nhiet do cao hon CB
{ n++;
if(n==2) n=0;
P3_3=1; // Nhap nhay den LED
delay(10000);
P3_3=0;
}
else
P3_3=0;
}
}
Chương trình mã nguồn ASM :
;================= Bai tap lon mon hoc VXL ======================
; Ung dung 80C51 vao mach do nhiet do dung ngon ngu ASM
; Nguoi thuc hien : Đỗ Tiến Hướng
; Hồ Văn Linh
; Ngay thuc hien : 21/6/2010
;================================================================
RS EQU P3.0
RW EQU P3.1
E EQU P3.2
RD1 EQU P3.5 ; tich cuc thap - Chan cho phep dau ra ADC
WR1 EQU P3.6 ; tich cuc thap - Bat dau viec chuyen doi
INTR EQU P3.7 ; tich cuc thap - Ket thuc viec chuyen doi
LED EQU P3.3
MAX EQU 100
;==============================================================
ORG 00H
JMP MAIN
;====================
ORG 50H
LINE1 :
DB ' ',' ','C','H','U','O','N','G',' ','T','R','I','N','H',' ','D','O',' ','N','H','I','E','T',' ','D','O',' ',' ',' ','D','O',' ','T','I','E','N',' ','H','U','O','N','G',' ','&',' ','H','O',' ','V','A','N',' ','L','I','N','H',' ',' ',' ',' '
LINE2 :
DB ' ',' ','N','H','I','E','T',' ','D','O',' ',':',' ',' ',' ',' ',' ',' ','C',' '
;===============================================================
ORG 100H
MAIN :
CLR LED ; khoi tao gia tri ban dau LCD
MOV A,#38H ; ma tran LED 2 dong 5x7
CALL LCDC
CALL TRE
MOV A,#0CH ; bat hien thi, tat con tro hien thi
CALL LCDC
CALL TRE
;========================
MOV R6,#0
MOV R7,#0
MOV R5,#1
LAP_MAIN :
CALL TACGIA ; hien thi dong 1 LCD
INC R6
CJNE R6,#60,HTADC
MOV R6,#0
HTADC : ; hien thi dong 2 LCD
CALL ADC
JMP LAP_MAIN
;===============================================================
NHAY : ; nhap nhay so chi nhiet do
MOV R4,#255
DKR5 :
DJNZ R4,DKR5
INC R5
CJNE R5,#2,ENDN
MOV R5,#0
ENDN :
CPL LED
RET
;===============================================================
TACGIA : ; hien thi dong chu chay
MOV A,#80H ; dua con tro hien thi ve dau dong 1
CALL LCDC
CALL TRE
MOV DPTR,#LINE1
TG :
MOV A,R6
ADD A,R7
MOV B,#60
DIV AB
MOV A,B
MOVC A,@A+DPTR
CALL LCDW
CALL TRE
INC R7
CJNE R7,#20,TG
MOV R7,#0
RET
;===============================================================
ADC :
MOV P1,#0FFH
SETB INTR
CLR WR1 ; bat dau chuyen doi
SETB WR1
LAP_INTR : ; Cho den khi ADC bien doi xong
JNB INTR,HT
JMP LAP_INTR
;=========================
HT :
CLR RD1
MOV DPTR,#LINE2
MOV A,#0C0H ; dua con tro ve dau dong thu 2
CALL LCDC
CALL TRE
MOV R1,#0
HT_LINE2 : ; hien thi chuoi LINE2
MOV A,R1
MOVC A,@A+DPTR
CALL LCDW
CALL TRE
INC R1
CJNE R1,#14,HT_LINE2
MOV R1,#0
;==================
CJNE R5,#1,QUA ; Neu R5 khac 1 thi bo qua ko hien thi nhiet do
MOV A,P1 ; Doc gia tri nhiet do vao A
MOV B,#100
DIV AB
ADD A,#48 ; Cong A voi 48 chuyen thanh ma ASCII
CALL LCDW
CALL TRE
MOV A,B
MOV B,#10
DIV AB
ADD A,#48
CALL LCDW
CALL TRE
MOV A,B
ADD A,#48
CALL LCDW
CALL TRE
MOV A,#"C"
CALL LCDW
CALL TRE
JMP KTLED
QUA : ; hien thi 3 dau cach thay cho so chi nhiet do
MOV A,#" "
CALL LCDW
CALL TRE
MOV A,#" "
CALL LCDW
CALL TRE
MOV A,#" "
CALL LCDW
CALL TRE
MOV A,#"C"
CALL LCDW
CALL TRE
;==================
KTLED : ; kiem tra dieu kien nhiet do
MOV A,P1
CJNE A,#MAX,KT ; so sanh A voi gia tri MAX
CLR LED
JMP END_ADC
KT :
JC NHO ; neu CF=1 tuc la A<MAX
CALL NHAY
JMP END_ADC
NHO :
MOV R5,#1
CLR LED
END_ADC :
SETB RD1 ; ket thuc hien thi
RET
;===============================================================
LCDW : ; gui du lieu ra LCD
SETB RS
CLR RW
MOV P2,A
SETB E
CLR E
RET
LCDC : ; gui lenh ra LCD
CLR RS
CLR RW
MOV P2,A
SETB E
CLR E
RET
TRE : ; tao thoi gian tre
MOV R2,#50
TRE1:
MOV R3,#100
TRE2:
DJNZ R3,TRE2
DJNZ R2,TRE1
RET
;===============================================================
END
Các file đính kèm theo tài liệu này:
- thuyet trinh.doc