Professional Documents
Culture Documents
Hà Nội, 2020
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
…………………………………………………………………………
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
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.
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).
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.
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.
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.
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…
Bộ nhớ:
o 20kbytes SRAM.
Clock, reset và quản lý nguồn.
o Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz.
o Có các mode: Ngủ, ngừng hoạt động hoặc hoạt động ở chế độ
chờ.
o 7 kênh DMA.
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 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).
Thông số kỹ thuật:
Đ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ạnh anh 32Khz cho các ứng dụng RTC.
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
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ẻ.
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
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)
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.
Để 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
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.
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
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.
Đâ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 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
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.
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ự.
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), …
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
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
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.
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:
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
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 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
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:
Đặ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)
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ỗ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 đó.
• Display on/off control: D=0: Display off; C=0: Cursor off; B=0: Blinking off.
30
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:
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
Đị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.
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
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"
Một số chú ý:
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:
Chương 2. Thiết kế
2.1 Sơ đồ 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.
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 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)
• Chọn đối tượng và thiết lập thông số cho đối tượng dễ dàng
• 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.
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.
- 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
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:
- 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...
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
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
Ưu điểm:
Nhược điểm:
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.