Tabla de contenido:

Módulo multiplexor TCA9548A I2C - Con Arduino y NodeMCU: 11 pasos
Módulo multiplexor TCA9548A I2C - Con Arduino y NodeMCU: 11 pasos

Video: Módulo multiplexor TCA9548A I2C - Con Arduino y NodeMCU: 11 pasos

Video: Módulo multiplexor TCA9548A I2C - Con Arduino y NodeMCU: 11 pasos
Video: TCA9548A I2C Multiplexer Module - With Arduino and NodeMCU 2024, Noviembre
Anonim
Image
Image

¿Alguna vez se encontró en una situación en la que tuvo que conectar dos, tres o más sensores I2C a su Arduino solo para darse cuenta de que los sensores tienen una dirección I2C fija o la misma? Además, ¡no puede tener dos dispositivos con la misma dirección en los mismos pines SDA / SCL!

¿Entonces cuales son tus opciones? ¡Póngalos a todos en el multiplexor I2C 1 a 8 TCA9548A para que todos hablen entre sí en el mismo bus! El Breakout TCA9548A permite la comunicación con varios dispositivos I2C que tienen la misma dirección, lo que facilita la interfaz con ellos.

Paso 1: requisito de hardware

Tópicos cubiertos
Tópicos cubiertos

Para este tutorial necesitamos:

- Tablero de pruebas

- Multiplexor TCA9548A I2C

- Arduino Uno / Nano lo que sea útil

- NodeMCU

- Pocas pantallas OLED I2C 0.91 y 0.96

- Cables de puente y

- Cable USB para cargar el código

Paso 2: Temas cubiertos

Comenzaremos nuestra discusión entendiendo los conceptos básicos de la tecnología I2C.

Luego aprenderemos sobre el multiplexor TCA9548A y cómo el maestro y el esclavo envían y reciben datos usando la tecnología I2C Luego veremos cómo podemos programar y usar el multiplexor en nuestro proyecto usando Arduino y NodeMCU A continuación, te mostraré un rápido demostración usando 8 pantallas OLED I2C y finalmente terminaremos el tutorial discutiendo las ventajas y desventajas del multiplexor TCA9548A

Paso 3: Conceptos básicos del bus I2C

Conceptos básicos del bus I2C
Conceptos básicos del bus I2C
Conceptos básicos del bus I2C
Conceptos básicos del bus I2C
Conceptos básicos del bus I2C
Conceptos básicos del bus I2C

El circuito interintegrado pronunciado I-squared-C (I²C) o I2C es una tecnología de bus de dos cables (bueno, en realidad, 4 cables porque también necesita VCC y tierra) que se utiliza para la comunicación entre múltiples procesadores y sensores.

Los dos cables son:

* SDA - Datos en serie (línea de datos) y

* SCL - Reloj en serie (línea de reloj)

Recuerde, estas dos líneas son 'síncronas' 'bidireccionales' 'de drenaje abierto' y están 'levantadas con resistencias'.

La tecnología de bus I2C fue diseñada originalmente por Philips Semiconductors a principios de los años 80 para permitir una fácil comunicación entre los componentes que residen en la misma placa de circuito.

Con I2C, puede conectar varios esclavos a un solo maestro (como SPI) o puede tener varios maestros controlando uno o varios esclavos. Tanto los maestros como los esclavos pueden transmitir y recibir datos. Entonces, un dispositivo en el bus I2C puede estar en uno de estos cuatro estados:

* Transmisión maestra: el nodo maestro está enviando datos a un esclavo * Recepción maestra: el nodo maestro está recibiendo datos de un esclavo

* Transmisión esclava: el nodo esclavo está enviando datos al maestro

* Recepción esclava: el nodo esclavo está recibiendo datos del maestro

I2C es un 'protocolo de comunicación en serie' de 'corta distancia', por lo que los datos se transfieren 'bit a bit' a lo largo de un solo cable o la línea SDA. La salida de bits se sincroniza con el muestreo de bits mediante una señal de reloj "compartida" entre el maestro y el esclavo. La señal del reloj siempre la controla el maestro. El maestro genera el reloj e inicia la comunicación con los esclavos.

Entonces, para resumir>

Número de cables utilizados: 2

Sincrónico o asincrónico: sincrónico

Serie o Paralelo: Serie

Señal de reloj controlada por: Nodo maestro

Voltajes utilizados: +5 V o +3,3 V

Número máximo de Maestros: Ilimitado

Número máximo de esclavos: 1008

Velocidad máxima: modo estándar = 100 kbps

Modo rápido = 400 kbps

Modo de alta velocidad = 3.4 Mbps

Modo ultrarrápido = 5 Mbps

Paso 4: Módulo multiplexor TCA9548A I2C

Módulo multiplexor TCA9548A I2C
Módulo multiplexor TCA9548A I2C
Módulo multiplexor TCA9548A I2C
Módulo multiplexor TCA9548A I2C
Módulo multiplexor TCA9548A I2C
Módulo multiplexor TCA9548A I2C

El TCA9548A es un multiplexor I2C de ocho canales (bidireccional) que permite controlar ocho dispositivos I2C separados mediante un único bus I2C de host. Solo necesita conectar los sensores I2C a los buses multiplexados SCn / SDn. Por ejemplo, si se necesitan ocho pantallas OLED idénticas en una aplicación, una de cada pantalla se puede conectar en cada uno de estos canales: 0-7.

El multiplexor se conecta a las líneas VIN, GND, SDA y SCL del microcontrolador. La placa de conexión acepta VIN de 1.65v a 5.5v. Ambas líneas de entrada SDA y SCL están conectadas a VCC a través de una resistencia pull-up de 10K (el tamaño de la resistencia pull-up está determinado por la cantidad de capacitancia en las líneas I2C). El multiplexor admite protocolos I2C tanto normales (100 kHz) como rápidos (400 kHz). Todos los pines de E / S del TCA9548A son tolerantes a 5 voltios y también se pueden usar para traducir de alto a bajo o de bajo a alto voltaje.

Es una buena idea colocar resistencias pull-up en todos los canales del TCA9548A, incluso si los voltajes son los mismos. La razón de esto se debe al conmutador NMOS interno. No transmite muy bien alto voltaje, por otro lado transmite muy bien bajo voltaje. El TCA9548A también se puede utilizar para la traducción de voltaje, lo que permite el uso de diferentes voltajes de bus en cada par SCn / SDn de manera que las partes de 1.8 V, 2.5 V o 3.3 V puedan comunicarse con partes de 5 V. Esto se logra mediante el uso de resistencias pull-up externas para elevar el bus al voltaje deseado para el maestro y cada canal esclavo.

Si el microcontrolador detecta un conflicto de bus u otra operación incorrecta, el TCA9548A se puede restablecer afirmando un nivel bajo en el pin RESET.

Paso 5:

Imagen
Imagen
Imagen
Imagen
Imagen
Imagen

TCA9548 permite que un solo microcontrolador se comunique con hasta '64 sensores ', todos con la misma o diferente dirección I2C asignando un canal único a cada subbus esclavo de sensor.

Cuando hablamos de enviar datos a través de 2 cables a varios dispositivos, entonces necesitamos una forma de abordarlos. Es lo mismo que el cartero que viene por una sola carretera y deja los paquetes de correo en diferentes casas porque tienen diferentes direcciones escritas en ellos.

Podría tener como máximo 8 de estos multiplexores conectados entre sí en direcciones 0x70-0x77 para controlar 64 de las mismas partes direccionadas I2C. Al conectar los tres bits de dirección A0, A1 y A2 al VIN, puede obtener una combinación diferente de las direcciones. Así es como se ve un byte de dirección del TCA9548A. Los primeros 7 bits se combinan para formar la dirección esclava. El último bit de la dirección del esclavo define la operación (lectura o escritura) a realizar. Cuando es alto (1), se selecciona una lectura, mientras que un bajo (0) selecciona una operación de escritura.

Paso 6: Cómo envía y recibe los datos el maestro

Cómo el maestro envía y recibe datos
Cómo el maestro envía y recibe datos
Cómo el maestro envía y recibe datos
Cómo el maestro envía y recibe datos

El siguiente es el procedimiento general para que un maestro acceda a un dispositivo esclavo:

1. Si un maestro quiere enviar datos a un esclavo (ESCRIBE):

- El transmisor maestro envía una condición de INICIO seguida de las direcciones del receptor esclavo y R / W configurados en 0

- El transmisor maestro envía datos en los 'registros de control de 8 bits' al receptor esclavo cuando el esclavo reconoce que está listo

- El transmisor maestro finaliza la transferencia con una condición de PARO

2. Si un maestro desea recibir o leer datos de un esclavo (LEE):

- El receptor maestro envía una condición de INICIO seguida de las direcciones del receptor esclavo y R / W configurada en 1

- Receptor maestro envía el registro solicitado para leer al transmisor esclavo

- El receptor maestro recibe datos del transmisor esclavo

- Una vez que se reciben todos los bytes, el maestro envía una señal NACK al esclavo para detener las comunicaciones y liberar el bus

- El receptor maestro finaliza la transferencia con una condición STOP

Un bus se considera inactivo si las líneas SDA y SCL están altas después de una condición de PARADA.

Paso 7: Código

Código
Código

Ahora, Int el código comencemos por incluir la biblioteca "Wire" y definiendo la dirección de los multiplexores.

#include "Wire.h"

#include "U8glib.h"

#define MUX_Address 0x70 // TCA9548A Dirección de codificadores

Luego, debemos seleccionar el puerto al que queremos comunicarnos y enviar los datos usando esta función:

void selectI2CChannels (uint8_t i) {

si (i> 7) return;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

A continuación, inicializaremos la pantalla en la sección de configuración llamando a "u8g.begin ();" para cada pantalla adjunta al MUX "tcaselect (i)";

Una vez inicializados, podemos hacer lo que queramos simplemente llamando a la función "tcaselect (i);" donde "i" es el valor del bus multiplexado y luego envía los datos y el reloj en consecuencia.

Paso 8: Escáner I2C

Escáner I2C
Escáner I2C

En caso de que no esté seguro de la dirección del dispositivo de su escudo I2C, ejecute el código 'I2C Scanner' adjunto para encontrar la dirección hexadecimal de su dispositivo. Cuando se carga en un Arduino, el boceto escaneará la red I2C, mostrando las direcciones que están respondiendo.

Paso 9: cableado y demostración

Cableado y demostración
Cableado y demostración
Cableado y demostración
Cableado y demostración

Alambrado:

Comencemos conectando el multiplexor a una placa NodeMCU. Conectar:

VIN a 5 V (o 3,3 V)

GND a tierra

SDA a D2 y

Pines SCL a D1 respectivamente

Para una placa Arduino, conecte:

VIN a 5 V (o 3,3 V)

GND a tierra

SDA a A4 y

Pines SCL a A5 respectivamente

Una vez que el MUX está conectado al microcontrolador, solo necesita conectar los sensores a los pares SCn / SDn.

Ahora, echemos un vistazo a esta demostración rápida en la que he conectado 8 pantallas OLED al multiplexor TCA9548A. Como estas pantallas usan comunicación I2C, se comunican con Arduino usando solo 2 pines.

Paso 10: ventajas y desventajas

Ventajas y desventajas
Ventajas y desventajas

VENTAJAS

* La comunicación requiere solo dos líneas de bus (cables)

* Existe una relación simple maestro / esclavo entre todos los componentes

* Sin requisitos estrictos de velocidad en baudios como, por ejemplo, con RS232, el maestro genera un reloj de bus

* El hardware es menos complicado que los UART

* Admite múltiples maestros y múltiples esclavos

* El bit ACK / NACK confirma que cada trama se transfirió con éxito

* I2C es un 'verdadero bus multimaestro' que proporciona arbitraje y detección de colisiones

* Cada dispositivo conectado al bus es direccionable por software mediante una dirección única

* La mayoría de los dispositivos I2C pueden comunicarse a 100 kHz o 400 kHz

* I²C es apropiado para periféricos donde la simplicidad y el bajo costo de fabricación son más importantes que la velocidad

* Protocolo bien conocido y ampliamente utilizado

DESVENTAJAS

* Velocidad de transferencia de datos más lenta que SPI

* El tamaño de la trama de datos está limitado a 8 bits.

* Se necesita un hardware más complicado de implementar que la tecnología SPI

Recomendado: