i MỤC LỤC DANH MỤC CÁC HÌNH ẢNH iii DANH MỤC CÁC BẢNG BIỂU v DANH MỤC CÁC TỪ VIẾT TẮT vi Chương 1 TỔNG QUAN 1 1 1 Đặt vấn đề 1 1 2 Mục tiêu đề tài 1 1 3 Đối tượng và phạm vi nghiên cứu 1 1 4 Bố cục đề.
Trang 1MỤC LỤC
DANH MỤC CÁC HÌNH ẢNH iii
DANH MỤC CÁC BẢNG BIỂU v
DANH MỤC CÁC TỪ VIẾT TẮT vi
Chương 1: TỔNG QUAN 1
1.1 Đặt vấn đề 1
1.2 Mục tiêu đề tài 1
1.3 Đối tượng và phạm vi nghiên cứu 1
1.4 Bố cục đề tài 1
Chương 2: CƠ SỞ LÝ THUYẾT 3
2.1 Giới thiệu vi điều khiển PIC16F887 3
2.2 Giới thiệu IC thời gian thực DS1307 5
2.2.1 Giới thiệu chuẩn truyền thông I2C 5
2.2.2 Giới thiệu IC thời gian thực DS1307 6
2.3 Giới thiệu LCD 20x4 9
2.4 Giới thiệu cảm biến nhiệt độ, độ ẩm DHT11 10
2.4.1 Giới thiệu chuẩn giao tiếp 1-wire 10
2.4.2 Giới thiệu IC nhiệt độ, độ ẩm DHT11 13
Chương 3: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 15
3.1 Yêu cầu của hệ thống 15
3.2 Phương án thiết kế 15
3.3 Sơ đồ khối 16
3.4 Thiết kế phần cứng 17
3.4.1 Khối cảm biến nhiệt độ, độ ẩm 17
3.4.2 Khối thời gian thực 18
3.4.3 Khối hiển thị 19
3.4.4 Khối báo hiệu 20
3.4.5 Khối lựa chọn chức năng 23
Trang 23.4.6 Khối xử lý trung tâm 23
3.4.7 Khối nguồn 24
3.4.7 Sơ đồ nguyên lý toàn hệ thống 27
3.5 Lưu đồ giải thuật 27
3.5.1 Giải thuật chương trình chính 27
3.5.2 Chương trình con nut_menu() 30
3.5.3 Chương trình con nut_up() và nut_dw() 33
3.5.4 Chương trình con nut_right() 36
3.5.5 Chương trình con nut_left() 40
3.5.6 Chương trình con ss_bthuc() 42
3.5.7 Chương trình con bao_thuc() 44
Chương 4: KẾT QUẢ THỰC HIỆN 46
4.1 Mô hình phần cứng 46
4.2 Giao diện chính 48
4.3 Giao diện chọn chức năng 49
4.4 Giao diện chỉnh thứ ngày tháng năm và giờ phút giây 49
4.5 Giao diện báo thức 52
4.6 Báo thức 55
Chương 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 57
5.1 Kết luận 57
5.2 Hướng phát triển 57
TÀI LIỆU THAM KHẢO 58
Trang 3DANH MỤC CÁC HÌNH ẢNH
Hình 2 1: Vi điều khiển PIC 16F887 3
Hình 2 2: sơ đồ chân PIC16F887 4
Hình 2 3: mô hình giao tiếp i2c 5
Hình 2 4: Khung truyền dữ liệu I2C 5
Hình 2 5: DS1307 và sơ đồ chân 7
Hình 2 6: tổ chức bộ nhớ trong DS1307 8
Hình 2 7: LCD 2004 9
Hình 2 8: Mô hình chuẩn giao tiếp 1-wire 11
Hình 2 9: 4 trạng thái của 1-wire 12
Hình 2 10: cảm biến nhiệt độ, độ ẩm DHT11 14
-
Hình 3 1: sơ đồ khối mạch đồng hồ số 16
Hình 3 2: sơ đồ nguyên lý giao tiếp DHT11 với PIC16F887 18
Hình 3 3: sơ đồ nguyên lý giao tiếp DS1307 với PIC16F887 18
Hình 3 4: sơ đồ nguyên lý LCD với PIC16F887 19
Hình 3 5: sơ đồi nguyên lý khối báo hiệu 21
Hình 3 6: sơ đồ ngyên lý khối báo hiệu hoàn chỉnh 22
Hình 3 7: sơ đồ nguyên lý khối lựa chọn chức năng 23
Hình 3 8: sơ đồ nguyên lý khối xử lý trung tâm 24
Hình 3 9: sơ đồ khối mạch nguồn ổn áp 25
Hình 3 10: sơ đồ nguyên lý mạch nguồn ổn áp 26
Hình 3 11: sơ đồ nguyên lý hoàn chỉnh mạch nguồn ổn áp 26
Hình 3 12: sơ đồ nguyên lý mạch đồng hồ số 27
Hình 3 13: lưu đồ chương trình chính 28
Hình 3 14: lưu đồ chương trình nut_menu() 31
Hình 3 15: lưu đồ chương trình nut_up() và nut_dw() 33
Hình 3 16: lưu đồ chương trình chinh_tang() 34
Hình 3 17: lưu đồ chương trình chinh_giam() 35
Hình 3 18: lưu đồ chương trình con nut_right() 36
Hình 3 19: lưu đồ chương trình hienthi_right() 38
Hình 3 20: lưu đồ chương trình nut_left() 40
Hình 3 21: lưu đồ chương trình hienthi_left() 41
Hình 3 22: lưu đồ giải thuật chương trình con ss_bthuc() 42
Hình 3 23: chương trình con bao_thuc() 44
-
Trang 4Hình 4 1: mạch in được vẽ bằng phần mềm proteus 46
Hình 4 2: mạch in sau khi thi công 47
Hình 4 3: giao diện menu chính 48
Hình 4 4: giao diện menu chọn chức năng 49
Hình 4 5: giao diện menu chỉnh thứ ngày tháng năm 50
Hình 4 6: chọn chức năng chỉnh ngày 51
Hình 4 7: chỉnh tăng 51
Hình 4 8: chỉnh giảm 51
Hình 4 9: thay đổi sang chỉnh tháng 52
Hình 4 10: menu danh sách báo thức 52
Hình 4 11: menu chọn chức năng báo thức 53
Hình 4 12: tắt báo thức tại 20:12 53
Hình 4 13: báo thức 20:12 bị bỏ qua 54
Hình 4 14: menu chỉnh báo thức 54
Hình 4 15: cập nhật thời gian sau khi chỉnh 55
Hình 4 16: khi đến giờ báo thức buzzer kêu và đèn led nhấp nháy 55
Hình 4 17: led nhấp nháy tắt 56
Hình 4 18: bấm dừng bằng nút menu 56
Trang 5DANH MỤC CÁC BẢNG BIỂU
Bảng 2 1: các chân LCD 2004 10
Bảng 2 2: các giá trị thời gian quy ước của 1-wire 13
-
Bảng 3 1: dòng tiêu thụ của các linh kiện 25
Bảng 3 2: các giao diện sử dụng trong mạch đồng hồ số 30
Trang 6DANH MỤC CÁC TỪ VIẾT TẮT
9 RISC Reduced Instructions Set Computer
10 EEPROM Electrically Erasable Programmable
Read-Only Memory
15 ACK/NACK Acknowledged/Not Acknowedged
Trang 7Chương 1: TỔNG QUAN 1.1 Đặt vấn đề
Ngày nay với sự phát triển của khoa học kỹ thuật, các hệ thống điều khiển dần được
tự động hóa Khi những kỹ thuật mới như vi xử lý, vi mạch số được ứng dụng thì các hệ thống cơ khí cũ dần được thay thế Với những ưu điểm như sự tiện lợi, giá thành rẻ và
có khả năng lập trình cao với nhiều tính năng mới, những hệ thống này đã được ưa chuộng và sử dụng rộng rãi
Từ mong muốn tạo ra một sản phẩm tự động hóa gần gũi với cuộc sống con người, người thực hiện đã chọn đề tài “Mạch đồng hồ số”
1.2 Mục tiêu đề tài
Áp dụng những kiến thức đã học từ môn vi xử lý, lập trình C, điện tử cơ bản để thiết
kế một sản phẩm có tính ứng dụng thực tế, cụ thể là thiết kế mạch đồng hồ số sử dụng
vi điều khiển 16F887
1.3 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu là các loại vi điều khiển, module LCD, module cảm biến nhiệt
độ, độ ẩm, IC thời gian thực và các chuẩn giao tiếp truyền thông 1-wire, I2C Phạm vi nghiên cứu là thiết kế mạch đồng hồ số hiển thị ngày tháng năm, giờ phút giây
và nhiệt độ, độ ẩm trên màn hình LCD, có thể cài đặt thời gian và ngày tháng Đồng hồ
có thể báo thức nhiều lần trong ngày và thời gian báo thức được cố định nhiều ngày nên người dùng không cần cài đặt lại mỗi ngày Đồng hồ được hiển thị trên một giao diện LCD, sử dụng Menu tùy chọn các chức năng giúp giao tiếp với người dùng một cách
- Chương 2: Cơ sở lý thuyết
Giới thiệu về vi điều khiển 16F887, IC DS1307, cảm biến DHT11, LCD và chuẩn truyền thông I2C
- Chương 3: Thiết kế hệ thống
Trình bày các yêu cầu đặt ra của hệ thống, xây dựng sơ đồ đặc tả, sơ đồ khối và thiết kế
sơ đồ nguyên lý và lưu đồ giải thuật của hệ thống
- Chương 4: Kết quả thực hiện
Trang 8Trình bày các kết quả và hình ảnh thực tế của hệ thống
- Chương 5: Kết luận và hướng phát triển
Đưa ra kết luận và hướng phát triển của đề tài
Trang 9Chương 2: CƠ SỞ LÝ THUYẾT 2.1 Giới thiệu vi điều khiển PIC16F887
Vi điều khiển PIC16F887 thuộc họ PIC được sản xuất bởi hãng Microchip, là một
vi điều khiển 8 bit dựa trên kiến trúc RISC với bộ nhớ chương trình lên đến 8KB Flash
hỗ trợ việc ghi và xóa lên đến 100 nghìn lần Ngoài ra PIC16F887 còn có bộ nhớ EEPROM 256B và bộ nhớ RAM lên đến 368B SRAM Các lệnh thực hiện với thời gian
là 1 chu kỳ máy, riêng đối với cấu trúc rẽ nhánh là 2 chu kỳ máy Có thể sử dụng dao động ngoại hoặc dao động nội, ngõ vào dao động ngoại đến 20MHz Ở chế độ ngủ có thể tiết kiệm công suất, dòng tiêu tán 50nA sử dụng nguồn 2V Dãy điện áp hoạt động rộng từ 2V đến 5,5V có mạch reset khi có điện Ngoài ra vi điều khiển có bộ định thời Watchdog dùng dao động trong chip có thể dùng reset sau một khoảng thời gian Hình ảnh của một vi điều khiển PIC16f887 trong thực tế như hình 2.1
Hình 2 1: Vi điều khiển PIC 16F887
PIC16F887 có cấu trúc 40 chân được mô tả như hình 2.2 bên dưới
Trang 10Hình 2 2: sơ đồ chân PIC16F887
Với 33 chân IO được chia làm 4 Port A, B, C, D, E, mỗi Port sẽ có 8 chân (từ 0 đến 7) tuy nhiên Port E chỉ có 4 chân từ RE0 đến RE3 Mỗi chân của vi điều khiển có nhiều hơn 1 tên, do có thể sử dụng cho nhiều chức năng khác nhau để giao tiếp với ngoại vi tùy theo nhu cầu của người sử dụng Một số chức năng ngoại vi có thể kể đến như:
- PIC16F887 có 14 kênh ADC với độ phân giải của mỗi kênh là 10bit sử dụng các chân analog làm ngõ vào (từ AN0 đến AN13)
- Timer0 sử dụng 8bit hoạt động định thời hoặc đếm xung ngoại được lấy từ chân T0CKI có bộ chia trước và có thể lập trình được
- Timer1 sử dụng 16bit để định thời hoặc đếm xung ngoại từ chân T1CKI, ngoài ra
có ngõ vào cổng của timer1 để điều khiển timer1 đếm tín hiệu bên ngoài Có thể sử dụng
bộ dao động công suất thấp có tần số 32KHz từ chân T1OSO và T1OSI
- Timer2 có 8 bit hoạt động định thời với thanh ghi chu kỳ, có thể sử dụng bộ chia trước và bộ chia sau
- Có module capture, compare và điều chế xung PWM
Trang 11- Hỗ trợ nhiều chuẩn truyền thông kết nối có dây như 1-wire, I2C (chân SCL và SDA), SPI (chân SCL, SDO, SDA), UART (chân TX và RX)
2.2 Giới thiệu IC thời gian thực DS1307
2.2.1 Giới thiệu chuẩn truyền thông I2C
I2C có tên tiếng Anh là “Inter-Integrated Circuit” là một chuẩn truyền thông sử dụng
2 dây, với I2C có thể giao tiếp giữa một hoặc nhiều thiết bị chủ (Master) với một hoặc nhiều thiết bị tớ (Slave) Sơ đồ giao tiếp của một chuẩn I2C giữa một Master và một Slave được cho như hình 2.3 bên dưới
Hình 2 3: mô hình giao tiếp i2c
Chân SCL (Serial Clock Line) là chân cấp xung Clock từ thiết bị Master đến Slave trong quá trình truyền dữ liệu Do kiểu truyền dữ liệu của I2C là nối tiếp nên toàn bộ dữ liệu được truyền trên một đường duy nhất là SDA (Serial Data Line) Hai đường SCL và SDA đều hoạt động ở chế độ Open Drain, khi bất kỳ một thiết bị nào kết nối với giao thức I2C thì chỉ có thể kéo hai đường giao tiếp xuống mức thấp, nhưng không thể kéo được lên mức cao Điều này giúp tránh việc có một thiết bị kéo xuống mức thấp và một thiết bị kéo lên mức cao gây ra hiện tượng ngắn mạch Do đó để giữ cố định ở mức cao thường sử dụng một điện trở 4k7 để nối lên nguồn VDD
Hình 2 4: Khung truyền dữ liệu I2C
Trang 12Dữ liệu được truyền giữa hai thiết bị dưới dạng gói tin, được mô tả như hình 2.4, trong mỗi gói tin được chia thành các khung dữ liệu khác nhau:
- Bit định địa chỉ: khối bit này chứ địa chỉ của Slave mà Master muốn giao tiếp, thông thường khi giao tiếp với nhiều Slave, để phân biệt mỗi Slave sẽ có một địa chỉ cố định
- Bit dữ liệu: khối bit dữ liệu chứa dữ liệu cần truyền đi, có thể là từ Master gửi đến Slave hoặc từ Slave gửi về Master Sau khi gửi các bit này đi sẽ có một bit ACK/NACK
để báo hiệu tín hiệu đã được gửi đi thành công hay chưa
- Bit ACK/NACK: là viết tắt của từ tiếng anh Acknowledged/Not Acknowedged, sau khi bit địa chỉ gửi tới sẽ so sánh với địa chỉ vật lý trên thiết bị để báo hiệu về địa chỉ
đã đúng hay chưa Hoặc sau khi gửi các bit dữ liệu sẽ báo hiệu đã gửi thành công hay chưa
- Bit Read/Write: dùng để xác định quá trình là truyền hay nhận dữ liệu từ Master
- Bit bắt đầu, kết thúc: dùng để bắt đầu truyền dữ liệu và kết thúc quá trình truyền Quá trình truyền nhận của giao thức I2C được bắt đầu bằng việc thiết bị Master gửi tín hiệu Start, bằng cách lần lượt kéo các chân SCL và SDA xuống mức 0 Sau đó Master gửi 7 bit địa chỉ cần giao tiếp cùng với 1 bit Read/Write trên đường SDA Nếu cần gửi
dữ liệu, bit Read/Write sẽ ở mức 0 và ngược lại cần nhận dữ liệu bit này sẽ ở mức 1 Tiếp theo, thiết bị Slave sẽ so sánh với địa chỉ vật lý, nếu trùng sẽ kéo đường SDA xuống
0 và set bit ACK/NACK là 0, nếu sai đường SDA vẫn giữ nguyên mức 1 Tiếp theo là quá trình gửi hoặc nhận 8 bit dữ liệu của Master tùy vào bit Read/Write Nếu khung dữ liệu được truyền thành công, bit ACK/NACK sẽ thành mức 0 để báo hiệu đến thiết bị gửi để tiếp tục quá trình Nếu đã gửi hoặc nhận đầy đủ dữ liệu, Master sẽ tạo một điều kiện dừng đến Slave bằng cách kéo lần lượt SCL và SDA từ mức 0 lên 1
2.2.2 Giới thiệu IC thời gian thực DS1307
IC thời gian thực DS1307 được sản xuất bởi hãng Dallas Semiconductor là một IC tích hợp cho thời gian bởi tính chính xác tuyệt đối cho thời gian: thứ, ngày, tháng,… IC
có 64 ô nhớ trong đó có 7 ô nhớ đầu có địa chỉ 00h đến 06h dùng để lưu thời gian (thứ, ngày, tháng,…), ô nhớ thứ 8 có địa chỉ là 07h là thanh ghi điều khiển ngõ ra, vùng nhờ còn lại là 56 ô nhớ từ 08h đến 3Fh dùng để lưu dữ liệu
Trang 13Hình 2 5: DS1307 và sơ đồ chân
Hình 2.5 là IC DS1307 trong thực tế và sơ đồ chân của IC, vì sử dụng giao tiếp I2C nên IC chỉ có 8 chân, trong đó chân số 5 và 6 là 2 chân giao tiếp I2C, chân 1 và 2 sử dụng dao động bên ngoài 32.768kHz, chân 3 nối với nguồn PIN 3.3V giúp IC có thể hoạt động liên tục, chân số 7 có thể tạo ra một xung vuông với tần số có thể lập trình được
Trang 14Hình 2 6: tổ chức bộ nhớ trong DS1307
Hình 2.6 mô tả tổ chức các thanh ghi trong IC DS1307:
- Thanh ghi đầu tiên là ô nhớ lưu giây có địa chỉ là 00h, 4 bit thấp lưu giá trị hàng đơn vị giây, 3 bit cao tiếp theo lưu giá trị hàng chục giây Bit cao nhất là CH cho phép đồng hồ hoạt động, tích cực ở mức 0
- Thanh ghi thứ hai lưu giá trị phút, có địa chỉ là 01h, dùng để lưu hàng đơn vị phút
và hàng chục phút
- Thanh ghi thứ 3 lưu giá trị giờ, có khả năng chuyển đổi giữa chế độ 12 giờ và 24 giờ, được điều khiển bằng bit 12/24 Khi ở chế độ 24 giờ, bit 12/24 bằng 0 và bit 5 của thanh ghi có ký hiệu là 10HR, phần hàng chục giờ sử dụng 2 bit 4 và 5 Khi ở chế độ 12 giờ, bit 12/24 bằng 1 và bit 5 có ký hiệu là A/P báo hiệu hai buổi trong ngày là AM và
Trang 15- Thanh ghi thứ 7 là giá trị năm có địa chỉ 06h, lưu giá trị 00-99 là hai số cuối của năm
- Thanh ghi thứ 8 là thanh ghi mã điều khiển đầu ra của sóng vuông, có địa chỉ là 07h, 2 bit cuối dùng để lựa chọn tần số của sóng vuông, bit SQWE cho phép kích hoạt đầu ra của bộ dao động, tích cực ở mức 1 Bit OUT điều khiển mức logic cảu đầu ra bộ dao động khi bit SQWE bằng 0
2.3 Giới thiệu LCD 20x4
LCD là một thiết bị hiển thị rất thông dụng dùng cho các vi điều khiển, LCD có nhiều loại khác nhau về kích thước và số chân, nhưng có 2 loại phổ biến là LCD 14 chân và LCD 16 chân Trong thiết kế, người thực hiện sử dụng LCD 20x4, như hình 2.7 LCD 20x4 có thể hiển thị 20 cột và 4 hàng thích hợp cho những dự án cần hiển thị không quá phức tạp
Hình 2 7: LCD 2004
LCD hoạt động với nguồn cung cấp Min =0V và Max=7V, hoạt động tốt với nguồn +5V Dãy nhiệt độ hoạt động tư 0-50oC, và độ ẩm môi trường RH nhỏ hơn hoặc bằng 70% Chức năng các chân của LCD được mô tả trong bảng 2.1
Trang 16Có thể chia các chân trên LCD thành 4 dạng:
- Chân cấp nguồn: gồm có 3 chân 1, 2 và 3 Chân 1 nối với GND, chân 2 nối với nguồn 5V, chân 3 chỉnh tương phản cho LCD có thể nối với 1 biến trở 10K để thay đổi
- Chân điều khiển: bao gồm chân 4, 5, 6 Chân 4 là chân chọn chế độ cho thanh ghi, nến RS=0, bus D0-D7 sẽ nối với thanh ghi lênh IR khi ở chế độ ghi hoặc nối với bộ đếm địa chỉ ở chế độ đọc Khi RS=1, bus sẽ nối với thanh ghi dữ liệu DR Chân RW là chân chọn chế độ đọc (RW=1) hoặc ghi (RW=0) Chân E dùng để tạo một xung cho phép sau khi các lệnh được đặt vào bus D0-D7
- Các chân dữ liệu D0-D7: là chân giao tiếp dữ liệu giữa các thiết bị và LCD, có 2 chế độ hoạt động là 4 bit và 8 bit
- Các chân LED nền A và K: chân số 15 và 16 dùng để cấp nguồn cho LED nền để
có thể nhìn thấy vào ban đêm
2.4 Giới thiệu cảm biến nhiệt độ, độ ẩm DHT11
2.4.1 Giới thiệu chuẩn giao tiếp 1-wire
Chuẩn giao tiếp 1-wire được nghiên cứu và phát triển bởi Dallas Semicondutor Không giống các chuẩn khác, 1-wire chỉ cần 1 dây để giao tiếp nên có thể tiết kiệm được chân giao tiếp, tuy nhiên 1-wire có tốc độ thấp nên chủ yếu được dùng trong việc thu thập và truyền nhận dữ liệu về thời tiết
Trang 17Hình 2 8: Mô hình chuẩn giao tiếp 1-wire
Vì giao tiếp 1-wire chỉ sử dụng 1 dây để truyền dữ liệu nên ở chế độ bình thường nó được kéo lên nguồn bằng 1 điện trở (pull-up resistor) Giao tiếp 1-wire có hai chế độ là Standard và Overdrive, khi ở chế độ Standard thì tốc độ truyền nhận là 15kbps, khi ở chế
độ Overdrive thì tốc độ là 111kbps Giao tiếp 1-wire theo mô hình Master và Slave nhưng chỉ có 1 Master và có thể giao tiếp được nhiều Slave
Do sử dụng điện trở kéo lên nên khi bình thường đường truyền luôn ở mức cao, việc xác định 1 trạng thái trong quá trình truyền nhận sẽ được quyết định bởi khoảng thời gian đường truyền bị kéo xuống mức 0 Có 4 trạng thái cơ bản là gửi bit 0, gửi bit 1, đọc bit và reset Được mô tả như hình 2.9 bên dưới:
Trang 18Hình 2 9: 4 trạng thái của 1-wire
- Gửi bit 1: khi muốn gửi 1 bit cao, Master sẽ kéo đường truyền xuống mức 0 một khoảng thời gian A (us) và trả lại mức 1 một khoảng thời gian B (us)
- Gửi bit 0: khi gửi bit thấp, Master sẽ kéo đường truyền xuống mức 0 một khoảng thời gian C (us) và trở về mức 1 trong một khoảng thời gian D (us)
- Đọc bit: thiết bị Master sẽ kéo đường truyền xuống trong khoảng thời gian A (us), tiếp theo Master sẽ tiến hành lấy mẫu sau khoảng thời gian E (us) Trong khoảng thời gian lấy mẫu, nếu đường truyền ở mức 1 thì Master sẽ đọc được bit 1, ngược lại nếu đường truyền ở mức 0 thì Master sẽ đọc bit 0
- Reset: trong quá trình này Master sẽ kéo đường truyền xuống trong khoảng thời gian H (us) và sau đó sẽ thả về mức 1 Master sẽ lấy mẫu sau khoảng thời gian I (us) tiếp theo, nếu đường truyền bị kéo xuống tức là thiết bị Slave đã nhận được tín hiệu reset và sẵn sàng giao tiếp Ngược lại, nếu đường truyền vẫn ở mức 1 thì Master sẽ hiểu là không
có thiết bị nào giao tiếp và dừng quá trình
Trang 19Các giá trị thời gian được quy ước theo mỗi IC khác nhau, tuy nhiên có thể sử dụng thời gian theo quy ước như bảng 2.2 dưới đây
Bảng 2 2: các giá trị thời gian quy ước của 1-wire
2.4.2 Giới thiệu IC nhiệt độ, độ ẩm DHT11
Cảm biến nhiệt độ, độ ẩm DHT11 hiện nay rất thông dụng đối với các dự án điện tử, bởi vì có thể tích hợp cả đo nhiệt độ và độ ẩm trên một cảm biến duy nhất Ngoài ra cảm biến còn có giá thành phải chăng và dễ dàng giao tiếp với chuẩn truyền thông 1-wire
Trang 20Hình 2 10: cảm biến nhiệt độ, độ ẩm DHT11
Hình 2.10 là hình ảnh thực tế của cảm biến, cảm biến chỉ sử dụng 3 chân để hoạt động là VCC, DATA, GND nên trên các module DHT11 đã bỏ đi chân NC
Thông số kỹ thuật của DHT11:
- Sử dụng dãy điện áp hoạt động từ 3V – 5,5VDC
- Dòng sử dụng lớn nhất khi truyền dữ liệu: 2.5mA
- Đo tốt nhất ở độ ẩm 20 đến 70% với sai số 5%
- Đo tốt nhất ở nhiệt độ 0 đến 50oC với sai số 2oC
- Tần số lấy mẫu tối đa 1Hz tương ứng với 1 giây lấy mẫu 1 lần
Khi giao tiếp gói tin của DHT11 sử dụng 40bit (5 byte), trong đó:
- Byte 1: giá trị phần nguyên của độ ẩm
- Byte 2: giá trị phần thập phân của độ ẩm
- Byte 3: giá trị phần nguyên của nhiệt độ
- Byte 4: giá trị phần thập phân của nhiệt độ
- Byte 5: byte kiểm tra tổng các giá trị của các byte trước cộng lại (Checksum)
Trang 21Chương 3: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 3.1 Yêu cầu của hệ thống
Thiết kế một hệ thống có thể sử dụng làm đồng hồ số với những chức năng như sau:
- Hiển thị các giá trị của thời gian: thứ, ngày, tháng, năm, giờ, phút, giây
- Cài đặt lại các giá trị thời gian theo nhu cầu của người sử dụng
- Các giá trị thời gian và báo thức được lưu trữ trong bộ nhớ RAM của DS1307 nên không bị mất đi khi mất nguồn
- Hiển thị giá trị nhiệt độ và độ ẩm từ môi trường
- Báo thức nhiều lần trong ngày (tối đa 6 lần) và hiển thị giờ báo thức gần với thời gian trên đồng hồ nhất
- Chỉnh sửa giờ báo thức theo nhu cầu của người sử dụng, các thời gian báo thức được lưu trữ nên không cần phải cài lại mỗi ngày
- Có thể bật/tắt từng báo thức
- Xây dựng trên một giao diện với các menu chức năng
3.2 Phương án thiết kế
Với những yêu cầu về hệ thống, người thực hiện đề ra phương án thiết kế như sau:
- Hệ thống sử dụng vi điều khiển trung tâm là PIC16F887 để giao tiếp với các ngoại
vi cũng như xử lý các thuật toán lập trình
- Các giá trị thời gian được lấy từ IC thời gian thực DS1307 và các giá trị nhiệt độ,
độ ẩm đo từ cảm biến DHT11
- Sử dụng một LCD 20x4 để hiển thị các giá trị, dùng một buzzer để phát báo hiệu khi đến giờ báo thức
- Vẽ mạch nguyên lý, lập trình cho vi điều khiển bằng phần mềm PIC C Compiler
và chạy thử mô phỏng trên phần mềm Proteus 8 Professional
- Sau khi thấy mạch đã chạy ổn định các chức năng tiến hành vẽ mạch in bằng phần mềm Proteus 8 Professional và sau đó làm mạch in thực tế
Trang 223.3 Sơ đồ khối
Hình 3 1: sơ đồ khối mạch đồng hồ số
Hình 3.1 mô tả sơ đồ khối của thiết kế, với chức năng của các khối như sau:
- Khối nguồn ổn áp 5V: cấp nguồn 5V cho hệ thống hoạt động
- Khối xử lý trung tâm: giao tiếp với các khối xung quanh và xử lý dữ liệu từ các khối xung quanh, điều khiển toàn hệ thống
- Khối cảm biến nhiệt độ, độ ẩm: thu thập dữ liệu nhiệt độ, độ ẩm từ môi trường và gửi về khối xử lý trung tâm
- Khối thời gian thực: tính toán thời gian và gửi dữ liệu thời gian về khối xử lý trung tâm, lưu trữ dữ liệu thời gian và báo thức khi bị mất điện
- Khối lựa chọn chức năng: gồm 5 nút nhấn UP, DOWN, LEFT, RIGHT, MENU
để lựa chọn các chức năng của hệ thống như chỉnh giờ, chỉnh phút, chỉnh ngày,…
Trang 23- Khối hiển thị: hiển thị lên màn hình LCD các thông tin về ngày tháng năm, giờ phút giây, nhiệt độ, độ ẩm,…
- Khối báo hiệu: phát tín hiệu khi đúng giờ báo thức
Với chức năng của các khối như trên thì hệ thống hoạt động như sau: khi có nguồn,
hệ thống sẽ khởi động và hiển thị các thông tin sau trên màn hình LCD: giờ phút giây, thứ ngày tháng năm, nhiệt độ, độ ẩm, giờ báo thức và trạng thái báo thức Khi ở giao diện hiển thị thông tin chỉ nhấn được nút MENU Khi nút MENU được nhấn, sẽ vào giao diện chọn chức năng, dùng các phím UP và DOWN để di chuyển con trỏ chọn chức năng Có ba chức năng chính là chỉnh giờ phút giây, chỉnh thứ ngày tháng năm và chỉnh báo thức Sử dụng phím RIGHT để chọn chức năng, khi vào chọn hai chức năng chỉnh giờ phút giây và thứ ngày tháng năm sẽ vào một giao diện bên trong để điều chỉnh thời gian Sử dụng phím LEFT và RIGHT để chọn thời gian mà mình muốn chỉnh, phím UP
và DOWN để tăng giảm thời gian Sau khi chỉnh xong dùng phím MENU để trở về giao diện chính Khi chọn chức năng chỉnh báo thức, sẽ vào giao diện bên trong danh sách các báo thức đã cài đặt Dùng nút UP và DOWN để chọn báo thức mình muốn chỉnh sửa, nhấn phím RIGHT để vào giao diện bên trong với 2 chức năng lựa chọn là chỉnh báo thức và bật/tắt báo thức Ở chức năng chỉnh báo thức dùng hai phím LEFT và RIGHT
để lựa chọn chỉnh phút hoặc giờ, ở chức năng bật/tắt báo thức có thể tắt hoặc bật báo thức tại thời gian đó
3.4 Thiết kế phần cứng
3.4.1 Khối cảm biến nhiệt độ, độ ẩm
Hệ thống sử dụng cảm biến DHT11 giao tiếp với vi điều khiển để đo nhiệt độ và độ
ẩm từ môi trường Cảm biến được sử dụng do có giá thành rẻ, có thể đo cùng lúc cả nhiệt
độ và độ ẩm với độ chính xác tương đối, sử dụng giao tiếp chuẩn 1-wire nên tiết kiệm chân và dễ dàng giao tiếp
Trang 24Hình 3 2: sơ đồ nguyên lý giao tiếp DHT11 với PIC16F887
Hình 3.2 là sơ đồ nguyên lý giao tiếp cảm biến DHT11 và vi điều khiển PIC16F887 Cảm biến giao tiếp với vi điều khiển ở chân RD4 để nhận dữ liệu nhiệt độ và độ ẩm Cảm biến được cấp nguồn bằng nguồn VCC của khối nguồn và ở chân giao tiếp có trở kéo lên giá trị bằng 4.7kΩ
3.4.2 Khối thời gian thực
Hình 3 3: sơ đồ nguyên lý giao tiếp DS1307 với PIC16F887
Trang 25Khối thời gian thực sử dụng IC DS1307 giao tiếp với vi điều khiển có sơ đồ nguyên
lý như hình 3.3 Chân nguồn của IC được cấp trực tiếp từ nguồn VCC của khối nguồn, chân VBAT được cấp nguồn pin 3V để IC luôn hoạt động ngay cả khi mất nguồn VCC, chân X1 và X2 nối với thạch anh 32.768Hz, hai chân giao tiếp với vi điều khiển là SCL
và SDA theo chuẩn truyền thông I2C Vi điều khiển dùng hai chân RC3 làm chân SCL
và chân RC4 làm chân SDA, cả hai đường đều sử dụng điện trở kéo lên có giá trị bằng 4.7kΩ
3.4.3 Khối hiển thị
Khối hiển thị sử dụng một LCD 20x4 giao tiếp trực tiếp với vi điều khiển, có sơ đồ nguyên lý như hình 3.4 bên dưới
Hình 3 4: sơ đồ nguyên lý LCD với PIC16F887
LCD hoạt động ở chế độ 4 bit, 4 đường DATA từ D4-D7 kết nối với chân RD0-RD3 của vi điều khiển Chân RS được nối với RE0 và chân E được nối với RE2, do LCD chỉ hoạt động ở chế độ ghi nên chân RW được nối với GND Nguồn cấp cho LCD hoạt động được lấy từ nguồn VCC của khối nguồn, chân VEE được nối với một biến trở 10k để chỉnh độ tương phản cho LCD
Với yêu cầu của hệ thống, LCD hiển thị các thông tin như sau:
Trang 26- Giờ phút giây: hiển thị giờ, phút bằng số to và giây bằng số nhỏ theo định dang HH:MMss trên hàng 1 và 2
- Thứ ngày tháng năm: hiển thị thứ ngày tháng năm bằng số nhỏ theo định dạng dd/mm/yyyy dd trên hàng thứ 3
- Giờ báo thức: hiển thị giờ báo thức bằng số nhỏ theo dạng ALM hh:mm nếu không có giờ báo thức nào được bật hiển thị ALM OFF Giờ báo thức hiển thị trên hàng thứ 4
- Hiển thị nhiệt độ, độ ẩm: hiển thị nhiệt độ theo dạng ttoC ở cuối hàng thứ 3, hiển thị độ ẩm theo dạng hh% ở cuối hàng thứ 4
- Hiển thị một giao diện MENU theo dạng: hàng 1 là tên giao diện (VD: MENU, GIO PHUT GIAY,…), hàng 2, hàng 3 và hàng 4 là các lựa chọn trong giao diện đó (VD: trong giao diện tên MENU thì ở hàng 2 là CAI DAT NGAY, hàng 3 là CAI DAT GIO, hàng 4 là CAI BAO THUC), có một con trỏ ở đầu hàng 2, 3 và 4 để thể hiện tính năng đang chọn (con trỏ có dang >)
3.4.4 Khối báo hiệu
Khối báo hiệu sử dụng khi phát tín hiệu báo thức, gồm có 1 buzzer và 1 con LED để báo hiệu Sơ đồ nguyên lý khối báo hiệu như hình 3.5 bên dưới
Trang 27Hình 3 5: sơ đồi nguyên lý khối báo hiệu
Trong mạch sử dụng một buzzer và một Led đơn để báo hiệu, chân COI được kết nối với chân RC0 điều khiển buzzer, chân LED kết nối với chân RC1 điều khiển Led đơn Mỗi chân của vi điều khiển cấp mức điện áp 5VDC và dòng điện 25mA, thiết kế sử dụng Led đơn 3mm có cường độ dòng điện định mức là 20mA Chọn điện áp đặt trên Led đơn
là 2V và dòng điện qua Led là 10mA, ta có công thức tính điện trở hạn dòng cho Led như sau:
- Cường độ âm thanh: 60dB
- Cường độ dòng điện: 60mA
Như vậy để buzzer hoạt động ta cần dùng transistor đệm dòng lên 60mA Người thực hiện chọn transistor C1815 là loại transistor npn phổ biến hiện nay có dòng điện Ic đạt
Trang 28lớn nhất 150mA, hệ số khuếch đại 25-100, điện áp cực đại 50V Chọn dòng Ic=60mA
để buzzer hoạt động, hệ số khuếch đại β=100 ta có thể tính giá trị điện trở R1 như sau:
Trang 293.4.5 Khối lựa chọn chức năng
Hình 3 7: sơ đồ nguyên lý khối lựa chọn chức năng
Hình 3.7 là sơ đồ nguyên lý của khối lựa chọn chức năng, khối sử dụng 5 nút nhấn
có tên LEFT, RIGHT, UP, DOWN, MENU được kết nối với các chân vi điều khiển lần lượt là RB0, RB4, RB1, RB3 và RB2 Port B của vi điều khiển được cấu hình ở chế độ điện trở kéo lên nên không cần phải dùng điện trở kéo lên nguồn bên ngoài cho nút nhấn
3.4.6 Khối xử lý trung tâm
Khối xử lý trung tâm sử dụng vi điều khiển PIC16F887, vi điều khiển có ưu điểm bộ nhớ lớn, dễ lập trình với ngôn ngữ C Sơ đồ nguyên lý khối xử lý trung tâm như hình 3.8 bên dưới
Trang 30Hình 3 8: sơ đồ nguyên lý khối xử lý trung tâm
Vi điều khiển sử dụng bộ dao động thạch anh bên ngoài 20Mhz, chân RE3 là chân cấp nguồn và RESET tích cực ở mức thấp được gắn một nút nhấn dùng để RESET lại mạch Khối cảm biến nhiệt độ, độ ẩm giao tiếp với vi điều khiển qua chân RD4, khối thời gian thực giao tiếp qua chân RC3 và RC4, khối hiển thị giao tiếp qua các chân RE0, RE2, RD0-RD7 và khối báo hiệu giao tiếp qua chân RC0, RC1 2 chân PGC và PGD có chức năng nạp code cho vi điều khiển
3.4.7 Khối nguồn
Hệ thống sử dụng hai nguồn cung cấp chính là 5V và 3V, nguồn 3V chỉ sử dụng làm nguồn nuôi cho IC DS1307 nên có thể sử dụng pin 3V để làm nguồn nuôi Nên khối nguồn chỉ cần cấp nguồn 5V cho các khối: khối xử lý trung tâm, khối thờ cảm biến nhiệt
độ, độ ẩm, khối thời gian thực, khối hiển thị, khối báo hiệu
Bảng 3.1 bên dưới thể hiện dòng tiêu thụ của các linh kiện trong mạch
STT Tên linh kiện Số lượng Dòng tiêu thụ
Trang 313 DS1307 1 1.5mA
Bảng 3 1: dòng tiêu thụ của các linh kiện
Từ bảng 3.1 ta có thể thấy tổng dòng điện tiêu thụ khoảng 73mA, để đảm bảo các linh kiện hoạt động ổn định và dễ dàng tìm nguồn trên thị trường thì người thực hiện chọn nguồn dòng 1A Sơ đồ khối mạch nguồn như hình 3.2 bên dưới
Hình 3 9: sơ đồ khối mạch nguồn ổn áp
Theo hình 3.9 ta có sơ đồ khối một bộ nguồn DC gồm các khối như sau:
- Khối biến áp: từ mạng lưới điện 220V/50Hz được hạ áp xuống mức điện áp thích hợp để chuyển đổi thành điện áp DC ở ngõ ra
- Khối chỉnh lưu: biến đổi từ dòng điện xoay chiều (AC) thành một chiều (DC)
- Mạch lọc: làm giảm độ gợn sóng của điện áp DC
- Mạch ổn áp: ổn định điện áp ở ngõ ra khi có sự thay đổi điện áp ngõ vào, giúp bảo vệ nguồn và tải
Từ sơ đồ khối hình 3.9, ta có thể vẽ sơ đồ nguyên lý của một mạch ổn áp 5V như hình 3.10 bên dưới
Trang 32Hình 3 10: sơ đồ nguyên lý mạch nguồn ổn áp
Từ mạng lưới điện 220V/50Hz qua máy biến áp còn lại 12VAC, điện áp này đi qua cầu Didode chỉnh lưu thành điện áp một chiều Các tụ C1 và C2 có tác dụng lọc các gợn sóng, sau đó dùng IC ổn áp LM7805 ổn định điện áp ở 5VDC Các tụ C3 và C4 có tác dụng ổn định nguồn
Sau khi đi qua tụ C1, ta có thể tính độ gợn sóng điện áp như sau:
Từ công thức trên, có thể thấy với một giá trị điện trở tải cố định, khi tăng giá trị tụ C1 thì độ gợn sóng sẽ giảm Giả sử tải được mắc với một điện trở 10kΩ, giá trị r% chọn 0.03%, tụ C1 được tính như sau:
𝐶1 = 100%
4√3∗50∗10∗1000∗0.03 = 962.3𝜇𝐹 (3.2) Chọn tụ C1 = 1000µF 50V, điện áp DC sau khi qua tụ được tính như sau:
Sau khi thêm các giá trị ta có sơ đồ nguyên lý hoàn chỉnh như hình 3.11
Hình 3 11: sơ đồ nguyên lý hoàn chỉnh mạch nguồn ổn áp
Trang 333.4.7 Sơ đồ nguyên lý toàn hệ thống
Sau khi có sơ đồ nguyên lý của các khối chức năng, ta có thể tổng hợp thành sơ đồ nguyên lý hoàn chỉnh của hệ thống như hình 3.12 bên dưới
Hình 3 12: sơ đồ nguyên lý mạch đồng hồ số
3.5 Lưu đồ giải thuật
3.5.1 Giải thuật chương trình chính
Trang 34Hình 3 13: lưu đồ chương trình chính
Trang 35Hình 3.13 là lưu đồ giải thuật chương trình chính của hệ thống, đầu tiên khởi tạo các Port, khởi tạo LCD và ghi dữ liệu vào DS1307 Việc ghi dữ liệu vào DS chỉ một lần và sau đó việc ghi được triển khai khi chỉnh các giá trị thời gian Tiếp theo tiến hành đọc các dữ liệu từ DS1307 và cảm biến nhiệt độ, độ ẩm DHT11, sau đó gọi hàm kiểm tra nút nhấn menu Khi menu chính được hiển thị thì các nút nhấn khác không được sử dụng
ngoại trừ nút nhấn menu, điều này được điều khiển bằng biến ht Biến tt_chinh được sử
dụng với giá trị 1 khi chỉnh thứ ngày tháng năm, với giá trị 2 khi chỉnh giờ phút giây Khi chỉnh các giá trị này phải được hiển thị liên tục để cập nhật thời gian từ DS1307 Để thiết lập báo thức, đầu tiên cần so sánh các giá trị để tìm được thời gian có giá trị gần với
thời gian hiện tại nhất, điều này được thực hiện trong chương trình con ss_bthuc() Khi
thời gian báo thức bằng với thời gian hiện tại thì sẽ báo hiệu giờ báo thức bằng chương
trình con bao_thuc() và cuối cùng thời gian báo thức được cập nhật liên tục lên DS1307
Các chương trình hiển thị chức năng trên LCD theo các mode như bảng 3.2 bên dưới
Trang 36Bảng 3 2: các giao diện sử dụng trong mạch đồng hồ số
3.5.2 Chương trình con nut_menu()
Trang 37Hình 3 14: lưu đồ chương trình nut_menu()
Trang 38Hình 3.14 là chương trình con của nút nhấn menu có chống dội Khi có tín hiệu nút nhấn và sau khi chống dội, xóa màn hình lcd và reset các biến trạng thái về trạng thái
khởi tạo Khi đảo trạng thái của biến ht thì sẽ luân phiên thay đổi trạng thái hiển thị giữa
menu chính và menu chức năng
Trang 393.5.3 Chương trình con nut_up() và nut_dw()
Hình 3 15: lưu đồ chương trình nut_up() và nut_dw()
Trang 40Hình 3.15 là lưu đồ giải thuật của hai chương trình con nut_up() và nut_dw() Hai
chương trình này tương tự nhau đều giúp cập nhật biến sel, vt và tăng giảm các giá trị thời gian Biến sel là biến lựa chọn vị trí con trỏ trên lcd và cũng là lựa chọn chức năng muốn sử dụng Biến vt có chức năng xác định vị trí của báo thức trong menu danh sách
báo thức Giá trị con trỏ hàm là giá trị của địa chỉ mà con trỏ đang trỏ tới cũng chính là gọi chương trình hiển thị, việc này giúp đơn giản chương trình hơn Trong lưu đồ có hai chương trình con là chinh_tang() và chỉnh_giam() được cụ thể trong lưu đồ bên dưới
Hình 3 16: lưu đồ chương trình chinh_tang()
Lưu đồ chương trình con chinh_tang() như hình 3.16, trong chương trình sử dụng biến giatri_mod để chọn thời gian muốn tăng lên, có 9 giá trị tương ứng với 9 giá trị thời
gian Sau khi tăng các giá trị thời gian, các giá trị sẽ được cập nhật lên bộ nhớ của DS1307