Изменение адреса I2C на Garmin LidarLite, сброс при перезагрузке
Я пытаюсь изменить адрес I2C нескольких Garmin LidarLite-V3. Я могу изменять их по одному, используя библиотеку LidarLite C ++, используя функцию setI2Caddr, и могу видеть обновленный адрес I2C с помощью i2cdetect. Проблема в том, что когда LidarLite теряет питание и снова включается, адрес сбрасывается на значение по умолчанию 0x62. Это означает, что когда у меня параллельно подключено несколько LidarLite, все они по умолчанию имеют один и тот же адрес I2C, и я не могу индивидуально изменять адреса с помощью функции setI2Caddr. Как я могу изменить адрес I2C, чтобы он сохранялся в течение всего цикла питания, или, в качестве альтернативы, изменить адреса, когда несколько лидарлайтов подключены параллельно?
@Peter King, 👍-3
1 ответ
Об этом говорится в руководстве к Garmin Lidar Lite. Со страницы 5 в разделе "Настраиваемый адрес I2C":
Это можно использовать для запуска нескольких устройств на одной шине, включив одно, изменив его адрес, затем включив следующее устройство и повторив процесс.
Адрес I2C будет восстановлен по умолчанию после отключения питания
Таким образом, вы не можете изменить тот факт, что адреса I2C будут сброшены на значение по умолчанию при включении питания. Но при запуске вы можете присвоить каждому датчику его собственный адрес. Для этого вам нужно подключить контакты включения питания к цифровым контактам на Arduino. Когда цифровой вывод находится на ВЫСОКОМ уровне, датчик отключается. Итак, вы начинаете со всех контактов включения питания на ВЫСОКОМ уровне. Затем вы устанавливаете первый контакт включения питания на НИЗКИЙ УРОВЕНЬ, устанавливаете I2C-адрес датчиков с помощью соответствующей команды I2C и затем переходите к следующему датчику. По завершении у каждого датчика есть соответствующий адрес, и вы не получите никаких столкновений на шине, так как у вас всегда есть только один датчик с включенным адресом по умолчанию в любое время.
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Как отправить строку на мастер с помощью i2c
- Как выбрать альтернативные контакты I2C на ESP32?
- Что означает в I2C «NACK получен»?
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- Несколько датчиков I2C с одинаковым адресом