Tải bản đầy đủ (.pdf) (34 trang)

Thiết kế bộ đo và hiển thị nhiệt độ trên LCD và máy tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.83 MB, 34 trang )

MỤC LỤC
DANH SÁCH HÌNH ẢNH .................................................................................................. 3
BẢNG KÝ HIỆU.................................................................................................................. 4
Mở đầu .................................................................................................................................. 5
CHƢƠNG I: GIỚI THIỆU BỘ ĐO VÀ HIỂN THỊ NHIỆT ĐỘ TRÊN LCD VÀ MÁY
TÍNH ..................................................................................................................................... 6
I. Khối điều khiển ( Vi điều khiển AVR) ........................................................................ 6
1. Giới thiệu chung ........................................................................................................ 6
2. Cấu trúc Atmega16 .................................................................................................... 7
II. Cảm biến đo nhiệt độ LM35 ........................................................................................ 8
III. TEXT LCD 16x2 ......................................................................................................... 9
IV.Ngôn ngữ lập trình và trình biên dịch ........................................................................ 12
V. Nạp chƣơng trình ....................................................................................................... 13
VI.Chƣơng trình ứng dụng hiển thị nhiệt độ trên máy tính ............................................ 14
1. Cơ bản về giao tiếp RS232 ...................................................................................... 14
2. Giao diện phần mềm viết chƣơng trình ứng dụng hiển thị trên máy tính ............... 15
CHƢƠNG II: THIẾT KẾ BỘ ĐO VÀ HIỂN THỊ NHIỆT ĐỘ TRÊN LCD VÀ MÁY
TÍNH ................................................................................................................................... 16
I. Đo nhiệt độ sử dụng cảm biến nhiệt độ LM35 .......................................................... 16
1. Bộ ADC (Analog to digital Converter) ................................................................... 16
2. Sử dụng ADC cho cảm biến nhiệt độ LM35: .......................................................... 18
II. Hiển thị nhiệt độ trên LCD ........................................................................................ 19
III. Hiển thị nhiệt độ trên máy tính .................................................................................. 20
1. Thiết kế giao diện phần mềm .................................................................................. 20
2. Viết chƣơng trình ..................................................................................................... 22
IV.Thiết kế mạch mô phỏng trên Proteus ....................................................................... 23
V. Thiết kế phần cứng bằng Altium design .................................................................... 24
1. Thiết kế mạch nguyên lý ......................................................................................... 24

1



2. Thiết kế mạch in: ..................................................................................................... 25
VI.Giải thuật và điều khiển ............................................................................................. 27
1. Giải thuật ................................................................................................................. 27
2. Lập trình điều khiển ................................................................................................. 28
CHƢƠNG III: KẾT QUẢ, KIỂM THỬ VÀ ĐÁNH GIÁ HỆ THỐNG............................ 29
I. Kết quả ....................................................................................................................... 29
1. Cài đặt hệ thống ....................................................................................................... 29
2. Kết quả ..................................................................................................................... 30
II. Kiểm thử hệ thống ..................................................................................................... 31
III. Đánh giá hệ thống ...................................................................................................... 31
1. Ƣu điểm ................................................................................................................... 31
2. Nhƣợc điểm ............................................................................................................. 32
CHƢƠNG IV: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN .......................................... 33
TÀI LIỆU THAM KHẢO .................................................................................................. 34

2


DANH SÁCH HÌNH ẢNH
Hình 1.1. Sơ đồ khối bộ đo và hiển thị nhiệt độ trên LCD và PC ........................................ 6
Hình 1.2. Vi điều khiển Atmega16 ....................................................................................... 7
Hình 1.3. Chân cảm biến nhiệt độ LM35 ............................................................................. 8
Hình 1.4. Sơ đồ nguyên lí LCD 16x2 ................................................................................... 9
Hình 1.5. Hình dạng thực 1 LCD 16x2 (16 cột, 2 hàng) ...................................................... 9
Hình 1.6. Kết nối LCD ....................................................................................................... 11
Hình 1.7. Giao diện CodeVisionAVR V2.05.0. ................................................................. 12
Hình 1.8. Mạch nạp AVRISP ............................................................................................. 13
Hình 1.9. Mạch nạp AVR910C .......................................................................................... 13
Hình 1.10. Phần mềm nạp chƣơng trình Kazama Programmer ......................................... 13

