Одновременная работа устройств i2c

Тема в разделе "Arduino & Shields", создана пользователем Roman Koff, 15 мар 2026.

  1. Roman Koff

    Roman Koff Нерд

    Разрабатываю проект с использованием https://amperka.ru/product/troyka-imu-10-dof и https://amperka.ru/product/troyka-rtc (I2C).

    Использую библиотеки TroykaRTC и TroykaIMU.

    Не могу организовать одновременную работу устройств. По отдельности они работают, а вместе не хотят (IMU работает, а RTC нет).

    Как правильно выделить устройства? Пробовал указывать адрес при создании IMU — не помогло. Для RTC такого функционала не нашел.


    I2C device found at address: 0x18, 0x1C, 0x50, 0x5C, 0x68.

    UPD: Важная деталь. На модуле TroykaIMU нет перемычек для смены адреса.



    Код (C++):
    #include <Wire.h>
    #include <TroykaRTC.h>
    #include <TroykaIMU.h>

    RTC clock;
    Accelerometer accelerometer; // (0x18);

    void setup() {
      clock.begin();
      accelerometer.begin();
    }

    void loop() {
      clock.read();
      Serial.print(clock.getSecond());
      Serial.print(" ");
      Serial.println(accelerometer.readAccelerationAX());
    }
     
    Последнее редактирование: 15 мар 2026
  2. parovoZZ

    parovoZZ Гуру

    значит кто-то из них сильно тянет линии наверх.
    адреса точно не совпадают?
     
  3. Roman Koff

    Roman Koff Нерд

    Да блин... Все оказалось еще хуже...
    Адреса точно пересекаются. Для RTC — 0x50, 0x68, для IMU — 0x18, 0x1C, 0x5C, 0x68. Собсно часы на 0x68 и все.
    Поменять адрес на часах нельзя, а TroykaIMU у меня первой версии, без перемычек.

    Есть два варианта решения, как я понял: TCA9548A или программный I2C.

    TCA9548A, что поделаешь, уже заказал.
    Soft I2C — пока работающего решения для RTC не нашел.
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Я бы лучше RTC в Китае заказал
     
    Последнее редактирование: 15 мар 2026
  5. Roman Koff

    Roman Koff Нерд

    А я бы лучше лежал на пляже и чтобы мне телочки пиноколаду подносили...
     
  6. AlexU

    AlexU Гуру

    И третий вариант -- припаять проводок для смены адреса гироскопа.
    Но нужно точно понимать, куда паять концы проводка, чтобы не сжечь гироскоп и всю плату.
    Резистор R7 и конденсатор C3 на плате присутствуют? Судя по схеме (правда на новый модуль с перемычками) R7 -- это подтяжка выбора адреса, который как раз и задаёт адрес 0х68 (4-ый вывод гироскопа), а С3 -- это выход стабилизатора 3.3V. Перемычка на новых платах как раз и соединяет 3.3V с 4-ым выводом гироскопа и резистором R7.

    UPD: вместо конденсатора C3 можно подпаять к блокирующему конденсатору, он скорее всего стоит рядом с первым выводом гироскопа.
     
    Последнее редактирование: 16 мар 2026
  7. Roman Koff

    Roman Koff Нерд

    К сожалению, вариант «скорее всего» мне не подходит. Я лучше куплю мультиплексор за 250 руб, чем потом новый сенсор за 2 тыс. Без точного даташита я туда не сунусь, а на старый IMU его, как я понимаю, уже не найти...
     
  8. parovoZZ

    parovoZZ Гуру

    Господь руками не снабдил?
     
  9. parovoZZ

    parovoZZ Гуру

    Ради науки можно и сжечь.
     
  10. Airbus

    Airbus Радиохулиган Модератор

    Таки в чем проблема? Почему ты еще не там?