Tabla de contenido:

Presentación de I2C con módulos Zio y Qwiic: 6 pasos
Presentación de I2C con módulos Zio y Qwiic: 6 pasos

Video: Presentación de I2C con módulos Zio y Qwiic: 6 pasos

Video: Presentación de I2C con módulos Zio y Qwiic: 6 pasos
Video: Lesson 96: Barometric Pressure, Temperature, Approximate Altitude Sensor BMP390 with LCD 2024, Mes de julio
Anonim
Presentamos I2C con módulos Zio y Qwiic
Presentamos I2C con módulos Zio y Qwiic

Robin Sharma dijo: "Las pequeñas mejoras diarias a lo largo del tiempo conducen a resultados sorprendentes". Es posible que esté pensando, "Aw, ¿otra publicación de I2C?". Bueno, ciertamente hay miles de información cuando se trata de I2C. Pero estad atentos, este no es solo otro artículo de I2C. ¡El sistema Qwiic Connect y las placas de conexión de periféricos Zio son definitivamente cambiadores de juego I²C!

Introducción

Si está creando proyectos electrónicos y haciendo cosas increíbles, es posible que se haya dado cuenta de que a medida que sus proyectos se hacen más grandes, su tablero comienza a verse como un pozo de serpientes (un poco desordenado, ¿verdad?).

Además, si tiene varios proyectos en curso, pasa mucho tiempo cambiando los cables de un proyecto a otro.

Somos hacedores, entonces entendemos la lucha. Nuestra contribución más reciente a la comunidad de OHS es un sistema de creación de prototipos modular llamado ZIO, que adopta el sistema de conexión Qwiic. Qwiic es una forma muy conveniente de comunicar una placa de circuito programable a sensores, actuadores y placas de conexiones a través de I²C.

Paso 1: ¿Qué es I²C y por qué nos gusta?

¿Qué es I²C y por qué nos gusta?
¿Qué es I²C y por qué nos gusta?

I²C es el bus multimaestro más utilizado, lo que significa que se pueden conectar varios chips al mismo bus. Se utiliza en muchas aplicaciones entre un maestro y un esclavo o varios dispositivos maestro y esclavo. Desde microcontroladores hasta teléfonos inteligentes y aplicaciones industriales, especialmente para dispositivos de video como monitores de computadora. Se puede implementar fácilmente en muchos diseños electrónicos (y recientemente incluso más fácil con el conector Qwiic).

Si tuviéramos que describir I²C en dos palabras, probablemente usaríamos simplicidad y flexibilidad.

Una de las mayores ventajas de I²C sobre otros protocolos de comunicación es que es una interfaz de dos cables, lo que significa que solo necesita dos cables de señal, SDA (línea de datos en serie) y SCL (línea de reloj en serie). Puede que no sea el protocolo más rápido, pero es bien conocido por ser muy flexible, lo que permite flexibilidad en el voltaje del bus.

Otra característica importante que hace atractivo a este autobús es el compañerismo entre amo y esclavo. Se pueden conectar varios dispositivos al mismo bus y no es necesario cambiar el cableado entre los dispositivos, ya que cada dispositivo tiene una dirección única (el maestro selecciona el dispositivo para comunicarse).

Paso 2: echemos un vistazo más de cerca

Miremos más de cerca
Miremos más de cerca
Miremos más de cerca
Miremos más de cerca
Miremos más de cerca
Miremos más de cerca
Miremos más de cerca
Miremos más de cerca

Entonces, ¿cómo funciona I²C? Anteriormente mencionamos que una de las características más importantes es la tolerancia de voltaje, esto es posible ya que I²C usa un colector abierto (también conocido como drenaje abierto) para las líneas de comunicación SDA y SCL.

SCL es la señal de reloj, sincroniza la transferencia de datos entre los dispositivos en el bus I²C y es generada por el maestro. Mientras que SDA transporta los datos para enviar o recibir de los sensores u otros dispositivos conectados al bus.

La salida a la señal está conectada a tierra, lo que significa que cada dispositivo se impone como bajo. Para recuperar la señal a alta, ambas líneas están conectadas a un voltaje de suministro positivo a través de una resistencia pull up para terminar.

