You are on page 1of 51

HỌC VIỆN KỸ THUẬT MẬT MÃ

KHOA ĐIỆN TỬ-VIỄN THÔNG


¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

BÁO CÁO MÔN HỌC


AN TOÀN HỆ THỐNG NHÚNG

Đề tài: Nghiên cứu đo nhiệt độ và độ ẩm hiển thị lên màn hình


LCD sử dụng cảm biến DHT11 và STM32F103C

Nhóm sinh viên 1. Mai Khắc Nguyên DT010125


2. Nguyễn Văn Nam DT010123
3. Lê Thị Huyền DT010116
Giảng viên hướng dẫn ThS. Dương Phúc Phần

Hà Nội, 2020
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN

…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………

Hà Nội, thứ……….. ngày………. tháng 4 năm 2021


1

LỜI CẢM ƠN

Trên thực tế không có sự thành công nào mà không gắn liền với những sự hỗ
trợ, giúp đỡ dù ít hay nhiều, dù trực tiếp hay gián tiếp của người khác. Trong
suốt thời gian từ khi bắt đầu học tập ở giảng đường đại học đến nay, chúng em
đã nhận được rất nhiều sự quan tâm, giúp đỡ của quý Thầy Cô, gia đình và bạn
bè. Với lòng biết ơn sâu sắc nhất, chúng em xin gửi đến quý Thầy Cô ở Khoa
Điện Tử Viễn Thông- Học viện Kỹ thuật Mật Mã đã cùng với tri thức và tâm
huyết của mình để truyền đạt vốn kiến thức quý báu cho chúng em trong suốt
thời gian học tập tại trường. Và đặc biệt, trong học kỳ này, Khoa đã tổ chức cho
chúng em được tiếp cận với môn học mà theo chúng em là rất hữu ích đối với
sinh viên ngành Điện Tử Viễn Thông. Đó là môn học “An toàn hệ thống
nhúng”. Chúng em xin chân thành cảm ơn thầy Dương Phúc Phần đã tận tâm
hướng dẫn chúng em qua từng buổi học trên lớp cũng như những buổi nói
chuyện, thảo luận về lĩnh vực sáng tạo trong nghiên cứu khoa học. Nếu không
có những lời hướng dẫn, dạy bảo của thầy thì em nghĩ bài thu hoạch này của
chúng em rất khó có thể hoàn thiện được. Một lần nữa, chúng em xin chân thành
cảm ơn thầy. Trong quá trình tìm hiểu cũng như báo cáo chúng em còn nhiều
hạn chế về kiến thức. Do vậy, không tránh khỏi những thiếu sót, chúng em rất
mong nhận được những ý kiến đóng góp quý báu của quý Thầy Cô và các bạn
học cùng lớp để bài báo cáo của chúng em được hoàn thiện hơn. Sau cùng, em
xin kính chúc quý Thầy Cô trong Khoa Điện Tử Viễn Thông thật dồi dào sức
khỏe, niềm tin để tiếp tục thực hiện sứ mệnh cao đẹp của mình là truyền đạt kiến
thức cho thế hệ mai sau.
2

MỤC LỤC
DANH MỤC BẢNG BIỂU...................................................................................1
DANH MỤC CÁC HÌNH VẼ...............................................................................2
LỜI NÓI ĐẦU.......................................................................................................3
Chương 1: Công nghệ thiết kế...............................................................................4
1.1 Giới thiệu về Cortex M3- STM32f103.....................................................4
1.1.1 Cortex là gì?.........................................................................................4
1.1.2 Một vài đặc điểm nổi bật của STM32..................................................6
1.1.3 Sự tinh vi..............................................................................................7
1.1.4 Sự an toàn.............................................................................................8
1.1.5 Tính bảo mật.........................................................................................9
1.1.6 STM32F103C8.....................................................................................9
1.2 Màn Hình LCD1602...............................................................................13
1.2.1 Giới thiệu :..........................................................................................13
1.2.2 Chức năng các chân :..........................................................................15
1.2.3 Các thanh ghi:.....................................................................................17
1.2.4 Tập lệnh của LCD :............................................................................23
1.3 Cảm biến DHT11....................................................................................33
Chương 2. Thiết kế..............................................................................................38
2.1 Sơ đồ khối..................................................................................................38
2.2 Thiết kế phần cứng....................................................................................38
2.3 Phần mềm..................................................................................................43
Chương 3: Kết quả và phương hướng phát triển.................................................46
3.1 Ưu, nhược điểm.........................................................................................46
3.2 Phương hướng phát triển...........................................................................46
TÀI LIỆU THAM KHẢO...................................................................................47
3

DANH MỤC BẢNG BIỂU

STT Bảng Nội dung Trang


1 1.1 Chức năng chân màn hình LCD 12
2 1.2 Chức năng chân RS và R/W theo 18
mục đích sử dụng
3 1.3 Bảng mã kí tự (ROM code A00) 22
4 1.4 Tập lệnh của LCD 24
5 1.5 Maximun Rating 28
6 1.6 Miền làm việc bình thường 29
4

STT Hình Nội dung Trang


1 1.1 Kiến trúc vi sử lí ARM cortex-M3 5
2 1.2 Kiến trúc của STM 32 nhánh performance và Access 7
3 1.3 Kit STM32 F103C8 10
4 1.4 Sơ đồ chân của kit stm32F103 12
5 1.5 Màn hình lcd HD44780 14
6 1.6 Sơ đồ chân 14
7 1.7 Sơ đồ khối của HD44780 17
8 1.8 Giản đồ xung cập nhật AC 19
9 1.9 Mối liên hệ giữa địa chỉ của DDRAM và vị trí hiển thị của LCD 20
10 1.10 Mối liên hệ giữa địa chỉ của ROM và dữ liệu tạo mẫu kí tự 21
11 1.11 Mối liên hệ giữa địa chỉ của CGRAM, dữ liệu của CGRAM, và 23
mã kí tự.
12 1.12 Chế độ giao tiếp LCD 31
13 1.13 Chế độ giao tiếp LCD 32
14 1.14 Cảm biến DHT11 33
15 1.15 Kết nối với MCU 34
16 1.16 Quy trình giao tiếp tổng 35
17 1.17 Gửi tín hiệu từ 35
18 1.18 Quá trình phản hồi từ DHT 36
19 2.1 Sơ đồ khối 38
20 2.2 Giao diện phần mềm Proteus 39
21 2.3 Sơ đồ nguyên lí 40
22 2.4 Mạch PCB được thiết kế trên phần mềm Altium 42
23 2.5 Sơ đồ thuật toán 43
24 2.6 Phần mềm Keil C để viết chương trình cho STM32F103 44
25 2.7 Kit nạp chương trình cho STM32F103 44
26 2.8 Hình ảnh mạch thực tế 45

DANH MỤC CÁC HÌNH VẼ

LỜI NÓI ĐẦU


Ngày nay công nghệ trở nên hiện đại, xu hướng áp dụng công nghệ vào giám sát
các thông số thức tế. Với ý tưởng sử dụng cảm biến để theo dõi và giám sát
nhiệt độ phòng nhóm chúng em xin đưa ra đề tài: “Nghiên cứu đo nhiệt độ và độ
ẩm hiển thị lên màn hình LCD sử dụng cảm biến DHT11 và STM32F103C”.

Với đề tài này nhóm hi vọng sẽ làm cơ sở nghiên cứu cho các đề tài sau có thể
tiếp tục mở rộng và phát triển và trở thành nền tảng cho các dự án nhà thông
minh, các lĩnh vực công nghiệp, nông nghiệp nâng cao đời sống tiện ích của con
người.

Đề tài thực hiện: Nghiên cứu đo nhiệt độ và độ ẩm hiển thị lên màn hình LCD
sử dụng cảm biến DHT11 và STM32F103C.

Nội dung thực hiện:


5

1. Tìm hiểu về cảm biến DHT11 và STM32f103, màn hình LCD.


2. Tính toán và thiết kế mạch.
3. Thi công mạch phần cứng.
4. Viết báo cáo.
4

Chương 1: Công nghệ thiết kế


1.1 Giới thiệu về Cortex M3- STM32f103

1.1.1 Cortex là gì?

