PCF8574: Giới thiệu về I2C I / O Expander cho Arduino

PCF8574 TI CHIP

Bạn chắc chắn đã nghe nói về IC PCF8574, một con chip có thể được mua riêng hoặc đã được gắn trên một mô-đun như nhiều loại khác Linh kiện điện tử để tạo điều kiện tích hợp với bảng Arduino của bạn. Trong trường hợp này, nó là một bộ mở rộng các đầu vào và đầu ra cho xe buýt I2C.

Bạn có thể nghĩ rằng Arduino đã có bus I2C tích hợp, và nó là sự thật. Nhưng PCF8574 có thể giúp mở rộng bus đó ra ngoài giới hạn của bảng phát triển của bạn, điều này có thể giúp ích rất nhiều cho một số nhà sản xuất, những người cần nhiều hơn những gì được cung cấp bởi Arduino.

Xe buýt I2C là gì?

Arduino UNO hàm mili

Tên I2C bắt nguồn từ Mạch tích hợp liên hoặc các mạch tích hợp liên. Phiên bản 1.0 của nó được tạo ra vào năm 1992 bởi Philips. Sau đó, 2.1 thứ hai sẽ xuất hiện vào năm 2000 và ngày nay nó đã trở thành tiêu chuẩn (ở tốc độ 100 kbit / s, mặc dù nó cho phép tối đa 3.4 Mbit / s) khi bằng sáng chế hết hạn vào năm 2006 và có thể được sử dụng tự do.

Hiện nay nó được sử dụng rộng rãi trong ngành công nghiệp để giao tiếp, và cũng được các nhà sản xuất đánh giá rất cao về các dự án giao tiếp các bộ vi điều khiển và thiết bị ngoại vi khác nhau được tích hợp trong một vi mạch.

El I2C là một chiếc xe buýt nổi tiếng từ giao tiếp nối tiếp. Nó sử dụng một giao thức truyền thông đồng bộ chỉ có 2 kênh (có một kênh thứ ba, nhưng nó được kết hợp với tham chiếu hoặc GND), trên thực tế nó còn được gọi là TWI (Two Wire Interface):

  • Một cho đồng hồ (SCL).
  • Khác cho dữ liệu (SDA).
Cả hai đều là kết nối CMOS cống mở và yêu cầu điện trở kéo lên. Ngoài ra, nếu một thiết bị truyền số 0 và một thiết bị khác là 1, có thể có vấn đề, đó là lý do tại sao đường luôn được đặt thành 1 (mức cao) và các thiết bị luôn truyền 0 (mức thấp).

Điều đó ngụ ý rằng chủ và nô lệ chúng gửi dữ liệu qua cùng một cáp hoặc đường dẫn, được điều khiển bởi cái đầu tiên tạo ra tín hiệu đồng hồ. Mỗi thiết bị ngoại vi được kết nối với bus I2C sẽ có một địa chỉ duy nhất được chỉ định, để định hướng việc truyền. Nhưng không nhất thiết phải thầy nào cũng vậy (đa giáo), chính mình luôn là người khởi xướng chuyển thế.

Như tôi đã giải thích trong bài viết trên Arduino I2C Tôi đã tham khảo trước đó, mỗi bảng có các kết nối I2C này ở những nơi khác nhau. Đó là điều mà bạn phải ghi nhớ để có thể sử dụng nó đúng cách trong mỗi phiên bản tấm:

  • Arduino UNO: SDA ở A4 và SCK ở A5
  • ArduinoNano: giống như trước.
  • Arduino MiniPro: tương tự.
  • Mega Arduino: SDA ở chân 20 và SCK trên 21.
  • Thông tin thêm về các tấm.

Bạn đã biết rằng bạn có thể sử dụng I2C cho các bản phác thảo của mình một cách dễ dàng, vì Thư viện Wire.h với các chức năng khác nhau cho giao tiếp nối tiếp này:

  • bắt đầu (): khởi động thư viện Wire và chỉ định xem nó là chính hay phụ
  • yêu cầu từ (): được sử dụng bởi master để yêu cầu dữ liệu từ slave.
  • beginTransmission (): bắt đầu truyền với slave.
  • endTransmission (): kết thúc truyền tải.
  • ghi ()- Ghi dữ liệu từ máy chủ để đáp ứng yêu cầu từ máy chủ, hoặc bạn có thể xếp hàng truyền tải của máy chủ.
  • có sẵn (): sẽ trả về số byte cần đọc.
  • đọc(): đọc một byte được truyền từ slave sang master hoặc ngược lại.
  • onReceive (): Gọi một hàm khi một nô lệ nhận được truyền từ một chủ.
  • theo yêu cầu (): Gọi một hàm khi một nô lệ yêu cầu dữ liệu từ một chủ.

đến thêm thông tin về lập trình Arduino và các chức năng, bạn có thể tải xuống Hướng dẫn PDF.

PCF8574 là gì?

Mô-đun PCF8574

