Arduino I2C comunicación entre 2 redes maestras

1

Tengo 2 microcontroladores Arduino, cada uno con una red de dispositivos I2C conectados (uno tiene 2 ADC y el otro una pantalla LCD y un RTC). ¿Cómo puedo usar la conexión I2C para transferir los valores obtenidos por el primer uC de los ADC al segundo? Ambos uC son maestros en sus buses I2C. Estaba pensando en hacer un software I2C en la segunda unidad y conectarlo como esclavo del primero (por lo que el segundo controlador tendría 2 puertos I2C: un hardware y un software). El problema es que no puedo encontrar ninguna biblioteca I2C de software que funcione como esclavo. Todos son maestros.

Esperando tus ideas.

La pregunta es, ¿puedo hacer 2 redes I2c usando un Arduino Mega2560? Uno como maestro en el puerto de hardware para comunicarse con el LCD y el RTC y uno como esclavo en un puerto de software en otros 2 pares de pines (para SCL y SDA) para recibir datos de otro maestro arduino ...

Después de analizar todos los datos, llegué a la conclusión de que los 2 buses I2C no se pueden vincular entre sí. En el puerto I2C externo que tengo disponible en la adquisición de datos uC, conectaré otro arduino como esclavo que recibirá la información y la pasará usando un adaptador inalámbrico (probablemente un NRF24N01). De esa manera, no necesito tener cables desde mi controlador solar al arduino que informa la producción al sitio web de pvoutput.

    
pregunta Mihai

4 respuestas

0

De los comentarios, desea poder conectarse solo al bus I2C en cada uno de sus proyectos separados y transferir datos.

Wirning te permite ejecutar un Arduino como un Maestro I2C o un Esclavo. No puede ejecutar el software de cableado maestro y esclavo en un solo micro ya que ambos quieren usar el hardware de la USI, pero como solo tiene una USI, puede conectarse a un solo bus de todos modos.

Yo sugeriría que una forma efectiva sería utilizar un ATTiny85 como interfaz esclavo I2C en cada bus y luego conectarlos juntos a través de un software UART. Hay una muy buena biblioteca TinyWire disponible para ATTiny85 de Adafruit ... también tienen una tabla muy pequeña llamada Trinket también que podría usar.

Hay un montón de tableros ATTiny85 disponibles (como Digispark) que pueden conectarse al entorno de programación Arduino, por lo que debería ser una forma sencilla y económica de crear un esclavo I2C.

Si bien algunos pueden decir que esto es una exageración, sería extremadamente sencillo de implementar y no requeriría ninguna modificación de hardware en su proyecto.

    
respondido por el Jack Creasey
1

IIC no es una buena opción para la comunicación entre pares.

La forma más fácil de conectarse a los controladores de micron es probablemente con UART. Tenga en cuenta que proporciona un canal separado y asíncrono en cada dirección. Usted tampoco está atascado con las tasas de baudios estándar. Use algo rápido que se pueda derivar directamente de ambos relojes. Puede hacer fácilmente un MBaud o más entre UART en el mismo tablero.

Especialmente si aumenta la velocidad en baudios, podría ser una buena idea implementar el control de flujo. Algunos UARTS con controlador de micron tienen RTS / CTS incorporado, pero incluso si no, este tipo de capacidad es fácil de agregar en el firmware. Asegúrese de que el receptor pueda almacenar al menos tantos caracteres como haya en el FIFO de hardware del remitente. De esa manera, la línea de control de flujo se puede usar en el remitente para simplemente no escribir más datos en el hardware. Los microcontroladores tienden a tener pequeños FIFO de salida UART (generalmente solo uno o dos, rara vez más de 4), por lo que esto no es un gran problema.

    
respondido por el Olin Lathrop
0
  • Solo puede tener un maestro I2C en el bus I2C. (Puede que haya algunos protocolos avanzados donde puede cambiar quién es el maestro).
  • Muchos procesadores integrados pueden configurarse como maestro I2C o esclavo. (No creo que la biblioteca Arduino I2C de valores permita un cambio fácil entre maestro y esclavo. Puede que haya Arduinos que utilicen procesadores sin soporte para el modo esclavo).
  • Estos tipos de protocolos (SPI o I2C) deben ser usados por partes que compartan la misma placa y la misma fuente de alimentación. Por lo general, no son lo suficientemente robustos como para sufrir las complicaciones de (por ejemplo) fallas de energía parciales, enchufes en caliente o cables excesivamente largos.

Todo lo dicho, busque aquí para saber cómo conectar dos tableros Arduino Uno (un maestro y un esclavo) utilizando un bus I2C.

    
respondido por el st2000
0

Lo que @olin ha sugerido es algo que debes considerar.

En caso de que necesite dos modos de I2C (maestro y esclavo), siga leyendo.

El arduino puede configurarse como maestro o esclavo en cualquier momento dado. Por lo tanto, intentaría esto. El arduino que tiene que asumir ambos roles (llámalo Arduino A) se puede configurar como esclavo de forma predeterminada. De esta manera, el Arduino no perderá ningún comando del Arduino B (el arduino que siempre dominará).

El Arduino A puede decidir cuándo cambiar su función a Maestro . Esto depende de los intervalos periódicos de los que tiene que leer los datos. Una vez que se leen los datos de los sensores o se escriben los datos en la pantalla LCD, el arduino A puede asumir nuevamente el papel de esclavo.

Una captura es que, mientras que Arduino A ha asumido el papel de maestro, Arduino B no puede comunicarse con Arduino A. Esto se puede resolver de muchas maneras:

  1. Al usar un GPIO de repuesto, Arduino A informa a B que está ocupado
  2. El Arduino B puede reintentar después de un pequeño período
  3. Arduino A puede informar a Arduino B cuando está listo para la comunicación (ejemplo: avisar a B cuando los datos a comunicar están disponibles a través de GPIO).
  4. Programe el Arduino B para escribir periódicamente los datos que Arduino A espera.

Considere enlace si es útil. Hay buena información acerca de las configuraciones. Todo en una sola página. Por favor, no se pierda mientras navega.

Finalmente, los factores que influyen en la decisión de la lógica son sus propias demandas de aplicación. La frecuencia de la comunicación, que puede ser de vez en cuando o contigua, la criticidad del tiempo de respuesta, no es la menor cantidad de recursos que nos gustaría ahorrar, en caso de que uno decida implementar el software esclavo I2C también.

    
respondido por el Umar

Lea otras preguntas en las etiquetas