Hình 1.11. Khung truyền UART ........................................................................................ 14
Hình 1.12. Giao diện Visual Basic 2010 ............................................................................ 15
Hình 2.1. Kết nối nguồn ADC ............................................................................................ 17
Hình 2.2. Sử dụng ADC kênh 0 cho cảm biến LM35 ........................................................ 18
Hình 2.3. Kết nối LCD với AVR........................................................................................ 19
Hình 2.4. Tạo New Project ................................................................................................. 20
Hình 2.5. Toolbox............................................................................................................... 21
Hình 2.6. Phần mềm hiển thị nhiệt độ trên PC ................................................................... 21
Hình 2.7. Mô phỏng trên Proteus ....................................................................................... 23
Hình 2.8. Mạch nguyên lí phần cứng ................................................................................. 24
Hình 2.9. Bản vẽ mạch in ................................................................................................... 25
Hình 2.10. Thiết lập thông số đƣờng mạch in .................................................................... 25
Hình 2.11. Sắp xếp linh kiện .............................................................................................. 26
Hình 2.12. Mạch in ............................................................................................................. 26
Hình 3.1. Nạp chƣơng trình vào vi điều khiển ................................................................... 29
Hình 3.2. Cài đặt phần mềm Temperature measurement Ver1.00.1 .................................. 29
Hình 3.3. Bộ đo và hiển thị nhiệt độ trên LCD .................................................................. 30
Hình 3.4. Hiển thị nhiệt độ trên máy tính ........................................................................... 30
Hình 3.5. Kết quả mô phỏng hệ thống bằng Proteus .......................................................... 31
Hình 3.6. So sánh giá trị nhiệt độ với nhiệt kế ................................................................... 31

3


BẢNG KÝ HIỆU
KÝ HIỆU
ĐƠN VỊ
Vout
V
Vref

V
adc_data[0]

ĐỊNH NGHĨA
Điện áp ngõ ra LM35
Điện áp tham chiếu bộ ADC
Giá trị bộ ADC kênh 0 của Atmega16

4


Mở đầu
Ngày nay, đo lƣờng là một yếu tố quan trọng trong nền công nghiệp. Nếu thiếu đo
lƣờng, những ngƣời kĩ sƣ không thể có đƣợc cái nhìn chính xác đối với các hiện tƣợng,
đồng thời gây ra sự sai lệch và những kết quả không nhƣ mong đợi trong nghiên cứu.
Trong hệ đơn vị SI (International System Unit), có sáu đại lƣợng vật lý cơ bản và nhiệt
độ là một trong số đó. Sự thay đổi của nhiệt độ chỉ ra một cách khá rõ ràng những gì thực
sự xảy ra bên trong hiện tƣợng, hoặc những chi tiết cơ học chúng ta quan sát đƣợc. Việc
đo nhiệt độ cũng ngày càng trở nên dễ dàng và đa dạng, từ một chiếc nhiệt kế đơn giản
đến những hệ thống điện tử thông minh.
Qua quá trình học tập môn học phân tích và thiết kế hệ thống nhúng, chúng em đã tiếp
thu những kiến thức cơ bản để đƣa ra ý tƣởng thiết kế một mạch đo nhiệt độ với những
tính năng đặc biệt nhằm ứng dụng trong các môi trƣờng mang tính tự động hóa.
Tiểu luận “Thiết kế bộ đo và hiển thị nhiệt độ trên LCD và máy tính” dƣới sự hƣớng
dẫn của PGS.TS. Huỳnh Quyết Thắng đƣợc thực hiện bởi nhóm học viên cao học:
-

Dƣơng Văn Đức

-


Nguyễn Chí Thanh

-

Hồ Văn Thái

Lớp CB13CĐT – Đại Học Bách Khoa Hà Nội.
Chúng em xin trân thành cảm ơn sự chỉ bảo tận tình của thầy giáo trong quá trình hình
thành và hoàn thiện tiểu luận!

5


CHƢƠNG I: GIỚI THIỆU BỘ ĐO VÀ HIỂN THỊ NHIỆT ĐỘ TRÊN LCD VÀ
MÁY TÍNH
Yêu cầu cần thực hiện:





Mạch điện tử đƣợc thiết kế trên máy tính bằng phần mềm chuyên dụng.
Nhiệt độ đo đƣợc hiển thị trên LCD và máy tính.
Sai số cho phép +/- 10C
Thao tác khống chế đƣợc mô phỏng bằng Led và trên LCD.

Sơ đồ khối của bộ đo và hiển thị nhiệt độ trên LCD và máy tính:

Cảm biến nhiệt

LM35

LCD
AVR
(atmega16)

Máy tính

keypad
WARNING

Hình 1.1. Sơ đồ khối bộ đo và hiển thị nhiệt độ trên LCD và PC

I.

Khối điều khiển ( Vi điều khiển AVR)

