Tải bản đầy đủ (.docx) (39 trang)

Đồ Án Kỹ Thuật Vi Điều Khiển

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 (1.37 MB, 39 trang )

Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Mục Lục

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

1


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Lời nói đầu
Ngày nay, với sự phát triển vượt bậc của khoa học kỹ thuật, điện tử đã được ứng dụng ở rất
nhiều lĩnh vực trong thực tế để phục vụ nhu cầu, chăm sóc sức khỏe, bảo vệ tính mạng và tài sản
của con người.
Qua tìm hiểu thực tế em đã thấy được rằng gần đây rất nhiều vụ nổ bình gas thương tâm đã
xảy ra gây thiệt hại rất lớn về người và của. Mặt khác, nhiều vụ cháy lớn không được cảnh báo
và phát hiện kịp thời đã thiêu trụi và phá hủy gần như toàn bộ tài sản và đe dọa đến tính mạng
con người. Khi mà cuộc sống hiện đại ngày nay, bình gas là nhiên liệu đốt không thể thiếu trong
mỗi gia đình, các nguy cơ cháy nổ luôn luôn thường trực, mối đe dọa về một thảm họa có thể
xảy đến bất cứ lúc nào. Từ đó, em đã tìm hiểu và thiết kế hệ thống cảnh báo rò rỉ khí gas và báo
cháy thông qua mạng điện thoại GSM rất phổ biến hiện nay để giảm thiểu tối đa hậu quả của
chúng gây ra cho con người.
Nguyên lý hoạt động của hệ thống : khi có rò rỉ khí gas hoặc nhiệt độ cao bất thường, các
sensor cảm biến nồng độ khí gas và nhiệt độ sẽ phát hiện, gửi thông số điện áp tương ứng tới vi
điều khiển. Vi điều khiển sẽ phân tích tín hiện nhận về, kích hoạt hệ thống phòng ngừa tương
ứng và gửi tin nhắn tới điện thoại của người sử dụng.


Hiện nay, do nhu cầu sử dụng các hệ thống, thiết bị tự động của người dân ngày càng tăng.
Đồng thời, mạng điện thoại di động phát triển rộng khắp và các thiết bị điện thoại di động ngày
càng có mức giá phù hợp với người dân. Đó là những mặt thuận lợi của việc hình thành ý tưởng.
Xuất phát từ ý tưởng và tình hình thực tế nêu trên, em quyết định chọn đề tài “Thiết kế hệ
thống báo cháy tự động truyền thông qua điện thoại”.
Trong quá trình thực hiện đề tài, em đã tham khảo nhiều nguồn tài liệu khác nhau, cùng với
sự hướng dẫn tận tình của thầy Lê Hoài Nam, em đã hoàn thành đồ án.
Lần đầu tiên thực hiện đề tài, cũng như kiến thức còn hạn chế, khó tránh khỏi những thiếu
sót, mong thầy thầy hướng dẫn.
Em xin chân thành cảm ơn!

Sinh viên thực hiện
Nguyễn Văn Quốc

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

2


Đồ Án Kỹ Thuật Vi Điều Khiển

Chương1:

GVHD: Lê Hoài Nam

Tổng quan về hệ thống

1.1. Giới thiệu đề tài
Ngành công nghệ thông tin liên lạc đã phát triển nhanh chóng cùng với các ngành công nghệ
khác, nhằm đáp ứng nhu cầu ngày càng cao của xã hội. Đặc biệt là song điện thoại, ngày nay

được phủ hầu khắp mọi nơi…Vì vậy, với suy nghĩ là ứng dụng kiến thức đã học ở trường và tìm
hiểu them sách vở, em quyết định chọn đề tài “Thiết kế hệ thống báo cháy tự động truyền thong
qua song điện thoại” với mong muốn là sau khi thực hiện xong đề tài có thể ứng dụng vào thực
tế.

1.1.1. Mục đích, yêu cầu của đề tài
- Nhằm phục vụ cho việc cảnh báo cháy, hoặc rò rỉ khí gas tại hộ gia đình, truyền thông
qua sóng điện thoại…thiết bị báo cháy phải đảm bảo các yêu cầu sau:
 Sữ dụng tiện lợi và sữ dụng trên khắp cả nước mà không cần thay đổi phần
cứng.
 Báo động kịp thời các vụ cháy nhằm giảm nhẹ thiệt hại do cháy gây ra.
 Tự động gửi tin nhắn cảnh báo, đồng thời báo động bằng chuông và phun
nước khi có cháy.

1.1.2. Giới hạn đề tài
Báo cháy và chống cháy có rất nhiều vấn đề cần bàn tới, tùy thuộc vào mức độ
nghiêm trọng và nhiên liệu cháy mà có các cách chống cháy khác nhau. Vì vậy, có rất
nhiều khó khăn trong lúc thực hiện đề tài. Với thời gian ngắn nhưng lại có nhiều vấn
đề cần giải quyết, hơn nữa với kiến thức còn có hạn nên đồ án này em chỉ tập trung
các vấn đề sau:
 Gửi tin nhắn cảnh báo chủ nhân khi có cháy xảy ra.
 Thực hiện được 2 chức năng là:

+ Bật chuông báo động khi có cháy.
+ Khởi động máy bơm để bơm nước.
 Trong điều kiện bình thường, hiển thị nhiệt độ để chủ nhà có thể nắm bắt được
nhiệt độ phòng.

1.1.3. Chọn phương án thực hiện đề tài
Với những yêu cầu đặt ra ở trên, em đã xem xét và đưa ra 3 phương án như sau:

 Sữ dụng kỹ thuật số.
 Sữ dụng kỹ thuật vi xữ lý.
 Sữ dụng kỹ thuật vi điều khiển.

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

3


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Với những yêu cầu của đồ án, ta có thể đơn giản những hoạt động bằng kỹ thuật số.
Nhưng tốn kém linh kiện và kích thước cồng kềnh, hơn nữa khó thay đổi phần mềm
và không có khả nẵng mở rộng cho các hoạt động khác. Với kỹ thuật vi xử lý, có thể
khắc phục những yếu điểm của mạch số, nhưng lại phức tạp trong việc thiết kế phần
cứng.
Nếu sữ dụng kỹ thuật vi điều khiển, giao tiếp theo xung với mạch thiết kế thuần
chất điện tử thì giá thành hạ và chất lượng của thiết bị phụ thuộc nhiều vào phần
mềm, vì vậy em quyết định đi theo hướng này.

1.2.

Sơ lược về hệ thống báo cháy

1.2.1. Sơ đồ khối
1.2.2. Cách nhận biết và báo cháy
Khi một đám cháy xảy ra, ở vùng cháy thường có những dấu hiệu sau:
-


Lửa, khói, vật liệu chổ cháy bị phá hủy.
Nhiệt độ vùng cháy tăng lên cao.
Không khí bị Ôxy hóa mạnh.
Có mùi cháy, mùi khét.
Để đề phòng cháy, chúng ta có thể dựa vào những dấu hiệu trên để đặtcác hệ
thống cảm biến làm các thiết bị báo cháy. Kịp thời khống chế đám cháy ở giai đoạn
đầu.
Thiết bị báo cháy điện tử giúp chúng ta liên tục theo dõi để hạn chế các vụ cháy tai hại, tăng
cường độ an tồn, bình yên cho mọi người.

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

4


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

1.2.3. Các bộ phận chính
1.Cảm biến:

Cảm biến là bộ phận hết sức quan trọng, nó quyết định độ nhạy và sự chính xác của hệ
thống.
Cảm biến hoạt động dựa vào các đặt tính vật lý của vật liệu cấu tạo nên chúng. Cảm biến
được dùng để chuyển đổi các túi hiệu vật lý sang tín hiệu điện.
Các đặc tính của cảm biến: độ nhạy, độ ổn định, độ tuyến tính,
Cảm biến nhiệt:
Là loại cảm biến dùng để chuyển tín hiệu vật lý (nhiệt độ) thành túi hiệu điện, đây là loại

cảm biến có độ nhạy tương đối cao và tuyến tính. Nguyên tắc làm việc của nó là dòng điện hay
điện áp thay đổi khi nhiệt độ tại nơi đặt nó thay đổi. Tuy nhiên nó cũng dễ báo động nhàm khi
nguồn điện bên ngồi tác động không theo ý muốn.
Các loại cảm biến nhiệt:
IC cảm biến:
Là loại cảm biến bán dẫn được chế tạo thành các IC chuyên dụng với độ nhạy cao, điện áp ra
thay đổi tỉ lệ thuận với nhiệt độ, một số loại IC được bán bên ngồi thị trương là: LM355,
LM334, ...
Thermistor:
Thermistor là loại điện trở có độ nhạy nhiệt rất cao nhưng không tuyến tính và với hệ số
nhiệt âm. Điện trở giảm phi tuyến với sự tăng của nhiệt độ. Vì bản thân là điện trở nên trong
quá trình hoạt động Thermistor tạo ra nhiệt độ vì vậy gây sai số lớn.
Thermo Couples:
Thermo Couple biến đổi đại lượng nhiệt độ thành dòng điện hay điện áp DC nhỏ. Nó gồm
hai dây kim loại khác nhau nối với nhau tại hai mối nối. Khi các dây nối đặc ở các vị trí khác
nhau, trong dây xuất hiện suất điện động. Suất điện động tỉ lệ thuận với sự chênh lệch nhiệt độ
giữa hai mối nối. Thermo couple có hệ số nhiệt dương.
a. Cảm biến lửa:

Khi lửa cháy thì phát ra ánh sáng hồng ngoại, do đó ta sử dụng các linh kiện phát hiện tia
hồng ngoại để phát hiện lửa. Nguyên lý hoạt động là điện trở của các linh kiện thu sóng hồng
ngoại tăng, nó chuyển tín hiệu ánh sáng thu được thành túi hiệu điện để báo động. Loại này rất
nhạy đối với lửa. Tuy nhiên cũng dễ báo động nhầm nếu ta để cảm biến ngồi trời hoặc gần ánh
sáng bóng đèn tròn.
b. Cảm biến khói:

Thường cảm biến khói là bộ phân riêng biệt chạy bằng PIN được thiết kế để lắp đặt trên trần
nhà, trên tường. Ngồi yêu càu kỹ thuật (chính xác, an tồn) còn đòi hỏi phải đảm bảo về mặt
thẩm mỹ. Có hai cách cơ bản để thiết kế bộ cảm biến khói.
Cách thứ nhất sử dụng nguyên tắc lon hóa. Người ta sử dụng một lượng nhỏ chất phóng xạ

để lon hóa trong bộ cảm biến. Không khí bị lon hóa sẽ dẫn điện và tạo thành một dòng điện
chạy giữa chạy giữa hai cực đã đợc nạp điệân. Khi các phần tử khỏi lọt vào khu vực cảm nhận

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

5


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

được lon hóa sẽ làm tăng điện trở trong buồng cảm nhận và làm giảm luồng điện giữa hai cực.
Khi luồng điện giảm xuống tới một giá trị nào đó thì bộ cảm biến sẽ phát hiện và phát túi hiệu
báo động.
Cách thứ hai sử dụng các linh kiện thu phát quang. Người ta dùng linh kiện phát quang (Led,
Led hồng ngoại...) chiếu một tia ánh sáng qua vùng bảo vệ vào một linh kiện thu quang (photo
diode, photo transistor, quang trở...). Khi có cháy, khói đi ngang qua vùng bảo vệ sẽ che chắn
hoặc làm giảm cường độ ánh sáng chiếu vào linh kiện thu. Khi cường độ giảm xuống tới một
giá trị nào đó thì bộ cảm biến sẽ phát hiện và phát tín hiệu báo động.
Trong hai cách này thì phương pháp thứ nhất nhạy hơn và hiệu quả hơn phương pháp thứ
hai, nhưng khó thực thi, khó lắp đặt. Còn cách thứ hai tuy ít nhạy hơn nhưng linh kiện dễ kiếm
và dễ thực thi cũng như dễ lắp đặt.
Một nhược điểm của các loại cảm biến này là: mạch báo động có thể sai nếu vùng bảo vệ bị
xâm nhập bởi các lớp bụi...
2. Thiết bị báo động:

Thiết bị báo động gồm có hai loại:
>


Báo động tại chỗ.

>

Báo động qua điện thoại.
Báo động tại chỗ ta có thể sử dụng các chuông điện, mạch tạo còi hụ hay phát ra tiếng nói để
cảnh báo.
Trong các hệ thống báo cháy, bộ cảm biến thường đặt ở những nơi dễ cháy và nối với các
thiết bị báo động bằng dây dẫn điện, do đó trong một số trường hợp có thể làm dây bị đứt. VI
vậy một hệ thống báo cháy sẽ trở nên hiệu quả khi sử dụng các bộ phát vô tuyến. Trong đó bộ
phận thu gắn với mạch báo động, còn mạch phát gắn với bộ cảm biến. Tuy nhiên việc lắp đặt
gặp nhiều khó khăn và giá thành cao.

Báo động qua điện thoại giúp ta đáp ứng nhanh các thông tin về sự cố đến các cơ quan chức năng.
Khi có tín hiệu báo động sẽ tự động gửi tin nhắn đến các cơ quan như: nhà riêng, công an, phòng
cháy chữa cháy...

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

6


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Chương 2: Tìm hiểu và chọn linh kiện
2.1.Giới thiệu
Qua tìm hiểu thực tế, với tiêu chí về độ chính xác, giá thành, tính thông dụng và có
sẵn của linh kiện, trên cơ sở lý thuyết đã được học em đã quyết định chọn các linh kiện

chính sử dụng trong mạch như sau:
- Vi điều khiển – ATMEGA 16
- Cảm biến nhiệt độ - LM35.
- Cảm biến khí gas – MQ2.
- Module sim 900A
- LCD 16X2

2.2. Vi điều khiển Atmega16
2.2.1. Giới thiệu
AVR là một họ vi điều khiển do hãng Atmel sản xuất (Atmel cũng là nhà sản xuất dòng
vi điều khiển 89C51 mà có thể bạn đã từng nghe đến). AVR là chip vi điều khiển 8 bits 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í.
Tại sao AVR: so với các chip vi điều khiển 8 bits khác, AVR có nhiều đặc tính hơn hẳn,
hơn cả trong tính ứng dụng (dễ sử dụng) và đặc biệt là về chức năng:







-

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…
Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiết kế tương thích C.

Nguồn tài nguyên về source code, tài liệu, application note…rất lớn trên internet.
Hầu hết các chip AVR có những tính năng (features) sau:
Có thể sử dụng xung clock lên đến 16MHz, hoặc sử dụng xung clock nội lên đến 8 MHz
(sai số 3%)
Bộ nhớ chương trình Flash có thể lập trình lại rất nhiều lần và dung lượng lớn, có SRAM
(Ram tĩnh) lớn, và đặc biệt có bộ nhớ lưu trữ lập trình được EEPROM.
Nhiều ngõ vào ra (I/O PORT) 2 hướng (bi-directional).
8 bits, 16 bits timer/counter tích hợp PWM.

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

7


Đồ Án Kỹ Thuật Vi Điều Khiển
-

GVHD: Lê Hoài Nam

Các bộ chuyển đối Analog – Digital phân giải 10 bits, nhiều kênh.
Chức năng Analog comparator.
Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS-232).
Giao diện nối tiếp Two –Wire –Serial (tương thích chuẩn I2C) Master và Slaver.
Giao diện nối tiếp Serial Peripheral Interface (SPI)
Một số chip AVR thông dụng:
AT90S1200
AT90S2313
AT90S2323 and AT90S2343
AT90S2333 and AT90S4433
AT90S4414 and AT90S8515

AT90S4434 and AT90S8535
AT90C8534
ATtiny10, ATtiny11 and ATtiny12
ATtiny15
ATtiny22
ATtiny26
ATtiny28
ATmega8/8515/8535
ATmega16
ATmega161
ATmega162
ATmega163
ATmega169
ATmega32
ATmega323
ATmega103
ATmega64/128/2560/2561
AT86RF401.
....
Trong bài viết này tôi sử dụng chip ATmega8 để làm ví dụ, tôi chọn ATmega8 vì đây là
loại chip thuộc dòng AVR mới nhất, nó có đầy đủ các tính năng của AVR nhưng lại nhỏ
gọn (gói PDIP có 28 chân) và low cost nên các bạn có thể mua để tự mình tạo ứng dụng.
Tại sao Assembly (ASM): bạn có thể không cần biết về cấu trúc của AVR vẫn có thể
lập trình cho AVR bằng các phần mềm hỗ trợ ngôn ngữ cấp cao như BascomAVR (Basic)
hay CodevisionAVR (C), tuy nhiên đó không phải là mục đích của bài viết này. Để hiểu
thấu đáo về AVR bạn phải lập trình bằng chính ngôn ngữ của nó, ASM. Như vậy lập trình
bằng ASM giúp bạn hiểu tường tận về AVR, và tất nhiên để lập trình được bằng ASM bạn
phải hiểu về cấu trúc AVR….Một lý do khác bạn mà tôi khuyên bạn nên lập trình bằng
ASM là các trình dịch (compiler) ASM cho AVR là hoàn toàn miễn phí, và nguồn source
code cho AVR viết bằng ASM là rất lớn. Tuy nhiên một khi bạn đã thành thạo AVR và

ASM bạn có thể sử dụng các ngôn ngữ cấp cao như C để viết ứng dụng vì ưu điểm của
SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

8


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

ngôn ngữ cấp cao là giúp bạn dễ dàng thực hiện các phép toán đại số 16 hay 32 bit (vốn là
vấn đề khó khăn khi lập trình bằng ASM).
 Công cụ:

Trình biên dịch: có rất nhiều trình biên dịch bạn có thể sử dụng đế biên dịch code của
bạn thành file intel hex để nạp vào chip, một số trình dịch quen thuộc có thể kể đến như
sau:











AvrStudio: là trình biên dịch ASM chính thức cung cấp bởi Atmel, đây là trình biên dịch
hoàn toàn miễn phí và tất nhiên là tốt nhất cho lập trình AVR bằng ASM.

Wavrasm: cũng được cung cấp bởi Atmel, nó chính là tiền thân của AvrStudio. Hiện tại
wavrasm không còn được sử dụng nhiều vì so với AvrStudio trình biên dịch này có nhiều
hạng chế.
WinAVR hay avr-gcc: là bộ trình dịch được phát triển bởi gnu, ngôn ngữ sử dụng là C và
có thể được dùng tích hợp với AvrStudio (dùng Avrstudio làm trình biên tập – editor). Đặc
biệt bộ biên dịch này cũng miễn phí và đa số nguồn source code C được viết bằng bộ này,
vì vậy nó rất lí tưởng cho bạn khi viết các ứng dụng chuyên nghiệp. Việc lập trình bằng
avrgcc tôi sẽ đề cập trong những phần sau.
CodeVisionAvr: một chương trình bằng ngôn ngữ C rất hay cho AVR, hỗ trợ nhiều thư
viện lập trình. Tuy nhiên là chương trình thương mại.
ICCAVR: lập trình C cho avr.
BascomAVR: lập trình cho AVR bằng basic, đây là trình biên dịch khá hay và dễ sử dụng,
hỗ trợ rất nhiều thư viện. Tuy nhiên rất khó debug lỗi và không thích hợp cho việc tìm hiểu
AVR.
Và còn rất nhiều trình biên dịch khác cho AVR mà tôi không kể ra đây, nhìn chung tất cả
các trình biên dịch này hỗ trợ C hoặc Basic hoặc thậm chí Pascal. Việc chọn 1 trình biên
dịch tùy thuộc vào mục đích, vào mức độ ứng dụng, vào kinh nghiệm sử dụng và nhiều lý
do khác nữa. Ví dụ tôi thường dùng Avrstudio và avrgcc khi học sử dụng AVR và khi viết
thư viện. Nhưng khi cần viết chương trình ứng dụng tôi thường chọn avrgcc và
CodeVisionAVR.
Trong bài viết này tôi hướng dẫn bạn sử dụng AvrStudio để viết chương trình cho AVR
bằng ASM.
Chương trình nạp (Chip Programmer): đa số các trình biên dịch (AvrStudio,
CodeVisionAVR, Bascom…) đều tích hợp sẵn 1 chương trình nạp chip hỗ trợ nhiều loại
mạch nạp nên bạn không quá lo lắng. Trong trường hợp khác, bạn có thể sử dụng các
chương trình nạp như Icprog hay Ponyprog…là các chương trình nạp miễn phí cho AVR.
Việc chọn và sử dụng chương trình nạp sẽ được giới thiệu trong các bài sau.
Chương trình mô phỏng: avr simulator là trình mô phỏng và debbug được tích hợp sẵn
trong Avrstudio, avr simulator cho phép bạn quan sát trạng thái các thanh ghi bên trong
AVR nên rất phù hợp để bạn debug chương trình. Proteus là chương trình thứ hai tôi muốn

