Comunicaciones I2C con Arduino

0

Mi clase de Diseño y Desarrollo de Ingeniería (EDD) está trabajando en un globo de gran altitud (HAB) y mi amigo y yo estamos a cargo de la recopilación de datos. Parece que vamos a utilizar un Arduino (Uno o Due basado en puertos necesarios) y tableros de ruptura de sensores para registrar datos. Mientras exploraba nuestras posibilidades, no estaba seguro de si ejecutar varios dispositivos I2C en el Arduino fuera realista.

Por ejemplo, al ver los tutoriales para un acelerómetro (3 ejes) y un giroscopio (3 ejes) , encontré que ambos requieren el uso de SDA y Puertos SCL en el Arduino. Si he leído correctamente, cada dispositivo tiene una dirección I2C diferente, y puedes usarlos en el mismo puerto, pero no estaba seguro. Si eso es posible, ¿cómo sabe cuál es la dirección o cómo asignar la dirección? ¿Hay un límite máximo de dispositivos I2C que un Arduino pueda manejar? He revisado ¿Cómo conectar varios dispositivos con interfaz i2c en un solo pin A4 (SDA) y A5 (SCL) en Arduino? pero no estoy seguro de que esto responda mis preguntas completamente.

    
pregunta SuperAdmin

2 respuestas

3

La dirección del acelerómetro es 0x1D por defecto y se puede cambiar a 0x1C con un poco de soldadura (se encuentra en la sección de puente de selección de dirección de la guía que ha vinculado). La dirección del giroscopio es 0x69 por defecto y se puede cambiar a 0x68 (Se encuentra en la sección 6.1.1 de la hoja de datos, y en la sección Puente de dirección I2C de la guía que vinculó). Arduino teóricamente puede admitir tantos dispositivos I2C como se puedan adquirir sin tener dos que compartan una dirección.

Tenga en cuenta también que los acelerómetros y los giroscopios a menudo se empaquetan juntos en un solo chip, con lo que puede ser más fácil trabajar. He usado el MPU-9150 con buenos resultados.

    
respondido por el Saidoro
4
  

Si he leído correctamente, cada dispositivo tiene una dirección I 2 diferente, y puedes usarlos en el mismo puerto, pero no estaba seguro. Si eso es posible, ¿cómo sabe cuál es la dirección o cómo asignar la dirección?

En un periférico I 2 C, una dirección de esclavo está cableada 1 dentro del chip. En algunos periféricos, algunos bits de la dirección del esclavo pueden configurarse ajustando los pines de selección de dirección. Este último permite asignar direcciones distintas a varios dispositivos esclavos del mismo tipo, y pueden aparecer en el mismo bus I 2 C sin causar una colisión de direcciones. La fuente de información definitiva en I 2 selección de dirección C es la hoja de datos para el dispositivo esclavo.

Tomemos MMA8452Q por ejemplo. Las direcciones se especifican en la Tabla 1 de la hoja de datos (rev.9) . Además, Sparkfun habla sobre el puente de selección de dirección en su Guía de conexión .

1 Si el propio dispositivo esclavo es un microcontrolador, la dirección generalmente se establece en su firmware.

  

¿Hay un límite máximo de I 2 dispositivos C que Arduino puede manejar?

Todas las direcciones de 7 bits deben ser mayores que 0x07 y menores que 0x78 (aquí hay un buen gráfico de direcciones I 2 C ). Un Arduino puede hablar con todas estas direcciones. Además, la cantidad de dispositivos esclavos se puede aumentar al tener múltiples buses I 2 C, y mediante la conmutación de buses.

Otro factor limitante es la capacitancia total del bus I 2 . Un buen enfoque conservador es mantener la capacitancia por debajo de 400pF. Más detalles aquí.

  

Finalmente

Si planea trabajar con I 2 C, debe leer I 2 especificación del bus C . Al menos, hojearlo.

    
respondido por el Nick Alexeev

Lea otras preguntas en las etiquetas