1. Giới thiệu chung
Vi điều khiển AVR là họ điều khiển do hãng Atmel phát triển, với cấu trúc tập lệnh
đơn giản hóa – RISC (Reduced Instruction Set Computer), một kiểu cấu trúc đang thể
hiện ƣu thế trong các bộ xử lí. So với các chip vi điều khiển 8 bits khác, AVR có nhiều
tính năng vƣợt trội:
 Sử dụng đơn giản. Gần nhƣ chúng ta không cần mắc thêm bất kỳ linh kiện phụ nào khi
sử dụng AVR, thậm chí không cần nguồn tạo xung clock cho chip (thƣờng là các khối
thạch anh).
 Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản, có loại mạch nạp chỉ cần vài điện
trở là có thể làm đƣợc. Một số AVR còn hỗ trợ lập trình on – chip bằng bootloader
không cần mạch nạp…
 Ngoài lập trình bằng asembly nhƣ thông thƣờng, AVR còn hỗ trợ lập trình C với cấu
trúc lệnh đơn giản.


6


 AVR có thể sử dụng xung clock lên tới 16MHz (với xung ngoài) hoặc có thể sử dụng
xung clock bên trong chip ( tối đa 8MHz)
 Tích hợp bộ nhớ Flash dung lƣợng lớn, có khả năng lập trình nhiều lần, có SRAM lớn,
đồng thời tích hợp bộ nhớ lƣu trữ lập trình đƣợc EEPROM.
 Số cổng giao tiếp nhiều (I/O port) và 2 chiều (bi-directional).
 Tích hợp nhiều tính năng: chuyển đổi số - tƣơng tự (Analog – Gigital), nhiều chuẩn
giao tiếp (RS-232, I2C, SPI…), có bộ đếm timer/counter tích hợp tạo xung PWM…
Bản thân họ AVR có rất nhiều loại vi điều khiển khác nhau về dung lƣợng bộ nhớ, số
cổng giao tiếp… (Atmega8, Atmega16, Attiny88…). Tuy nhiên về cấu trúc cơ bản và
cách lập trình là hoàn toàn tƣơng tự nhau. Mặc dù các ứng dụng trong bài tiểu luận này
đƣợc viết trên Atmega 16 nhƣng đều có thể áp dụng trên các vi điều khiển AVR khác.
Chƣơng trình đƣợc viết trên máy tính bằng phần mềm CodeVisionAVR, đƣợc mô phỏng
thử nghiệm trên phầm mềm Proteus, đƣa vào AVR bằng mạch nạp AVR 910 USB
Programer, phần mạch in đƣợc thiết kế bằng phần mềm Altium design.
2. Cấu trúc Atmega16

Hình 1.2. Vi điều khiển Atmega16

ATmega16 có 40 chân giao tiếp, trong đó có 4 PORT giao tiếp 8 bit (PORTA,
PORTB, PORTC, và PORTD). Các PORT này có thể nhập - xuất dữ liệu hay điều khiển
theo 2 chiều (bi-directional). Với 4 cổng này, ATmega16 có thể điều khiển các thiết bị
đầu ra (đèn led, LCD, động cơ, v.v) cũng nhƣ nhận các tín hiệu đầu vào (sensor, keypad,
camera, v.v)

7



ATmega16 tích hợp bộ nhớ Flash với dung lƣợng 16 Kb dùng để lập trình, 512
bytes EEPROM có khả năng lƣu trữ và lập trình đƣợc, 1Kb SRAM. Ngoài ra ATmega16
hỗ trợ khả năng sử dụng bộ nhớ ngoài, do đó có thể làm tăng khả năng lƣu trữ và xử lý
của nó.
ATmega16 có 2 bộ timer/counter 8 bit và 1 bộ timer/counter 16 bit (chân T0,T1)
có khả năng xuất xung PWM (thƣờng dùng trong điều khiển động cơ), đếm sự kiện xảy
ra, hay xác định thời gian cho vi điều khiển.
ATmega16 còn tích hợp các bộ chuyển đổi tƣơng tự - số (Analog Digital Convert ADC), có tác dụng chuyển đổi tín hiệu tƣơng tự sang tín hiệu số, áp dụng cho việc xử lý
tín hiệu vào từ sensor (Từ chân 33 đến chân 40).
Để tích hợp với các vi điều khiển khác hay với hệ thống máy tính, ATmega16 hỗ
trợ các chuẩn giao tiếp RS232, TWI-I2C, SPI.
II.

Cảm biến đo nhiệt độ LM35

