Tải bản đầy đủ (.doc) (25 trang)

đồ án thiết kế bộ đo và khống chế nhiệt độ, hiển thị lcd

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 (917.33 KB, 25 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
KHOA : CƠ HỌC KỸ THUẬT VÀ TỰ ĐỘNG HÓA
BÀI TẬP LỚN
ĐỀ TÀI: THIẾT KẾ BỘ ĐO VÀ KHỐNG CHẾ NHIỆT ĐỘ, HIỂN THỊ LCD
“Nhiệt độ khống chế được đặt bằng LM35. thao tác khống chế được mô phỏng bằng
3 led với 3 màu khác nhau, sai số cho phép là ±0.5°C”.
Giáo viên hướng dẫn: Phạm Mạnh Thắng
Sinh viên thực hiện: 1.Phạm Tiến Anh
2.Nguyễn Thị Đào
3.Bùi Thị Hiền
4.Hoàng Thị Toàn
1
LỜI NÓI ĐẦU
Kỹ thuật vi điều khiển hiện nay rất phát triển, nó được ứng dụng vào rất
nhiều lĩnh vực sản xuất công nghiệp, tự động hóa, trong đời sống và còn nhiều lĩnh
vực khác nữa. So với kỹ thuật số thì kỹ thuật vi điểu khiển nhỏ gọn hơn rất nhiều do
nó được tích hợp lại và có khả năng lập trình được để điều khiển. Nên rất tiện dụng
và cơ động. Với tính ưu việt của vi điều khiển thì trong phạm vi đồ án nhỏ này, em
chỉ dùng vi điều khiển để đo và khống chế nhiệt độ, đồng thời cho hiển thị lên
LCD.
Mục đích của đề tài hướng đến: tạo ra bước đầu cho sinh viên thử nghiệm
những ứng dụng của vi điều khiển trong thực tiễn để rồi từ đó tìm tòi, phát triển
nhiều ứng dụng khác trong đời sống hằng ngày cần đến.
Việc thực hiện xong đồ án môn học bằng các kiến thức đã học, một số sách
tham khảo và một số nguồn tài liệu khác nên không tránh khỏi những thiếu sót. Vì
vậy nhóm rất mong được sự góp ý của thầy và các bạn.
2
Phần I: Lý thuyết:
I.Sơ đồ khối tổng quát
II.Các vi mạch chính sử dụng trong đồ án


Mạch đo nhiệt độ được thiết kế sử dụng các loại IC sau:
-IC ổn áp LM7805
-Cảm biến nhiệt độ LM35
-Vi điều khiển ATMEGA8 của hãng ATMEL
-Màn hình LCD 8x2 ở chế độ 4 bit
-MAX 232
-Đầu ra ứng dụng : các led hiển thị.
III. CẤU TẠO VÀ NGUYÊN LÝ HOẠT ĐỘNG CƠ BẢN CỦA TỪNG VI
MẠCH.
Bộ xử lý trung
tâm
ATMEGA8
Khối hiển thị
LCD
Khối điều
khiển khống
chế
Đầu ra
ứng dụng
3
1.Tạo nguồn 5V cho mạch điều khiển
Nội dung: Mạch ổn áp cố định dùng Diode Zener,mạch ổn áp dùng tranzito
khuếch đại,IC ổn áp LM 7805 ứng dụng của IC ổn áp trong mạch cấp nguồn.
1. Mạch ổn áp cố định dùng Diode Zener
Mạch ổn áp tạo áp 33V cố định cung cấp
cho mạch dò kênh trong Ti vi mầu
• Từ nguồn 110V không cố định thông qua điện trở hạn dòng R1 và giảm trên Dz
33V để lấy ra một điện áp cố định cung cấp cho mạch dò kệnh
• Khi thiết kế một mạch ổn áp như trên ta cần tính toán điện trở hạn dòng sao cho
dòng điện ngược cực đại qua Dz phải nhỏ hơn dòng mà Dz chịu được, dòng cực đại

qua Dz là khi dòng qua R2 = 0
• Như sơ đồ trên thấy dòng cực đại qua Dz bằng sụt áp trên R1 chia cho giá trị R1 ,
gọi dòng điện này là I1 ta có :
I1 = (110 - 33 ) / 7500 = 77 / 7500 ~ 10mA
Thông thường ta nên để dòng ngược qua Dz<=25 mA
2.Mạch cố định ổn áp dùng Tranzito, IC ổn áp
Mạch ổn áp dùng Diode Zener như trên có ưu điểm là đơn giản nhưng nhược điểm
là cho dòng điện nhỏ ( ≤ 20mA ) . Để có thể tạo ra một điện áp cố định nhưng cho
dòng điện mạnh hơn nhiều lần người ta mắc thêm Transistor để khuyếch đại về
dòng như sơ đồ dưới đây
4
Mạch ổn áp có Tranzitor khuếch đại
• Ở mạch trên điện áp tại điểm A có thể thay đổi và còn gợn xoay chiều nhưng điện
áp tại điểm B không thay đổi và tương đối phẳng.
• Nguyên tắc ổn áp : Thông qua điện trở R1 và Dz gim cố định điện áp chân B của
Transistor Q1, giả sử khi điện áp chân E đèn Q1 giảm => khi đó điện áp UBE tăng
=> dòng qua đèn Q1 tăng => làm điện áp chân E của đèn tăng , và ngược lại
Mạch ổn áp trên đơn giản và hiệu quả nên được sử dụng rất rộng dãi và người ta đã
sản xuất các loại IC họ LA78 để thay thế cho mạch ổn áp trên, IC LA78 có sơ đồ
mạch như phần mạch có mầu xanh của sơ đồ trên

IC ổn áp họ LA78 IC ổn áp LA7805
• LA7805 IC ổn áp 5V
• LA7808 IC ổn áp 8V
• LA7809 IC ổn áp 9V
• LA7812 IC ổn áp 12V
Họ IC78 chỉ cho dòng tiêu thụ khoảng 1A trở xuống, khi ráp IC trong mạch thì U
in > Uout từ 3 đến 5V khi đó IC mới phát huy tác dụng.
3.ứng dụng của IC ổn áp họ 78…
5

IC ổn áp họ 78 được dùng rộng rãi trong các bộ nguồn , như Bộ nguồn của đầu
VCD, trong Ti vi mầu, trong máy tính v v

2. Cảm biến nhiệt LM35.
1.1 Nguyên lý hoạt động chung của IC đo nhiệt độ.
IC đo nhiệt độ là một mạch tích hợp nhận tín hiệu nhiệt độ chuyển thành tín
hiệu điện dưới dạng dòng điện hay điện áp. Dựa vào đặc tính rất nhạy của các bán
dẫn với nhiệt độ, tạo ra điện áp hoặc dòng điện tỷ lệ thuận với nhiệt độ tuyệt đối. Đo
tín hiệu điện ta biết được giá trị của nhiệt độ cần đo. Sự tác động của nhiệt độ tạo ra
điện tích tự do và các lỗ trống trong chất bán dẫn. Bằng sự phá vỡ các phân tử, bứt
các electron thành dạng tự do di chuyển qua vùng cấu trúc mạng tinh thể tạo sự xuất
6
hiện các lỗ trống. Làm cho tỷ lệ điện tử tự do và lỗ trống tăng lên theo quy luật hàm
mũ với nhiệt độ.
+LM135, LM35
Ngõ ra là điện áp.
Độ nhạy 10mv/1
0
C
Sai số cực đại 1,5
0
C khi nhiệt độ lớn hơn 100
0
C.
Phạm vi sử dụng :0
0
C=>100
0
C
Theo datasheet LM35 thì cứ10mV tương ứng với 1°C, ở 00C điện áp ra là 0V,

tương ứng với giá trị ADClà 0. Với Vref=5V, giá trị của ADC từ 0 đến 1024, lấy
tròn 1000 mức. Mỗi giá trị ADC ứng với 5V/1000= 5 mV. Vậy 1 giá trị ADC ứng
với 0.5C. Muốn tăng độ phân giải ADC ta giảm Vref.
3.Hiển thị LCD
Trong các ứng dụng của vi điều khiển thì LCD đóng vai trò quan trọng nó là bộ
phận giao tiếp giữa người và thiết bị. Có rất nhiều loại LCD khác nhau của các hãng
khác nhau. Có loại LCD 8x1,8x2,16x2 Ngày nay, hầu hết các bộ hiển thị LCD
thông minh đều tuân theo một tiêu chuẩn chung. Tùy theo yêu cầu về hiển thị thông
tin mà ta chọn loại nào cho phù hợp. Trong bài tập lớn này chúng em dùng LCD
loại 8x2 2 dòng 8 kí tự một dòng. Do loại này dễ dùng và giá thành cũng phải chăng
do vậy chúng em dùng để hiển thị nhiệt độ và các thông báo khác.
a.Cấu tạo
- Chức năng các chân của Module LCD 8x2;
Chân
số
Ký hiệu Mức
logic
I/O Chức năng
1 Vss - - Nguồn cung cấp(GND)
2 Vdd - - Nguồn cung cấp(+5V)
3 Vee - I Điện áp để điều chỉnh độ tương phản
4 RS 0/1 I Lựa chọn thanh ghi
0= thanh ghi lệnh
1=thanh ghi dữ liệu
5 R/W 0/1 I 0=ghi vào LCD module
1=đọc từ LCD module
6 E 1,1=>0 I Tín hiệu cho phép
0:vô hiệu hóa
1: hoạt động
Từ 1 xuống 0: bắt đầu đọc/ghi

7
7 DB1 0/1 I/O Data bus line 0(LSB)
8 DB2 0/1 I/O Data bus line1
9 DB3 0/1 I/O Data bus line2
10 DB4 0/1 I/O Data bus line3
11 DB5 0/1 I/O Data bus line4
12 DB6 0/1 I/O Data bus line5
13 DB7 0/1 I/O Data bus line6
14 DB8 0/1 I/O Data bus line7(MSB)
15 Vcc - - Nguồn cung cấp
16 GND - - mass
b.Mạch trong đồ án
c.Nguyên tắc hiển thị ký tự trên LCD
một chương trình hiển thị ký tự trên LCD sẽ đi theo bốn bước sau:
1) Xóa toàn bộ màn hình.
2) Đặt chế độ hiển thị.
3) Đặt vị trí con trỏ (nơi bắt đầu của ký tự hiển thị).
4) Hiển thị ký tự.
Chú ý:
+Các bước 3, 4 có thể lặp lại nhiều lần nếu cần hiển thị nhiều ký tự.
+ Mỗi khi thực hiện ghi lệnh hoặc ghi dữ liệu hiển thị lên LCD cần phải kiểm tra cờ
bận trước. Vì vậy, cần phải chủ động phân phối thời gian khi ra lệnh cho LCD( ví
dụ sau khi xóa màn hình sau khoảng 2ms mới ra lệnh khác vì thời gian để LCD xóa
8
màn hình là 1,64ms).+chế độ hiển thị mặc định sẽ là hiển thị dịch, vị trí con trỏ mặc
định sẽ là đầu dòng thứ nhất.
Lệnh RS R/W D7 D6 D5 D4 D3 D2 D1 D0 Tác dụng
Xóa hết
kết quả
hiển thị

