Bus I2C dividido con un toque más profesional

La semana pasada, abordé algunos de los detalles amargos de un truco interesante que nos permite dividir la línea de reloj I²C en múltiples salidas a través de un demultiplexor, dándonos efectivamente "Chip Selects" para dispositivos con la misma dirección.

Esta semana pensé que sería mejor organizar un método un poco más práctico para resolver el mismo problema hablando con dispositivos I²C que tienen todas las mismas direcciones.

De hecho, he tenido una excelente colección de comentarios sobre la misma familia de chips que utilizo para manejar este problema, y ​​me alegra que estemos saltando del mismo liderazgo mientras exploramos el espacio del proyecto.

Recordando el trabajo de nuestros predecesores

Antes de descubrir una forma inteligente de piratear nuestra propia solución, es mejor ver si alguien antes que nosotros ha pasado por todos los problemas para resolver ese problema. En este caso, tenemos suerte, tanto que el comportamiento exacto de separación de bus que queremos está integrado en un circuito integrado discreto llamado PCA9547.

Vale la pena recordar que nuestros predecesores trabajaron incansablemente para crear una pieza de silicio tan valiosa.

El PCA9547 (PDF) es un multiplexor de bus I²C octal, y digo que probablemente sea la solución más práctica para este escenario. El chip no solo proporciona 8 buses separados, sino que se pueden conectar hasta siete PCA9547 adicionales para permitir la comunicación con hasta 64 dispositivos idénticos. Además, el PCA9547 tiene la ventaja adicional de ser compatible con dispositivos de nivel lógico de 3.3V y 5V en buses separados. Por último, a diferencia del "truco" de la semana pasada, cada autobús es bidireccional, lo que significa que PCA9547 es completamente compatible con la especie I²C.

La selección de uno de los ocho buses I²C se realiza mediante transferencia en el propio bus I²C. Vale la pena mencionar que este método introduce una pequeña latencia en comparación con la solución de divisor de reloj anterior de la semana pasada. Sin embargo, si planea leer varios dispositivos consecutivamente desde un solo bus de todos modos, entonces no es probable que la lectura / escritura simultánea de cada dispositivo sea una limitación para su sistema.

Con un tablero de escape para mostrar las almohadillas, me burlé de una biblioteca Arduino rápida y sucia para comenzar la conversación y dupliqué la demostración de la semana pasada.

Afortunadamente, con una única función para cambiar la dirección del bus, el PCA9547 es una solución casi desplegable que "simplemente funciona". Definitivamente es tranquilizador saber que podemos apoyarnos en los hombros de nuestros diseñadores de chips para hacer el trabajo rápidamente. (Probablemente también hayan hecho algunas pruebas más para asegurarse de que su dispositivo funcione como se prometió). Al igual que la semana pasada, consulte el código fuente de la demostración en Github.

