PCF8574:關於Arduino的I2C I / O擴展器

PCF8574 TI芯片

您肯定已經聽說過 集成電路PCF8574,可以單獨購買或已像許多其他模塊一樣已安裝在模塊上的芯片 電子元器件 促進您與Arduino開發板的集成。 在這種情況下,它是輸入和輸出的擴展 I2C總線.

您可能會認為Arduino已經擁有了自己的 集成式I2C總線,的確如此。 但是PCF8574可以幫助將總線擴展到開發板的範圍之外,這對某些需要不僅僅是Arduino提供的功能的製造商有很大的幫助。

什麼是I2C總線?

Arduino UNO 毫函數

I2C的名稱來自 集成電路間 或內部集成電路。 它的1.0版是由飛利浦在1992年創建的。 然後第二個2.1將於2000年問世,如今,它已成為標準(100 kbit / s,儘管最大允許3.4 Mbit / s),但該專利在2006年到期並可以免費使用。

目前在行業中被廣泛使用 溝通,也受到製造商的讚賞,因為他們的項目可以交流集成在一個IC中的不同微控制器和外圍設備。

El I2C是一輛公共汽車 從串行通信中眾所周知。 它使用只有2個通道的同步通信協議(有第三個通道,但它耦合到參考或GND),實際上它也被稱為TWI(兩線接口):

  • 一為時鐘(SCL)。
  • 其他用於數據(SDA)。
兩者都是開漏CMOS連接,需要上拉電阻。 同樣,如果一個設備發送0且另一個設備發送1,則可能會出現問題,這就是為什麼線路始終設置為1(高電平),而設備始終發送0(低電平)的原因。

這意味著 主從 它們通過同一根電纜或軌道發送數據,該數據由第一個產生時鐘信號的電纜或軌道控制。 連接到I2C總線的每個外圍設備都將分配一個唯一的地址,以便引導傳輸。 但是,主機不必始終是同一主機(多主機),而是始終由他來發起傳輸。

正如我在文章中已經解釋的 Arduino的I2C 我之前提到過,每個板在不同的地方都有這些I2C連接。 您必須謹記要在每個平板版本中正確使用它:

  • Arduino UNO:SDA在A4中,SCK在A5中
  • Arduino納米:與上一個相同。
  • Arduino迷你專業版: 相同的。
  • Arduino的兆豐:SDA在引腳20上,SCK在21上。
  • 有關板的更多信息。

您已經知道可以輕鬆地將I2C用於草圖,因為 Wire.h庫 具有用於此串行通信的各種功能:

  • 開始 ():啟動Wire庫並指定它是主庫還是從庫
  • requestFrom():由主服務器用於從屬服務器請求數據。
  • beginTransmission():與從站開始傳輸。
  • endTransmission():結束傳輸。
  • 寫()-響應主服務器的請求,從服務器寫入數據,也可以將主服務器的傳輸排隊。
  • 可用的 ():將返回要讀取的字節數。
  • 讀():讀取從從機發送到主機的字節,反之亦然。
  • onReceive():當從站接收到來自主站的傳輸時,調用一個函數。
  • 根據要求 ():當從站向主站請求數據時,調用一個函數。

MAS INFORMACION 有關Arduino編程和功能的信息,您可以下載我們的 PDF教程.

什麼是PCF8574?

PCF8574模塊

PCF8574是 I2C總線數字量輸入和輸出(I / O)擴展器。 除了可以在IC和模塊中使用外,它還可以由各種製造商製造。 無論如何,將其連接到Arduino板上並具有控制超過主板所允許的更多設備的能力是非常實用的。

El PCF8574引腳排列 很簡單,因為它僅包含 8松樹 准定向(用於通信的芯片連接所在的P0-P7),另一方面,您具有必須連接至Arduino板的SDA和SCL,以及VCC和GND才能為模塊供電。 並且不要忘記三個尋址引腳A0,A1,A2,以選擇將通信定向到哪個設備...

PCF8574引腳排列

它有 其他功能 您應該知道:

  • 它的連接是一個開放的排水口,可以是 既用作輸入又用作輸出.
  • La 峰值電流 當它作為輸出時(漏電流,當電流流向PCF25時)為8574mA,而當它作為輸出時,則為300 µA(源,電流從PCF8574流過)。
  • La 張力 電源為2.5和6v。 待機功耗非常低,僅為10 µA。
  • 所有輸出 有閂鎖,無需外部動作即可維持狀態。 您只需要在要更改狀態時採取行動即可。
  • 你可以獲得8 可能的方向, 也就是說,最多8個設備可與8個模塊進行通信或使用64個模塊將其擴展到0個設備。 地址(引腳A1,A2,AXNUMX)將為:
    • 000:地址0x20
    • 001:地址0x21
    • 010:地址0x22
    • 011:地址0x23
    • 100:地址0x24
    • 101:地址0x25
    • 110:地址0x26
    • 111:地址0x27
  • 錄取 打斷 (INT)通過專用線來檢測數據而無需不斷監視。

與Arduino集成

Arduino IDE的屏幕截圖

與Arduino的連接非常簡單,只需將Vcc與Arduino板的5v引腳連接,將GND與Arduino的GND連接即可。 另一方面,PCF8574 SDA和SCL模塊的引腳可以是 用別針連接 14(A5 SCL)和15(A4 SDA)。 只有這樣,它才能開始工作,顯然,您可以使用Px連接要通信的設備...

然後它只會丟失 從示例草圖開始 在Arduino IDE中。 您可以執行此操作而無需使用其他庫,例如...

#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);
   }
}

作為輸入:

#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);
}

或者也 使用圖書館,例如PCF8574 在這裡下載 並使用與此庫一起提供的示例本身中類似的代碼:

#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() 
{
}


成為第一個發表評論

發表您的評論

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

*

*

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