Как подключить несколько акселерометров MMA8451 (протокол I2C) с помощью одного Arduino Mega

Как подключить четыре акселерометра (adafruit) MMA8451 (с использованием протокола I2C) с помощью одного Arduino Mega? Что меня смущает, так это то, что у меня, очевидно, есть только один SDA и SCL на Arduino Mega. Так как же мне все это соединить? Мультиплексор? Мне нужно четыре, потому что у меня по одному на каждой ноге робота. Или, может быть, нецелесообразно ставить акселерометр на каждую ногу робота? Я немного новичок в электронике, поэтому, пожалуйста, объясните подробно, если можете. Спасибо.

Примечание для модераторов: мне бы очень хотелось получить ответ на этот вопрос, даже если он не соответствует сверхстрогим правилам вопросов. Кажется, каждый раз, когда я пишу здесь, всегда находится один человек, который удаляет это по множеству тривиальных причин. Пожалуйста, дайте мне хотя бы получить ответ. Спасибо!

, 👍0

Обсуждение

Глядя на таблицу данных MMA8451Q, заводские настройки по умолчанию имеют два отдельных адреса I2C 0x1C и 0x1D, которые можно выбрать с помощью контакта SA0, но если вы хотите, чтобы шина использовалась совместно, они могут запрограммировать на заводе другие идентификаторы, чтобы вы могли разделить 4 на один. автобус, если бы вы могли купить пару фишек не по умолчанию. В противном случае вам понадобятся две шины, чтобы различать 4 чипа., @Dave X


4 ответа


2

Краткое объяснение: когда вы разговариваете с подчиненным устройством через I2C, вы начинаете с адреса (подчиненного) устройства. Затем вы отправляете сообщение. Это все равно, что позвонить своему коллеге в офис вместе со многими другими людьми. Вы говорите: «Джон», и когда он это понимает, продолжаете сообщение, типа «пойдем попьем кофе».

Такая схема позволяет добавить до 127 устройств на одну шину I2C. У каждого устройства должен быть свой адрес (извините, в офисе нельзя иметь двух Иванов, это приведет к конфликту). Обычно два разных типа устройств будут иметь разные адреса I2C, но может случиться так, что вам придется использовать два (или более) одинаковых адреса (как в вашем примере). В этом случае см. ниже.

Многие устройства с интерфейсом I2C допускают изменение адреса. Используя это средство, вы можете общаться со многими одними и теми же устройствами через одну и ту же пару кабелей.
Вы можете проверить, есть ли у выбранного вами акселерометра возможность изменения адреса: на рисунке ниже показан акселерометр с вкладкой «Адрес». Если перемычка не установлена, вы получите один адрес, если установлена, адрес этого устройства будет другим, что позволяет использовать два таких акселерометра на одной шине I2C. К сожалению, в этом примере возможно использование максимум двух одинаковых устройств.
Accel

Конечно, существуют устройства с более чем двумя возможными адресами, их нужно поискать.
И да, можно использовать один Arduino для связи со многими устройствами I2C.

РЕДАКТИРОВАТЬ:
Просматривая некоторые акселерометры Adafruit, я нашел эту страницу: https://learn.adafruit.com/i2c-addresses

И небольшое примечание не по теме: если вам сложно найти I2C с более чем двумя адресами, проверьте, проще ли использовать протокол SPI. В этом случае вам понадобятся (отредактированные для исправления названий линий шины после комментария пользователя CrossRoads) провода MISO, MOSI, SCK и CS (выбор чипа). Выбор чипа индивидуально подключается к каждому подчиненному устройству. Это позволяет выбрать конкретное устройство, не решая проблему.

,

SPI также будет быстрее опрашивать все устройства. SPI использует SCK, MISO, MOSI и уникальный выбор чипа для каждого устройства. Связь с Mega может осуществляться на тактовой частоте до 8 МГц, что в 20 раз быстрее, чем 400 кГц I2C., @CrossRoads


2

Говорим о протоколе I2C. Адрес подчиненного устройства имеет 7 бит, что означает, что один I2c может обрабатывать 127 подчиненных устройств I2C с разными адресами. Таким образом, вы можете подключить 127 устройств к одному порту I2C, просто убедитесь, что адреса подчиненных устройств отличаются друг от друга.

Некоторые устройства I2C имеют возможность выбора вспомогательного адреса путем установки высокого и низкого уровня некоторых контактов. Если вы используете несколько одинаковых датчиков, их подчиненный адрес устанавливается по-разному.

,

1

Общий метод адресации нескольких устройств I2C:

  1. Если устройства имеют только один адрес: используйте мультиплексор шины I2C.
  2. Если устройство(а) имеет два адреса, управляемых адресным контактом: используйте цифровые выходные контакты Arduino, чтобы выбрать, к какому устройству обращаться, например, установите управляющий контакт для выбранного устройства на низкий уровень, а для других — на высокий, и используйте соответствующие адрес для обращения к устройству.

При заводской настройке MMA8451Q он имеет два разных адреса I2C 0x1C и 0x1D, управляемых контактом SA0. Используйте цифровые выходные контакты на Arduino Mega для адреса выбранного устройства (адрес 0x1C), установив соответствующий выходной контакт на низкий уровень для выбранное устройство и вывод управления для остальных на высокий уровень (адрес 0x1D). Используйте адрес 0x1C для взаимодействия с выбранным устройством.

Удачи!

,

0

Просто соедините все линии акселерометров SCK и SDL вместе, а затем вам просто нужно получить конкретный кодовый адрес, который вы используете, чтобы получать данные от любого из акселерометров.

,