Soft I2C совместно с аппаратным I2C

Есть “железка”, у которой с завода задается адрес I2C и изменить его никак нельзя. Мне нужно использовать сразу две такие “железки”.
Ничего лучше (умнее) не придумал, как “повесить” вторую “железку” на софтовый I2C.

В принципе, подумал я, ничего сложного быть не должно. Ведь всё обращение в библиотеке к I2C идет в одной функции (по сути основное вмешательство будет только в неё):

void i2cSend (byte regist, byte value){
    Wire.beginTransmission(ADDR);
    Wire.write(regist);
    Wire.write(value);
    Wire.endTransmission();
}

А как правильно, с минимальными изменениями библиотеки, выполнить переделку чтобы одновременно можно было и через Soft I2C и через “железячный” слать данные?

Библиотека оформлена в виде класса. Создать отдельное поле-указатель, куда передавать по ссылке в конструкторе &Wire или &SoftWire ? Или как-то по другому можно сделать?

Пока только теория вида “мысли в слух”, еще не устанавливал даже Soft I2C (но о его существовании в принципе нагуглил).

Адрес устройства “вшит” в библиотеку через #define.

Взять МК с двумя I2C

Да

Да.
Только обеспечить, чтобы &Wire и &SoftWire были переменными совместимых типов, например экземплярами классов, наследующих общему базовому классу

2 лайка

Можно взять i2c мультиплексор

2 лайка

В аналогичной ситуации повесил железки на два софтовых I2C и дописал в библиотеке метод доступа к софтовому I2C. Соответственно инициализация одинаковая только ноги разные в конструкторе…

2 лайка

Спасибо, я и не знал о такой штуке :slight_smile:


Попробую разные варианты, теперь есть из чего выбрать. Благодарю всех ответивших.

Есть двухканальные компактные в SO8. Можно и свой примитивный клепануть. Но, ПМСМ, софтовый красивее.

Напиши, пожалуйста, название микросхем. Что-то в гугле меня забанили ((

Общение в две стороны ?

Может я тоже чего не знаю, но у меня не складывается, 2 ноги вход I2C, 4 ноги два выхода I2C, плюс 2 ноги питания, а де выбор мультиплексора?

Сам я гонял CD4052 когда надо было из одного COM порта с 3-мя устройствами общатся, никаких проблем, в обе стороны.

Софтом. См. PCA9540B.

2 лайка

все, увидел, спасибо.

Теоретически, можно соорудить и самому, типа на 74ls125 (4-е 3-стабильных буфера). SCL однонаправленный, а SDA коммутировать портом. Но, не проверял.
Не, не всё так просто.(