Dòng ARM Cortex là một bộ xử lí thế hệ mới đưa ra một kiến trúc chuẩn cho
nhu cầu đa dạng về công nghệ. Không giống như các chip ARM khác, dòng
Cortex là một lõi xử lí hoàn thiện, đưa ra một chuẩn CPU và kiến trúc hệ thống
chung. Dòng Cortex gồm có 3 phân nhánh chính: dòng A dành cho các ứng
dụng cao cấp, dòng R dành cho các ứng dụng thời gian thực như các đầu đọc và
dòng M dành cho các ứng dụng vi điều khiển và chi phí thấp. STM32 ñược thiết
kế dựa trên dòng Cortex-M3, dòng Cortex-M3 được thiết kế đặc biệt để nâng
cao hiệu suất hệ thống, kết hợp với tiêu thụ năng lượng thấp, Cortex- M3 được
thiết kế trên nền kiến trúc mới, do đó chi phí sản xuất đủ thấp để cạnh tranh với
các dòng vi ñiều khiển 8 và 16-bit truyền thống.

Các chip ARM7 và ARM9 được các nhà sản xuất bán dẫn thiết kế với giải pháp
riêng của mình, đặc biệt là phần xử lí các các ngắt đặc biệt (exception) và các
ngắt thông thường (interrupt). Cortex-M3 đưa ra một lõi vi điều khiển chuẩn
nhằm cung cấp phần tổng quát, quan trọng nhất của một vi điều khiển, bao
gồm hệ thống ngắt (interrupt system), SysTick timer (được thiết kế cho hệ điều
hành thời gian thực), hệ thống kiểm lỗi (debug system) và memory map. Không
gian địa chỉ 4Gbyte của Cortex-M3 được chia thành các vùng cho mã chương
trình, SRAM, ngoại vi và ngoại vi hệ thống. Không giống với ARM7 được thiết
kế theo kiến trúc Von Neumann (bộ nhớ chương trình và bộ nhớ dữ liệu chung
với nhau), Cortex-M3 được thiết kế dựa theo kiến trúc Harvard (bộ nhớ chương
trình và bộ nhớ dữ liệu tách biệt với nhau), và có nhiều bus cho phép thực hiện
các thao tác song song với nhau, do đó làm tăng hiệu suất của chip. Không
giống với các kiến trúc ARM trước đó, dòng Cortex cho phép truy cập dữ liệu
không xếp hàng (unaligned data, vì chip ARM là kiến trúc 32bit, do đó tất cả các
dữ liệu hoặc mã chương trình đều được sắp sếp khít với vùng bộ nhớ là bội số
5

của 4byte). Đặc điểm này cho phép sử dụng hiệu quả SRAM nội. Dòng Cortex
còn hỗ trợ việc ñặt và xoá các bit bên trong hai vùng 1Mbyte của bộ nhớ bằng
phương pháp gọi là bit banding. Đặc điểm này cho phép truy cập hiệu quả tới
các thanh ghi ngoại vi và các cờ được dùng trên bộ nhớ SRAM mà không cần
một bộ xử lí luận lí (Boolean processor).

Hình 1.1 Kiến trúc vi sử lí ARM cortex-M3


Khối trung tâm của STM32 là bộ xử lí Cortex-M3. Bộ xử lí Cortex-M3 là một vi
điều khiển được tiêu chuẩn hoá gồm một CPU 32bit, cấu trúc bus (bus
structure), đơn vị xử lí ngắt có hỗ trợ tính năng lồng ngắt vào nhau (nested
interrupt unit), hệ thống kiểm lỗi (debug system) và tiêu chuẩn bố trí bộ nhớ
(standard memory layout).

Một trong những thành phần chính của lõi Cortex-M3 là NVIC (Nested Vector
Interrupt Controller). NVIC cung cấp một cấu trúc ngắt chuẩn cho tất cả các vi
điều khiển được thiết kế dựa trên lõi Cortex và cách xử lí các ngắt đặc biệt
(exceptional interrupt). NVIC cung cấp các vector ngắt chuyên dụng lên tới 240
nguồn ngắt từ ngoại vi, mỗi nguồn ngắt đó có thể ñược ưu tiên hoá với các mức
6

riêng biệt. NVIC được thiết kế để xử lí các ngắt đòi hỏi thời gian đáp ứng cực kì
nhanh (extremely fast interrupt). Thời gian từ lúc nhận một tín hiệu ngắt cho tới
khi thực thi dòng lệnh đầu tiên trong trình phục vụ ngắt chỉ là 12 chu kì xung
nhịp. Công việc này được thực hiện tự động bởi một vi chương trình
(microcode) được cài sẵn trong CPU. Trong trường hợp xuất hiện các interrupt
lồng nhau (tức là xảy ra ngắt khi đang xử lí ngắt trước đó), NVIC sử dụng một
phương thức gọi là “tail chain” cho phép ngắt liên tiếp được phục vụ với độ trễ
chỉ có 6 chu kì xung nhịp. Trong suốt giai đoạn lưu trữ dữ liệu lên vùng nhớ
stack để bắt đầu thực thi chương trình phục vụ ngắt, một ngắt có mức ưu tiên
cao hơn ngắt hiện tại có thể cạnh tranh với (pre-empt) ngắt hiện tại mà không
chịu bất kì trì hoãn nào. Cấu trúc ngắt cũng đi kèm với chế độ tiết kiệm năng
lượng của trong lõi Cortex-M3. CPU có thể được cấu hình tự động vào chế độ
tiết kiệm năng lượng sau khi thoát khỏi ngắt. Sau đó lõi tiếp tục ngủ cho đến khi
một exception (ngắt đặc biệt) xuất hiện.

Mặc dù Cortex-M3 được thiết kế như là một lõi chi phí thấp (low cost core),
nhưng nó vẫn là một CPU 32-bit và vẫn hỗ trợ hai chế độ hoạt động: Thread và
Handler, mỗi chế độ có thể được cấu hình với mỗi vùng stack riêng biệt của nó,
điều này cho phép thiết kế các phần mềm phức tạp và hỗ trợ các hệ điều hành
thời gian thực. Lõi Cortex có hỗ trợ một timer 24-bit tự động nạp lại giá trị, nó
sẽ cung cấp một ngắt timer đều đặn cho một nhận RTOS (Real Time Operating
System). Các chip ARM7 vả ARM9 có hai tập lệnh (tập lệnh ARM 32-bit và tập
lệnh Thumb 16-bit), trong khi đó dòng Cortex được thiết kế hỗ trợ tập lệnh
ARM Thumb-2, tập lệnh này được pha trộn giữa tập lệnh 16 và 32- bit, nhằm
đạt được hiệu suất cao của của tập lệnh ARM 32-bit với mật độ mã chương trình
tối ưu của tập lệnh Thumb 16-bit. Tập lệnh Thumb-2 được thiết kế đặc biệt dành
cho trình biên dịch C/C++, tức là các ứng dụng dựa trên nền Cortex hoàn toàn
có thể được viết bằng ngôn ngữ C mà không cần ñến chương trình khởi động
viết bằng assembler như ARM7 và ARM9.

1.1.2 Một vài đặc điểm nổi bật của STM32.


7

ST đã đưa ra thị trường 4 dòng vi điều khiển dựa trên ARM7 và ARM9, nhưng
STM32 là một bước tiến quan trọng trên đường cong chi phí và hiệu suất
(price/performance), giá chỉ gần 1 Euro với số lượng lớn, STM32 là sự thách
thức thật sự với các vi ñiều khiển 8 và 16-bit truyền thống. STM32 đầu tiên gồm
14 biến thể khác nhau, được phân thành hai nhóm: dòng Performance có tần số
hoạt động của CPU lên tới 72Mhz và dòng Access có tần số hoạt động lên tới
36Mhz. Các biến thể STM32 trong hai nhóm này tương thích hoàn toàn về cách
bố trí chân (pin) và phần mềm, đồng thời kích thước bộ nhớ FLASH ROM có
thể lên tới 128K và 20K SRAM.

Hình 1.2 Kiến trúc của STM 32 nhánh performance và Access


Dòng STM32 có hai nhành, nhánh Performance hoạt động với xung nhịp lên
đến 72Mhz và có ñầy ñủ các ngoại vi, nhánh Access hoạt ñộng với xung nhịp tối
đa 36Mhz và có ít ngoại vi hơn so với nhánh Performance.

1.1.3 Sự tinh vi