nói đến, Proteus không những mô phỏng hoạt động bên trong chip mà còn mô phỏng mạch
điện tử. Proteus mô phỏng rất trực quan, nó là 1 công cụ hữu ích khi các bạn chưa có điều
kiện làm các mạch điện tử.

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

9


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

2.2.2. Cấu trúc phần cứng

Hình 2.1. Sơ đồ cấu trúc CPU của ATmega16
a. Thanh ghi trạng thái
-

Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính số học
và logic.

Hình 2.2. Thanh ghi trạng thái SREG
C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập)
SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

10


Đồ Án Kỹ Thuật Vi Điều Khiển


GVHD: Lê Hoài Nam

Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0)
N: Negative Flag (Nếu kết quả của phép toán là âm)
V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2)
V, For signed tests (S=N XOR V) S: N
H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau)
T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung gian trong
các lệnh BLD,BST).
I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt. Nếu bit này ở
trạng thái logic 0 thì không có một ngắt nào được phục vụ.)
b. Các thanh ghi chức năng chung

Hình 2.3. Thanh ghi chức năng chung
c. Con trỏ ngăn xếp (SP)

Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc
biệt 8 bit. Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E (Trong bộ nhớ RAM là
$5E). Có nhiệm vụ trỏ tới vùng nhớ trong RAM chứa ngăn xếp.

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

11


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam


Hình 2.4. Thanh ghi con trỏ ngăn xếp
Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn
xếp trong khi con trỏ ngăn xếp giảm hai vị trí. Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện
lệnh push. Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện
lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được
chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi
hoặc các ngắt được cho phép phục vụ. Và giá trị ngăn xếp ít nhất cũng phải lơn hơn hoặc
bằng 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi.

d. Bộ nhớ chương trình (Bộ nhớ Flash)

Bộ nhớ Flash 16KB của ATmega16 dùng để lưu trữ chương trình. Do các lệnh của AVR
có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp theo kiểu 8KX16. Bộ nhớ Flash
được chia làm 2 phần, phần dành cho chương trình boot và phần dành cho chương trình ứng
dụng.

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

12


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Hình 2.5. Bản đồ bộ nhớ chương trình
Bộ nhớ dữ liệu SRAM
1120 ô nhớ của bộ nhớ dữ liệu định địa chỉ cho file thanh ghi, bộ nhớ I/O và bộ nhớ dữ
liệu SRAM nội. Trong đó 96 ô nhớ đầu tiên định địa chỉ cho file thanh ghi và bộ nhớ I/O, và
1024 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội.

e.

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

13


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Hình 2.6. Bản đồ bộ nhớ dữ liệu SRAM
Bộ nhớ dữ liệu EEPROM
ATmega16 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, và được sắp xếp theo
từng byte, cho phép các thao tác đọc/ghi từng byte một.
g. Thanh ghi DDRx
Đây là thanh ghi 8 bit (ta có thể đọc và ghi các bit ở thanh ghi này) và có tác dụng điều
khiển hướng cổng PORTx (tức là cổng ra hay cổng vào). Nếu như một bit trong thanh ghi
này được set thì bit tương ứng đó trên PORTx được định nghĩa như một cổng ra. Ngược lại
nếu như bit đó không được set thì bit tương ứng trên PORTx được định nghĩa là cổng vào.
h. Thanh ghi PORTx
Đây cũng là thanh ghi 8 bit (các bit có thể đọc và ghi được) nó là thanh ghi dữ liệu của
cổng Px và trong trường hợp nếu cổng được định nghĩa là cổng ra thì khi ta ghi một bit lên
thanh ghi này thì chân tương ứng trên port đó cũng có cùng mức logic. Trong trường hợp mà
cổng được định nghĩa là cổng vào thì thanh ghi này lại mang dữ liệu điều khiển cổng. Cụ thể
nếu bit nào đó của thanh ghi này được set (đưa lên mức 1) thì điện trở kéo lên (pull-up) của
chân tương ứng của port đó sẽ được kích hoạt. Ngược lại nó sẽ ở trạng thái hi-Z. Thanh ghi
này sau khi khởi động Vi điều khiểnsẽ có giá trị là 0x00.
f.


SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

14


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Thanh ghi PINx
Đây là thanh ghi 8 bit chứa dữ liệu vào của PORTx (trong trường hợp PORTx được thiết
lập là cổng vào) và nó chỉ có thể đọc mà không thể ghi vào được.
i.

2.2.3. Bộ định thời
Bộ định thời (timer/counter0) là một module định thời/đếm 8 bit, có các đặc điểm sau:








Bộ đếm một kênh
Xóa bộ định thời khi trong mode so sánh (tự động nạp)
PWM
Tạo tần số
Bộ đếm sự kiện ngoài
Bộ chia tần 10 bit

Nguồn ngắt tràn bộ đếm và so sánh
Sơ đồ cấu trúc của bộ định thời:

Hình 2.7. Sơ đồ cấu trúc bộ định thời
a. Các thanh ghi

TCNT0 và OCR0 là các thanh ghi 8 bit. Các tín hiệu yêu cầu ngắt đều nằm trong thanh
ghi TIFR. Các ngắt có thể được che bởi thanh ghi TIMSK.

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

15


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Bộ định thời có thể sử dụng xung clock nội thông qua bộ chia hoặc xung clock ngoài trên
chân T0. Khối chọn xung clock điều khiển việc bộ định thời/bộ đếm sẽ dùng nguồn xung
nào để tăng giá trị của nó. Ngõ ra của khối chọn xung clock được xem là xung clock của bộ
định thời (clkT0).
Thanh ghi OCR0 luôn được so sánh với giá trị của bộ định thời/bộ đếm. Kết quả so sánh
có thể được sử dụng để tạo ra PWM hoặc biến đổi tần số ngõ ra tại chân OC0.
b. Đơn vị đếm

Phần chính của bộ định thời 8 bit là một đơn vị đếm song hướng có thể lập trình được.
Cấu trúc của nó như hình dưới đây:

Hình 2.8. Đơn vị đếm

count: tăng hay giảm TCNT0 1
direction: lựa chọn giữa đếm lên và đếm xuống
clear: xóa thanh ghi TCNT0
clkT0: xung clock của bộ định thời
TOP: báo hiệu bộ định thời đã tăng đến giá trị lớn nhất
BOTTOM: báo hiệu bộ định thời đã giảm đến giá trị nhỏ nhất (0)

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

16


Đồ Án Kỹ Thuật Vi Điều Khiển

c.

GVHD: Lê Hoài Nam

Đơn vị so sánh ngõ ra

Hình 2.9. Sơ đồ đơn vị so sánh ngõ ra
Bộ so sánh 8 bit liên tục so sánh giá trị TCNT0 với giá trị trong thanh ghi so sánh ngõ ra
(OCR0). Khi giá trị TCNT0 bằng với OCR0, bộ so sánh sẽ tạo một báo hiệu. Báo hiệu này
sẽ đặt giá trị cờ so sánh ngõ ra (OCF0) lên 1 vào chu kỳ xung clock tiếp theo. Nếu được
kích hoạt (OCIE0=1), cờ OCF0 sẽ tạo ra một ngắt so sánh ngõ ra và sẽ tự động được xóa khi
ngắt được thực thi. Cờ OCF0 cũng có thể được xóa bằng phần mềm.
d. Thanh ghi điều khiển bộ định thời/bộ đếm TCCR0

Hình 2.10. Thanh ghi điều khiển bộ định thời


-

Bit 7-FOC0: So sánh ngõ ra bắt buộc
Bit này chỉ tích cực khi bit WGM00 chỉ định chế độ làm việc không có PWM. Khi đặt bit
này lên 1, một báo hiệu so sánh bắt buộc xuất hiện tại đơn vị tạo dạng sóng.

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

17


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

-

Bit 6, 3-WGM01:0: Chế độ tạo dạng sóng
Các bit này điều khiển đếm thứ tự của bộ đếm, nguồn cho giá trị lớn nhất của bộ đếm (TOP)
và kiểu tạo dạng sóng sẽ được sử dụng.

-

Bit 5:4-COM01:0: Chế độ báo hiệu so sánh ngõ ra
Các bit này điều khiển hoạt động của chân OC0. Nếu một hoặc cả hai bit COM01:0 được
đặt lên 1, ngõ ra OC0 sẽ hoạt động.

-

Bit 2:0: CS02:0: Chọn xung đồng hồ

Ba bit này dùng để lựa chọn nguồn xung cho bộ định thời/bộ đếm.

Hình 2.11
e.

Thanh ghi bộ định thời/bộ đếm

Hình 2.12. Thanh ghi bộ định thời
Thanh ghi bộ định thời/bộ đếm cho phép truy cập trực tiếp (cả đọc và ghi) vào bộ đếm 8 bit.
f.

Thanh ghi so sánh ngõ ra-OCR0

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

