Cómo probar una red i2c atmega (arduino)

0

Primero que nada, lo siento por mi mal inglés y por esta pregunta "teórica" sobre cómo es la mejor manera de hacer las cosas. Acabo de salir de la universidad y nadie me ha contado cómo se pueden resolver los problemas de manera práctica.

Estoy intentando desarrollar una red de 4 atmega (estoy usando la plataforma Arduino), 1 maestro y 3 esclavos. se están comunicando a través de i2c.

Estoy buscando una forma inteligente de probarlo. En este momento mi depuración está ocurriendo a través del protocolo serial: tengo algunos

Serial.println(...);

y los estoy leyendo conectando los Arduinos a través de USB y leyendo los mensajes entrantes en serie con el monitor serie en el IDE de Arduino.

Lo que estoy haciendo ahora es:

  1. Codificar esclavos con un programa de prueba (uno para cada esclavo) en el maestro (alimentado con una fuente de alimentación normal).
  2. Cuando esté "seguro" de que el esclavo está bien, desconecte el USB del esclavo, enchufe el maestro, codifique el maestro.
  3. Haz esto para cada esclavo.
  4. reza.

Este flujo de trabajo tiene muchos problemas; Es una comunicación ciega. Cuando estoy trabajando en el maestro, realmente no sé qué está sucediendo con los esclavos, y viceversa. Entonces, si un fallo de Arduino provoca que el maestro se bloquee (porque el protocolo I2C no permite el hecho de que un esclavo no responde o está apagado) y tengo que restablecer todos los esclavos (lo hago al apagar la fuente de alimentación de todos los esclavos).

Un problema más: algunos esclavos necesitan operación en tiempo real con motores paso a paso, y si un motor está funcionando y se producen algunas interrupciones de la biblioteca de protocolos I2C Wire.h (y esto ocurre cada vez que el maestro requiere algún mensaje del esclavo , Creo que), eventualmente puede suceder mientras el motor está en marcha y esto causa que el movimiento de los motores (que debe ser lo más lineal posible) sea "trotado". Para evitar esto, solo tengo comunicación unidireccional: los esclavos solo reciben órdenes. No sé si esta es la mejor solución pero parece funcionar.

La comunicación unidireccional a ciegas, la conexión y desconexión repetidas del USB, la conexión y desconexión de la fuente de alimentación y el presionar los botones de reinicio me hacen sentir estúpido. Hasta ahora, he hecho desarrollo de software con IDE (Eclipse) que proporciona depuración. Si tengo que sincronizar algunos subprocesos, puedo tener impresiones o lo que sea que haga la vida más sencilla, y con el software que estoy haciendo la prueba unitaria que me da una buena herramienta para aislar el error. Ahora, con la red Arduinos, cuando algo sale mal, no tengo idea de cómo encontrar dónde está el problema. Esta es mi primera red de hardware, y es frustrante.

Necesito algunos consejos para descubrir un flujo de trabajo inteligente, tener una buena forma de probar mi sistema y sentirme un programador.

    
pregunta nkint

2 respuestas

1

Puede probar y monitorear el bus utilizando BusPirate . De esta manera, puede ver lo que sucede en el bus y lo ayudará a solucionar los problemas.

Aquí hay un video que demuestra el escaneo del bus i2c.
También se puede usar como un analizador I2C como se muestra en este video .

    
respondido por el Chetan Bhargava
0

¿Conecta todas las tarjetas arduino en un hub usb?

Está bien que los esclavos solo reciban, pero no tiene garantía de que los comandos se hayan recibido correctamente. Algún tipo de ACK es probablemente mejor.

    
respondido por el David

Lea otras preguntas en las etiquetas