Thoạt nhìn thì các ngoại vi của STM32 cũng giống như những vi điều khiển
khác, như hai bộ chuyển đổi ADC, timer, I2C, SPI, CAN, USB và RTC. Tuy
nhiên mỗi ngoại vi trên đều có rất nhiều đặc điểm thú vị. Ví dụ như bộ ADC 12-
bit có tích hợp một cảm biến nhiệt độ để tự ñộng hiệu chỉnh khi nhiệt độ thay
đổi và hỗ trợ nhiều mode chuyển ñổi. Mỗi bộ timer có 4 khối capture compare,
mỗi khối timer có thể liên kết với các khối timer khác để tạo ra một mảng các
8

timer tinh vi. Một timer cao cấp chuyên hỗ trợ điều khiển động cơ, với 6 đầu ra
PWM với dead time lập trình được và một đường break input sẽ buộc tín hiệu
PWM sang một trạng thái an toàn đã được cài sẵn. Ngoại vi nối tiếp SPI có một
khối kiểm tổng CRC bằng phần cứng cho 8 và 16 word hỗ trợ tích cực cho giao
tiếp thẻ nhớ SD hoặc MMC.

STM32 có hỗ trợ thêm 7 kênh DMA (Direct Memory Access). Mỗi kênh có thể
được dùng để truyền dữ liệu đến các thanh ghi ngoại vi hoặc từ các thanh ghi
ngoại vi đi với kích thước từ (word) dữ liệu truyền đi có thể là 8/16 hoặc 32-bit.
Mỗi ngoại vi có thể có một bộ điều khiển DMA (DMA controller) đi kèm dùng
để gửi hoặc đòi hỏi dữ liệu như yêu cầu. Một bộ phân xử bus nội (bus arbiter) và
ma trận bus (bus matrix) tối thiểu hoá sự tranh chấp bus giữa truy cập dữ liệu
thông qua CPU (CPU data access) và các kênh DMA. Điều đó cho phép các đơn
vị DMA hoạt động linh hoạt, dễ dùng và tự động điều khiển các luồng dữ liệu
bên trong vi ñiều khiển.

STM32 là một vi điều khiển tiêu thụ năng lượng thấp và đạt hiệu suất cao. Nó
có thể hoạt động ở điện áp 2V, chạy ở tần số 72MHz và dòng tiêu thụ chỉ có
36mA với tất cả các khối bên trong vi điều khiển đều được hoạt động. Kết hợp
với các chế độ tiết kiệm năng lượng của Cortex, STM32 chỉ tiêu thụ 2µA khi ở
chế độ standby. Một bộ dao động nội RC 8MHz cho phép chip nhanh chóng
thoát khỏi chế độ tiết kiệm năng lượng trong khi bộ dao động ngoài đang khởi
động. Khả năng nhanh đi vào và thoát khỏi các chế độ tiết kiệm năng lượng làm
giảm nhiều sự tiêu thụ năng lượng tổng thể.

1.1.4 Sự an toàn.

Ngày nay các ứng dụng hiện đại thường phải hoạt động trong môi trường khắc
khe, đòi hỏi tính an toàn cao, cũng như đòi hỏi sức mạnh xử lý và càng nhiều
thiết bị ngoại vi tinh vi. Để đáp ứng các yêu cầu khắc khe đó, STM32 cung cấp
một số tính năng phần cứng hỗ trợ các ứng dụng một cách tốt nhất. Chúng bao
gồm một bộ phát hiện điện áp thấp, một hệ thống bảo vệ xung clock và hai bộ
9

watchdogs. Bộ đầu tiên là một watchdog cửa sổ. Watchdog này phải được làm
tươi trong một khung thời gian xác định. Nếu nhấn nó quá sớm, hoặc quá muộn,
thì watchdog sẽ kích hoạt. Bộ thứ hai là một watchdog độc lập, có bộ dao động
bên ngoài tách biệt với xung nhịp hệ thống chính. Hệ thống bảo vệ xung nhịp có
thể phát hiện lỗi của bộ dao động chính bên ngoài (thường là thạch anh) và tự
động chuyển sang dùng bộ dao động nội RC 8MHz.

1.1.5 Tính bảo mật.

Một trong những yêu cầu khắc khe khác của thiết kế hiện đại là nhu cầu bảo mật
mã chương trình để ngăn chặn sao chép trái phép phần mềm. Bộ nhớ Flash của
STM32 có thể được khóa để chống truy cập đọc Flash thông qua cổng debug.
Khi tính năng bảo vệ đọc được kích hoạt, bộ nhớ Flash cũng được bảo vệ chống
ghi để ngăn chặn mã không tin cậy ñược chèn vào bảng vector ngắt. Hơn nữa
bảo vệ ghi có thể ñược cho phép trong phần còn lại của bộ nhớ Flash. STM32
cũng có một đồng hồ thời gian thực và một khu vực nhỏ dữ liệu trên SRAM
ñược nuôi nhờ nguồn pin. Khu vực này có một đầu vào chống giả mạo, có thể
kích hoạt một sự kiện ngắt khi có sự thay đổi trạng thái ở ñầu vào này. Ngoài ra
một sự kiện chống giả mạo sẽ tự động xóa dữ liệu được lưu trữ trên SRAM được
nuôi bằng nguồn pin.

1.1.6 STM32F103C8

STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng
như F0,F1,F2,F3,F4….. Stm32f103 thuộc họ F1 với lõi là ARM COTEX M3.
STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz. Giá thành cũng khá
rẻ so với các loại vi điều khiển có chức năng tương tự. Mạch nạp cũng như công
cụ lập trình khá đa dạng và dễ sử dụng.

Một số ứng dụng chính: dùng cho driver để điều khiển ứng dụng, điều khiển ứng
dụng thông thường, thiết bị cầm tay và thuốc, máy tính và thiết bị ngoại vi chơi
10

game, GPS cơ bản, các ứng dụng trong công nghiệp, thiết bị lập trình PLC, biến
tần, máy in, máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ…

Phần mềm lập trình: có khá nhiều trình biên dịch cho STM32 như IAR
Embedded Workbench, Keil C

Thư viện lập trình: có nhiều loại thư viện lập trình cho STM32 như:
STM32snippets, STM32Cube LL, STM32Cube HAL, Standard Peripheral
Libraries, Mbed core.

Mạch nạp: có khá nhiều loại mạch nạp như : ULINK, J-LINK , CMSIS-DAP,
STLINK…

Hình 1.3 Kit STM32 F103C8


KIT STM32F103C8T6 Mini thuộc loại kit phát triển là KIT phát triển được thiết
kế đơn giản, Kit ra đầy đủ chân của vi điều khiển, có cổng giao tiếp USB và
cổng nạp SWD, sử dụng dòng vi điều khiển 32 Bit của dòng ST. Thích hợp với
những người tiếp cận dòng STM 32 Bit.

Cấu hình chi tiết của STM32F103C8T6:

 ARM 32-bit Cortex M3 với clock max là 72Mhz.

 Bộ nhớ:

o 64 kbytes bộ nhớ Flash(bộ nhớ lập trình).


11

o 20kbytes SRAM.
 Clock, reset và quản lý nguồn.

o Điện áp hoạt động 2.0V -> 3.6V.

o Power on reset(POR), Power down reset(PDR) và


programmable voltage detector (PVD).

o Sử dụng thạch anh ngoài từ 4Mhz -> 20Mhz.

o Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz.

o Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC.


 Trong trường hợp điện áp thấp:

o Có các mode: Ngủ, ngừng hoạt động hoặc hoạt động ở chế độ
chờ.

o Cấp nguồn ở chân Vbat bằng pin để hoạt động bộ RTC và sử


dụng lưu trữ data khi mất nguồn cấp chính.
 2 bộ ADC 12 bit với 9 kênh cho mỗi bộ.

o Khoảng giá trị chuyển đổi từ 0 – 3.6V.

o Lấy mẫu nhiều kênh hoặc 1 kênh.

o Có cảm biến nhiệt độ nội.


 DMA: bộ chuyển đổi này giúp tăng tốc độ xử lý do không có sự can
thiệp quá sâu của CPU.

o 7 kênh DMA.

o Hỗ trợ DMA cho ADC, I2C, SPI, UART.


 7 timer.

o 3 timer 16 bit hỗ trợ các mode IC/OC/PWM.

o 1 timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo
vệ như ngắt input, dead-time..
12

o 2 watdog timer dùng để bảo vệ và kiểm tra lỗi.