18


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Hình 2.13. Thanh ghi so sánh ngõ ra
Thanh ghi này chứa một giá trị 8 bit và liên tục được so sánh với giá trị của bộ đếm.

g. Thanh ghi mặt nạ ngắt

Hình 2.14. Thanh ghi mặt nạ ngắt TIMSK
- Bit 1-OCIE0: Cho phép ngắt báo hiệu so sánh
- Bit 0-TOIE0: Cho phép ngắt tràn bộ đếm

h. Thanh ghi cờ ngắt bộ định thời

Hình 2.15. Thanh ghi cờ ngắt TIFR
- Bit 1-OCF0: Cờ so sánh ngõ ra 0
- Bit 0-TOV0: Cờ tràn bộ đếm
Bit TOV0 được đặt lên 1 khi bộ đếm bị tràn và được xóa bởi phần cứng khi vector ngắt
tương ứng được thực hiện. Bit này cũng có thể được xóa bằng phần mềm.

2.3. Cảm biến nhiệt độ LM35
2.3.1. Giới thiệu
LM35 là một cảm biến nhiệt độ analog
Nhiệt độ được xác định bằng cách đo hiệu điện thế ngõ ra của LM35.
 Đơn vị nhiệt độ: oC
 Nhiệt độ thay đổi tuyến tính: 10mV/oC

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

19


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Hình 2.16. Sơ đồ chân của LM35
LM35 không cần phải canh chỉnh nhiệt độ khi sử dụng.
Độ chính xác thực tế: 1/4°C ở nhiệt độ phòng và 3/4°C ngoài khoảng 2°C tới 150°C.
LM35 có hiệu năng cao, công suất tiêu thụ là 60uA.
Cảm biến LM35 hoạt động bằng cách cho ra một giá trị hiệu điện thế nhất định tại chân
Vout (chân giữa) ứng với mỗi mức nhiệt độ.

Với LM35, bạn có thể tự tạo cho mình mạch cảm biến nhiệt độ sử dụng LM35 và tự
động ngắt điện khi nhiệt độ vượt ngưỡng tối đa, đóng điện khi nhiệt độ thấp hơn ngưỡng tối
thiểu thông qua module rơ le...
LM35 thay đổi nhiệt độ nhanh và chính xác.

2.3.2. Tính toán nhiệt độ
Ta có hàm truyền sau:

Hình 2.17. Hàm truyền nhiệt độ
Từ hàm truyền trên ta có :
U = t. K
Với K là điện áp đầu ra của LM35 : K = 10mV/oC
t là nhiệt độ môi trường [K]
U = t. 10mV/oC
Có ADC = 11 bit n = 11
Dải đo : A = [0 – 5] V
Bước thay đổi
SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

20


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

n= = 5 /2023 = 2.44mV
Giá trị ADC đo được từ giá trị điện áp đầu vào
ADC_value =


U/n = (t * 10mV) / 2.44mV (2.1)

Giá trị nhiệt độ đo được:
t = ADC_value * 2.44/10 (oC) (2.2)
* Sai số của hệ thống đo
+ Tại 0 độ C thì điện áp của LM35 là 10mV
+ Tại 150 độ C thì điện áp của LM35 là 1.5V
==> Giải điện áp ADC biến đổi là 1.5 - 0.01 = 1.49 (V)

2.4. Cảm biến khí Gas MQ2
+ Cấu tạo từ chất bán dẫn SnO2
+ Ứng Dụng:
Chúng được sữ dụng trong thiết bị phát hiện rò rỉ khí trong gia đình và công nghiệp, phù
hợp cho việc phát hiện các loại khí như:
- LPG: là hỗn hợp hydrocarbon nhẹ, ở thể khí, LPG trong dân dụng và công nghiệp
chủ yếu có thành phần gồm Propane (C3H8) và Butane (C4H10).
- Iso Butan : C4H10
- Propan: C3H8
- Mêtan: CH4
- Rượu: ROH
- Hydrogen
- Khói
Hình 2.18: Module cảm biến khí gas

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

21


Đồ Án Kỹ Thuật Vi Điều Khiển


GVHD: Lê Hoài Nam

2.5. Module sim 900A
2.5.1. Giới thiệu:
Module Sim900A là module GSM, hoạt động ở 2 băng tần 900/1900 MHz, xây dựng
dựa trên Sim900A của hãng SIMCOM.
Module Sim900A do MLAB sản xuất được thiết kế tập trung hướng đến sự ổn định
trong hoạt động của thiết bị, dễ sử dụng với người dùng và phục vụ chủ yếu cho việc điều
khiển và giám sát các thiết bị qua GSM/GPRS, mọi tính năng không cần thiết đều được loại
bỏ để đạt được yêu cầu chính của khách hàng với chi phi phí thấp nhất.

