Trong bài viết này, chúng ta sẽ xem xét giao diện I2C (ay-tu-si, i-two-tse) là gì, các tính năng của nó là gì và cách làm việc với nó.
Nó là cần thiết
- - Arduino;
- - chiết áp kỹ thuật số AD5171;
- - Điốt phát quang;
- - Điện trở 220 ohm;
- - 2 điện trở 4,7 kOhm;
- - dây nối.
Hướng dẫn
Bước 1
Giao thức truyền thông nối tiếp IIC (còn gọi là I2C - Mạch tích hợp liên) sử dụng hai đường truyền thông hai chiều để truyền dữ liệu, được gọi là bus SDA (Serial Data) và bus SCL (Serial Clock). Ngoài ra còn có hai đường dây điện. Các bus SDA và SCL được kéo lên bus nguồn thông qua các điện trở.
Có ít nhất một Master trong mạng bắt đầu truyền dữ liệu và tạo tín hiệu đồng bộ hóa. Mạng cũng có các nô lệ truyền dữ liệu theo yêu cầu của chủ. Mỗi thiết bị phụ có một địa chỉ duy nhất mà thiết bị chủ định địa chỉ cho nó. Địa chỉ thiết bị được chỉ định trong hộ chiếu (biểu dữ liệu). Có thể kết nối tới 127 thiết bị với một bus I2C, bao gồm một số thiết bị chính. Các thiết bị có thể được kết nối với xe buýt trong quá trình hoạt động, tức là nó hỗ trợ cắm nóng.
Bước 2
Arduino sử dụng hai cổng để hoạt động trên giao diện I2C. Ví dụ, trong Arduino UNO và Arduino Nano, cổng analog A4 tương ứng với SDA, cổng analog A5 tương ứng với SCL.
Đối với các mẫu bảng khác:
Arduino Pro và Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Arduino Leonardo - 2 (SDA), 3 (SCL)
Arduino đến hạn - 20 (SDA), 21 (SCL), SDA1, SCL1
Bước 3
Để tạo thuận lợi cho việc trao đổi dữ liệu với các thiết bị thông qua bus I2C, một thư viện "Wire" tiêu chuẩn đã được viết cho Arduino. Nó có các chức năng sau:
begin (address) - khởi tạo thư viện và kết nối với bus I2C; nếu không có địa chỉ nào được chỉ định, thì thiết bị được kết nối được coi là thiết bị chính; Địa chỉ 7-bit được sử dụng;
requestFrom () - được sử dụng bởi master để yêu cầu một số byte nhất định từ slave;
beginTransmission (địa chỉ) - nơi bắt đầu truyền dữ liệu đến thiết bị phụ tại một địa chỉ cụ thể;
endTransmission () - kết thúc quá trình truyền dữ liệu đến máy chủ;
write () - ghi dữ liệu từ slave để đáp ứng một yêu cầu;
sẵn có () - trả về số byte thông tin có sẵn để nhận từ nô lệ;
read () - đọc một byte được chuyển từ slave sang master hoặc từ master sang slave;
onReceive () - cho biết hàm được gọi khi slave nhận được truyền từ master;
onRequest () - Chỉ ra một hàm được gọi khi cái chủ nhận được truyền từ bộ phận phụ.
Bước 4
Hãy xem cách làm việc với bus I2C bằng Arduino.
Đầu tiên, chúng ta sẽ lắp ráp mạch điện, như trong hình. Chúng tôi sẽ kiểm soát độ sáng của đèn LED bằng chiết áp kỹ thuật số 64 vị trí AD5171, kết nối với bus I2C. Địa chỉ mà chúng tôi sẽ đề cập đến chiết áp là 0x2c (44 trong hệ thập phân).
Bước 5
Bây giờ chúng ta hãy mở một bản phác thảo từ các ví dụ thư viện "Wire":
Tệp -> Mẫu -> Dây -> chiết áp số. Hãy tải nó vào bộ nhớ Arduino. Hãy bật nó lên.
Bạn thấy đấy, độ sáng của đèn LED tăng theo chu kỳ, và sau đó đột ngột tắt. Trong trường hợp này, chúng tôi điều khiển chiết áp bằng Arduino thông qua bus I2C.