o 1 sysTick timer 24 bit đếm xuống dùng cho các ứng dụng như
hàm Delay….
 Hỗ trợ 9 kênh giao tiếp bao gồm:

o 2 bộ I2C(SMBus/PMBus).

o 3 bộ USART(ISO 7816 interface, LIN, IrDA capability,


modem control).

o 2 SPIs (18 Mbit/s).

o 1 bộ CAN interface (2.0B Active)

o USB 2.0 full-speed interface


 Kiểm tra lỗi CRC và 96-bit ID.

Hình 1.4 Sơ đồ chân của kit STM32F103


13

Thông số kỹ thuật:

 Vi điều khiển: STM32F103C8T6.

 Điện áp cấp 5VDC qua cổng Micro USB sẽ được chuyển đổi thành
3.3VDC qua IC nguồn và cấp cho Vi điều khiển chính.

 Tích hợp sẵn thạch anh 8Mhz.

 Tích hợp sẵn thạnh anh 32Khz cho các ứng dụng RTC.

 Ra chân đầy đủ tất cả các GPIO và giao tiếp: CAN, I2C, SPI, UART,


USB,…

 Tích hợp Led trạng thái nguồn, Led PC13, Nút Reset.

 Kích thước: 53.34 x 15.24mm

  Sử dụng với các mạch nạp:

o ST-Link Mini

o J-link

o USB TO COM
 Kết nối chân khi nạp bằng ST-Link Mini

 Nạp theo chuẩn SWD
o TCK — SWCLK

o TMS — SWDIO

o GND — GND

o 3.3V — 3.3V
1.2 Màn Hình LCD1602
14

1.2.1 Giới thiệu :

Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng trong rất
nhiều các ứng dụng của VĐK. LCD có rất nhiều ưu điểm so với các dạng hiển
thị khác: Nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ
họa), dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau,
tốn rất ít tài nguyên hệ thống và giá thành rẻ.

Hình dáng và kích thước: 


Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình 1
là loại LCD thông dụng.

Hình 1.5 Màn hình lcd HD44780


Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên
trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này được đánh số
thứ tự và đặt tên như hình 1.6

Hình 1.6 Sơ đồ chân


15

1.2.2 Chức năng các chân : 

Bảng 1.1 Chức năng chân màn hình LCD

Chân Ký Mô tả
hiệu

1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với
GND của mạch điều khiển
2 VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này
với VCC=5V của mạch điều khiển

3 VEE Điều chỉnh độ tương phản của LCD.

4 RS Chân chọn thanh ghi (Register select). Nối chân RS với logic
“0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi.

+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của
LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của
LCD (ở chế độ “đọc” - read)

+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR


bên trong LCD.
5 R/W Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với
logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic
“1” để LCD ở chế độ đọc.
6 E Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép
của chân E.

+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp


nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-
16

low transition) của tín hiệu chân E.

+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi


phát hiện cạnh lên (low-to-high transition) ở chân E và được
LCD giữ ở bus đến khi nào chân E xuống mức thấp.
7 - 14 DB0 - Tám đường của bus dữ liệu dùng để trao đổi thông tin với
DB7 MPU. Có 2 chế độ sử dụng 8 đường bus này :

+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit


MSB là bit DB7.

+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới


DB7, bit MSB là DB7
15 - Nguồn dương cho đèn nền

16 - GND cho đèn nền

Ghi chú : Ở chế độ “đọc”, nghĩa là MCU sẽ đọc thông tin từ LCD thông qua các
chân DBx. 

Còn khi ở chế độ “ghi”, nghĩa là MCU xuất thông tin điều khiển cho LCD
thông qua các chân DBx.

Sơ đồ khối của HD44780:

Để hiểu rõ hơn chức năng các chân và hoạt động của chúng, ta tìm hiểu
sơ qua chíp HD44780 thông qua các khối cơ bản của nó. 
17

Hình 1.7 Sơ đồ khối của HD44780


1.2.3 Các thanh ghi: 

        Chíp HD44780 có 2 thanh ghi 8 bit quan trọng : Thanh ghi lệnh IR
(Instructor Register) và thanh ghi dữ liệu DR (Data Register) 

Thanh ghi IR : Để điều khiển LCD, người dùng phải “ra lệnh” thông qua
tám đường bus DB0-DB7. Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ
ràng. Người dùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi
18

IR. Nghĩa là, khi ta nạp vào thanh ghi IR một chuỗi 8 bit, chíp HD44780 sẽ tra
bảng mã lệnh tại địa chỉ mà IR cung cấp và thực hiện lệnh đó. 

VD : Lệnh “hiển thị màn hình” có địa chỉ lệnh là 00001100 (DB7…DB0) 
         Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110 

Thanh ghi DR : Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng
RAM DDRAM hoặc CGRAM  (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2
vùng RAM này gởi ra cho MPU (ở chế độ đọc). Nghĩa là, khi MPU ghi thông
tin vào DR, mạch nội bên trong chíp sẽ tự động ghi thông tin này vào DDRAM
hoặc CGRAM. Hoặc khi thông tin về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ
này trong vùng RAM nội của HD44780 sẽ được chuyển ra DR để truyền cho
MPU.

Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ
2 thanh ghi này khi giao tiếp với MPU. Bảng sau đây tóm tắt lại các thiết lập đối
với hai chân RS và R/W theo mục đích giao tiếp. 

RS R/W Chức năng


0 0 Ghi vào thanh ghi IR để ra lệnh cho LCD
0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6
1 0 Ghi vào thanh ghi DR
1 1 Đọc dữ liệu từ DR
Bảng 1.2: Chức năng chân RS và R/W theo mục đích sử dụng
Cờ báo bận BF: (Busy Flag) 

Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một
khoảng thời gian để hoàn tất. Khi 

đang thực thi các hoạt động bên trong chip như thế, LCD bỏ qua mọi giao
tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có thiết lập RS=0,
R/W=1) lên để báo cho MPU biết nó đang “bận”. Dĩ nhiên, khi xong việc, nó sẽ
đặt cờ BF lại mức 0. 
19