0 0 0 0 0 0 0 0 0 1 Xóa toàn bộ
kết quả hiển
thị trước đó,
con trỏ được
đưa về đầu
dòng trên
Đưa con
trỏ về
đầu dòng
0 0 0 0 0 0 0 0 1 x Con trỏ được
đưa về đầu
dòng trên, văn
bản nếu có
được dịch đi
một kí tự
Dịch
chuyển
0 0 0 0 0 0 0 1 DS s Định hướng di
chuyển con trỏ
sau khi một kí
tự xuất hiện
Hiển thị
và con
trỏ bật
tắt
0 0 0 0 0 0 1 D C B Bật tắt hiển thị
D,con trỏ
C,nhấp nháy
kí tự tại vị trí
con trỏ B

Dịch
chuyển
0 0 0 0 0 1 SC R
L
x x Dịch chuyển
con trỏ hoặc
dòng mà
không ảnh
hưởng tới bộ
nhớ
Khởi tạo 0 0 0 0 1 D
L
N X x x Tạo dữ liệu 8
hay 4 bit (DL)
,môt hay hai
dòng(RL)
Cờ bận 0 1 BF Địa chỉ Kiểm tra xem
9
LCD đã sẵn
sang cho việc
thực hiện lệnh
tiếp chưa
Ghi dữ
liệu
1 0 Dữ liệu Ghi dữ liệu
vào bộ nhớ
hay bộ phát kí
tự
Đọc dữ
liệu

