BÁO CÁO BÀI TẬP LỚN HỌC PHẦN: VI XỬ LÝ Chủ đề: Sử dụng ATMega328P để hiển thị giá trị nhiệt độ cảm biến Lm35 trên màn hình Lcd 1602 Giảng viên hướng dẫn: Ts... Đây là một bo mạch phát tr
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘI
TRƯỜNG CƠ KHÍ
.
BÁO CÁO BÀI TẬP LỚN
HỌC PHẦN: VI XỬ LÝ Chủ đề: Sử dụng ATMega328P để hiển thị giá trị nhiệt độ cảm biến Lm35
trên màn hình Lcd 1602 Giảng viên hướng dẫn: Ts Nguyễn Hữu Quang Sinh viên thực hiện:
Nguyễn Quý Tuấn MSSV: 20205514
Nguyễn Thế Khánh MSSV: 20205344
Trang 2
- -1 Các linh kiện sử dụng
1.1 Arduino Uno R3
Arduino Uno R3 là một bo mạch phổ biến thuộc dòng sản phẩm Arduino Đây là một bo mạch phát triển dựa trên vi điều khiển ATmega328P, chủ yếu được sử dụng
để xây dựng các dự án điện tử và nhúng
Thông số kỹ thuật:
Trang 31.2 Cảm biến nhiệt độ Lm35
Cảm biến nhiệt độ LM35 là một cảm biến nhiệt độ linh hoạt thường được sử dụng trong các ứng dụng điện tử và nhúng
LM35 là một cảm biến nhiệt độ dựa trên nguyên tắc làm thay đổi điện áp đầu ra tuyến tính với nhiệt độ
Thông số kỹ thuật:
- Điện áp hoạt động: 4-20VDC
- Công suất tiêu thụ: khoảng 60uA
- Khoảng đo: -55 đến 150 độ C
- Điện áp tuyến tính theo nhiệt độ: 10mV/độ C
- Sai số: 0.25 độ C
- Kiểu chân: TO92
- Kích thước: 4.3 x 4.3mm
1.3 Màn hình LCD 16x2
Màn hình LCD 16x2 có kích thước 16 ký tự trên mỗi dòng và 2 dòng, nói cách khác, có khả năng hiển thị tổng cộng 32 ký tự
Mỗi ký tự được hiển thị trong một ô, và màn hình được chia thành 16 ô theo chiều ngang và 2 ô theo chiều dọc
Trang 4Thông số kỹ thuật:
- Điện áp hoạt động: 5V
- Kích thước: 8 x 3.6 x 0.8cm
- Màu nền: xanh lá hoặc xanh dương
- Màu chữ: đen
- Khoảng cách giữa hai chân kết nối: 0.1 inch
- Tiện dụng khi kết nối với Breadboard
Chức năng các chân của LCD:
Trang 5Địa chỉ được hiển thị trên màn hình LCD trong bộ nhớ DDRAM:
Tập lệnh của LCD:
Trang 62 Sơ lược về vi điều khiển ATMega328P
ATmega328P là một vi điều khiển AVR (Advanced Virtual RISC) được sản xuất bởi Atmel (hiện nay đã được Microchip Technology mua lại) Đây là một trong những vi điều khiển phổ biến và được sử dụng rộng rãi trong các ứng dụng nhúng, đặc biệt là trong dự án Arduino
Thông số kỹ thuật:
- Số chân ngõ vào Analog: 6 chân
- Bộ nhớ flash: 32KB
- SRAM: 2KB
- EEPROM: 1KB
- Tốc độ xung nhịp: 16 MHz
- Nhiệt độ: -40 - 105 độ C
- Tổng số chân I/O kỹ thuật số: 14 chân
- Chứa tổng cộng ba bộ định thời: hai 8 bit và một 16 bit
- Tổng số chân I/O: 23 chân
- Tổng số kênh PWM: 6 kênh
Trang 7
Sơ đồ chân: có tất cả 28 chân trong đó có 23 chân I/O
3 Bộ chuyển đổi ADC
Bộ chuyển đổi ADC (Analog-to-Digital Converter) là một thành phần quan trọng trong vi điều khiển để chuyển đổi tín hiệu analog thành dạng số mà vi điều khiển
có thể xử lý ATmega328P, như được sử dụng trong các board Arduino, cũng tích hợp một bộ ADC với độ phân dải 10 bit
ATmega328P có 8 kênh ADC (ADC0 đến ADC7), 16 tổ hợp chuyển đổi dạng so sánh, trong đó có 2 kênh so sánh có thể khuếch đại
Bộ ADC có thể được cấu hình với một độ chia tỷ lệ để điều chỉnh tốc độ chuyển đổi Điều này giúp đảm bảo rằng tốc độ chuyển đổi là phù hợp với yêu cầu ứng dụng và giảm tải cho vi điều khiển
Có 4 thanh ghi trong bộ ADC trên AVR trong đó có 2 thanh ghi data chứa dữ liệu sau khi chuyển đổi, 2 thanh ghi điều khiển và chứa trạng thái của ADC
- ADMUX: là 1 thanh ghi 8 bit điều khiển việc chọn điện áp tham chiếu, kênh và chế độ hoạt động của ADC
Trang 8Bit 7:6 – REFS1:0: là các bit chọn điện áp tham chiếu cho ADC.
Bảng chọn điện áp tham chiếu
Bit 5 – ADLAR: là bit cho phép hiệu chỉnh trái kết quả chuyển đổi Nếu ADLAR=0 kết quả sẽ được hiệu chỉnh về phía phải ( thanh ghi ADCL chứa chọn 8 bit thấp và thanh ghi ADCH chứa 2 bit cao trong 10 bit kết quả ), và nếu ADLAR=1 thì kết quả được hiểu chỉnh trái ( thanh ghi ADCH chứa trọn 8 bit cao nhất, các bit từ 9 đến 2, và thanh ADCL chứa 2 bit thấp nhất trong 10 bit kết quả ) Bit 4:0 – MUX4:0: là 5 bit cho phép chọn kênh, chế độ và cả hệ số khuếch đại cho ADC
Bảng chọn kênh cho ADC:
MUX4.0 Single ended input
- ADCSRA: là thanh ghi chính điều khiển hoạt động và trạng thái của ADC
Trang 9Bit 7 – ADEN: viết giá trị 1 vào bit này tức là đã cho phép module ADC được sử dụng
Bit 6 – ADSC: set bit này lên 1 là bắt đầu thực hiện quá trình chuyển đổi Trong quá trình chuyển đổi, bit ADSC sẽ được giữ nguyên giá trị 1, khi quá trình chuyển đổi kết thúc, bit này sẽ được trả về 0
Bit 4 – ADIF: cờ báo ngắt, khi một chuyển đổi kết thúc, bit này tự động được set lên 1
Bit 3 – ADIE: bit cho phép ngắt
Bit 2:0 – ADPS2:0: các bit cho phép chọn hệ số chia từ nguồn clock chính đến ADC
Bảng chọn hệ số chia xung nhịp cho ADC:
- ADCL và ADCH: 2 thanh ghi chứa giá trị của quá trình chuyển đổi Bit ADLAR trong thanh ghi ADMUX quy định cách mà kết quả được ghi vào
ADLAR=0:
ADLAR=1:
Trang 104 Sơ đồ mạch
5 Chương trình
Khai báo và định nghĩa:
#define F_CPU 16000000u1
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#define DB DDRB
#define DD DDRD
#define PB PORTB
#define PD PORTD
#define RS PB1
#define RW PB2
#define RE PB3
Trang 11void gui_lenh (unsigned char);
void display_char (unsigned char);
void khoi_tao (void);
void display_string (char *);
void display_stringxy (char, char, char *); void clear_lcd();
uint16_t read_adc (uint8_t);
Hàm main:
Hàm gửi lệnh từ vi điều khiến đến LCD:
Trang 12Hàm gửi dữ liệu từ vi điều khiển đến LCD:
Hàm khởi tạo LCD:
Hàm hiển thị chuỗi ký tự lên LCD:
Hàm điều khiển vị trí hiển thị trên LCD:
Trang 13Hàm xóa màn hình LCD:
Hàm đọc giá trị sau khi chuyển đổi:
The