Bộ đếm địa chỉ AC : (Address Counter) 

Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM
(DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC.  Bộ đếm này lại nối
với 2 vùng RAM theo kiểu rẽ nhánh. Khi một địa chỉ lệnh được nạp vào thanh
ghi IR, thông tin được nối trực tiếp cho 2 vùng RAM nhưng việc chọn lựa
vùng RAM tương tác đã được bao hàm trong mã lệnh. 

Sau khi ghi vào (đọc từ) RAM, bộ đếm AC tự động tăng lên (giảm đi) 1
đơn vị và nội dung của AC được  xuất ra cho MPU thông qua DB0-DB6 khi có
thiết lập RS=0 và R/W=1 (xem bảng tóm tắt RS - R/W). 

Lưu ý: Thời gian cập nhật AC không được tính vào thời gian thực thi lệnh mà
được cập nhật sau khi cờ BF lên mức cao (not busy), cho nên khi lập trình hiển
thị, bạn phải delay một khoảng tADD khoảng 4uS-5uS (ngay sau khi BF=1)
trước khi nạp dữ liệu mới. Xem thêm hình bên dưới. 

Hình 1.8 : Giản đồ xung cập nhật AC


Vùng RAM hiển thị DDRAM : (Display Data RAM) 

Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của
RAM là một ô kí tự trên màn hình và khi bạn ghi vào vùng RAM này một mã 8
bit, LCD sẽ hiển thị tại vị trí tương ứng trên màn hình một kí tự có mã 8 bit mà
bạn đã cung cấp. Hình sau đây sẽ trình bày rõ hơn mối liên hệ này : 
20

Hình 1.9 : Mối liên hệ giữa địa chỉ của DDRAM và vị trí hiển thị của LCD
Vùng RAM này có 80x8 bit nhớ, nghĩa là chứa được 80 kí tự mã 8 bit.
Những vùng RAM còn lại không dùng cho hiển thị có thể dùng như vùng RAM
đa mục đích. 

Lưu ý: Là để truy cập vào DDRAM, ta phải cung cấp địa chỉ cho AC theo mã
HEX 

Vùng ROM chứa kí tự CGROM: Character Generator ROM 

Vùng ROM này dùng để chứa các mẫu kí tự loại 5x8 hoặc 5x10 điểm
ảnh/kí tự, và định địa chỉ bằng 8 bit. Tuy nhiên, nó chỉ có 208 mẫu kí tự 5x8 và
32 mẫu kí tự kiểu 5x10 (tổng cộng là 240 thay vì 2^8 = 256 mẫu kí tự). Người
dùng không thể thay đổi vùng ROM này.
21

Hình 1.10: Mối liên hệ giữa địa chỉ của ROM và dữ liệu tạo mẫu kí tự.
Như vậy, để có thể ghi vào vị trí thứ x trên màn hình một kí tự y nào đó,
người dùng phải ghi vào vùng DDRAM tại địa chỉ x (xem bảng mối liên hệ giữa
DDRAM và vị trí hiển thị) một chuỗi mã kí tự 8 bit trên CGROM. Chú ý là
trong bảng mã kí tự trong CGROM ở hình bên dưới có mã ROM A00.

 Ví dụ: Ghi vào DDRAM tại địa chỉ “01” một chuỗi 8 bit “01100010” thì trên
LCD tại ô thứ 2 từ trái sang (dòng trên) sẽ hiển thị kí tự “b”.
22

Bảng 1.3: Bảng mã kí tự (ROM code A00)

Vùng RAM chứa kí tự đồ họa CGRAM : (Character Generator RAM) 

Như trên bảng mã kí tự, nhà sản xuất dành vùng có địa chỉ byte cao là
0000 để người dùng có thể tạo các mẫu kí tự đồ họa riêng. Tuy nhiên dung
lượng vùng này rất hạn chế: Ta chỉ có thể tạo 8 kí tự loại 5x8 điểm ảnh, hoặc 4
kí tự loại 5x10 điểm ảnh. 

Để ghi vào CGRAM, hãy xem hình 1.6 bên dưới. 


23

Hình 1.11: Mối liên hệ giữa địa chỉ của CGRAM, dữ liệu của CGRAM, và mã kí
tự. 

1.2.4 Tập lệnh của LCD : 

Trước khi tìm hiểu tập lệnh của LCD, sau đây là một vài chú ý khi giao tiếp với
LCD: 

Tuy trong sơ đồ khối của LCD có nhiều khối khác nhau, nhưng khi lập
trình điều khiển LCD ta chỉ có thể tác động trực tiếp được vào 2 thanh ghi DR
và IR thông qua các chân DBx, và ta phải thiết lập chân RS, R/W phù hợp để
chuyển qua lại giữ 2 thanh ghi này. (xem bảng 2) 

Với mỗi lệnh, LCD cần một khoảng thời gian để hoàn tất, thời gian này
có thể khá lâu đối với tốc độ của MCU, nên ta cần kiểm tra cờ BF hoặc đợi
(delay) cho LCD thực thi xong lệnh hiện hành mới có thể ra lệnh tiếp theo. 
24

Địa chỉ của RAM (AC) sẽ tự động tăng (giảm) 1 đơn vị, mỗi khi có lệnh
ghi vào RAM. (Điều này giúp chương trình gọn hơn).

Các lệnh của LCD có thể chia thành 4 nhóm như sau: 

•  Các lệnh về kiểu hiển thị. VD: Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ
liệu (8 bit / 4 bit), … 

•  Chỉ định địa chỉ RAM nội. 

•  Nhóm lệnh truyền dữ liệu trong RAM nội. 

•  Các lệnh còn lại.

Bảng 1.4: Tập lệnh của LCD

Tên lệnh Hoạt động


Clear Mã lệnh:  DBx = DB7 DB6  DB5  DB4  DB3  DB2  DB1  DB0

Display                   DBx =    0        0       0        0       0        0       0        1

Lệnh Clear Display (xóa hiển thị) sẽ ghi một khoảng trống-blank (mã
hiện kí tự 20H) vào tất cả ô nhớ trong DDRAM, sau đó trả bộ đếm
địa AC=0, trả lại kiểu hiển thị gốc nếu nó bị thay đổi. Nghĩa là : Tắt
hiển thị, con trỏ dời về góc trái (hàng đầu tiên), chế độ tăng AC.
Return Mã lệnh:  DBx = DB7 DB6 DB5  DB4  DB3  DB2  DB1  DB0

home                 DBx =    0       0        0        0       0        0        1       *

Lệnh Return home trả bộ đếm địa chỉ AC về 0, trả lại kiểu hiển thị
gốc nếu nó bị thay đổi. Nội dung của DDRAM không thay đổi.
Entry Mã lệnh: DBx = DB7 DB6  DB5  DB4  DB3  DB2  DB1  DB0

mode set                DBx =   0         0       0        0       0        1     [I/D]   [S]

I/D: Tăng (I/D=1) hoặc giảm (I/D=0) bộ đếm địa chỉ hiển thị AC 1
đơn vị mỗi khi có hành động ghi hoặc đọc vùng DDRAM. Vị trí con
25

trỏ cũng di chuyển theo sự tăng giảm này.

S: Khi S=1 toàn bộ nội dung hiển thị bị dịch sang phải (I/D=0) hoặc
sang trái (I/D=1) mỗi khi có hành động ghi vùng DDRAM. Khi S=0:
không dịch nội dung hiển thị. Nội dung hiển thị không dịch khi đọc
DDRAM hoặc đọc/ghi vùng CGRAM.
Display Mã lệnh:  DBx = DB7 DB6  DB5  DB4  DB3  DB2  DB1  DB0

on/off                 DBx =    0       0        0       0        1     [D]    [C]    [B]

control D: Hiển thị màn hình khi D=1 và ngược lại. Khi tắt hiển thị, nội dung
DDRAM không thay đổi.

C: Hiển thị con trỏ khi C=1 và ngược lại.

B: Nhấp nháy kí tự tại vị trí con trỏ khi B=1 và ngược lại.

Chu kì nhấp nháy khoảng 409,6ms khi mạch dao  động nội LCD là
250kHz.
Cursor Mã lệnh:  DBx = DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

or                   DBx =    0       0        0        1    [S/C] [R/L]   *        *

display Lệnh Cursor or display shift dịch chuyển con trỏ hay dữ liệu hiển thị
sang trái mà không cần hành động ghi/đọc dữ liệu. Khi hiển thị kiểu 2
shift
dòng, con trỏ sẽ nhảy xuống dòng dưới khi dịch qua vị trí thứ 40 của
hàng đầu tiên. Dữ liệu hàng đầu và hàng 2 dịch cùng một lúc. Chi tiết
sử dụng xem bảng bên dưới:

S/C R/L Hoạt động


0 0 Dịch vị trí con trỏ sang trái (Nghĩa là giảm AC một đơn
vị).
0 1 Dịch vị trí con trỏ sang phải (Tăng AC lên 1 đơn vị).
1 0 Dịch toàn bộ nội dung hiển thị sang trái, con trỏ cũng
26

dịch theo.
1 1 Dịch toàn bộ nội dung hiển thị sang phải, con trỏ cũng
dịch theo.

Function Mã lệnh :  DBx = DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

set                   DBx =    0       0        1     [DL]   [N]    [F]     *        *

DL: Khi DL=1, LCD giao tiếp với MPU bằng giao thức 8 bit (từ bit
DB7 đến DB0). Ngược lại, giao thức giao tiếp là 4 bit (từ bit DB7 đến
bit DB0). Khi chọn giao thức 4 bit, dữ liệu được truyền/nhận 2 lần
liên tiếp. với 4 bit cao gởi/nhận trước, 4 bit thấp gởi/nhận sau.

N : Thiết lập số hàng hiển thị. Khi N=0 : hiển thị 1 hàng, N=1: hiển
thị 2 hàng.

F : Thiết lập kiểu kí tự. Khi F=0: kiểu kí tự 5x8 điểm ảnh, F=1: kiểu
kí tự 5x10 điểm ảnh.
Set Mã lệnh :  DBx = DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

CGRAM                   DBx =   0       1   [ACG][ACG][ACG][ACG][ACG][ACG]

address Lệnh này ghi vào AC địa chỉ của CGRAM. Kí hiệu [ACG] chỉ 1 bit
của chuỗi dữ liệu 6 bit. Ngay sau lệnh này là lệnh đọc/ghi dữ liệu từ
CGRAM tại địa chỉ đã được chỉ định.
Set Mã lệnh :  DBx = DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

DDRA                   DBx =    1    [AD]  [AD]  [AD]  [AD]  [AD] [AD]  [AD]
M
Lệnh này ghi vào AC địa chỉ của DDRAM, dùng khi cần thiết lập tọa
address độ hiển thị

mong muốn. Ngay sau lệnh này là lệnh  đọc/ghi dữ liệu từ DDRAM
tại  địa chỉ  đã được chỉ định.
27

Khi ở chế độ hiển thị 1 hàng: địa chỉ có thể từ 00H đến 4FH. Khi ở
chế độ hiển thị 2 hàng, địa chỉ từ 00h đến 27H cho hàng thứ nhất, và
từ 40h đến 67h cho hàng thứ 2.
Read BF Mã lệnh :  DBx = DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

and                   DBx =[BF] [AC]  [AC]   [AC]  [AC]  [AC]  [AC]  [AC]
(RS=0,R/W=1)
address
Như đã đề cập trước đây, khi cờ BF bật, LCD đang làm việc và lệnh
tiếp theo (nếu có) sẽ bị bỏ qua nếu cờ BF chưa về mức thấp. Cho nên,
khi lập trình điều khiển, phải kiểm tra cờ BF trước khi ghi dữ liệu vào
LCD.

Khi đọc cờ BF, giá trị của AC cũng được xuất ra các bit [AC]. Nó là
địa chỉ của

CG hay DDRAM là tùy thuộc vào lệnh trước đó.


Write Mã lệnh:  DBx = DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

data to                   DBx = [Write data]          (RS=1, R/W=0)

CG or Khi thiết lập RS=1, R/W=0, dữ liệu cần ghi được đưa vào các chân
DBx từ mạch
DDRA
M ngoài sẽ được LCD chuyển vào trong LCD tại địa chỉ được xác định
từ lệnh ghi địa chỉ trước đó (lệnh ghi địa chỉ cũng xác định luôn vùng
RAM cần ghi)

Sau khi ghi, bộ đếm địa chỉ AC tự động tăng/giảm 1 tùy theo thiết lập
Entry mode.
Read Mã lệnh :  DBx = DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0

data                   DBx =                       [Read data]                                


(RS=1, R/W=1)
from CG
28

or Khi thiết lập RS=1, R/W=1,dữ liệu từ CG/DDRAM được chuyển ra


MPU thông qua các chân DBx (địa chỉ và vùng RAM đã được xác
DDRA
định bằng lệnh ghi địa chỉ trước đó).
M
Sau khi đọc, AC tự động tăng/giảm 1 tùy theo thiết lập Entry mode,
tuy nhiên nội dung hiển thị không bị dịch bất chấp chế độ Entry
mode.

Giao tiếp giữa LCD và MCU : 

LCD sẽ bị hỏng nghiêm trọng, hoặc hoạt động sai lệch nếu bạn vi phạm khoảng
đặc tính điện sau đây: 

Chân cấp nguồn (Vcc-GND) Min:-0.3V , Max+7V


Các chân ngõ vào (DBx,E,…) Min:-0.3V , Max:(Vcc+0.3V)
Nhiệt độ hoạt động Min:-30C , Max:+75C
Nhiệt độ bảo quản Min:-55C , Max:+125C
  Bảng 1.5 : Maximun Rating

Đặc tính điện làm việc điển hình: (Đo trong điều kiện hoạt động Vcc = 4.5V đến
5.5V, T = -30 đến +75C) 

Chân cấp nguồn Vcc-GND 2.7V đến 5.5V


Điện áp vào mức cao VIH 2.2V đến Vcc
Điện áp vào mức thấp VIL -0.3V đến 0.6V
Điện áp ra mức cao (DB0-DB7) Min 2.4V    (khi IOH = -0.205mA)
Điện áp ra mức thấp (DB0-DB7) Max 0.4V   (khi IOL = 1.2mA)
Dòng điện ngõ vào (input leakage -1uA đến 1uA    (khi VIN = 0 đến
current) ILI Vcc)
29

Dòng điện cấp nguồn ICC 350uA(typ.) đến 600uA


190kHz đến 350kHz (điển hình là
Tần số dao động nội fOSC
270kHz)
Bảng 1.6: Miền làm việc bình thường

Khởi tạo LCD: 

Khởi tạo là việc thiết lập các thông số làm việc ban đầu. Đối với LCD, khởi tạo
giúp ta thiết lập các giao thức làm việc giữa LCD và MPU. Việc khởi tạo chỉ
được thực hiện 1 lần duy nhất ở đầu chương trình điều khiển LCD và bao gồm
các thiết lập sau: 

•  Display clear: Xóa/không xóa toàn bộ nội dung hiển thị trước đó. 

•  Function set: Kiểu giao tiếp 8bit/4bit, số hàng hiển thị 1hàng/2hàng, kiểu kí tự
5x8/5x10. 

•  Display on/off control: Hiển thị/tắt màn hình, hiển thị/tắt con trỏ, nhấp
nháy/không nhấp nháy. 

•  Entry mode set: các thiết lập kiểu nhập kí tự như: Dịch/không dịch, tự
tăng/giảm (Increment). 

Mạch khởi tạo bên trong chíp HD44780: 

Mỗi khi được cấp nguồn, mạch khởi tạo bên trong LCD sẽ tự động khởi
tạo cho nó. Và trong thời gian khởi tạo này cờ BF bật lên 1, đến khi việc khởi
tạo hoàn tất cờ BF còn giữ trong khoảng 10ms sau khi Vcc đạt đến 4.5V (vì
2.7V thì LCD đã hoạt động). Mạch khởi tạo nội sẽ thiết lập các thông số làm
việc của LCD như sau: 

•  Display clear: Xóa toàn bộ nội dung hiển thị trước đó. 

•  Function set: DL=1: 8bit; N=0: 1 hàng; F=0: 5x8 

•  Display on/off control: D=0: Display off; C=0: Cursor off; B=0: Blinking off. 
30

•  Entry mode set: I/D =1: Tăng; S=0: Không dịch. 

Khởi tạo bằng lệnh: (chuỗi lệnh) 

Việc khởi tạo bằng lệnh phải tuân theo lưu đồ sau của nhà sản xuất:

Hình 1.12 Chế độ giao tiếp LCD


31

Hình 1.13 Chế độ giao tiếp LCD


Như đã đề cập ở trên, chế độ giao tiếp mặc định của LCD là 8bit (tự khởi tạo lúc
mới bật điện lên). Và khi kết nối mạch theo giao thức 4bit, 4 bit thấp từ DB0-
DB3 không được kết nối đến LCD, nên lệnh khởi tạo ban đầu (lệnh chọn giao
thức giao tiếp – function set 0010****) phải giao tiếp theo chế độ 8 bit (chỉ gởi
4 bit cao một lần, bỏ qua 4 bit thấp). Từ lệnh sau trở đi, phải gởi/nhận lệnh theo
2 nibble. 

Lưu ý là sau khi thiết lập function set, bạn không thể thay đổi function set ngoại
trừ thay đổi giao thức giao tiếp (4bit/8bit).
32
33

1.3 Cảm biến DHT11

Hình 1.14: Cảm biến DHT11


Cảm biến nhiệt độ & độ ẩm DHT11 có tính năng cảm biến nhiệt độ và độ
ẩm
phức tạp với đầu ra tín hiệu kỹ thuật số đã hiệu chỉnh. Bằng cách sử dụng thu
nhận tín hiệu kỹ thuật số độc quyền kỹ thuật và công nghệ cảm biến nhiệt độ và
độ ẩm, nó đảm bảo độ tin cậy cao và ổn định. Cảm biến này bao gồm một phép
đo độ ẩm kiểu điện trở và một thành phần đo nhiệt độ NTC, và kết nối với vi
điều khiển 8-bit hiệu suất cao, cung cấp chất lượng tuyệt vời, phản hồi nhanh,
chống nhiễu hiệu quả.
Mỗi phần tử DHT11 được hiệu chuẩn nghiêm ngặt trong phòng thí
nghiệm, cực kỳ chính xác hiệu chuẩn độ ẩm. Hệ số hiệu chuẩn được lưu trữ dưới
dạng chương trình trong bộ nhớ OTP, được sử dụng bởi quy trình phát hiện tín
hiệu bên trong của cảm biến. Giao diện nối tiếp một dây giúp tích hợp hệ thống
nhanh chóng và dễ dàng. Kích thước nhỏ, tiêu thụ điện năng thấp và lên đến 20
truyền tín hiệu đồng hồ đo làm cho nó trở thành sự lựa chọn tốt nhất cho các ứng
dụng khác nhau, bao gồm cả những những yêu cầu khắt khe nhất. Nó là thuận
tiện để kết nối và các gói đặc biệt có thể được cung cấp theo yêu cầu của người
dùng.
34

Hình 1. 15: Kết nối với MCU


Giao tiếp nối tiếp.

 Định dạng dữ liệu một bus được sử dụng để giao tiếp và đồng bộ hóa giữa
MCU và cảm biến DHT11. Một quá trình giao tiếp là khoảng 4ms.
 Dữ liệu bao gồm phần thập phân và phần tích phân. Truyền dữ liệu hoàn
chỉnh là 40bit và cảm biến gửi bit dữ liệu cao hơn trước.
Định dạng dữ liệu: Dữ liệu RH tích phân 8 bit + Dữ liệu RH thập phân 8 bit +
Dữ liệu T tích phân 8 bit + T thập phân 8 bit dữ liệu + tổng kiểm tra 8bit. Nếu
truyền dữ liệu đúng, tổng kiểm tra phải là 8 bit cuối cùng của "Dữ liệu RH tích
phân 8bit Dữ liệu RH thập phân 8bit + Dữ liệu T tích phân 8bit + Dữ liệu T thập
phân 8bit".
Quy trình giao tiếp tổng thể.

Khi MCU gửi tín hiệu khởi động, DHT11 sẽ chuyển từ chế độ tiêu thụ điện năng
thấp sang chế độ chế độ đang chạy, chờ MCU hoàn thành tín hiệu bắt đầu. Sau
35

khi hoàn thành, DHT11 sẽ gửi một tín hiệu phản hồi của dữ liệu 40 bit bao gồm
thông tin về độ ẩm và nhiệt độ tương đối để MCU. Người dùng có thể chọn thu
thập (đọc) một số dữ liệu. Không có tín hiệu bắt đầu từ MCU, DHT11 sẽ không
cung cấp tín hiệu phản hồi cho MCU. Sau khi dữ liệu được thu thập, DHT11 sẽ
chuyển sang chế độ tiêu thụ năng lượng thấp cho đến khi nhận được tín hiệu
khởi động lại từ MCU.

Hình 1.16: Quy trình giao tiếp tổng


Quá trình gửi tín hiệu bắt đầu từ MCU đến DHT11

Khi giao tiếp giữa MCU và DHT11 bắt đầu, chương trình của MCU sẽ đặt
mức điện áp một bus dữ liệu từ cao xuống thấp và quá trình này phải mất ít nhất
18 mili giây để đảm bảo DHT phát hiện ra tín hiệu của MCU, sau đó MCU sẽ
kéo điện áp lên và đợi 20-40us cho phản hồi của DHT.
36

Hình 1.17: Gửi tín hiệu từ

Quá trình phản hồi từ DHT.

Khi DHT phát hiện tín hiệu khởi động, nó sẽ gửi tín hiệu phản hồi mức
điện áp thấp, kéo dài 80us. Sau đó, chương trình của DHT đặt dữ liệu mức điện
áp một bus từ thấp đến cao và giữ nó với giá 80us để DHT chuẩn bị gửi dữ liệu.
Khi Bus đơn DATA ở mức điện áp thấp, điều này có nghĩa là DHT đang
gửi phản hồi tín hiệu. Sau khi DHT gửi tín hiệu phản hồi, nó sẽ kéo điện áp lên
và giữ nó trong 80us và chuẩn bị cho việc truyền dữ liệu.
Khi DHT đang gửi dữ liệu đến MCU, mọi bit dữ liệu bắt đầu với mức
điện áp thấp 50us và độ dài của tín hiệu mức điện áp cao sau xác định xem bit
dữ liệu là "0" hay "1"

Hình 1.18: Quá trình phản hồi từ DHT


Nếu tín hiệu phản hồi từ DHT luôn ở mức điện áp cao, điều đó cho thấy
rằng DHT không phản hồi đúng cách và vui lòng kiểm tra kết nối. Khi dữ liệu
bit cuối cùng được truyền, DHT11 kéo mức điện áp xuống và giữ nó trong 50us.
Khi đó, điện áp một Bus sẽ là được kéo lên bởi điện trở để đặt nó trở lại trạng
thái tự do.
37

Một số chú ý:

(1) Điều kiện hoạt động


Việc áp dụng cảm biến DHT11 ngoài phạm vi làm việc có thể dẫn đến 3%
RH sự dịch chuyển / sai lệch tín hiệu. Cảm biến DHT11 có thể phục hồi dần về
trạng thái đã hiệu chỉnh khi nó trở lại tình trạng hoạt động bình thường và hoạt
động trong phạm vi của nó.
(2) Chú ý đến vật liệu hóa học
Hơi từ các vật liệu hóa học có thể gây trở ngại cho các yếu tố nhạy cảm của
DHT và làm mất tác dụng của nó. Mức độ ô nhiễm hóa học cao có thể làm hỏng
cảm biến vĩnh viễn
(3) Nhiệt độ vv
Độ ẩm Rela chủ yếu phụ thuộc vào nhiệt độ. Mặc dù bù nhiệt độ trên
công nghệ được sử dụng để đảm bảo đo lường RH chính xác, chúng tôi khuyên
bạn nên giữ cảm biến độ ẩm và nhiệt độ làm việc trong cùng một nhiệt độ.
DHT11 nên được gắn ở nơi xa nhất có thể với các bộ phận có thể sinh nhiệt.
(4) Các chú ý khác

 Nhiệt độ hàn phải dưới 260oC và tiếp xúc phải dưới 10 giây.
 Tránh sử dụng cảm biến khi đang bật điều kiện sương.
 Không sử dụng sản phẩm này trong các thiết bị dừng an toàn hoặc khẩn
cấp hoặc bất kỳ trường hợp hỏng hóc nào khác của DHT11 có thể gây
thương tích cho người.
 Bảo quản: Giữ cảm biến ở nhiệt độ 10-40 ℃, độ ẩm <60% RH.
Thông số kỹ thuật:

 Nguồn: 3 -> 5 VDC.


 Chuẩn giao tiếp: TTL, 1 wire
 Dòng sử dụng: 2.5mA max (khi truyền dữ liệu).
 Đo tốt ở độ ẩm 20-80%RH với sai số 5%.
 Đo tốt ở nhiệt độ 0 to 50°C sai số ±2°C.
38

 Tần số lấy mẫu tối đa 1Hz (1 giây 1 lần)


 Kích thước 15mm x 12mm x 5.5mm.
 4 chân, khoảng cách chân 0.1''.

Chương 2. Thiết kế
2.1 Sơ đồ khối

Hình 2.1 Sơ đồ khối


Chức năng các khối:

Khối nguồn: Cung cấp nguồn nuôi 5V cho cảm biến DHT11, Kit STM
32f103, màn hình LCD hoạt động. Có thể sử dụng nguồn từ cổng USB của máy
tính, sạc dự phòng…

Khối cảm biến: Cảm biến được sử dụng trong bài là DHT11 thu thập dữ
liệu về nhiệt độ, độ ẩm sau đó gửi tín hiệu lên STM32 dưới dạng tín hiệu digital,
có thể thay thế bằng cảm biến DHT22. Tùy thuộc vào ứng dụng và mục đích sử
dụng để lựa chọn các loại cảm biến phù hợp.

Khối Sử lí: Sử dụng Kit Stm32F103 để đọc dữ liệu từ khối cảm biến sau
đó sử lí rồi xuất dữ liệu hiển thị ra màn hình LCD.

Khối hiển thị: Sử dụng màn hình LCD 16x2 để hiển thị nhiệt độ, độ ẩm
của DHT11.

2.2 Thiết kế phần cứng.


39

Trước khi bắt tay vào thiết kế sản phẩm thực tế thì cần phải tiến hành mô
phỏng để kiểm tra xem sản phẩm có hoạt động theo đúng mong muốn hay
không tránh sự lãng phí khi thiết kế sản phẩm xong mà không chạy được.

Phần mềm dùng để mô phỏng và thiết kế được lựa chọn là Proteus:

Hình 2.2 Giao diện phần mềm Proteus


 Proteus là phần mềm cho phép mô phỏng hoạt động của mạch điện tử bao gồm
phần thiết kế mạch và viết chương trình điều khiển cho các họ vi điều khiển như
MCS-51, PIC, AVR, … 

Phần mềm bao gồm 2 chương trình: ISIS cho phép mô phỏng mạch và ARES
dùng để vẽ mạch in. Proteus là công cụ mô phỏng cho các loại Vi Điều Khiển
khá tốt, nó hỗ trợ các dòng VĐK PIC, 8051, PIC, dsPIC, AVR, HC11, MSP430,
ARM7/LPC2000 ... các giao tiếp I2C, SPI, CAN, USB, Ethenet,... ngoài ra còn
mô phỏng các mạch số, mạch tương tự một cách hiệu quả. Proteus là bộ công cụ
chuyên về mô phỏng mạch điện tử.

 ISIS đã được nghiên cứu và phát triển trong hơn 12 năm và có hơn 12000 người
dùng trên khắp thế giới. Sức mạnh của nó là có thể mô phỏng hoạt động của các
40

hệ vi điều khiển mà không cần thêm phần mềm phụ trợ nào. Sau đó, phần mềm
ISIS có thể xuất file sang ARES hoặc các phần mềm vẽ mạch in khác. 

 Trong lĩnh vực giáo dục, ISIS có ưu điểm là hình ảnh mạch điện đẹp, cho phép
ta tùy chọn đường nét, màu sắc mạch điện, cũng như thiết kế theo các mạch mẫu
(templates) 

Những khả năng khác của ISIS là: 

• Tự động sắp xếp đường mạch và vẽ điểm giao đường mạch. 

• Chọn đối tượng và thiết lập thông số cho đối tượng dễ dàng

• Xuất file thống kê linh kiện cho mạch 

• Xuất ra file Netlist tương thích với các chương trình làm mạch in thông dụng. 

• Đối với người thiết kế mạch chuyên nghiệp, ISIS tích hợp nhiều công cụ giúp
cho việc quản lý mạch điện lớn, mạch điện có thể lên đến hàng ngàn linh kiện. 

• Thiết kế theo cấu trúc (hierachical design) 

• Khả năng tự động đánh số linh kiện

Mạch nguyên lí được thiết kế trên phần mền Proteus.


41

Hình 2.3 Sơ đồ nguyên lí


Sau khi hoàn thiện phần mô phỏng và đã chạy theo đúng như yêu cầu thì chuyển
sang thiết kế PCB.

Phần mềm được lựa chọn để thiết kế PCB là Altium.

Altium Designer trước kia có tên gọi quen thuộc là Protel DXP, là một trong
những công cụ vẽ mạch điện tử mạnh nhất hiện nay. Được phát triển bởi hãng
Altium Limited. Altium designer là một phần mềm chuyên nghành được sử
dụng trong thiết kế mạch điện tử. Nó là một phần mềm mạnh với nhiều tính
năng thú vị, tuy nhiên phần mềm này còn được ít người biết đến so với các phần
mềm thiết kế mạch khác như orcad hay proteus.

Altium Designer có một số đặc trưng sau:

- Giao diện thiết kế, quản lý và chỉnh sửa thân thiện, dễ dàng biên dịch, quản lý
file, quản lý phiên bản cho các tài liệu thiết kế.
42

- Hỗ trợ mạnh mẽ cho việc thiết kế tự động, đi dây tự động theo thuật toán tối
ưu, phân tích lắp ráp linh kiện. Hỗ trợ việc tìm các giải pháp thiết kế hoặc chỉnh
sửa mạch, linh kiện, netlist có sẵn từ trước theo các tham số mới.

- Mở, xem và in các file thiết kế mạch dễ dàng với đầy đủ các thông tin linh
kiện, netlist, dữ liệu bản vẽ, kích thước, số lượng…

- Hệ thống các thư viện linh kiện phong phú, chi tiết và hoàn chỉnh bao gồm tất
cả các linh kiện nhúng, số, tương tự…

 - Đặt và sửa đối tượng trên các lớp cơ khí, định nghĩa các luật thiết kế, tùy
chỉnh các lớp mạch in, chuyển từ schematic sang PCB, đặt vị trí linh kiện trên
PCB.

- Mô phỏng mạch PCB 3D, đem lại hình ảnh mạch điện trung thực trong không
gian 3 chiều, hỗ trợ MCAD-ECAD, liên kết trực tiếp với mô hình STEP, kiểm
tra khoảng cách cách điện, cấu hình cho cả 2D và 3D

- Hỗ trợ thiết kế PCB sang FPGA và ngược lại.

       Từ đó, chúng ta thấy Altium designer có nhiều điểm mạnh so với các phần
mềm  khác như đặt luật thiết kế, quản lý đề tài mô phỏng dễ dàng, giao diện thân
thiện,…

Việc thiết kế mạch điện tử trên phần mềm altium designer có thể được tóm tắt
gồm các bước như sau:

-  Đặt ra các yêu cầu bài toán.

-  Lựa chọn linh kiện.

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

- Lựa chọn các chân linh kiện để chuyển sang mạch in Update mạch nguyên lý
sang mạch in.
43

-  Lựa chọn kích thước mạch in Sắp sếp các vị trí các loại linh kiện  như điện trở
, tụ điện, IC...

-  Đặt kích thước các loại dây nối.

- Đi dây trên mạch.

- Kiểm tra toàn mạch.

Mạch PCB được thiết kế bằng phần mềm Altium.

Hình 2.4: Mạch PCB được thiết kế trên phần mềm Altium
2.3 Phần mềm

Sơ đồ thuật toán.
44

Hình 2.5: Sơ đồ thuật toán


Nguyên lý hoạt động.

Sau khi được nạp chương trình và cấp nguồn, Kit STM32f103 sẽ tiến
hành gửi tín hiệu gửi tín hiệu khởi động, DHT11 sẽ chuyển từ chế độ tiêu thụ
điện năng thấp sang chế độ chế độ đang chạy, chờ STM32f103 hoàn thành tín
hiệu bắt đầu. Sau khi hoàn thành, DHT11 sẽ gửi một tín hiệu phản hồi dữ liệu 40
bit bao gồm thông tin về độ ẩm và nhiệt độ tương đối đến STM32. Sau khi dữ
liệu được thu thập, DHT11 sẽ chuyển sang chế độ tiêu thụ năng lượng thấp cho
đến khi nhận được tín hiệu khởi động lại từ SMT32. Đồng thời STM32 cũng
gửi lệnh tiến hành khởi tạo cho màn hình LCD sau đó sẽ gửi dữ liệu về nhiệt độ,
độ ẩm lên hiển thị trên màn hình LCD.
45

Một số phần mềm hỗ trợ được sử dụng để viết chương trình cho Kit
STM32F103 là: Keil C, Arduino IDE, STM32cubeMX…Nạp chương trình cho
Kit STM32F103 thông qua Kit nạp ST-Link

Hình 2.6 Phần mềm Keil C để viết chương trình cho STM32F103

Hình 2.7 Kit nạp chương trình cho STM32F103


46

Chương 3: Kết quả và phương hướng phát triển.

Hình 2.8: Hình ảnh mạch thực tế


Hoàn thành sản phẩm đúng với yêu cầu đặt ra, sản phẩm hoạt động tương đối ổn
định, sai số thấp, tiết kiệm năng lượng.

3.1 Ưu, nhược điểm

Ưu điểm:

 Giá thành rẻ.


 Dễ chế tạo và sửa chữa.
 Hoạt động ổn định, sai số thấp, tiết kiệm năng lượng.

Nhược điểm:

 Chức năng chưa đa dạng.

3.2 Phương hướng phát triển

Kết hợp thêm các cảm biến và thiết bị ngoại vi để có thêm nhiều tính
năng, sử dụng tối đa tài nguyên của Kit.
47

Kết hợp với các module Node MCU 8266 để có thể gửi dữ liệu thu thập
được qua wifi lên app Blynk hoặc Wed để người dùng dễ dàng giám sát và điều
khiển từ xa.

TÀI LIỆU THAM KHẢO


1. Thiết Kế Hệ Thống Nhúng Nâng Cao - Đh Bách Khoa Hcm – Ts. Lê Chí
Thông
2. Lê Ngọc Bích, Phạm Quang Huy, Ứng dụng vi xử l và vi điều khiển,
NXB Bách khoa Hà Nội, 2016.

You might also like