1 1 Dữ liệu Đọc dữ liệu từ
bộ nhớ hay bộ
phát kí tự
4.Vi điều khiển ATMEGA8
4.1.Tổng quan:
� SRAM: 1Kbytes
� EEPROM : 512 bytes
� 28 thanh ghi I/O
� 160 thanh ghi vào ra mở rộng
� 32 thanh ghi đa mục đích.
� 2 bộ định thời 8 bit (0,2).
� 1 bộ định thời 16 bit (1).
� Bộ định thời watchdog
� Bộ dao động nội RC tần số 1 MHz, 2 MHz, 4 MHz, 8 MHz
� ADC 6 kênh với độ phân giải 10 bit
� 3 kênh PWM 8 bit
� Bộ so sánh tương tự có thể lựa chọn ngõ vào
� Khối USART lập trình được
� Khối truyền nhận nối tiếp SPI
� Hỗ trợ boot loader
� 5 chế độ tiết kiệm năng lượng
� Lựa chọn tần số hoạt động bằng phần mềm
� Đóng gói 32 chân kiểu TQFP.
� Tần số tối đa 16MHz
� Điện thế : 4.5v - 5.5v
…v.v…
10
Sơ đồ cách tổ chức bộ nhớ và các cấu trúc thanh ghi của ATMEGA8 đã chỉ rất rõ
trong tài liệu datasheet, trong phạm vi bài tập của chúng em.Chúng em xin trình bày
cấu trúc các thanh ghi của bộ chuyển đổi ADC và khối giao tiếp UART.

