Tabla de contenido:
- Paso 1: requisito de hardware
- Paso 2: Temas cubiertos
- Paso 3: Conceptos básicos del bus I2C
- Paso 4: Módulo multiplexor TCA9548A I2C
- Paso 5:
- Paso 6: Cómo envía y recibe los datos el maestro
- Paso 7: Código
- Paso 8: Escáner I2C
- Paso 9: cableado y demostración
- Paso 10: ventajas y desventajas
- Paso 11: Gracias
Video: Módulo multiplexor TCA9548A I2C - Con Arduino y NodeMCU: 11 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
¿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
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
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
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:
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
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
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
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
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
* 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:
MULTIPLEXOR DE SALA: 4 Pasos
MULTIPLEXOR DE SALA: (Actualizado el 24 de mayo de 2019, seguirán las actualizaciones futuras) Hola. Leí en otro foro, (¿no recuerdo cuál?), De este tipo que buscaba una forma inteligente de medir el nivel de un "líquido" en un tanque grande (profundo). El problema para él era el de la necesidad
Módulo RF 433MHZ - Haga el receptor y el transmisor desde el módulo RF de 433 MHZ sin ningún microcontrolador: 5 pasos
Módulo RF 433MHZ | Haga el receptor y el transmisor desde el módulo RF de 433 MHZ sin ningún microcontrolador: ¿Le gustaría enviar datos inalámbricos? fácilmente y sin necesidad de microcontrolador? ¡Aquí vamos, en este instructivo le mostraré mi transmisor y receptor de rf básico listo para ser usado! En este instructivo usted puede enviar y recibir datos usando muy ver
Tutorial del módulo E32-433T LoRa - Tablero de bricolaje para módulo E32: 6 pasos
Tutorial del módulo E32-433T LoRa | Tablero de bricolaje para módulo E32: ¡Hola, chicos! Aquí Akarsh de CETech. Este proyecto mío es más una curva de aprendizaje para comprender el funcionamiento del módulo E32 LoRa de eByte, que es un módulo transceptor de 1 vatio de alta potencia. Una vez que entendemos el funcionamiento, tengo el diseño
¿El puerto USB de NODEMcu no funciona? Cargue el código usando el módulo USB a TTL (FTDI) en solo 2 pasos: 3 pasos
¿El puerto USB de NODEMcu no funciona? Cargue el código usando el módulo USB a TTL (FTDI) en solo 2 pasos: Cansado de conectarse a muchos cables desde el módulo USB a TTL al NODEMcu, siga estas instrucciones para cargar el código en solo 2 pasos. NODEMcu no funciona, entonces no se asuste. Es solo el chip del controlador USB o el conector USB
Arduino + Java (multiplexor): 16 pasos
Arduino + Java (Multiplexor): Herramientas a necesitar: 1 Arduino Uno con cable USB.1 Protoboard.8 Cables.5 Leds.1 Resistencia 330