PCF8574 là một Bộ mở rộng đầu vào và đầu ra kỹ thuật số bus I2C (I / O). Nó có thể được sản xuất bởi nhiều nhà sản xuất khác nhau, ngoài việc có sẵn trong các vi mạch và mô-đun. Trong mọi trường hợp, việc kết nối nó với bảng Arduino của bạn và có khả năng điều khiển nhiều thiết bị hơn mức cho phép của bo mạch chủ là rất thiết thực.

El Sơ đồ chân PCF8574 Nó đơn giản, vì nó chỉ bao gồm Cây thông 8 bán hướng (P0-P7 nơi các chip để giao tiếp được kết nối), và mặt khác, bạn có SDA và SCL mà bạn phải kết nối với bảng Arduino, cũng như VCC và GND để cấp nguồn cho mô-đun. Và đừng quên ba chân địa chỉ A0, A1, A2 để chọn thiết bị nào mà giao tiếp được hướng đến ...

Sơ đồ chân PCF8574

Sở hữu các tính năng khác mà bạn nên biết:

  • Các kết nối của nó, là một cống mở, có thể được sử dụng làm đầu vào và đầu ra.
  • La dòng điện cao điểm nó là 25mA khi nó hoạt động như một đầu ra (chìm, khi dòng điện chạy về phía PCF8574) và 300 µA (nguồn, dòng điện chạy từ PCF8574).
  • La sức ép nguồn điện là 2.5 và 6v. Mức tiêu thụ ở chế độ chờ rất thấp, chỉ 10 µA.
  • Tất cả kết quả đầu ra có chốt, để duy trì trạng thái mà không cần các hành động bên ngoài. Bạn chỉ phải hành động khi bạn muốn thay đổi trạng thái.
  • Bạn có thể nhận được 8 hướng có thể, nghĩa là, tối đa 8 thiết bị để giao tiếp hoặc sử dụng 8 mô-đun để mở rộng nó lên đến 64 thiết bị. Địa chỉ (chân A0, A1, A2) sẽ là:
    • 000: địa chỉ 0x20
    • 001: địa chỉ 0x21
    • 010: địa chỉ 0x22
    • 011: địa chỉ 0x23
    • 100: địa chỉ 0x24
    • 101: địa chỉ 0x25
    • 110: địa chỉ 0x26
    • 111: địa chỉ 0x27
  • Nhập học gián đoạn (INT) bằng một đường đặc biệt để phát hiện dữ liệu mà không cần giám sát liên tục.

Tích hợp với Arduino

Ảnh chụp màn hình Arduino IDE

Kết nối với Arduino rất đơn giản, bạn chỉ cần kết nối Vcc với chân 5v của board Arduino và GND với GND của Arduino. Mặt khác, các chân của mô-đun PCF8574 SDA và SCL có thể được kết nối với chân 14 (A5 SCL) và 15 (A4 SDA). Chỉ với điều đó, nó sẽ bắt đầu hoạt động, rõ ràng là bạn có thể sử dụng Px để kết nối các thiết bị bạn muốn giao tiếp ...

Vậy thì nó sẽ chỉ còn thiếu bắt đầu với một bản phác thảo ví dụ trong Arduino IDE. Bạn có thể làm điều đó mà không cần sử dụng thư viện bổ sung như ...

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   for (short channel = 0; channel < 8; channel++)
   {
      // Escribir dato en cada uno de los 8 canales
      Wire.beginTransmission(address);
      Wire.write(~(1 << channel));
      Wire.endTransmission();
      
      // Lee dato del canal
      delay(500);
   }
}

Như đầu vào:

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   short channel = 1;
   byte value = 0;
 
   // Leer el dato del canal
   Wire.requestFrom(pcfAddress, 1 << channel);
   if (Wire.available())
   {
      value = Wire.read();
   }
   Wire.endTransmission();
 
   // Mostrar el valor leido por el monitor serie
   Serial.println(value);
}

Hoặc cũng có sử dụng thư viện, chẳng hạn như PCF8574 mà bạn có thể tải về tại đây và sử dụng mã tương tự như mã này từ chính ví dụ đi kèm với thư viện này:

#include <Wire.h>
#include "PCF8574.h"
 
PCF8574 expander;
 
void setup() 
{
  Serial.begin(9600);
  
  expander.begin(0x20);
  
  /* Setup some PCF8574 pins for demo */
  expander.pinMode(0, OUTPUT);
  expander.pinMode(1, OUTPUT);
  expander.pinMode(2, OUTPUT);
  expander.pinMode(3, INPUT_PULLUP);
 
  /* Blink hardware LED for debug */
  digitalWrite(13, HIGH);  
  
  /* Toggle PCF8574 output 0 for demo */
  expander.toggle();
  
  /* Blink hardware LED for debug */
  digitalWrite(13, LOW);
}
 
 
 
void loop() 
{
}


Hãy là người đầu tiên nhận xét

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.