2.3.1. Giới thiệu
Đầu năm 1980 Phillips Semiconductor đã phát triển một chuẩn giao tiếp nối tiếp 2 dây được gọi là I2C. I2C là tên viết tắt của cụm từ Inter- Intergrated Circuit. Đây là đường Bus giao tiếp giữa các IC với nhau. I2C mặc dù được phát triển bởi Phillips, nhưng nó đã được rất nhiều nhà sản xuất IC trên thế giới sử dụng. I2C trở thành một chuẩn công nghệ cho các giao tiếp điều khiển, có thể kể ra đây một vài tên tuổi ngoài Phillips như: Texas Intrument (TI), MaximDallas, Analog Device, National Semiconductor... Bus I2C được sử dụng là bus giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại vi điều khiển 8051, PIC, AVR, ARM…chip nhớ như: RAM tĩnh (Static Ram), EEPROM, bộ chuyển đổi tương tự số (ADC)…
2.3.2. Đặc điểm giao tiếp I2C
Sau đây là một số đặc điểm quan trọng của giao thức giao tiếp I2C:
- Chỉ cần có hai đường bus (dây) chung để điều khiển bất kỳ thiết bị / IC nào trên mạng I2C
- Không cần thỏa thuận trước về tốc độ truyền dữ liệu như trong giao tiếp UART. Vì vậy, tốc độ truyền dữ liệu có thể được điều chỉnh bất cứ khi nào cần thiết
- Cơ chế đơn giản để xác thực dữ liệu được truyền
- Sử dụng hệ thống địa chỉ 7 bit để xác định một thiết bị / IC cụ thể trên bus I2C
- Các mạng I2C dễ dàng mở rộng. Các thiết bị mới có thể được kết nối
đơn giản với hai đường bus chung
Hình 2. 14. Kết nối thiết bị vào bus I2C ở chế độ chuẩn [11]
Cả hai đường bus I2C (SDA, SCL) đều hoạt động như các bộ lái cực máng hở (open drain). Nó có nghĩa là bất kỳ thiết bị / IC trên mạng I2C có thể lái SDA và SCL xuống mức thấp, nhưng không thể lái chúng lên mức cao. Vì vậy, một điện trở kéo lên (khoảng 1 kΩ đến 4,7 kΩ) được sử dụng cho mỗi đường bus, để giữ cho chúng ở mức cao (ở điện áp dương) theo mặc định.
Lý do sử dụng một hệ thống cực máng hở (open drain) là để không xảy ra hiện tượng ngắn mạch, điều này có thể xảy ra khi một thiết bị cố gắng kéo đường dây lên cao và một số thiết bị khác cố gắng kéo đường dây xuống thấp. Như hình về ta thấy có thể có rất phiều thiết bị (ICs) cùng được kết nối vào một bus I2C, tuy nhiên sẽ không xảy ra chuyện nhầm lẫn giữa các thiết bị bởi môi thiết bị sẽ được nhận ra bởi một địa chỉ duy nhất với một quan hệ chủ tớ (Master/Slave) tồn tại trong thời gian kết nối. Mỗi thiết bị có thể hoạt động
như là thiết bị nhận hoặc truyền dữ liệu hay có thể vừa truyền vừa nhận. Hoạt động truyền hay nhận còn phụ thuộc vào việc thiết bị đó là chủ hay tớ.
Một thiết bị hay một IC khi kết nối với bus I2C ngoài một địa chỉ (duy nhất) để phân biệt nó còn được cấu hình là thiết bị chủ hay tớ. Sở dĩ có sự phân biệt này là bởi vì trên một bus I2C thì quyền điều khiển thuộc về thiết bị chủ. Thiết bị chủ nắm vai trò tạo xung đồng hồ cho toàn hệ thống, khi giữa 2 thiết bị chủ - tớ giao tiếp thì thiết bị chủ giữ vai trò chủ động, còn thiết bị tớ giữ vai trò bị động trong việc giao tiếp.
2.3.3. Chế độ hoạt động (tốc độ truyền)
Các bus I2C có thể hoạt động ở ba chế độ, hay nói cách khác các dữ liệu trên bus I2C có thể được truyền trong ba chế độ khác nhau.
- Chế độ tiêu chuẩn (Standard mode)
-Chế độ nhanh (Fast mode) - Chế độ cao tốc High-Speed (HS) mode • Chế độ tiêu chuẩn:
- Chế độ tiểu chuẩn ban đầu được phát hành vào đầu những năm 80. Nó có tốc độ dữ liệu tối đa là 100kbps.
- Nó sử dụng 7 bit địa chỉ và 112 bit địa chỉ tớ. • Chế độ tăng cường hoặc chế độ nhanh:
- Tốc độ dữ liệu tối đa được tăng lên đến 400 kbps.
- Để ngăn chặn gai tiếng ổn, ngõ vào của thiết bị Fast mode là Schmitt - triggered.
- Chân SCL và SDA của một thiết bị tớ I2C ở trạng thái trở kháng cao khi không cấp nguồn.
• Chế độ cao tốc:
- Chế độ này được tạo ra chủ yếu để tăng tốc độ dữ liệu lên đèn 36 lần so với chế độ tiêu chuẩn.
- Nó cung cấp 1.7Mbps (với Cb = 400pF) và 3.4Mbps (Cb= 100pF). Một bus I2C có thể hoạt động ở nhiều chế độ khác nhau:
- Một chủ nhiểu tớ (one master- multi slave). - Nhiều chủ nhiều tớ (multi master - multi slave)
Dù ở chế độ nào, một giao tiếp I2C đều dựa vào quan hệ chủ/tớ. Giả thiết thiết bị A muốn gửi dữ liệu đến thiết bị B, quá trình được thực hiện như sau: - Thiết bị A (chủ) xác định đúng địa chỉ của thiết bị B (tớ), cùng với việc xác định địa chỉ, thiết bị A sẽ quyết định việc đọc hay ghi vào thiết bị tớ. Thiết bị A gửi dữ liệu đến thiết bị B.
- Thiết bị A kết thúc quá trình truyển dữ liệu. Khi A muốn nhận dữ liệu từ B, quá trình diễn ra như trên, chỉ khác là A sẽ nhận dữ liệu từ B. Trong giao tiếp này, A là chủ còn B là tớ. Chi tiết việc thiết lập một giao tiếp giữa 2 thiết bị sẽ được mô tả trong các mục dưới đây.
• Trình tự truyền bit trên đường truyền:
Hình 2. 15. Trình tự truyền bit trên đường truyền [11]
- Thiết bị chủ tạo ra một điều kiện Start. Điều kiện này thông báo cho tất cả các thiết bị tớ lắng nghe dữ liệu trên đường truyền.
- Thiết bị chủ gửi địa chỉ của thiết bị tở mà thiết bị chủ muốn giao tiếp và cờ đọc / ghi dữ liệu (nếu có thiết lập lên 1 byte tiếp theo được | truyền từ thiết bị tử đến thiết bị chủ, nếu có thiết lập xuống 0 thì byte tiếp theo truyền từ thiết bị chủ đến thiết bị tớ).
- Khi thiết bị tớ trên bus I2C có địa chỉ đúng với địa chỉ mà thiết chủ gửi sẽ phản hồi lại bằng một xung ACK.
- Giao tiếp giữa thiết bị chủ và tớ trên bus dữ liệu bắt đầu. Cả chủ và thể nhận hoặc truyền dữ liệu tùy chọn vào việc truyền thông là đọc hay ghi. Bộ truyền gửi 8 bit dữ liệu tới bộ nhận, bộ nhận trả lời với một bit ACK.
- Để kết thúc quá trình giao tiếp, thiết bị chủ tạo ra một điều kiện Stop.
2.3.4. Tín hiệu START và STOP.
Hình 2. 16. Tín hiệu Start và Stop [11]
START và STOP là những điều kiện bắt buộc phải có khi một thiết bị chủ muốn thiết lập giao tiếp với một thiết bị nào đó trên bus I2C. START là điều kiện khởi đầu, báo hiệu bắt đầu của giao tiếp, còn STOP báo hiệu kết thúc một giao tiếp. Hình dưới đây mô tả điều kiện START và STOP.
Ban đầu khi chưa thực hiện quá trình giao tiếp, cả hai đường SDA và SCL đều ở mức cao (SDA = SCL = HIGH). Lúc này bus I2C được coi là rỗi (“bus free”), sẵn sàng cho một giao tiếp. Hai điều kiện START và STOP là không thể thiếu trong việc giao tiếp giữa các thiết bị I2C với nhau.
Tín hiệu START: một sự chuyển đổi trạng thái từ cao xuống thấp trên đường SDA trong khi đường SCL đang ở mức cao (cao = 1, thấp = 0) báo hiệu một tín hiệu START.
Tín hiệu STOP: một sự chuyển đổi trạng thái từ mức thấp lên cao trên đường SDA trong khi đường SCL đang ở mức cao. Cả hai tín hiệu START và STOP đều được tạo ra bởi thiết bị chủ. Sau tín hiệu START, bus I2C coi như đang trong trạng thái làm việc (“busy”). Bus I2C sẽ rỗi, sẵn sàng cho một giao tiếp mới sau khi nhận tín hiệu STOP từ phía thiết bị chủ.
Sau khi có một tín hiệu START, trong quá trình giao tiếp, khi có một tin hiệu START lặp lại thay vì một tín hiệu STOP thì bus I2C vẫn tiếp tục trong trạng thái bận. Tín hiệu START và lặp lại START (Repeated START) đều có chức năng giống nhau là khởi tạo một giao tiếp.
Truyền dữ liệu: Mỗi xung clock có một bit dữ liệu được truyền. Mức tín hiệu SDA chỉ được thay đổi khi xung clock đang ở mức thấp và ổn định khi xung clock ở mức cao. Thiết bị tớ có thể lấy mẫu dữ liệu khi xung clock ở mức cao.
2.4. Lưu đồ thuật toán
Hình 2. 17. Lưu đồ thuật toán
Khi hệ thống bắt đầu hoạt động, nút Set_BT ở trạng thái nhả. Khi nút Set_BT được nhấn (SET_BT=0), hệ thống sẽ hoạt động theo chương trình cài đặt thời gian. Ngược lại nút Set_BT không được nhấn, hệ thống sẽ hoạt động theo chương trình chính. Hệ thống cập nhật giá trị ngày, giá trị giờ, giá trị nhiệt độ, độ ẩm từ cảm biến DHT11, nếu giá trị thời gian bằng với giá trị thời gian cài đặt sẽ kiểm tra tiếp giá trị nhiệt độ, độ ẩm. Ngược lại, giá trị thời gian khác với giá trị thời gian cài đặt sẽ quay lại kiểm tra giá trị ngày. Nếu giá trị
nhiệt độ, độ ẩm không đạt sẽ thực hiện bơm trong thời gian t phút (t phút sẽ được cài đặt). Nếu giá trị nhiệt độ, độ ẩm đạt sẽ quay lại vòng lặp lấy giá trị giờ, phút, nhiệt độ, độ ẩm.
2.5. Kết luận chương 2
Dựa trên những lí thuyết căn bản về thiết kế mạch ta tiến hành xây dựng sơ đồ khối của hệ thống. Từ sơ đồ khối đó, ta tiến hành phân tích hoạt động và chức năng của từng khối. Bên cạnh đó chúng ta cũng cần tìm hiểu thêm về các giao thức truyền dữ liệu của vi điều khiển PIC 18F4520 với các thiết bị ngoại vi như: Giao thức I2C, RS232… để phục vụ cho việc viết chương trình cho mạch điện ở chương tiếp theo.
CHƯƠNG 3
MÔ HÌNH THỰC NGHIỆM VÀ KẾT QUẢ 3.1. Mô hình thực nghiệm
3.1.1. Sơ đồ nguyên lí
Hình 3. 1. Sơ đồ nguyên lí
Sơ đồ nguyên lí gồm 7 khối: Khối nguồn, khối thời gian thực, khối nút nhấn, khối vi điều khiển, khối cảm biến, khối LCD, khối thiết bị (máy bơm). Khi mạch được cấp điện áp 12VDC, khối cảm biến và khối thời gian thực sẽ lấy các giá trị nhiệt độ, độ ẩm và thời gian đưa về khối vi điều khiển để xử lí. Sau khi nhận dữ liệu từ các khối hỗ trợ, vi điều khiển tiến hành so sánh các giá trị thời gian, nhiệt độ, độ ẩm với các giá trị tương ứng được nhập từ 4 nút nhấn ở khối Button. Sau khi kiểm tra và tính toán các giá trị trên, nếu thỏa mã điều kiện cài đặt, vi điều khiển sẽ phát tín hiệu cho khối thiết bị (ở đây là máy bơm), khi máy bơm nhận được tín hiệu của vi điều khiển sẽ thực hiện bơm nước tự động trong khoảng thời gian cài đặt tại khối nút nhấn. Tất cả các giá trị thời gian, nhiệt độ, độ ẩm và các bước cài đặt cho hệ thống sẽ được hiển thị trên LCD 16x2.
3.1.2. Sơ đồ mạch in và mạch thực tế
3.1.2.1. Sơ đồ mạch in
Mạch PCB được vẽ trên phần mềm Altium 17.0.11, đây là phần mềm khá mạnh về thiết kế mạch hiện nay và được rất nhiều công ty sử dụng.
Altium Designer cung cấp một ứng dụng kết hợp tất cả công nghệ và chức năng cần thiết cho việc phát triển sản phẩm điện tử hoàn chỉnh, như thiết kế hệ thống ở mức bo mạch và FPGA, phát triển phần mềm nhúng cho FPGA và các bộ xử lý rời rạc, bố trí mạch in (PCB)… Altium Designer thống nhất toàn bộ các quá trình lại và cho phép bạn quản lý được mọi mặt quá trình phát triển hệ thống trong môi trường tích hợp duy nhất. Khả năng đó kết hợp với khả năng quản lý dữ liệu thiết kế hiện đại cho phép người sử dụng Altium Designer tạo ra nhiều hơn những sản phẩm điện tử thông minh, với chi phí sản phẩm thấp hơn và thời gian phát triển ngắn hơn. Thực ra điều này khiến Altium khá nặng nề, nhiều chức năng người dùng không dùng đến.
Hình 3. 2. Mạch in 2D
Hình 3. 3. Mạch khi được khởi tạo
Mạch điện khi được nạp chương trình sẽ hiển thị thời gian thực tế, thời gian kiểm tra nhiệt độ, độ ẩm và thời gian duy trì hoạt động của thiết bị (máy bơm).
Hình 3. 4. Cài đặt thời gian
Khi thời gian của mạch chưa được cập nhật so với thực tế, ta tiến hành cài đặt thời gian thông qua nút Set_BT.
Hình 3. 5. Cài đặt nhiệt độ, độ ẩm
Cài đặt nhiệt độ và độ ẩm để cảm biến DHT11 khi nhận giá trị nhiệt độ, độ ẩm thực tế sẽ gửi tín hiệu cho vi điều khiển. Sau khi tiếp nhận tín hiệu vi điều khiển sẽ so sánh với nhiệt độ, độ ẩm cài đặt. Nếu nhiệt độ, độ ẩm thỏa mãn với điều kiện ban đầu máy bơm sẽ hoạt động.
3.2. Đánh giá và kết luận 3.2.1. Kết quả đạt được
Về phần cứng:
- Tìm hiểu được về vi điều khiển PIC, để có thể tạo thành một mạch điện hoàn chỉnh vi điều khiển cần được ghép thêm với các thiết bị ngoại vi bên ngoài như bộ nhớ và các thiết bị khác. Trong đề tài này các thiết bị
- Có thêm nhiều kiến thức về các linh kiện như: điện trở, tụ điện…cũng như cách thiết kế mạch trên phần mềm Altium Designer và làm mạch thủ công.
Về phần mềm:
- Thiết kế mạch điện trên cơ sở lí thuyết của chương 2 và mô phỏng được mạch điện thông qua phần mềm Proteus. 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 vi điều khiển 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ử.
- Viết chương trình cho hệ thống dựa trên phần mềm CCS. Đây là trình biên dịch bằng ngôn ngữ C cho dòng vi điều khiển PIC đang được sử dụng phổ biến hiện nay hơn một số trình biên dịch khác vì nó là sự tích hợp của 3 trình biên dịch riêng biệt cho 3 dòng PIC khác nhau: PCB cho dòng PIC 12- bit opcodes, PCM cho dòng PIC 14-bit opcodes, PCH cho dòng PIC 16 và 18- bit. Tất cả 3 trình biên dich này đuợc tích hợp lại vào trong một chương trình bao gồm cả trình soạn thảo và biên dịch là CCS, phiên bản mới nhất là PCWH Compiler Ver 3.227. Giống như nhiều trình biên dich C khác cho PIC, CCS giúp cho người sử dụng nắm bắt nhanh được vi điều khiển PIC và sử dụng PIC trong các dự án. Các chương trình điều khiển sẽ được thực hiện nhanh chóng và đạt hiệu quả cao thông qua việc sử dụng ngôn ngữ lạp trình cấp cao – Ngôn ngữ C Tài liệu hướng dẫn sử dụng có rất nhiều, nhưng chi tiết nhất chính là bản Help đi kèm theo phần mềm (tài liệu Tiếng Anh). Trong bản trợ giúp nhà sản xuất đã mô tả rất nhiều về hằng, biến, chỉ thị tiền xủa lý, cấu trúc các câu lệnh trong chương trình, các hàm tạo sẵn cho người sử dụng…
Bên cạnh đó, đi sâu vào tìm hiểu giao thức I2C- là chuẩn giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như: PIC, AVR, ARM…
Thiết kế được hệ thống đơn giản và đã chạy thực nghiệm trong thực tế.
3.2.2. Kết luận chương 3
Đề tài có tính ứng dụng khá nhiều trong cuộc sống:
- Tiết kiệm nước: Với việc sử dụng cảm biến đo nhiệt độ và độ ẩm.
Người sử dụng có thể thiết lập được thời gian máy bơm hoạt động để tưới nước trong một khoảng thời gian hợp lí.
nhiều sự tác động của con người. hoàn toàn có thể tự vận hành. Với các hệ thống có khả năng “cảm nhận” nhiệt độ hoặc độ ẩm thì nó hoàn toàn có khả năng đáp ứng đúng lúc và kịp thời nhu cầu của cây trồng dù trời mưa hay nắng.
- Thêm nữa, hệ thống này giúp giảm thiểu tối đa nhân công và số lượng