PCF8574:為 Arduino 提供更多連接引腳

pcf8574

您可能發現自己處於這樣的情況:您希望擴大可用的輸入和輸出的數量。 Arduino板,因為您正在執行的專案需要比預期更多的設備。在這些情況下,您只能做一件事,那就是考慮購買具有更多連接的更高型號的主機板。但現在與 PCF8574可以擴充Arduino的I/O 以一種簡單且便宜的方式。

在這裡,我們將向您展示 PCF8574 是什麼,以防您不知道它,此外還向您展示如何將其連接到您的 Arduino 板,並逐步解釋其工作原理...

什麼是PCF8574?

pcf8574

El PCF8574 是 I2C1 總線的數位輸入和輸出 (I/O) 擴展器。該設備由飛利浦製造,可讓您連接 Arduino 等處理器,以使用更少的引腳控制更多設備2。 PCF8574 在開漏配置中包含 8 個基於 CMOS 輸出的準方向引腳。

此外,PCF8574 是一款低功耗裝置, 支援 2.5V 至 6V 的 VCC 操作。它具有 8 位元準雙向 I/O 連接埠、鎖定輸出、開漏中斷輸出以及 LED 的高電流驅動能力。另一方面,其待機功耗非常低,低於 10 µA。

這對於 擴展 Arduino 板的功能,超越其極限,這對於那些需要 Arduino 以外的東西的創作者來說是一個很大的幫助。每個引腳可以提供的最大電流取決於配置:

  • 當它作為輸出時,當它作為灌電流時,即電流​​流向PCF25時,為8574mA。這是預設配置。
  • 當它作為源時,即電流​​從 PCF300 流出時,電流為 8574μA。同樣,您必須知道所有輸出都有鎖存器,即它們在暫存器中自行維護狀態。只有當我們想要修改輸出之一的狀態時,我們才需要採取行動。

溝通發生 透過I2C總線,因此很容易從與其連接的設備獲取數據。同樣,應該注意的是,它有 3 個位址引腳,這為同一 I8C 總線提供了 2 個可能的連接。這意味著僅使用 64 個引腳即可控制 2 個裝置。

地址設定

此 PCF8574 模組的某些型號通常包括配置引腳和跳線,如上圖所示。另一方面,其他型號包括一個開關,可以使三個微動開關的操作變得更容易......儘管如此,它們已經習慣了 配置位址 I/O 腳位數:

A0 A1 A2 地址
0 0 0 0x20
0 0 1 0x21
0 1 0 0x22
0 1 1 0x23
1 0 0 0x24
1 0 1 0x25
1 1 0 0x26
1 1 1 0x27

價格和購買地點

只需幾歐元即可找到它。它是一個設備 挺便宜的 了解它對於某些 I/O 數量較少的 Arduino 型號的實用性。因此,如果您正在尋找 PCF8574,您可以在專門商店或亞馬遜、Aliexpress 或 eBay 等大型線上平台上找到它。例如,我們在這裡推薦一款:

將 PCF8574 連接到 Arduino

將 PCF8574 擴充器連接到您的 Arduino 板, 連接圖非常簡單。您只需連接:

  • PCF8574板上標記的SCL引腳連接到Arduino的SCL引腳。此引腳可能會根據型號而變化,但通常位於 UNO 等更流行型號的 A5 上。
  • 擴充器的SDA接腳必須與Arduino的SDA接腳連接。和我上面提到的一樣,它可以根據型號而變化,但通常是A4。如有疑問,請檢查您的型號的引腳排列。
  • PCF8574的GND接腳當然會連接到Arduino上標有GND的接腳,即接地。
  • 擴展器的Vcc引腳連接到Arduino的5V,這樣,透過GND和Vcc,我們就已經給擴展板供電,使其可以開始工作了。

手術

一旦 PCF8574 連接到 Arduino 板,現在就該知道了 它是如何工作的。為此,您必須記住,除了電源引腳之外,您將能夠擁有 8 個額外引腳,以換取使用兩個 Arduino 引腳。另一方面,您必須記住一件事,那就是在 PCF8 的 8574 個引腳中的每一個上都有一個 MOSFET 電晶體和一個非常低電阻的上拉電阻。假設電晶體處於活動狀態時電流強度為 100 微安培。

這給我們留下了以下全景:

  • 配置為輸出- 當該引腳用作輸出時,它充當電流吸收器,正如我上面所討論的,即電流流入。
    • LOW:低電壓時,不導通電流,負載=Vdd。
    • HIGH:高電壓時,可通過高達 25mA 的電流,負載將連接至 GND。
  • 配置作為輸入:它必須始終設定為高電平,在這種情況下它將充當源極,即電流流出。
    • 關閉:當沒有給定外部負載時,引腳上的電壓變為GND。
    • 開放:當外部負載出現時,引腳電壓變為Vdd。

Arduino IDE 程式碼

Arduino IDE、數據類型、編程

如果您想要一些如何建立程式碼以在 Arduino 上使用 PCF8574 的範例,那麼就像使用這些程式碼範例一樣簡單,您可以根據需要進行修改:

  • 配置為輸出:
#include <Wire.h>

const int pcfAddress = 0x38;

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  for (short channel = 0; channel < 8; channel++)
  {
    // Escribir dato en canal 'channel'
    Wire.beginTransmission(pcfAddress);
    Wire.write(~(1 << channel));
    Wire.endTransmission();
    
    // Leer dato de canal
    delay(500);
  }
}
  • 配置作為輸入:
#include <Wire.h>

const int pcfAddress = 0x38;

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  short channel = 1;
  byte value = 0;

  // Leer dato de canal 'channel'
  Wire.requestFrom(pcfAddress, 1 << channel);
  if (Wire.available())
  {
    value = Wire.read();
  }
  Wire.endTransmission();

  // Mostrar el valor por puerto serie
  Serial.println(value);
}

請記住,您也可以使用 專為 PCF8574 建立的庫 其中還包括實際範例…


成為第一個發表評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。