¿Cómo conectar múltiples dispositivos con interfaz i2c en un solo pin A4 (SDA) y A5 (SCL) en Arduino?

32

Quiero agregar un módulo de reloj en tiempo real a mi pequeño proyecto. Quiero mostrar la hora y la fecha en mi módulo LCD i2c 2x16 existente.

Tanto el módulo de reloj en tiempo real con interfaz i2c como el módulo LCD 2x16 utilizan el mismo pin A4 (SDA) y A5 (SCL) en Arduino Uno. Después de horas de búsqueda en la red, el bus i2c puede tomar muchos dispositivos en serie. Esto es posible porque cada dispositivo tiene su propia dirección única.

Mi pregunta es cómo conectar físicamente los dos dispositivos con interfaz i2c en un solo A4 y A5. Gracias.

Banksia
fuente
3
Respuesta corta: conéctelos en paralelo. Ate los SDA y conéctelos a A4, y los SCL a A5. Luego, por supuesto, está el problema de pull-up que a veces ayuda.
SDsolar

Respuestas:

32

Algunas personas están teniendo dificultades para visualizar cosas conectadas entre sí, así que aquí hay una imagen:

(Plantear sugerencias)

esquemático

simule este circuito : el esquema creado con CircuitLab I2C es un bus, por lo que las señales con nombres similares se conectan entre sí. El esquema de direccionamiento permite al microcontrolador seleccionar con qué dispositivo está hablando. En el Arduino, las resistencias pull-up de 10k pasan a "VDD", que son los pines de 5V o 3.3V.

gbarry
fuente
Hola, esto puede ser muy básico, pero soy nuevo en electrónica y obtuve esta página de la búsqueda de Google, ¿a qué se refiere uC?
Ciasto piekarz
Creo que la referencia es a cualquier uC, ya que el esquema de conexión debería ser el mismo, a menos que se indique lo contrario.
KingsInnerSoul
uC puede ser un Arduino. SDA es el pin A4 y SCL es el pin A5.
SDsolar
99
@Ciastopiekarz, μC es la abreviatura de "microcontrolador". La letra griega μ es la abreviatura de micro. Debido a que μ se parece a ti, muchas personas simplemente escriben "uC".
foobarbecue
9

Para I2C, si todos los dispositivos esclavos tienen direcciones de dispositivo diferentes, todos los pines SDA deben conectarse entre sí, y todos los pines SCL deben conectarse entre sí. Es tan simple como eso.

Naturalmente, también debe incluir resistencias pull-up en ambas líneas, como se requiere para I2C. Cómo elegir los valores de resistencia se ha discutido aquí antes .

El fotón
fuente
Descubrí que mientras uno de los dispositivos sea el DS3231 RTC, no se requieren pullups externos.
SDsolar
3
@SDsolar, eso probablemente significa que el DS3231 tiene pull-ups internos, por lo que al usar ese dispositivo, está proporcionando pull-ups para el bus. Eso no es necesariamente algo bueno, porque limita su libertad para ajustar la resistencia de extracción dependiendo de la cantidad de dispositivos en el bus.
The Photon
Mis pensamientos exactamente. Agregar pullups externos estaría en paralelo con lo que sea que esté en el DS3231, por lo que podría no ser suficiente para que I2C sea feliz.
SDsolar
@SDsolar, ¿qué tiene esto que ver con la pregunta de OP o mi respuesta? Este no es un sitio de discusión general. Si solo quieres hablar sobre cosas, puedes unirte a nuestra sala de chat .
The Photon
3

Conecte dos pines A4-sda a A5-scl (en ambas tarjetas uno-uno) y conecte la resistencia de 5v de cada línea sda-scl correspondiente.

ingrese la descripción de la imagen aquí

daedalucian
fuente
rechazó porque la respuesta no responde a la pregunta original, a saber, "conectar físicamente los dos dispositivos de interfaz i2c en un solo A4 y A5".
Oleg Mazurov
No pude eliminar, así que edito a (quizás) una respuesta más satisfactoria
daedalucian
No es necesario compartir el voltaje, ¿verdad?
clankill3r
0

I2C es un protocolo de transferencia de datos desarrollado por Philips. También se conoce como interfaz de dos cables, ya que utiliza dos cables para la comunicación. Línea de reloj serie SCL. Línea de datos en serie SDL. Por lo tanto, debe conectar los pines correspondientes de los dispositivos i2c, ya sea un eeprom o lcd a los pines SCL y SDL del microcontrolador que está utilizando con una resistencia pull-up a VDD. Dado que es un protocolo de direcciones que tiene una dirección de 7 bits para cada dispositivo conectado, puede direccionar hasta 2 ^ 7 dispositivos diferentes. Pero normalmente, la dirección I2C de un dispositivo esclavo está predefinida con algunos bits que el desarrollador debe cablear. Esto ayuda a conectar el mismo tipo de dispositivos con diferentes partes de direcciones cableadas en el mismo bus.

Antony Tom Mathews
fuente
1
Todo es cierto, pero apesta si quieres más de uno, como la unidad de intensidad de luz BH1750. Quiero 4 de ellos y no quiero tratar con la conmutación de bus dual I2C. Además, algunos dispositivos como el DS3231 tienen pullups internos, por lo que cualquier pullups externo está en paralelo con ellos.
SDsolar
0

También debe verificar las resistencias pull up. Si usa placas ya hechas, no solo el chip, esas placas generalmente tienen resistencias pull-up a bordo entre los buses y el vcc. Entonces, cuando conecta todo en paralelo, las resistencias también están en paralelo, por lo que la caída del valor total de la resistencia y su comunicación pueden fallar.

Petre O.
fuente