Professional Documents
Culture Documents
BTL Tuan
BTL Tuan
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.
Các thiết bị kết nối với bus I2C được phân loại hoặc là thiết bị Chủ (Master) hoặc
là thiết bị Tớ (Slave). Ở bất cứ thời điểm nào thì chỉ có duy nhất một thiết bị Master ở
trang thái hoạt động trên bus I2C. Nó điều khiển đường tín hiệu đồng hồ SCL và quyết
định hoạt động nào sẽ được thực hiện trên đường dữ liệu SDA.
Tất cả các thiết bị đáp ứng các hướng dẫn từ thiết bị Master này đều là Slave. Để
phân biệt giữa nhiều thiết bị Slave được kết nối với cùng một bus I2C, mỗi thiết bị Slave
được gán một địa chỉ vật lý 7-bit cố định.
Khi một thiết bị Master muốn truyền dữ liệu đến hoặc nhận dữ liệu từ một thiết bị
Slave, nó xác định địa chỉ thiết bị Slave cụ thể này trên đường SDA và sau đó tiến hành
truyền dữ liệu. Vì vậy, giao tiếp có hiệu quả diễn ra giữa thiết bị Master và một thiết bị
Slave cụ thể.
Tất cả các thiết bị Slave khác không phản hồi trừ khi địa chỉ của chúng được chỉ
định bởi thiết bị Master trên dòng SDA.
Khối bit địa chỉ: Thông thường quá trình truyền nhận sẽ diễn ra với rất nhiều thiết
bị, IC với nhau. Do đó để phân biệt các thiết bị này, chúng sẽ được gắn 1 địa chỉ vật lý 7
bit cố định.
Bit Read/Write: Bit này dùng để xác định quá trình là truyền hay nhận dữ liệu từ
thiết bị Master. Nếu Master gửi dữ liệu đi thì ứng với bit này bằng ‘0’, và ngược lại, nhận
dữ liệu khi bit này bằng ‘1’.
Bit ACK/NACK: Viết tắt của Acknowledged / Not Acknowledged. Dùng để so
sánh bit địa chỉ vật lý của thiết bị so với địa chỉ được gửi tới. Nếu trùng thì Slave sẽ được
đặt bằng ‘0’ và ngược lại, nếu không thì mặc định bằng ‘1’.
Khối bit dữ liệu: Gồm 8 bit và được thiết lập bởi thiết bị gửi truyền đến thiết bị
nhân. Sau khi các bit này được gửi đi, lập tức 1 bit ACK/NACK được gửi ngay theo sau
để xác nhận rằng thiết bị nhận đã nhận được dữ liệu thành công hay chưa. Nếu nhận
thành công thì bit ACK/NACK được set bằng ‘0’ và ngược lại.
Quá trình truyền nhận dữ liệu:
Bắt đầu: Thiết bị Master sẽ gửi đi 1 xung Start bằng cách kéo lần lượt các đường
SDA, SCL từ mức 1 xuống 0.
Tiếp theo đó, Master gửi đi 7 bit địa chỉ tới Slave muốn giao tiếp cùng với bit
Read/Write.
Slave sẽ so sánh địa chỉ vật lý với địa chỉ vừa được gửi tới. Nếu trùng khớp, Slave
sẽ xác nhận bằng cách kéo đường SDA xuống 0 và set bit ACK/NACK bằng ‘0’. Nếu
không trùng khớp thì SDA và bit ACK/NACK đều mặc định bằng ‘1’.
Thiết bị Master sẽ gửi hoặc nhận khung bit dữ liệu. Nếu Master gửi đến Slave thì
bit Read/Write ở mức 0. Ngược lại nếu nhận thì bit này ở mức 1.
Nếu như khung dữ liệu đã được truyền đi thành công, bit ACK/NACK được set
thành mức 0 để báo hiệu cho Master tiếp tục.
Sau khi tất cả dữ liệu đã được gửi đến Slave thành công, Master sẽ phát 1 tín hiệu
Stop để báo cho các Slave biết quá trình truyền đã kết thúc bằng các chuyển lần lượt
SCL, SDA từ mức 0 lên mức 1.
2.2. Giao tiếp 1 Wire
2.2.1. Giới thiệu
OneWire là hệ thống bus giao tiếp được thiết kế bởi Dallas Semiconductor Corp.
Giống như tên gọi, hệ thống bus này chỉ sử dụng 1 dây để truyền nhận dữ liệu.
Chính vì chỉ sử dụng 1 dây nên giao tiếp này có tốc độ truyền thấp nhưng dữ liệu
lại truyền được khoảng cách xa hơn.
OneWire chủ yếu sử dụng để giao tiếp với các thiết bị nhỏ, thu thập và truyền
nhận dữ liệu thời tiết, nhiệt độ, … các công việc không yêu cầu tốc độ cao.
Giống như các chuẩn giao tiếp khác, 1-Wire cho phép truyền nhận dữ liệu với
nhiều Slave trên đường truyền. Tuy nhiên chỉ có thể có 1 Master (điểm này giống với
SPI).
Khối nguồn:
5V: cấp điện áp 5V đầu ra, dùng để cấp nguồn cho các linh kiện điện tử kết nối với
Arduino
3.3V: chức năng tương tự như cấp nguồn 5v nhưng đây là cấp điện áp 3.3V đầu ra.
Ground: hay còn gọi là chân GND, là cực âm của nguồn điện cấp cho Arduino
UNO. Khi bạn dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những
chân này phải được nối với nhau.
Vin (Voltage Input): tương tự như chân 5V, nhưng thêm chức năng cấp nguồn
ngoài cho Arduino UNO thay vì cắm USB, bạn nối cực dương của nguồn với chân
này và cực âm của nguồn với chân GND.
Các cổng vào ra (I/O) - Pin
Arduino cung cấp nhiều các chân I/O ( hay còn gọi là Pin ) để ta giao tiếp hay gửi
lệnh điều khiển các thiết bị, dưới đây là sẽ nói về các chân sử dụng nhiều nhất và phân
chúng làm các loại như sau:
Các chân Digital
- Phiên bản Arduino UNO R3 được sở hữu 14 chân digital từ 0 đến 13 dùng để đọc
hoặc xuất tín hiệu. Chúng chỉ có 2 mức điện áp có thể điều khiển là 0V và 5V với
dòng vào/ra tối đa trên mỗi chân là 40mA. Ngoài ra một số chân digital có chức
năng đặc biệt là chân PWM.
Chân PWM:
- Là các chân có dấu ‘~’ đằng trước, các chân này cho phép bạn xuất ra xung PWM
với độ phân giải 8bit (giá trị từ 0 đến 255) tương ứng với mức giao động điện áp
của chân từ 0V đến 5V, khác với các chân không phải PWM, chỉ có thể chọn giá
trị 0V hoặc 5V.
Các chân Analog
- Arduino UNO có 6 chân analog (A0 đến A5) cung cấp độ phân giải tín hiệu 10bit
(0 đến 1023) để đọc giá trị điện áp trong khoảng 0V đến 5V.
- Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp
I2C/TWI với các thiết bị khác.
Chân TXD và RXD
- Đây là các chân Serial dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu
TTL Serial. Arduino Uno có thể giao tiếp dữ liệu với các thiết bị cần sử dụng
thông qua 2 chân này, ngoài ra có thể sử dụng 2 chân này để nạp code cho mạch
mà không cần thông qua USB của mạch.
3.2. DS1307 Module
3.2.1. Sơ đồ nguyên lí
3.2.2. IC DS1307
Đặc điểm:
Hiệu điện thế cần cung cấp: 5V
Thạch anh: tần số 32kHz
IC thời gian thực/ lịch được mã hoá BCD đầy đủ với độ chính xác rất cao.
Sơ đồ chân:
3.3. DHT 11
Cảm biến độ ẩm nhiệt độ DHT11 ra chân được tích hợp sẵn điện trở 5,1k giúp người
dùng dễ dàng kết nối và sử dụng hơn so với cảm biến DHT11 chưa ra chân, module lấy
dữ liệu thông qua giao tiếp 1 wire (giao tiếp 1 dây)
Thông tin kỹ thuật:
Nguồn: 3 -> 5 VDC.
Dòng sử dụng: 2.5mA max (khi truyền dữ liệu).
Đo tốt ở độ ẩm 20 to 70%RH với sai số 5%.
Đo tốt ở nhiệt độ 0 to 50°C sai số ±2°C.
Tần số lấy mẫu tối đa 1Hz (1 giây 1 lần)
3.4. LCD 1602
LCD là gì?
LCD là một loại vật chất phản xạ ánh sáng khi điện thế thay đổi. Nó hoạt động dựa
trên nguyên tắc ánh sáng nền (Back Light). Nó bao gồm một lớp chất lỏng nằm giữa 2
lớp kính phân cực ánh sáng. Bình thường, khi không có điện áp, các tinh thể này được
xếp thẳng hàng giữa hai lớp cho phép ánh sáng truyền qua theo hình xoắn ốc. Hai bộ lọc
phân cực, 2 bộ lọc màu và 2 bộ cân chỉnh sẽ xác định cường độ ánh sáng đi qua và màu
nào được tạo ra trên một pixel.
Khi có điện áp cấp vào, lớp canh chỉnh sẽ tạo một vùng điện tích, canh chỉnh lại
các tinh thể lỏng đó. Nó không cho phép ánh sáng đi qua để hiện thị lên hình ảnh tại vị trí
điểm ảnh đó. Các điểm ảnh trong màn hình LCD là một transistor cực nhỏ ở một trong 2
chế độ: cho phép ánh sáng đi qua hoặc không.
Điểm ảnh bao gồm 3 yếu tố màu: đỏ, xanh lá, xanh dương. Các màn hình LCD
trước đây thường tiêu thụ điện năng nhiều, độ tương phản thấp cho đến khi các nhà khoa
học người Anh tìm ra “Biphenyl” – vật liệu chính của tinh thể lỏng, thì LCD mới thực sự
phổ biến. LCD xuất hiện đầu tiên trong các máy tính cầm tay, trò chơi điện tử cầm tay,
đồng hồ điện tử, …
LCD1602 overview
- Điện áp hoạt động là 5 V.
- Kích thước: 80 x 36 x 12.5 mm
- Chữ đen, nền xanh lá
- Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với
Breadboard.
- Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết nối, đi dây
điện.
- Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ sáng để sử dụng ít
điện năng hơn.
- Có thể được điều khiển với 6 dây tín hiệu
Sơ đồ chân – Pin Out
- VSS: tương đương với GND – cực âm
- VDD: tương đương với VCC – cực dương (5V)
- Constrast Voltage (Vo): điều khiển độ sáng màn hình
- Register Select (RS): điều khiển địa chỉ nào sẽ được ghi dữ liệu
- Read/Write (RW): Bạn sẽ đọc (read mode) hay ghi (write mode) dữ liệu? Nó sẽ
phụ thuộc vào bạn gửi giá trị gì vào.
- Enable pin: Cho phép ghi vào LCD
- D0 – D7: 8 chân dư liệu, mỗi chân sẽ có giá trị HIGH hoặc LOW nếu bạn đang ở
chế độ đọc (read mode) và nó sẽ nhận giá trị HIGH hoặc LOW nếu đang ở chế độ
ghi (write mode)
- Backlight (Backlight Anode (+) và Backlight Cathode (-)): Tắt bật đèn màn hình
LCD.
Cách điều khiển LCD1602
Cấu tạo và cách hoạt động của LCD1602
Màn hình LCD1602 cấu tạo từ 3 phần:
- Chip driver: Điều khiển LCD, giao tiếp với vi điều khiển theo interface LCD
- LCD Panel: Hiển thị ra bên ngoài
- Back Light: Đèn nền LCD
DISPLAY DATA RAM (DD RAM): Bộ nhớ hiển thị dữ liệu
Điều khiển LCD1602 chính là thay đổi giá trị của DD RAM, mỗi ô trên DD RAM
tương ứng với một vị trí của màn hình.
Với LCD1602 chúng có 2 line:
- Line 1: từ 0x80 tới 0x8F
- Line 2: từ 0xC0 tới 0xCF
Ví dụ: Nếu bạn muốn hiển thị ở Line 1 ô đầu tiên, Chúng ta sẽ thay đổi giá trị của ô
nhớ địa chỉ 0x80. Giá trị được ghi sẽ so sánh với bảng mã trong CG ROM, từ đó hiển thị
ra đúng kí tự được lưu trên đó.
Lệnh để nhảy giữa các ô nhớ là Set cursor (con trỏ)
Character Generator ROM (CG ROM): Bộ nhớ kí tự chỉ đọc
Đây là bộ nhớ đươc ghi sẵn của LCD, trong đó chứa các kí tự mà lcd hỗ trợ. Có
hai mẫu Character mà LCD1602 hỗ trợ đó là 5×8 và 5×10
Character Generator RAM (CG RAM): Bộ nhớ kí tự có thể lập trình
Đây là bộ nhớ để người sử dụng có thể tự tạo ra các font chữ riêng trên LCD của
mình.
Để cài đặt báo thức, chúng ta nhấn nút đặt. Nó sẽ chuyển sang chế độ báo thức và
hỏi giờ với thời gian hiện tại được hiển thị. Phải nhấn nút tăng dần để thay đổi giờ.
Vì đồng hồ ở định dạng 24 giờ, số giờ sẽ được tăng từ 0 đến 23. Sau khi giờ báo
thức được đặt, chúng ta phải nhấn nút tiếp theo để chuyển đến tab phút.
Một lần nữa nút tăng được nhấn để thay đổi phút. Sau khi nhập thời gian báo thức,
nhấn nút cài đặt và báo thức được đặt.
Các giá trị được nhập làm cảnh báo được lưu trữ trong EEPROM của Arduino.
Các giá trị này liên tục được so sánh với thời điểm hiện tại.
Khi các giá trị được lưu trữ và giá trị hiện tại khớp với nhau, bộ rung cho cảnh báo
sẽ được kích hoạt. Để dừng báo thức, nút tiếp theo được nhấn.
Sơ đồ thuật toán:
5. Sơ đồ nguyên lí