Cómo usar múltiples dispositivos I2C con Arduino

Cómo usar múltiples dispositivos I2C con Arduino

Arduino es una junta electrónica construida para diseñar proyectos. Mientras que la construcción de la comunicación de proyectos de Arduino juega un papel importante. Arduino tiene múltiples protocolos de comunicación como Serial Usart, SPI e I2C. Estos protocolos mejoran la funcionalidad y el uso de Arduino en una gran gama de productos. Si nuestro dispositivo no admite un protocolo específico, entonces tenemos la ventaja de usar los otros dos. Entre todos estos I2C se encuentra uno de los protocolos más avanzados utilizados en los tableros Arduino. Discutamos cómo configurar el protocolo I2C para múltiples dispositivos.

I2c con arduino

I2C también conocido como Circuito Inter Integrado es un protocolo de comunicación utilizado en las tablas Arduino. Solo usa dos líneas para la comunicación y uno de los protocolos más complejos para implementar con un tablero de Arduino. Usando I2C podemos conectar hasta 128 dispositivos con una placa Arduino a través de una sola línea de datos.

I2C usa dos líneas que son SDA y SCL. Junto con estas dos líneas se usa una resistencia de pull up para mantener la línea SDA y SCL alta.

Los protocolos I2C admiten múltiples configuración de esclavos maestros, lo que significa que con un solo maestro Arduino podemos controlar múltiples dispositivos de esclavos.

Cómo usar I2C múltiple con Arduino

Como I2C tiene soporte de configuración de esclavo maestro para que podamos controlar múltiples dispositivos a la vez. En algunos proyectos utilizamos diferentes módulos, sensores y hardware que admiten la comunicación I2C, todos estos se pueden conectar en un solo bus I2C si tienen una dirección I2C única. Pero si tenemos más de un dispositivo que comparte la misma dirección I2C, puede causar problemas para ambos dispositivos y no podemos controlarlos usando el mismo bus I2C. Sin embargo, este problema se puede resolver utilizando un TCA9548A Multiplexor I2C, este mux utiliza un solo bus I2C desde Arduino y se convierte en 8 canales diferentes con todos los que tienen direcciones separadas.

Todas las direcciones I2C son principalmente de dos tipos de 7 bits o 10 bits. La mayoría de las veces los dispositivos de tiempo usan 7 bits i2c, sin embargo, 10 bit I2c rara vez se usa en dispositivos. Entonces, significa usar una dirección de 7 bits, Arduino puede conectar 128 dispositivos.

Ahora conectaremos dos dispositivos diferentes que tienen protocolos I2C únicos con líneas Arduino Uno I2C.

Diagrama de circuito

La siguiente figura muestra una pantalla OLED conectada a Arduino usando líneas I2C SDA y SCL. Mientras que una pantalla LCD de 16x2 también está conectada usando el mismo bus I2C en paralelo con la pantalla OLED. Una cosa importante a tener en cuenta aquí es que la LCD 16x2 usa solo 4 cables I2C en lugar de 8 cables para su control. Junto con LCD utilizamos un módulo I2C con Arduino que necesita solo 4 pines para la pantalla LCD: VCC, GND, SDA, SCL. Usando el módulo I2C con LCD, hemos guardado 4 pines digitales en Arduino, lo que reducirá todo el cableado y mejorará la funcionalidad de Arduino.

Cómo verificar las direcciones de los dispositivos I2C

Antes de conectar cualquier dispositivo I2C con Arduino, es importante tener en cuenta en qué dirección está conectado ese dispositivo específico. Algunos módulos tienen las direcciones I2C predeterminadas escritas en mientras que algunos de ellos no tienen instrucciones para verificar las direcciones I2C. Para resolver este problema, tenemos un cable Código de biblioteca que verifica todos los dispositivos I2C conectados y en qué dirección están conectados a Arduino. Esto ayudará a depurar y mejorar el circuito Arduino.

Código

#Include /*Incluya alambre.H Biblioteca*/
Configuración vacía ()

Cable.comenzar(); /*Inicio de comunicación de cable I2C*/
De serie.comenzar (9600); /*BAUD TASA SET para la comunicación en serie*/
mientras (!De serie); /*Esperando la salida en serie en el monitor serial*/
De serie.println ("\ Ni2c Scanner");

bucle vacío ()

byte err, adr; /*El error variable se define con la dirección de i2c*/
int number_of_devices;
De serie.println ("escaneo.");
número_of_devices = 0;
para (ADR = 1; ADR < 127; adr++ )

Cable.beginTransmission (ADR);
err = cable.Endtransmission ();
if (err == 0)

De serie.imprimir ("dispositivo I2C en la dirección 0x");
if (ADR < 16)
De serie.imprimir ("0");
De serie.imprimir (ADR, hex);
De serie.println (" !");
Number_of_devices ++;

más if (err == 4)

De serie.imprimir ("Error desconocido en la dirección 0x");
if (ADR < 16)
De serie.imprimir ("0");
De serie.println (ADR, hex);


if (number_of_devices == 0)
De serie.println ("No i2c dispositivos adjuntos \ n");
demás
De serie.println ("hecho \ n");
retraso (5000); /*Espere 5 segundos para el siguiente escaneo I2C*/

Este código ayudará a encontrar el número de dispositivos I2C y su dirección en la que están conectados. Este código se conoce comúnmente como código de escáner I2C.

Primero, incluimos un "Cable.H " biblioteca. Luego, en la parte de configuración del código, hemos comenzado esta biblioteca. Después de eso inicializamos la comunicación en serie definiendo la tasa de baudios 9600. Esto ayudará a ver la salida sobre el monitor en serie.

En la sección del bucle, definimos dos variables "errar" y "ADR". Entonces definimos otra variable "Dispositivos" y establecerlo en cero. Después de eso a para El bucle se inicializa con valores entre 0 y 127.

A continuación, ingresamos la dirección al cable usando cable.beginTransmission (), El escáner I2C buscará el reconocimiento de dispositivos y su dirección. El valor leído se almacenará en la variable "error". El valor de retorno será igual a 0 si el dispositivo reconoce la dirección de lo contrario el valor se convertirá en 4. A continuación, hemos utilizado una condición IF que imprima la dirección del dispositivo I2C si el valor es <16. Final address of the device is printed in Hexadecimal form.

Circuito

Producción

La salida de dispositivos conectados a Arduino sobre los protocolos I2C se verá como se muestra en el diagrama a continuación. Aquí 0x3c es la dirección del I2C LCD mientras 0x27 es la dirección del OLED pantalla.

Conclusión

Los dispositivos de conexión con I2C en Arduino pueden guardar una serie de pines. Se pueden conectar múltiples dispositivos utilizando I2C en la configuración del esclavo maestro, pero lo principal a considerar es que todos los dispositivos deben tener una dirección I2C única, no se pueden operar dos dispositivos que tengan la misma dirección utilizando un solo bus I2C Bus. Entonces, sugerimos que una solución a este problema es usar un TCA9548A Multiplexor I2C, puede convertir un solo bus I2C en 8 canales diferentes.