您可能發現自己處於這樣的情況:您希望擴大可用的輸入和輸出的數量。 Arduino板,因為您正在執行的專案需要比預期更多的設備。在這些情況下,您只能做一件事,那就是考慮購買具有更多連接的更高型號的主機板。但現在與 PCF8574可以擴充Arduino的I/O 以一種簡單且便宜的方式。
在這裡,我們將向您展示 PCF8574 是什麼,以防您不知道它,此外還向您展示如何將其連接到您的 Arduino 板,並逐步解釋其工作原理...
什麼是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 上使用 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 建立的庫 其中還包括實際範例…