4.2. Bộ chuyển đổi ADC
*Đặc điểm
5 chân trên PORTC của atmega8 được dùng cho bộ ADC, chân PC0 tương ứng
kênh ADC0 và chân PC5 tương ứng với kênh ADC5.
Độ phân giải 10 bit, có tất cả 6 kênh đơn (các chân ADC0 đến ADC5).
Sai số tuyệt đối: ±2 LSB
Thời gian chuyển đổi từ 13-260µs,
Dải tín hiệu ngõ vào từ 0v-V
cc
,
Bộ ADC của atmega8 là loại ADC xấp xỉ liên tiếp với 2 chế độ là chuyển đổi liên
tục và chuyển đổi từng bước.
Sơ đồ khối của khối ADC
ADC chứa mạch giữ và lấy mẫu để đảm bảo cho điện thế vào được giữ cố định
trong suốt quá trình chuyển đổi. 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 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” 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ư minh họa trong hình vẽ
11
Điện áp tham chiếu cho ADC trên AVR có thể được tạo bởi 3 nguồn: dùng điện áp
tham chiếu nội 2.56V (cố định), dùng điện áp AVCC hoặc điện áp ngoài đặt trên
chân VREF. Cần chú ý đến nhiễu khi đặt điện áp tham chiếu, nếu dùng điện áp
ngoài đặt trên chân VREF thì điện áp này phải được lọc thật tốt, nếu dùng điện áp
tham chiếu nội 2.56V hoặc AVCC thì chân VREF cần được nối với một tụ điện
ADC chuyển đổi một điện áp vào tương tự thành một giá trị số qua phương pháp
xấp xỉ liên tiếp. Giá trị nhỏ nhất tương ứng với đất và giá trị lớn nhất là giá trị điện
áp tham chiếu trên chân AVEF trừ 1 LSB.
Kết quả của quá trình chuyển đổi

ADC=
Vref
Vin 1024.
V
in
- là điện thế đầu vào
V
REF-
điện áp tham chiếu
* Các thanh ghi
Có 4 thanh trong bộ ADC trên AVR trong đó có 2 thanh ghi 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.
Thanh ghi ADMUX:
Bít 7 6 5 4 3 2 1 0
12
REFS1 REFS0 ADLAR - MUX3 MUX2 MUX1 MUX0
Đọc/ghi Đọc/ghi Đọc/ghi Đọc/ghi Đọc Đọc/ghi Đọc/ghi Đọc/ghi Đọc/ghi
Giá trị
đầu
0 0 0 0 0 0 0 0
Bít 7-6: REFS1-0: là bít lựa chọn điện áp tham chiếu cho ADC, 1 trong 3 nguồn
điện áp tham chiếu có thể được chọn là: điện áp ngoài từ chân VREF, điện áp tham
chiếu nội 2.56V hoặc điện áp AVCC. Bảng tóm tắt giá trị các bit và điện áp tham
chiếu tương ứng
REFS1 REFS0 Điện áp tham chiếu
0 0 VREF
0 1 AVCC
1 0
1 1 Điện áp tham chiếu nội 2, 56V
Bít 5- ADLAR

