如何将多个i2c接口设备连接到Arduino上的单个引脚A4(SDA)和A5(SCL)?


31

我想在我的小项目中添加一个实时时钟模块。我想在现有的i2c 2x16 LCD模块上同时显示时间和日期。

i2c接口实时时钟模块和2x16 LCD模块都在Arduino Uno上使用相同的引脚A4(SDA)和A5(SCL)。经过数小时的网上搜索,i2c总线实际上可以占用许多串行设备。这是可能的,因为每个设备都有自己的唯一地址。

我的问题是如何将两个i2c接口设备物理连接到单个A4和A5中?谢谢。


2
简短答案:将它们并联。将SDA绑在一起并连接到A4,将SCL连接到A5。当然,有时会遇到上拉问题。
SDsolar

Answers:


32

有些人很难想象连接在一起的事物,所以这是一张图片:

(服务建议)

schematic

模拟该电路 –使用CircuitLab I2C创建的原理图是一条总线,因此名称相同的信号连接在一起。该寻址方案允许微控制器选择正在与之通信的设备。在Arduino上,10k上拉电阻转到“ VDD”,这是5V或3.3V引脚。


嗨,这可能是非常基础的,但是我是电子行业的新手,并从google搜索中下载了此页面,uC指的是什么?
Ciasto piekarz

我相信所引用的是任何uC,因为连接方案应该相同,除非另有说明。
KingsInnerSoul

uC可以是Arduino。SDA是引脚A4,SCL是引脚A5。
SDsolar

8
@ Ciastopiekarz,μC是“微控制器”的缩写。希腊字母μ是micro的缩写。因为μ看起来像u,所以很多人只写“ uC”。
foob​​arbecue

9

对于I2C,如果所有从设备具有不同的设备地址,则所有SDA引脚应连接在一起,而所有SCL引脚应连接在一起。就这么简单。

当然,根据I2C的要求,您还应在两条线上都包含上拉电阻。之前已经讨论了如何选择电阻值。


我发现,只要其中一台设备是DS3231 RTC,那么就不需要外部上拉电路。
SDsolar

3
@SDsolar,这可能意味着DS3231具有内部上拉电路,因此,通过使用该设备,您将为总线提供上拉电路。这不一定是件好事,因为它限制了您根据总线上的设备数来调整上拉电阻的自由。
Photon

我的想法正好。添加外部上拉电阻将与DS3231中的器件并行进行,因此最终可能不足以使I2C满意。
SDsolar

@SDsolar,这与OP的问题或我的答案有什么关系?这不是一般讨论站点。如果您只想谈论事情,可以加入我们的聊天室
光子

3

将两个引脚A4-sda连接到A5-scl(在两块板上都为uno-uno引脚),并从每条对应的sda-scl线路的5v连接电阻。

在此处输入图片说明


投了反对票,因为答案没有回答原始问题,即“将两个i2c接口设备物理连接到单个A4和A5中”。
奥列格·马祖洛夫

我无法删除,因此我编辑了一个(也许)更令人满意的答案
daedalucian

不需要共享电压吗?
clankill3r

0

I2C是飞利浦开发的数据传输协议。也称为两线接口,因为它使用两根线进行通信。SCL串行时钟线。SDL串行数据线。因此,您需要将i2c设备的相应引脚连接到eeprom或LCD到正在使用的上拉电阻至VDD的微控制器的SCL和SDL引脚。由于这是一个地址协议,每个连接的设备都具有7位地址,因此您最多可以寻址2 ^ 7个不同的设备。但是通常情况下,从设备的I2C地址是预先定义的,其中一些位将由开发人员进行硬连线。这有助于将同一类型的设备与同一总线上的不同硬连线地址部分连接起来。


1
完全正确,但是如果您想要多个,就很烂,例如BH1750光强单位。我想要其中的4个,并且不想处理I2C双总线切换。此外,某些器件如DS3231具有内部上拉电路,因此任何外部上拉电路都与它们并联。
SDsolar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.