Con los módulos ZIO lo cubrimos, todas nuestras placas de conexión incorporan la resistencia de extracción necesaria.

I²C sigue un protocolo de mensajes para comunicar el maestro con los dispositivos esclavos. Las dos líneas (SCL y SDA) son comunes en todos los esclavos I²C, todos los esclavos del bus escuchan el mensaje.

El protocolo de mensajes sigue el formato que se muestra en la imagen adjunta:

Puede parecer complicado a primera vista, pero tenemos algunas buenas noticias. Cuando se usa Arduino IDE, existe la biblioteca Wire.h, para simplificar toda la configuración del protocolo de mensajes I²C.

La condición de inicio se genera cuando la línea de datos (SDA) desciende mientras la línea de reloj (SCL) sigue alta. Al configurar un proyecto en la interfaz de Arduino, realmente no necesitamos preocuparnos por generar la condición de inicio, se iniciará con una función específica (Wire.beginTransmission (slaveAddress)).

Además, esta función también inicia la transmisión con la dirección esclava específica. Para elegir el esclavo para comunicarse en el bus compartido, el maestro procede a pasar la dirección al esclavo para que se comunique. Una vez configurada la dirección para comunicarse con el esclavo correspondiente, el mensaje sigue con un bit de lectura o escritura, según el modo seleccionado.

El salve da una respuesta con un reconocimiento (ACK o NACK), y otros dispositivos esclavos en el bus descuentan el resto de los datos hasta que el mensaje está completo y el bus está libre. Después del ACK, una secuencia de un registro de direccionamiento interno de los esclavos continúa la transmisión.

Cuando se envían los datos, el mensaje de transferencia finaliza con una condición de parada. Para finalizar la transmisión, la línea de datos cambia a alta y la línea del reloj permanece alta.

Paso 3: I²C y ZIO

I²C y ZIO
I²C y ZIO

Nos dimos cuenta de que sería mejor planificar toda la información anterior en una conversación entre un maestro (también conocido como Zuino, nuestro micro) y esclavos (también conocido como placas de conexión ZIO).

En este ejemplo básico, estamos utilizando el sensor de distancia ZIO TOF y la pantalla OLED ZIO. El TOF proporciona la información de la distancia mientras que el ZIO Oled muestra los datos. Los componentes y dispositivos utilizados:

  • ZUINO M UNO - el maestro
  • Pantalla OLED ZIO - Slave_01
  • Sensor de distancia ZIO TOF - Slave_02
  • Cable Qwiic: fácil conexión para dispositivos I²C

Así es como es fácil conectar las placas entre sí usando Qwiic, no se necesita placa de pruebas, cables adicionales integrados o pines ZUINO. La línea de datos y reloj en serie del ZUINO se conecta automáticamente al sensor de distancia y al OLED mediante el conector Qwiic. Los otros dos cables son el 3V3 y GND.

En primer lugar, echemos un vistazo a la información necesaria, para comunicar el maestro con los esclavos necesitaríamos saber las direcciones únicas.

Dispositivo: Sensor de distancia ZIO

  • Número de refacción: RFD77402
  • Dirección I2C: 0x4C
  • Enlace a la hoja de datos

Dispositivo: Pantalla OLED ZIO

  • Número de refacción: SSD1306
  • Dirección: 0x3C
  • Enlace a la hoja de datos

Para encontrar la dirección única para los dispositivos esclavos, abra la hoja de datos proporcionada. Para el sensor de distancia, la dirección se proporciona en la sección Interfaz del módulo. Cada sensor o componente tiene una hoja de datos diferente con diferente información proporcionada. A veces puede ser difícil encontrarlo en una hoja de datos de 30 páginas (pista: abra la herramienta de búsqueda en el visor de PDF y escriba "dirección" o "ID de dispositivo" para una búsqueda rápida).

Ahora que se conoce la dirección única para cada dispositivo, para leer / escribir datos, se debe identificar la dirección del registro interno (también de la hoja de datos). Echando un vistazo a la hoja de datos del sensor de distancia ZIO, la dirección para obtener la distancia corresponde a 0x7FF.

En este caso particular, realmente no necesitamos esta información para usar el sensor como ya lo hace la biblioteca.

