Đề bàiĐề bài: Đo nhiệt độ môi trường hiển thị ra led 7 đoạn.. Yêu cầu của đề bài: Dùng một cảm biến và một vi xử lý để đo nhiệt độ của môi trường sau đó đưa ra led 7 đoạn.. Thiết kếSơ đồ
Trang 2NỘI DUNg
Yêu cầu và thiết kế
Mạch Proteus
Code Kết quả
Trang 3Đề bài
Đề bài: Đo nhiệt độ môi trường hiển thị ra led 7 đoạn.
Yêu cầu của đề bài:
Dùng một cảm biến và một vi xử lý để đo nhiệt độ của môi trường sau đó đưa ra led 7 đoạn.
Quy trình để đo nhiệt độ:
NHIỆT ĐỘ=>CẢM BIẾN=>ADC=>XỬ LÝ=>HIỂN THỊ
Trang 4Thiết kế
Các linh kiện sử dụng:
• LM35.
• PIC16F877A.
• LED 7 đoạn MPX2-CA.
Trang 5Thiết kế
Sơ đồ khối điều khiển chung:
Nguồn
Vi xử lý Pic16f877a
Hiển thị led
7 đoạn
Cảm biến
LM35
Tín hiệu tương tự Tín hiệu số
Trang 6Thiết kế
• Khối nguồn: Cung cấp điện áp cho các khối trong hệ
thống.
• Khối cảm biến LM35: thu giá trị analog (tín hiệu tuần
tự) đưa qua khối vi điều khiển để xử lý.
• Khối vi điều khiển Pic16f877a: xử lý tín hiệu tuần tự
sang tín hiệu số (digital) sau đó xuất ra led.
• Khối hiển thị: hiện thị nhiệt độ đo được.
Trang 7Thiết kế
Nguyên lý hoạt động: Nhiệt độ bên ngoài môi trường sẽ
được cảm biến thu nhận chuyển thành tín hiệu tương tự (analog) sau đó được đưa qua vi điều khiển Trong vi điều khiển có tích hợp sẵn bộ ADC nên tín hiệu sẽ được chuyển thành tín hiệu số (digital) và tính toán xử lý sau đó xuất ra led 7 đoạn.
Trang 8Thiết kế
Công thức biến đổi ADC:
Khi dùng ADC 10 bit, tín hiệu đọc từ các chân ADC như sau:
ADC của pic 10bit nên max = 1023 với Vref = Vcc = 5V.
→ 𝑉 = 𝐴𝐷𝐶 × 5
1023 Với: V điện áp.
ADC tín hiệu cảm biến nhận được.
Ứng với 1°𝐶 → 10 𝑚𝑉
1023 × 10 × 1000
Trang 9Lưu đồ giải thuật
Bắt đầu
Định nghĩa các biến
Đọc giá trị nhiệt độ
Hiển thị giá trị nhiệt
độ lên led 7 đoạn
Kết thúc
Trang 11Xây dựng code
#include <16f877a.h>
#device *=16 adc=10 // sử dụng bộ ADC 10 bit
#fuses NOWDT
#fuses NOBROWNOUT
#fuses NOLVP
#use delay(clock=20000000) // sử dụng thạch anh tần số 20 MHz
#byte port_B=0x06 // cài đặt port B
#byte port_D=0x08 // cài đặt port D
#bit led_1=port_D.7 // cài đặt led1
#bit led_2=port_D.6 // cài đặt led2
unsigned int value;
int maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; // {0,1,2,3,4,5,6,7,8,9}
int chuc,donvi;
void docADC(); // Khai báo hàm đọc ADC
void hienthi(unsigned int value); // Khai báo hàm hiển thị
Trang 12Xây dựng code
void main()
{
set_tris_a(0xff); // Port A là giá trị đầu vào
set_tris_b(0x00); // Port B là giá trị đầu ra
output_d(0x00); // cho tất cả port D giá trị 0
while(TRUE) // lặp vô tận
{
hienthi(value); // Hiển thị ra led
docADC(); // Đọc tín hiệu ADC
value=read_ADC(); // gán giá trị ADC cho biến value value=0.488*value; // tính toán lại tín hiệu
}
}
Trang 13Xây dựng code
void docADC() // Hàm đọc tín hiệu
{
setup_ADC(ADC_clock_internal); // cài đặt ADC thời gian lấy mẫu bằng xung clock setup_ADC_ports(AN0); // Dùng chân AN0 làm chân ADC
set_ADC_channel(0); // Chọn chân A0 để đọc giá trị analog bằng lệnh read_adc() delay_us(100);
}
void hienthi(unsigned int value) // Hàm hiển thị
{
chuc=value/10; // lấy phần nguyên
donvi=value%10; // lấy phần dư
port_b=maled[chuc]; // xuất ra led 2
led_2=1;
delay_ms(1);
led_2=0;
port_b=maled[donvi]; // xuất ra led 1
led_1=1;
delay_ms(1);
led_1=0;
}
Trang 14Kết quả