2.5.2. Đặc điểm:
Sử dụng nguồn ngoài: 4.3VDC - 4.8VDC/ 3A(chạy ổn địn ở 4.5 V). ( MLAB đã có
module sim tích hợp sẵn phần nguồn 4.5VDC, rất phù hợp với các bạn mới bắt đầu: Module
Sim900A V2(Sim900A Shield)).
Trên mạch có phần bảo vệ ESD và chống cắm ngược nguồn
Giao tiếp UART, dùng được với cả MCU 5V và 3.3V
Có thể khởi động module sim bằng phím bấm hoặc khởi động mềm bằng cách điều
khiển chân PWKEY
Kích thước: 3.42 cm x 5.87 cm
Kết nối với vi điều khiển:
GND nối với 0 VDC
VGSM - Nguồn cấp cho Module Sim 3.6V-4.8V / 3A
VMCU - Chân này dùng để đồng bộ mức điện áp RX,TX của 2 thiết bị, do module thiết
kế có thể giao tiếp được cho cả IC 5V và 3.3V. Chân VMCU được nối với nguồn của vi điều
khiển hoặc nguồn của IC giao tiếp với Module Sim.(Ví dụ: dùng vi điều khiển 3.3V thì cấp
3.3V vào chân VMCU, dùng vi điều khiển 5V thì cấp 5 V vào chân VMCU)
TXD - Nối với TXD của MCU
RXD- Nối với RXD của MCU

PWK - PWRKEY kết nối với 1 chân ouput của MCU để tắt/bật/reset nguồn cho module
sim (phải có). Tham khảo tài liệu Hardware + Design đi kèm.
RST - NRESET kết nối với chân ouput của MCU để reset Module(Nếu cần).
Status - Nối với chân Input của MCU để đọc trạng thái nguồn của Module Sim (Nếu
cần).
SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

22


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

Hình 2.19. Module sim 900A

2.6. LCD 16X2
2.6.1. Giới thiệu
Text LCD là các 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. Không giống các loại LCD lớn, 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. Cũng vì lý do chỉ hiện thị được ký tự
ASCII nên loại LCD này được gọi là Text LCD (để phân biệt với Graphic LCD có thể hiển
thị hình ảnh). 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ó. Ví dụ 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ự. Một số kích thước Text LCD thông thường gồm 16x1, 16x2,
16x4, 20x2, 20x4…

Hình 2.20. Màn hình LCD 16X2

Text LCD có 2 cách giao tiếp cơ bản là nối tiếp (như I2C) và song song. Trong phạm vi
bài học này tôi chỉ giới thiệu loại giao tiếp song song, cụ thể là LCD 16x2 điều khiển bởi
chip HD44780U của hãng Hitachi. Đối với các LCD khác bạn cần tham khảo datasheet
riêng của từng loại. Tuy nhiên, HD44780U cũng được coi là chuẩn chung cho các loại Text
LCD, vì thế bạn có thể dùng chương trình ví dụ trong bài này để test trên các LCD khác với
rất ít hoặc không cần chỉnh sửa.
SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

23


Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

HD44780U là bộ điều khiển cho các Text LCD dạng ma trận điểm (dot-matrix), chip
này có thể được dùng cho các LCD có 1 hoặc 2 dòng hiển thị. HD44780U có 2 mode giao
tiếp là 4 bit và 8 bit. Nó chứa sẵn 208 ký tự mẫu kích thước font 5x8 và 32 ký tự mẫu font
5x10 (tổng cộng là 240 ký tự mẫu khác nhau).

2.6.2. Sơ đồ chân
Các Text LCD theo chuẩn HD44780U thường có 16 chân trong đó 14 chân kết nối với
bộ điều khiển và 2 chân nguồn cho “đèn LED nền”. Thứ tự các chân thường được sắp xếp
như sau:

Bảng 2.1

SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

24



Đồ Án Kỹ Thuật Vi Điều Khiển

GVHD: Lê Hoài Nam

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 2 mô tả cách kết nối LCD với
nguồn và mạch điều khiển.

Hình 2.21. Sơ đồ kết nối LCD
Chân 1 và chân 2 là các chân nguồn, được nối với GND và nguồn 5V. Chân 3 là chân
chỉnh độ tương phản (contrast), chân này cần được nối với 1 biến trở chia áp như trong hình
2.Trong khi hoạt động, chỉnh để thay đổi giá trị biến trở để đạt được độ tương phản cần
thiết, sau đó giữ mức biến trở này. Các chân điều khiển RS, R/W, EN và các đường dữ liệu
được nối trực tiếp với vi điều khiển. Tùy theo chế độ hoạt động 4 bit hay 8 bit mà các chân
từ D0 đến D3 có thể bỏ qua hoặc nối với vi điều khiển, chúng ta sẽ khảo sát kỹ càng hơn
trong các phần sau.

2.6.3. Thanh ghi và tổ chức bộ nhớ.
HD44780U có 2 thanh ghi 8 bits là INSTRUCTION REGISTER (IR) và DATA
REGISTER (DR). Thanh ghi IR chứa mã lệnh điều khiển LCD và là thanh ghi “chỉ ghi” (chỉ
có thể ghi vào thanh ghi này mà không đọc được nó). Thanh ghi DR chứa các các loại dữ
SVTH: Nguyễn Văn Quốc – Lớp: 12CDT1

25


×