LM35 là loại cảm biến nhiệt độ đƣợc sử dụng rộng dãi trong công nghiệp bởi giá
thành thấp và cách vận hành đơn giản. LM35 có mức điện áp thay đổ trực tiếp theo độ C
(10mV/ 0C).

Hình 1.3. Chân cảm biến nhiệt độ LM35

Chân +Vs là chân cung cấp điện áp cho LM35 hoạt động.
Chân Vout là chân điện áp ngõ ra của LM35, đƣợc đƣa vào chân Analog của bộ ADC.
Chân GND là chân mass của LM35.







Có thể đảm bảo độ chính xác 0.50C ( tại +250C)
Dải đo từ -550C đến +1500C.
Điện áp sử dụng từ 4V đến 30V.
Dòng điện nhỏ hơn 60µA.
Tự tỏa nhiệt thấp, 0.080C trong không khí.

8


III.

TEXT LCD 16x2

Text LCD là loại màn hình tinh thể lỏng nhỏ dùng để hiển thị các dòng chữ hoặc
số trong bảng mã ASCII. Text LCD đƣợc chia sẵn thành từng ô và ứng với mỗi ô chỉ có
thể hiển thị một ký tự ASCII. Mỗi ô của Text LCD bao gồm các “chấm” tinh thể lỏng,
việc kết hợp “ẩn” và “hiện” các chấm này sẽ tạo thành một ký tự cần hiển thị. Trong các
Text LCD, các mẫu ký tự đƣợc định nghĩa sẵn. Kích thƣớc của Text LCD đƣợc định
nghĩa bằng số ký tự có thể hiển thị trên 1 dòng và tổng số dòng mà LCD có. Text LCD
16x2 là loại có 2 dòng và mỗi dòng có thể hiển thị tối đa 16 ký tự.

Hình 1.4. Sơ đồ nguyên lí LCD 16x2

Text LCD có 2 cách giao tiếp cơ bản là nối tiếp (nhƣ I2C) và song song. Loại đƣợc
sử dụng trong bài báo cáo này là loại giao tiếp song song.

Hình 1.5. Hình dạng thực 1 LCD 16x2 (16 cột, 2 hàng)

9



Chức năng các chân LCD
Chức năng
Ground
Nguồn cho
LCD
Tƣơng phản
Điều khiển
LCD

Dữ liệu/lệnh

Số thứ tự
chân
1
2

Tên
Vss (Gnd)
Vdd(Vcc)

3
4

Vee
RS

5


R/W

6

EN

7
8
9
10
11
12
13
14

D0
D1
D2
D3
D4
D5
D6
D7

Trạng thái
Logic
-

Mô tả


0
1
0
1
0
1
Từ 1 xuống
0
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1

0-Vdd
D0-D7: Lệnh
D0-D7: Dữ liệu
Ghi
Đọc
Vô hiệu hóa LCD
LCD hoạt động
Bắt đầu ghi/đọc LCD

0V
+5V

Bit 0 LSB

Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7 MSB

Bảng 1. Chức năng các chân LCD
Trong một số LCD 2 chân LED nền đƣợc đánh số 15 và 16 nhƣng trong một số
trƣờng hợp 2 chân này đƣợc ghi là A (Anode) và K (Cathode). Hình 1.6 mô tả cách kết
nối LCD với nguồn và mạch điều khiển.

10


Hình 1.6. Kết nối LCD

Các chân Vcc, Vss và Vee
Chân Vcc cấp dƣơng nguồn 5V, chân Vss nối đất, chân Vee đƣợc dùng để điều khiển
độ tƣơng phản của màn hình LCD.
RS (Register select)
Khi ở mức thấp, chỉ thị đƣợc truyền đến LCD nhƣ xoá màn hình, vị trí con
trỏ….Khi ở mức cao, kí tự đƣợc truyền đến LCD.
R/W (Read/Write)
Dùng để xác định hƣớng của dữ liệu đƣợc truyền giữa LCD và vi điều khiển. Khi
nó ở mức thấp dữ liệu đƣợc ghi đến LCD và khi ở mức cao, dữ liệu đƣợc đọc từ LCD.
Nếu chúng ta chỉ cần ghi dữ liệu lên LCD thì chúng ta có thể nối chân này xuống GND để
tiết kiệm chân.
E (Enable)

Cho phép ta truy cập/xuất đến LCD thông qua chân RS và R/W. Khi chân E ở mức
cao (1) LCD sẽ kiểm tra trạng thái của 2 chân RS và R/W và đáp ứng cho phù hợp. Khi
dữ liệu đƣợc cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải đƣợc áp đến
chân này để LCD chốt dữ liệu trên các chân dữ liêu. Xung này phải rộng tối thiểu là
450ns. Còn khi chân E ở mức thấp (0), LCD sẽ bị vô hiệu hoá hoặc bỏ qua tín hiệu của 2
chân RS và R/W.
Các 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. Các kí tự đƣợc truyền theo mã tƣơng ứng trong bảng mã
ascii. Cũng có các mã lệnh mà có thể đƣợc gửi đến LCD để xoá màn hình hoặc đƣa con
trỏ về đầu dòng hoặc nhấp nháy con trỏ. LCD có 2 chế độ giao tiếp, chế độ 4 bit (chỉdùng
4 chân D4 đến D7 để truyền dữ liệu) và chế độ 8 bit (dùng cả 8 chân dữ liệu từ D0 đến
D7), ở chế độ 4 bit, khi truyền 1 byte, chúng ta sẽ truyền nửa cao của byte trƣớc, sau đó
mới truyền nửa thấp của byte.

11


IV.

Ngôn ngữ lập trình và trình biên dịch

AVR nói chung cũng nhƣ ATmega16 nói riêng hỗ trợ 2 ngôn ngữ lập trình thông dụng
là assembly và C. Việc lập trình bằng assembly giúp cho chƣơng trình nhỏ gọn nhƣng khá
rắc rối do gần với ngôn ngữ máy. Lập trình bằng C tuy cho chƣơng trình có dung lƣợng
lớn hơn so với khi lập trình bằng assembly, nhƣng lại dễ dàng hơn trong việc viết code và
dễ debug.
Để lập trình cho AVR, có khá nhiều trình biên dịch, ví dụ nhƣ AVR studio, WinAVR,
CodevisionAVR…
Trong bài tiểu luận, em dùng ngôn ngữ C đƣợc viết trên CodeVisionAVR V2.05.0.


Hình 1.7. Giao diện CodeVisionAVR V2.05.0.

12


V.

Nạp chƣơng trình

Chƣơng trình sau khi đƣợc biên dịch bởi trình biên dịch sẽ đƣợc nạp vào AVR bằng 2
cách: Nạp qua một thiết bị trung gian gọi là mạch nạp hoặc nạp trực tiếp thông qua giao
tiếp RS232 với máy tính nhờ sử dụng chức năng bootloader của vi điều khiển.
Có khá nhiều loại mạch nạp khác nhau cho AVR, từ đơn giản đến phức tạp, hỗ trợ các
loại AVR khác nhau, với các chuẩn giao tiếp khác nhau. Dƣới đây là một số loại mạch
nạp hay dùng:

Hình 1.8. Mạch nạp AVRISP

Hình 1.9. Mạch nạp AVR910C

Vi điều khiển AVR đƣợc đặt trên các mạch nạp. Các mạch nạp, thông qua cáp nối với
máy tính, sẽ nạp chƣơng trình từ máy tính vào vi điều khiển. Trong bài tiểu luận chúng
em sử dụng mạch nạp AVRISP với phần mềm nạp chƣơng trình Kazama Programmer.

Hình 1.10. Phần mềm nạp chương trình Kazama Programmer

13



VI.

Chƣơng trình ứng dụng hiển thị nhiệt độ trên máy tính

Nhiệt độ đo đƣợc từ cảm biến đƣợc vi điều khiển truyền lên máy tính qua cổng giao tiếp
RS232.
1. Cơ bản về giao tiếp RS232
RS232 là một dạng giao thức, dùng để truyền dữ liệu giữa các thiết bị điện tử có hỗ trợ
giao thức này. RS232 là một trong những giao thức ra đời sớm nhất và có thể nói là đơn
giản nhất. Cho đến nay, RS232 vẫn còn đƣợc ứng dụng rất nhiều do giao thức đơn giản,
độ tin cậy cao, và khoảng cách truyền khá xa, tuy nhiên tốc độ truyền vẫn ở mức khá
khiêm tốn so với các giao thức ra đời sau này nhƣ USB, SPI, I2C…
Để sử dụng đƣợc giao tiếp RS232, chúng ta sử dụng module UART có sẵn trong
Atmega16.
UART là viết tắt của Universal Asynchronous Receiver Transmitter, là giao tiếp truyền
nhận dị bộ, dị bộ ở đây có nghĩa là thiết bị truyền và thiết bị nhận không cùng chung xung
nhịp clock.
Trong giao thức RS232, chúng ta quan tâm đến những thông số sau:
 Tốc độ baud: Là số bit truyền trên 1s, điển hình là 9600 bit/s
 Parity: có 2 loại parity là parity chẵn và parity lẻ, dùng để tăng tính kiểm soát lỗi
trong 1 lần truyền, giả sử ta cấu hình parity là chẵn thì mỗi lần truyền, nếu số bit có
mức logic 1 là lẻ thì module tự thêm 1 bit 1 vào cuối khung truyền, còn nếu số bit có
mức logic 1 là chẵn thì không thêm bit 1 vào cuối khung truyền. Parity lẻ cũng tƣơng
tự nhƣ vậy.
 Số bit trên mỗi lần truyền: Là số bit dữ liệu (data) trên mỗi khung truyền, thƣờng là 8
bit.
Một khung truyền UART có cấu trúc nhƣ sau:

Hình 1.11. Khung truyền UART


14


2. Giao diện phần mềm viết chƣơng trình ứng dụng hiển thị trên máy tính
Chúng em đã viết một phần mềm ứng dụng nhỏ để hiển thị và điều khiển dải nhiệt độ đo
bằng việc sử dụng ngôn ngữ VB.Net.

Hình 1.12. Giao diện Visual Basic 2010

15


CHƢƠNG II: THIẾT KẾ BỘ ĐO VÀ HIỂN THỊ NHIỆT ĐỘ TRÊN LCD VÀ MÁY
TÍNH
I.

Đo nhiệt độ sử dụng cảm biến nhiệt độ LM35

1. Bộ ADC (Analog to digital Converter)
Trong các ứng dụng đo lƣờng và điều khiển bằng vi điều khiển bộ chuyển đổi
tƣơng tự-số (ADC) là một thành phần rất quan trọng. Dữ liệu trong thế giới của chúng ta
là các dữ liệu tƣơng tự (analog). Ví dụ nhiệt độ không khí buổi sáng là 250C và buổi trƣa
là 320C, giữa hai mức giá trị này có vô số các giá trị liên tục mà nhiệt độ phải “đi qua” để
có thể đạt mức 320C từ 250C, đại lƣợng nhiệt độ nhƣ thế gọi là một đại lƣợng analog.
Trong khi đó, vi điều khiển là một thiết bị số (digital), các giá trị mà một vi điều khiển có
thể thao tác là các con số rời rạc vì thực chất chúng đƣợc tạo thành từ sự kết hợp của hai
mức 0 và 1. Ví dụ chúng ta muốn dùng một thanh ghi 8 bit trong vi điều khiển để lƣu lại
các giá trị nhiệt độ từ 0oC đến 255 0C, nhƣ chúng ta đã biết, một thanh ghi 8 bit có thể
chứa tối đa 256 (28) giá trị nguyên từ 0 đến 255, nhƣ thế các mức nhiệt độ không nguyên
nhƣ 28.123 0C sẽ không đƣợc ghi lại. Nói cách khác, chúng ta đã “số hóa” (digitalize) một

