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():当从站接收到来自主站的传输时,调用一个函数。
  • 根据要求 ():当从站向主站请求数据时,调用一个函数。

更多资料 有关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个设备。 地址(引脚A0,A1,A2)将为:
    • 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. 权利:您可以随时限制,恢复和删除您的信息。