Bít ADLAR là bít quyết định vị trí của 10 bit kết quả trong 16 bit của 2 thanh ghi
data. Nếu ADLAR=0 kết quả sẽ được hiệu chỉnh về phía phải (thanh ghi ADCL
chứa trọ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ả .
Bits 3:0-MUX3:0: là các bít cho phép chọn kênh và chế độ cho ADC, nếu giá trị các
bít này thay đổi khi đang chuyển đổi thì nó cũng không gây ảnh hưởng gì cho đến
khi quá trình chuyển đổi kết thúc
MUX3 0 Các kênh đơn
0000 ADC0
0001 ADC1
0010 ADC2
0011 ADC3
0100 ADC4
0101 ADC5
0110 ADC6
0111 ADC7
1000
1001
1010
1011
1100
1101
1110 1.3V (V
BG
)
1111 0V (GND)
13
Thanh ghi ADCSRA-thanh ghi điều khiển hoạt động và chứa trạng thái của ADC
Bít 7 6 5 4 3 2 1 0

ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0
Đọc/ghi Đ/G Đ/G Đ/G Đ/G Đ/G Đ/G Đ/G Đ/G
Giá trị
đầu
0 0 0 0 0 0 0 0
Bít 7-ADEN (ADC Enable): viết 1 vào bit này để cho phép bộ ADC hoạt động, nếu
set bít này về 0 thì ADC sẽ ngừng hoạt động . Nếu tắt ADC khi đang chuyển đổi thì
quá trình chuyển đổi sẽ kết thúc.
Bít 6: ADSC(ADC Start Conversion): Trong chế độ chuyển đổi đơn kênh, set bit
này lên 1 là bắt đầu khởi động quá trình chuyển đổi. Trong suốt 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 (tự
động), bit này sẽ được trả về 0. Để thực hiện một chuyển đổi, thông thường chúng ta
sẽ set bit ADEN=1 trước và sau đó set ADSC=1.
Bit 4 – ADIF(ADC Interrupt Flag): 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, vì thế người dùng cần kiểm tra giá trị bit này trước khi
thực hiện đọc giá trị chuyển đổi để đảm bảo quá trình chuyển đổi đã thực sự hoàn
tất.
Bít 3- ADIE(ADC Interrupt Enable): bit cho phép ngắt, nếu bit này được set bằng 1
và bit cho phép ngắt toàn cục (bit I trong thanh ghi trạng thái của chip) được set,
một ngắt sẽ xảy ra khi một quá trình chuyển đổi ADC kết thúc.
Bít 2…0: ADPS2:0(ADC Prescaler Select Bits): các bit chọn hệ số chia xung nhịp
cho ADC. ADC, cũng như tất cả các module khác trên AVR, cần được giữ nhịp
bằng một nguồn xung clock. Xung nhịp này được lấy từ nguồn xung chính của chip
thông qua một hệ số chia. Các bit ADPS cho phép người dùng chọn hệ số chia từ
nguồn clock chính đến ADC
ADPS2 ADPS1 ADPS0 Hệ số chia sung
0 0 0 2
0 0 1 2
0 1 0 4
0 1 1 8

1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128
14
Thanh ghi ADCL và ADCH (ADC Data Register): 2 thanh ghi chứa giá trị của quá
trình chuyển đổi. Do bộ ADC trên AVR có độ phân giải tối đa 10 bít nên cần 2
thanh ghi để chứa giá trị chuyển đổi. Tuy nhiên tổng số bít của 2 thanh ghi 8 bit là
16, con số này nhiều hơn 10 bit của kết quả chuyển đổi, vì thế chúng ta được phép
chọn cách ghi 10 bit kết quả vào 2 thanh ghi này. Bit ADLAR trong thanh ghi
ADMUX quy định cách mà kết quả được ghi vào.
ADLAR=0
15 14 13 12 11 10 9
8
ADCH - - - - - - ADC9 ADC8
ADCL ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0
7 6 5 4 3 2 1
0
ADLAR=1
15 14 13 12 11 10 9
8
ADCH ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2
ADCL ADC1 ADC0 - - - - - -
7 6 5 4 3 2 1
0
Khi đọc giá trị từ 2 thanh ghi này, để tránh đọc sai kết quả, cần đọc thanh ghi ADCL
trước và ADCH sau.
4.3.UART- Universal Asynchronous serial Reveiver and Transmitter-bộ truyền
nhận nối tiếp không đồng bộ
Khái niệm UART thường để chỉ thiết bị phần cứng (device, hardware), không phải

chỉ một chuẩn giao tiếp. UART cần phải kết hợp với một thiết bị chuyển đổi mức
điện áp để tạo ra một chuẩn giao tiếp nào đó. Ví dụ, chuẩn RS232 (hay COM) trên
các máy tính cá nhân là sự kết hợp của chip UART và chip chuyển đổi mức điện áp.
Tín hiệu từ chip UART thường theo mức TTL: mức logic high là 5, mức low là 0V.
Trong khi đó, tín hiệu theo chuẩn RS232 trên máy tính cá nhân thường là -12V cho
mức logic high và +12 cho mức low .
15
Tín hiệu tương đương của UART và RS232.
Các thông số quan trọng của UART|
Baud rate (tốc độ Baud): tốc độ baud là số bit truyền trong 1 giây. Ví dụ nếu tốc
độ baud được đặt là 19200 thì thời gian dành cho 1 bit truyền là 1/19200
~52.083us.
Frame (khung truyền):. Khung truyền bao gồm các quy định về số bit trong mỗi
lần truyền, các bit “báo” như bit Start và bit Stop, các bit kiểm tra như Parity, ngoài
ra số lượng các bit trong một data cũng được quy định bởi khung truyền
start bit: start là bit đầu tiên được truyền trong một frame truyền, bit này có chức
năng báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới.
Data: data hay dữ liệu cần truyền là thông tin chính mà chúng ta cần gởi và nhận.
Trong truyền thông nối tiếp UART, bit có ảnh hưởng nhỏ nhất (LSB – Least
Significant Bit, bit bên phải) của dữ liệu sẽ được truyền trước và cuối cùng là bit có
ảnh hưởng lớn nhất (MSB–Most Significant Bit, bit bên trái).
Parity bit: parity là bit dùng kiểm tra dữ liệu truyền đúng không (một cách tương
đối). Có 2 loại parity là parity chẵn (even parity) và parity lẻ (odd parity). Parity
chẵn nghĩa là số lượng số 1 trong dữ liệu bao gồm bit parity luôn là số chẵn. Ngược
lại tổng số lượng các số 1 trong parity lẻ luôn là số lẻ.
Stop bits: stop bits là một hoặc các bit báo cho thiết bị nhận rằng một gói dữ liệu
đã được gởi xong. Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm tra
khung truyền để đảm bảo tính chính xác của dữ liệu. Stop bits là các bits bắt buộc
xuất hiện trong khung truyền.
16

Vi điều khiển Atmega8 có 1 module truyền thông nối tiếp USART. Có 3 chân chính
liên quan đến module này đó là chân xung nhịp - XCK (chân số 1), chân truyền dữ
liệu – TxD (Transmitted Data) và chân nhận dữ liệu – RxD (Reveived Data). Trong
đó chân XCK chỉ được sử dụng như là chân phát hoặc nhận xung giữ nhịp trong chế
độ truyền động bộ. Tuy nhiên bài này chúng em chỉ sử dụng chế độ truyền thông
không đồng bộ. Vì các chân truyền/nhận dữ liệu chỉ đảm nhiệm 1 chức năng độc lập
(hoặc là truyền, hoặc là nhận), để kết nối các chip AVR với nhau (hoặc kết nối AVR
với thiết bị hỗ trợ UART khác) ta phải đấu “chéo” 2 chân này. TxD của thiết bị thứ
nhất kết nối với RxD của thiết bị 2 và ngược lại. Module USART trên chip
Atmega32 hoạt động “song công” (Full Duplex Operation), nghĩa là quá trình
truyền và nhận dữ liệu có thể xảy ra đồng thời.
Các thanh ghi:
Có 5 thanh ghi được thiết kế riêng cho hoạt động và điều khiển của USART, đó là:
UDR: hay thanh ghi dữ liệu, là 1 thanh ghi 8 bit chứa giá trị nhận được và phát đi
của USART. Thực chất thanh ghi này có thể coi như 2 thanh ghi TXB (Transmit
data Buffer) và RXB (Reveive data Buffer) có chung địa chỉ. Đọc UDR thu được
giá trị thanh ghi đệm dữ liệu nhận, viết giá trị vào UDR tương đương đặt giá trị vào
thanh ghi đệm phát, chuẩn bị để gởi đi. Chú ý trong các khung truyền sử dụng 5, 6
hoặc 7 bit dữ liệu, các bit cao của thanh ghi UDR sẽ không được sử dụng
7 6 5 4 3 2 1 0
RXB[7:0]
TXB[7:0]
UCSRA (USART Control and Status Register A): là 1 trong 3 thanh ghi điều khiển
hoạt động của module USART.
RXC TXC UDRE FE DOR PE U2X MPCM
R R/W R R R R R/W
R/W
Thanh ghi UCSRA chủ yếu chứa các bit trạng thái như bit báo quá trình nhận kết
thúc (RXC), truyền kết thúc (TXC), báo thanh ghi dữ liệu trống (UDRE), khung
truyền có lỗi (FE), dữ liệu tràn (DOR), kiểm tra parity có lỗi (PE)…một số bit quan

trọng của thanh ghi này:
UDRE: (USART Data Register Empty) khi bit bày bằng 1 nghĩa là thanh ghi dữ liệu
UDR đang trống và sẵn sàng cho một nhiệm vụ truyền hay nhận tiếp theo. Vì thế
nếu bạn muốn truyền dữ liệu đầu tiên bạn phải kiểm tra xem bit UDRE có bằng 1
17
hay không, sau khi chắc chắn rằng UDRE=1 hãy viết dữ liệu vào thanh ghi UDR để
truyền đi.
U2X là bit chỉ định gấp đôi tốc độ truyền, khi bit này được set lên 1, tốc độ truyền
so cao gấp 2 lần so với khi bit này mang giá trị 0.
MPCM là bit chọn chế độ hoạt động đa xử lí (multi-processor)
UCSRB (USART Control and Status Register B): đây là thanh ghi quan trọng điều
khiển USART.
RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8
RXCIE (Receive Complete Interrupt Enable) là bit cho phép ngắt khi quá trình nhận
kết thúc. Việc nhận dữ liệu truyền bằng phương pháp nối tiếp không đồng bộ
thường được thực hiện thông qua ngắt, vì thế bit này thường được set bằng 1 khi
USART được dung nhận dữ liệu
TXCIE (Transmit Complete Interrupt Enable) bit cho phép ngắt khi quá trình truyền
kết thúc.
UDRIE (USART Data Register Empty Interrupt Enable) là bit cho phép ngắt khi
thanh ghi dữ liệu UDR trống.
RXEN (Receiver Enable) là một bit quan trọng điều khiển bộ nhận của USART, đề
kích hoạt chức năng nhận dữ liệu bạn phải set bit này lên 1.
TXEN (Transmitter Enable) là bit điều khiển bộ phát. Set bit này lên 1 bạn sẽ khởi
động bộ phát của USART
UCSZ2 (Chracter size) bit này kết hợp với 2 bit khác trong thanh ghi UCSRC quy
định độ dài của dữ liệu truyền/nhận. Chúng ta sẽ khảo sát chi tiết khi tìm hiểu thanh
ghi UCSRC.
RXB8 (Receive Data Bit 8) gọi là bit dữ liệu 8. Bạn nhớ lại rằng USART trong
AVR có hỗ trợ truyền dữ liệu có độ dài tối đa 9 bit, trong khi thanh ghi dữ liệu là

thanh ghi 8 bit. Do đó, khi có gói dữ liệu 9 bit được nhận, 8 bit đầu sẽ chứa trong
thanh ghi UDR, cần có 1 bit khác đóng vai trò bit thứ chín,
TXB8 (Transmit Data Bit 8), tương tự như bit RXD8, bit TXB8 cũng đóng vai trò
bit thứ 9 truyền thông, nhưng bit này được dung trong lúc truyền dữ liệu.
UCSRC (USART Control and Status Register C): thanh ghi này chủ yếu quy định
khung truyền và chế độ truyền. Thanh ghi này lại có cùng địa chỉ với thanh ghi
UBRRH (thanh ghi chứa byte cao dùng để xác lập tốc độ baud). Bit 7 trong thanh
ghi này, tức bit URSEL là bit chọn thanh ghi. Khi URSEL=1, thanh ghi này được
chip AVR hiểu là thanh ghi điều khiển UCSRC, nhưng nếu bit URSEL=0 thì thanh
ghi UBRRH sẽ được sử dụng.
18
URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL
UMSEL (USART Mode Select) là bit lựa chọn giữa 2 chế độ truyền thông đồng bộ
và không đồng bộ. Nếu UMSEL=0, chế độ không đồng bộ được chọn, ngược lại
nếu UMSEL=1, chế độ đồng bộ được kích hoạt.
UPM1 và UPM0( Parity Mode) được dùng để quy định kiểm tra pariry. Nếu
UPM1:0=00, parity không được sử dụng (mode này khá thông dụng), UPM1:0=01
không được sử dụng, UPM1:0=10 thì parity chẵn được dùng, UPM1:0=11 parity lẻ
được sử dụng
USBS (Stop bit Select), bit Stop trong khung truyền bằng AVR USART có thể là 1
hoặc 2 bit, nếu USBS=0 thì Stop bit chỉ là 1 bit trong khi USBS=1 sẽ có 2 Stop bit
được dùng.
Hai bit UCSZ0 và UCSZ1 (Character Size) kết hợp với bit UCSZ2 trong thanh ghi
UCSRB tạo thành 3 bit quy định độ dài dữ liệu truyền.
UCSZ2 UCSZ1 UCSZ0 Độ dài dữ liệu
0 0 0 5-bít
0 0 1 6-bít
0 1 0 7-bít
0 1 1 8-bít
1 0 0

1 0 1
1 1 0
1 1 1 9-bít
UCPOL (Clock Pority) là bit chỉ cực của xung kích trong chế độ truyền thông đồng
bộ. nếu UCPOL=0, dữ liệu sẽ thay đổi thay đổi ở cạnh lên của xung nhịp, nếu
UCPOL=1, dữ liệu thay đổi ở cạnh xuống xung nhịp.Ở chế độ truyền thông không
đồng bộ, set bit này bằng 0
UBRRL và UBRRH (USART Baud Rate Register): 2 thanh ghi thấp và cao quy
định tốc độ baud.
URSEL
UBRR[7:0]
Thanh ghi UBRRH dùng chung địa chỉ thanh ghi UCSRC, ta phải set bit này bằng 0
nếu muốn sử dụng thanh ghi UBRRH. Trong hình trên, chỉ có 4 bit thấp của
UBRRH được dùng, 4 bit này kết hợp với 8 bit trong thanh ghi UBRRL tạo thành
thanh ghi 12 bit quy định tốc độ baud. Khi viết giá trị vào thanh ghi UBRRL, tốc độ
19
baud sẽ tức thì được cập nhật, vì thế ta phải viết giá trị vào thanh ghi UBRRH trước
khi viết vào thanh ghi UBRRL.
5.Module MAX232
Chuẩn RS232 và UART nhìn chung là như nhau về mặt khung truyền, tốc độ
baud…nhưng khác nhau về mặt điện áp và cực:
Trong chuẩn UART (trên AVR), mức 1 tương ứng điện áp cao (5V, TTL) trong khi
đối với RS232 thì mức 1 tương ứng với điện áp thấp (điện áp âm, có thể -12V). Như
thế rõ ràng cần một “cầu chuyển” (converter) kết nối giữa 2 chuẩn này.
MAX232 là một trong các IC chuyển UART-RS232 được sử dụng nhiều nhất. Sơ
đồ dưới đây là cách mắc MAX232 với cổng Com 9 chân.
20
Mạch điện trên chỉ có tác dụng thay đổi mức điện áp cho phù hợp giữa RS232 và
UART, nó hoàn toàn không làm thay đổi phương thức giao tiếp của các chuẩn này
và vì thế việc lập trình trên PC và AVR đều không có gì thay đổi. Max232 có đến 2

cầu chuyển, trong sơ đồ trên sử dụng cầu chuyển 1. Chân phát TxD (chân 3) của
cổng COM được nối với chân R1IN (Receive 1 Input) của Max232 thì tương ứng
chân R1OUT (Receive 1 Output) phải nối với chân nhận RX của AVR. Tương tự
cho trường hợp T1IN và T1OUT. Sử dụng các tụ phân cực 10uF để khoảng cách
truyền được xa hơn.Theo tài liệu datasheet của max232 dùng các tụ 1uF thì vẫn ổn
định nhưng khoảng cách truyền là ngắn hơn.
Phần 2:Phần thực hành:
I.Sử dụng phần mềm mô phỏng proteus
Khởi động phần mềm proteus và chọn linh kiện:
Do phần mềm proteus không hỗ trợ LCD 2x8 nên bọn em sử dụng lcd 2x16 để thay
thế trong mô phỏng.
Kéo thả và đi dây các linh kiện với nhau theo các chân chức năng đã xắp xếp được
mạch nguyên lý như sau :
21
II.Sử dụng phần mềm codevision để viết chương trình cho VĐK:
Khởi động phần mềm codevision tạo một project mới và lựa chọn chip
Atmega8,xung hoạt động 8Mhz,set portC với các pin PortC.1;PortC.2;PortC.3 làm
ngõ xuất tín hiệu ra led và các chế độ UART,ADC, chọn chân kết nối LCD là PortB.
22
Trong phần UART chỉ sử dụng chế độ truyền dữ liệu.
23
Thêm một số thư viện delay.h và stdlib.h để sử dụng các hàm cần thiết.Trong hàm
main khai báo một số biến để lưu giá trị.
float vin;
int nhietdo;
unsigned char thongbao[3];
Cuối cùng trong vòng lặp While(1): vòng lặp luôn đúng ta thực hiện các lệnh sau:
while (1)
{
// Place your code here

vin=(float) adc_data[0]*5/1024; //tinh gia tri dien ap dau vao lcd
nhietdo=vin*100; // bien doi ve nhiet do theo do phan giai LM35
itoa(nhietdo,thongbao); //luu gia tri nhiet do vao mang thong bao

lcd_clear(); //xoa man hinh lcd
lcd_gotoxy(0,0); //dua con tro ve vi tri dong 1 cot 1
lcd_putsf("nhiet_do:"); //xuat ra man hinh lcd dong chu nhiet_do
lcd_gotoxy(0,1); //dua con tro den vi tri dong 2 cot 1
lcd_puts(thongbao); //lenh xuat gia tri nhiet do luu trong mang thong bao
printf(“\n\rnhietdo:%d”,nhietdo) // xuat gia tri nhiet do len may tinh
delay_ms(1000) ; //cu sau 1000 ms thi do lai mot lan

if(nhietdo<29) //khong che nhiet do
{
PORTC.3=1;
PORTC.2=0;
24
PORTC.1=0;
}
else if (nhietdo==29)
{
PORTC.2=1;
PORTC.3=0;
PORTC.1=0;
}
else
{
PORTC.1=1;
PORTC.3=0;
PORTC.2=0;

}
};
}
Phần 3: ứng dụng và phát triển
Mạch đo nhiệt độ có ứng dụng thiết thực và rộng rãi trong thực tế để đo nhiệt độ
phòng, dùng trong nông nghiệp để đo nhiệt độ lò ấp,… trong công nghiệp để đo
nhiệt độ thực phẩm.
Phát triển giao tiếp truyền nhận dữ liệu qua mạng internet để điều khiển tòa nhà
thông minh, hay trong các dây chuyền công nghiệp.
Do thời gian và kiến thức hạn hẹp nên nhóm chúng em mới dừng ở truyền số liệu
lên máy tính mà chưa xử lý số liệu.Chúng em sẽ cố gắng để có thể xử lý được số
liệu khi truyền lên máy tính.
25

×