dữ liệu analog, thành một dữ liệu digital. Quá trình “số hóa” này thƣờng đƣợc thực hiện
bởi một thiết bị gọi là “bộ chuyển đổi tƣơng tự - số hay đơn giản là ADC (Analog to
Digital Converter).
Độ phân giải (resolution): Khái niệm độ phân giải đƣợc dùng để chỉ số bit cần thiết
để chứa hết các mức giá trị digital ngõ ra. Nếu một mạch chuyển đổi ADC có độ phân giải
n bit thì sẽ có 2n mức giá trị có thể có ở ngõ ra digital. Độ phân giải liên quan mật thiết
đến chất lƣợng chuyển đổi ADC, việc lựa chọn độ phân giải phải phù hợp với độ chính
xác yêu cầu và khả năng xử lý của bô điều khiển.
Điện áp tham chiếu (reference voltage): Trong các bộ ADC, Vref thƣờng là thông
số đƣợc đặt bởi ngƣời dùng, nó là điện áp lớn nhất mà thiết bị có thể chuyển đổi. Ví dụ,
một bộ ADC 10 bit (độ phân giải) có Vref = 3V, nếu điện áp ở ngõ vào là 1V thì giá trị số
thu đƣợc sau khi chuyển đổi sẽ là: 1023 x (1/3) = 314. Trong đó 1023 là giá trị lớn nhất
mà một bộ ADC 10 bit có thể tạo ra. Vì điện áp tham chiếu ảnh hƣởng đến độ chính xác
của quá trình chuyển đổi, chúng ta cần tính toán để chọn 1 điện áp tham chiếu phù hợp,
không đƣợc nhỏ hơn giá trị lớn nhất của input nhƣng cũng đừng quá lớn.
Chuyển đổi ADC trên AVR:
Chip AVR ATmega16 của Atmel có tích hợp sẵn các bộ chuyển đổi ADC với độ
phân giải 10 bit. Có tất cả 8 kênh đơn (các chân 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ể khuyếch đại.

16


ADC trên AVR cần đƣợc “nuôi” bằng nguồn điện áp riêng ở chân AVCC, giá trị
điện áp cấp cho AVCC không đƣợc khác nguồn nuôi chip (VCC) quá +/-0.3V. Nhiễu
(noise) là vấn đề rất quan trọng khi sử dụng các bộ ADC, để giảm thiểu sai số chuyển đổi
do nhiễu, nguồn cấp cho ADC cần phải đƣợc “lọc” (filter) kỹ càng. Một cách đơn giản để
tạo nguồn AVCC là dùng một mạch LC kết nối từ nguồn VCC của chip nhƣ hình 2.1, đây
là cách đƣợc gợi ý bởi nhà sản xuất AVR.


Hình 2.1. Kết nối nguồn ADC

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 (ADC Multiplexer Selection Register): 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.
 ADCSRA (ADC Control and Status RegisterA): là thanh ghi chính điều khiển
hoạt động và chứa trạng thái của module ADC.
 ADCL và ADCH (ADC Data Register): 2 thanh ghi chứa giá trị của quá trình
chuyển đổi.

17


2. Sử dụng ADC cho cảm biến nhiệt độ LM35:
Vout của LM35 đƣợc nối với kênh ADC 0 của AVR. Điện áp tham chiếu là Vref = 5V.

Hình 2.2. Sử dụng ADC kênh 0 cho cảm biến LM35

Điện áp Vout của LM35 thay đổi tuyến tính theo nhiệt độ với tỉ lệ 10mV trên 1oC. Độ phân
giải của bộ ADC trên AVR là 10 bit và điện áp tham chiếu là 5V
Nếu ta nối đầu ra của LM35 vào kênh 0 của bộ ADC thì giá trị bộ ADC đọc đƣợc là:
adc_data[0] = (Vout*1024)/ Vref = (Vout*1024)/ 5000
Giá trị của adc_data[0] trong khoảng từ 0 đến 1023. Chúng ta lại có:
Nhiệt độ (oC) = Vout (mV)/10
Vì vậy, giá trị của nhiệt độ đƣợc tính theo công thức:
Nhiệt độ (oC) = adc_data[0] *(

)/10


18


II.

Hiển thị nhiệt độ trên LCD

 Sơ đồ mạch kết nối AVR với LCD nhƣ hình 2.3

Hình 2.3. Kết nối LCD với AVR

 Sơ đồ khối thuật toán hiển thị nhiệt độ trên LCD
Giao tiếp AVR với LCD theo sơ đồ sau:
START

Khởi động LCD
(init_lcd)

Xóa LCD
(lcd_clear())

Ghi ra LCD

Di chuyển con trỏ

Tiếp
tục ?

END


19




Lập trình cho LCD:

Trong phần mềm lập trình Codevision, chúng em sử dụng thƣ viện lcd.h có sẵn các hàm
giúp việc lập trình hiển thị trên LCD trở lên dễ dàng. Một số hàm sử dụng để lập trình:
void lcd_init(unsigned char lcd_columns);
khỏi tạo điều khiển LCD
void lcd_gotoxy(unsigned char x, unsigned char y);
đặt con trỏ LCD tới vị trí x, y
void lcd_clear (void);
xóa LCD
void lcd_putchar(char c);
ghi kí tự c ra LCD
void lcd_puts(char *str);
ghi chuỗi str đặt trong SRAM ra LCD
void lcd_putsf(char flash *str);
ghi chuỗi str đặt trong FLASH ra LCD
void lcd_putse (char eeprom *str);
ghi chuỗi str đặt trong EEPROM ra LCD
void itoa(int n, char *str)
đổi số integer n sang kí tự trong chuỗi str.
III.

Hiển thị nhiệt độ trên máy tính

1. Thiết kế giao diện phần mềm

Phần mềm ứng dụng trên Desktop máy tính đƣợc viết trên nền VB.NET 2010. Trong
Visual Basic 2010 có các Toolbox giúp cho việc thiết kế giao diện trở nên dễ dàng. Trƣớc
tiên, chúng ta tạo một project và đặt tên nhƣ hình 2.4

Hình 2.4. Tạo New Project

20


Sử dụng các Items trong Toolbox để thiết kế giao diện.

Hình 2.5. Toolbox

Sau khi hoàn thiện việc thiết kế ta tiến hành viết code để chạy chƣơng trình.

Hình 2.6. Phần mềm hiển thị nhiệt độ trên PC

21


2. Viết chƣơng trình
 Thanh công cụ Menustrip
Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles AboutToolStripMenuItem.Click
MessageBox.Show("Bộ đo và hiển thị nhiệt độ Ver 1.0 Copyright@by Duc Posj")
End Sub
Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ExitToolStripMenuItem.Click
Me.Dispose()
End Sub

 Cấu hình cổng COM
Các thông số của giao thức RS232 nhƣ tốc độ baud, Parity, số bit trên mỗi lần truyền, bit
stop đƣợc cấu hình nhƣ dƣới đây.
SerialPort1.ReadTimeout = 3000
SerialPort1.WriteTimeout = 3000
SerialPort1.ReadBufferSize = 1024
SerialPort1.WriteBufferSize = 1024
SerialPort1.BaudRate = 9600
SerialPort1.DataBits = 8
SerialPort1.Parity = System.IO.Ports.Parity.None
SerialPort1.StopBits = System.IO.Ports.StopBits.One
SerialPort1.PortName = "COM1"
If SerialPort1.IsOpen = False Then
SerialPort1.Open()
End If
 Nhận dữ liệu từ Vi điều khiển qua cổng giao tiếp RS232
Việc nhận dữ liệu từ vi điều khiển đƣợc thực hiện trong thủ tục serialPort_DataReceived
dƣới đây:
Private Sub serialPort1_DataReceived(ByVal sender As System.Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
buffRev = SerialPort1.ReadExisting()
End Sub
Hàm SerialPort1.ReadExisting () thực hiện việc đọc dữ liệu hiện có trên bộ nhớ đệm của
cổng nối tiếp, sau đó dữ liệu đƣợc lƣu vào biến buffRev.
22


Hiển thị nhiệt độ:
Timer1 có tác dụng nhƣ một đồng hồ, cứ mỗi giây, giá trị nhiệt độ nhận đƣợc từ vi điều
khiển sẽ đƣợc hiển thị ra nhãn do_Celcius, do_Fahrenheit và đồ thị nhiệt độ theo thời

gian.
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Timer1.Tick
conv_true = Integer.TryParse(buffRev, 32)
If conv_true = True Then
c = Integer.Parse(buffRev)
End If
Chart1.Series("Nhiệt độ").Points.AddY(c)
do_Celcius.Text = c
f = 1.8 * c + 32
do_Fahrenheit.Text = f
thoigian.Text = TimeOfDay
End Sub
IV.

Thiết kế mạch mô phỏng trên Proteus

Trƣớc khi tiến hành làm mạch in, ta có thể sử dụng phần mềm proteus để thiết kế
mạch, mô phỏng tính chính xác của chƣơng trình.

Hình 2.7. Mô phỏng trên Proteus

23


V.

Thiết kế phần cứng bằng Altium design

1. Thiết kế mạch nguyên lý


Hình 2.8. Mạch nguyên lí phần cứng

 Phần cứng gồm có các khối chính sau:
- Khối nguồn cung cấp nguồn điện cho mạch.
- Khối cảm biến: cảm biến nhiệt độ LM35 đo nhiệt độ của môi trƣờng rồi chuyển thành
tín hiệu điện ở đầu ra, truyền tới bộ chuyển đổi tƣơng tự - số của vi điều khiển.
- Khối hiển thị: màn hình LCD 16x2 hiển thị giá trị nhiệt độ đo đƣợc và hiển thị cảnh
báo nếu có.
- Khối R232: Thay đổi mức điện áp cho phù hợp giữa RS232 và UART.
- Khối điều khiển: nhận tín hiệu tƣơng tự từ cảm biến nhiệt độ LM35, chuyển đổi tín
hiệu tƣơng tự - số nhờ kênh 0 của bộ ADC; điều khiển hiển thị LCD và truyền tín hiệu
lên PC.

24


2. Thiết kế mạch in:
Sau khi thiết kế xong mạch nguyên lí, ta chuyển sang giai đoạn thiết kế mạch in. Đầu
tiên ta tạo và thiết lập các thông số của bo mạch nhƣ kích thƣớc bo mạch, độ rộng nhỏ
nhất của đƣờng mạch in, đuờng kính nhỏ nhất của lỗ cắm ngoài linh kiện, đƣờng kính nhỏ
nhất lỗ cắm trong linh kiện. Cuối cùng ta đƣợc một bo mạch nhƣ hình 2.6.

Hình 2.9. Bản vẽ mạch in

Tiếp theo thiết lập độ dày đƣờng mạch in và các thiết lập khác.

Hình 2.10. Thiết lập thông số đường mạch in

25



×