Hasta la próxima, ¡salud!

  • Pierce Nichols dice:

    Versión corta: si puede pensar en una función lógica generalmente útil, alguien fabrica un chip que hace eso y Digikey lo lleva.

  • Dovepistil dice:

    Esto no es un truco, es información valiosa para mí, gracias a la buena gente que maneja Hackakday. "¿Es posible etiquetarlo con una etiqueta de" información de ingeniería "?

    ¡Hurra! ¡Hurra! por La-Tecnologia!

  • RandyKC dice:

    Me encantan estas publicaciones. Sí, no es un truco, es cómo hacerlo.
    Llamemos a estos "HackADos"
    😉

  • xCVC76woUia dice:

    Puede tener 8 en el bus superior para 64 dispositivos, o 8 anidados en profundidad para 16.777.216 buses.

    • MrTrick dice:

      A… ...
      Puede adaptar hasta 153 MILLONES de autobuses:
      http://mindbleach.com/words/i2c-and-device-limits/

  • Andrés Pullin (@AndrewPullin) dice:

    ¿El Arduino incluso tiene I2C? Supongo que es Teensy o algo así que en realidad tiene algunos efectos secundarios.

    • Tomás dice:

      Si. Sí Sí.

      • Andrés Pullin (@AndrewPullin) dice:

        Entonces, ¿cuál es la mejor solución Arduino para hacer algo? ¿Teensy + sparkfun adaptador de factor de forma arduino?
        El cero es $ 50 ... no está claro si las placas Freedom realmente tienen soporte para un IDE de Arduino ...

        • Bradley Gawthrop (@talldarknweirdo) dice:

          ¿Hay algún problema con Uno R3? Adafruit los está fabricando para el mercado estadounidense ahora, a $ 25.

          • AirForce590 dice:

            MicroCenter vende su propio clon por $ 5 USD.

          • Andrés Pullin (@AndrewPullin) dice:

            Si. Es una pieza de 2K / 32K que funciona a 16Mhz ... la Teensy es una pieza de 64K / 256K a 72Mhz, tiene muchos periféricos redundantes y cuesta $ 5 más barata.

    • timgray1 dice:

      Todo tiene i2c. Puedo construir una placa 6809 usando I2C. Es muy fácil de agregar a cualquier cosa.

      • yo dice:

        Los chips Atmega utilizados en Arduinos tienen soporte de hardware para I2c. Las bibliotecas de Arduino facilitan su uso. No es exactamente lo mismo que el bit I2c en una CPU antigua.

  • Aaron dice:

    Para tales artículos, sería genial si pudiéramos mantenerlos en alguna colección en la-tecnologia.io, como pestaña favorita o algo así. Marco tantas cosas de aquí que mis marcadores se hinchan.

    • Greenaum dice:

      Consíguete una "carpeta" en tus marcadores. Digo "directorio" porque lo sucio es intentar reemplazar "directorios" en algunos sistemas operativos no muy buenos de las últimas décadas. Pero de todos modos. Haz eso. Organizar tus marcadores es fácil.

    • Matt Freund dice:

      Ésa es la razón principal por la que nunca he escrito artículos extensos. Es deprimente, desde el punto de vista del autor, dedicar tiempo a educar a la gente cuando sus esfuerzos están finalmente disponibles, más allá de los 2 días. Archivado, pero generalmente indetectable. La-Tecnologia ofrece bastante buenas noticias y contexto para los piratas informáticos, pero no hay lugar para cosas de mejor calidad como esta.

    • goebish dice:

      Ojalá pudiera "me gusta" artículos directamente en HAD también, como instructivos.

  • Dovepistil dice:

    Oh sí, tal vez llámelo notas de ingeniería la-tecnologia, o algo así.

    Creo que el mejor actual 100% compatible con Arduino IDE es el Metro de Adafruit. Necesita esos viejos escudos Ardu que consumen mucho tiempo y demás, tiene hardware serial COM (2), I2C y SPI, y parece un hardware duro de $ 19.95 (el mío se entregó recientemente)
    Mi operación de data akc simplemente no puede tener agujeros y el golpe de la broca podría causar problemas latentes. Entonces puedo COM a la consola IDE, datos COM del DMM, datos GPS I2C para marcas de tiempo perfectas, datos I2C para almacenamiento en tarjeta SD y SPI mi hdw. arriba / abajo contra. ¡Se adapta perfectamente a mi programa!

  • Stefanpirvu dice:

    Así es como funcionan los trenes de modelos digitales (la parte del reloj), se llama protocolo DCC. Todo lo que necesita es un error / par bit / byte. ¡Buen artículo! 😉

  • Antron Argaiv dice:

    De hecho, tengo una patente para hacer precisamente eso. En lugar de un divisor de bus I2C, utilicé una expansión I2C-IO. Cada salida de expansión puede actuar como habilitación de chip para uno de un grupo de periféricos I2C con la misma dirección.

    https://www.google.com.ar/patents/US6301623

    • Antron Argaiv dice:

      Como se muestra en la patente, también puede usar un mux analógico CMOS para compartir un bus I2C

    • Tomás dice:

      * tenía * una patente:
      17 de mayo de 2013 Se envió el recordatorio de mantenimiento de REMI
      9 de octubre de 2013 LAPS falla por incumplimiento de las tarifas de atención
      26 de noviembre de 2013 FP Caducó por impago de la pensión alimenticia

      • Antron Argaiv dice:

        Cuando dije "yo" tenía una patente ... lo que realmente quise decir fue que hice el trabajo y luego se lo vendí a mi empleador por $ 1.
        El empleador ya no está involucrado en el negocio, al menos, ya no está involucrado en el mismo negocio con el mismo nombre, después de haber sido comprado / vendido y / o intercambiado a otras empresas.

        Sin embargo, se ve bien en el currículum.

        🙂

Alejandro Vargas
Alejandro Vargas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.