Siguiente paso, manos al código. ZUINO M UNO es compatible con Arduino IDE, lo que facilita mucho la configuración. Las bibliotecas necesarias para este proyecto son las siguientes:

  • Wire.h
  • Adafruit_GFX.h
  • Adafruit_SSD1306.h
  • SparkFun_RFD77402_Arduino_Library.h

Wire.h es una biblioteca arduino, las dos bibliotecas Adafruit se usan para el OLED y la última se usa para el sensor de distancia. Consulte este tutorial sobre cómo vincular bibliotecas *.zip a Arduino IDE.

Mirando el código, primero deben declararse las bibliotecas, así como la dirección del OLED.

En la configuración () comienza la transmisión y se muestra el texto para la funcionalidad del sensor de distancia.

El lazo () toma medidas en la distancia y el OLED lo imprime.

Consulte el código fuente de ejemplo en el enlace de github.

Usar ambas placas de conexión es bastante fácil en todos los sentidos. En el lado del hardware, el conector Qwiic hace que la configuración del hardware sea más rápida y mucho menos complicada que tener una placa de pruebas y cables de puente. Y para el firmware, el uso de las bibliotecas correspondientes para la comunicación I2C, el sensor y la pantalla hace que el código sea mucho más simple.

Paso 4: ¿Cuál es la longitud máxima del cable?

La longitud máxima depende de las resistencias pull up utilizadas para SDA y SCL y la capacitancia del cable. Las resistencias también determinan la velocidad del bus, cuanto menor es la velocidad del bus, mayor es el límite del cable. La capacitancia del cable limita el número de dispositivos en el bus, así como la longitud del cable. Las aplicaciones típicas limitan la longitud del cable a 2,5-3,5 m (9-12 pies), pero hay variaciones según el cable utilizado. Como referencia, la longitud máxima en aplicaciones I2C que utilizan cables de par trenzado 22 AWG blindados es de aproximadamente 1 m (3 pies) a 100 kbaundios, 10 m (30 pies) a 10 kbaudios.

Hay algunos sitios como mogami o WolframAlpha que permiten estimar la longitud del cable.

Paso 5: ¿Cómo conectar varios dispositivos en el mismo bus?

¿Cómo conectar varios dispositivos en el mismo bus?
¿Cómo conectar varios dispositivos en el mismo bus?
¿Cómo conectar varios dispositivos en el mismo bus?
¿Cómo conectar varios dispositivos en el mismo bus?

I2C es un bus serie, donde todos los dispositivos están conectados a un bus compartido. Con el conector Qwiic, las diferentes placas de conexiones se pueden conectar una tras otra utilizando el conector Qwiic. Cada placa tiene al menos 2 conectores Qwiic.

Creamos diferentes placas para resolver algunas de las limitaciones de Qwiic e I2C. La placa adaptadora Zio Qwiic se utiliza para conectarse a través de dispositivos Qwiic sin un conector Qwiic, utilizando Qwiic para el cable de cabecera macho de la placa de pruebas. Este simple truco crea posibilidades ilimitadas.

Para conectar diferentes dispositivos en una red de bus o árbol, se nos ocurrió el Zio Qwiic Hub.

Por último, pero no menos importante, el Zio Qwiic MUX permite la conexión de dos o más dispositivos usando la misma dirección.

Paso 6: ¿Qué es la terminación I2C?

Se requiere I2C para terminar, por lo que la línea es libre de agregar otros dispositivos. Esto puede ser un poco confuso, ya que el término de terminación se usa comúnmente para describir las resistencias pull-up del bus (para proporcionar un estado predeterminado, en este caso para suministrar corriente al circuito). Para las placas Zuino, el valor de la resistencia es de 4,7 kΩ.

Si se omite la terminación, no habrá comunicación en absoluto en el bus; el maestro no podría generar la condición de inicio, por lo que el mensaje no se transmitirá a los esclavos.

Para obtener más información y las capacidades de Zio, consulte los últimos productos de Zio. El objetivo de este artículo es explicar los conceptos básicos de la comunicación I²C y cómo funciona con el conector Zio y Qwiic. Estén atentos para más actualizaciones.

Recomendado: