Программная реализация I2C шины через расширитель портов

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем zRirez, 14 ноя 2019.

  1. zRirez

    zRirez Нерд

    Есть:
    • МК (Ардуино или Esp8266)
    • 8 расширителей портов MCP23017
    • 8 датчиков влажности HTU21D с интерфейсом I2C.
    У расширителей портов есть возможность менять адрес в I2C шине используя перемычки A0-A2 и они подключаются к одной общей шине с Мастером (Ардуино или Esp8266). У датчиков влажности такого функционала нет, у них одинаковый адрес. Можно ли подключить датчики влажности с интерфейсом I2C к расширителю портов по GPIO и программно реализовать шину I2C.

    Необходимо с МК получить доступ к данным датчиков влажности через расширитель портов. Как это реализовать? И возможно ли вообще?

    Замер делать раз в 1-10 мин.

    Теоретическая схема такого подключения.
    [​IMG]
     
    Последнее редактирование: 15 ноя 2019
  2. KindMan

    KindMan Гик

    Зачем такой страшный геморрой? Может лучше что-то вроде TCA9548A попробовать?
     
  3. asam

    asam Гик

    Ну, если измерять надо не очень часто, то можно подключить все датчики к одной шине, а с помощью расширителя портов коммутировать питание. Включаем питание нужного датчика, получаем данные, отключаем датчик и включаем следующий.

    Вопрос в другом - А какой смысл мерять влажность 8-ю датчиками в одном месте? Шина I2C рассчитана для работы на растоянии максимум в десятки сантиметров.
     
  4. zRirez

    zRirez Нерд

    У меня I2C шина с навешанными расширителями растянута по дому, идет вдоль коридора и в каждую комнату у двери затянут расширитель 16 бит. От расширителя отходят провода для термо-датчиков / светодиодов / реле. Все работает без сбоев и помех. Суммарная длина I2C шины около 15м. К этим расширителям нужно подвешать датчики влажности.

    Как вариант таких датчиков я рассматриваю HTU21D или BME280, но с ними взаимодействовать можно только через I2C.

    Если вы знаете какие-то точные датчики, с которыми можно пообщаться по 1-wire буду рад каждому варианту.

    P.S. DHT11 / DHT22 и им подобные, у которых точность +- трамвайная остановка, не предлогать.
     
  5. asam

    asam Гик

    15 метров I2C это сильно.
    Сделать софт I2C на MCP23017, наверное можно, но это как удалять гланды через задний проход. Или ставте TCA9548A для расширения I2C или делайте отключаемое питание для датчиков.
    MCP23017 выдает на пине до 20мА. HTU21D в активном режиме потребляет меньше 1мА. Так что можно его питать прямо от пина MCP23017
     
    zRirez нравится это.
  6. DetSimen

    DetSimen Спамовредитель Модератор

    Ну и напрасно. Даже Филипс не гарантирует правильную работу своей внутрисхемной (т.е на одной плате) шины на 15-ти метрах
     
  7. a1000

    a1000 Гик

    DHT11 / DHT22 не работают по 1-wire. Подключение у них похожее, но протокол другой.
     
  8. ИгорьК

    ИгорьК Оракул Модератор

    http://forum.amperka.ru/threads/esp-8266-esp32-ds2438-hih-5030-Температура-и-влажность-на-длинном-проводочке-для-гурманов.15260/

    Там готовое устройство, навешивайте датчики на одну линию и читайте.
     
    Последнее редактирование: 15 ноя 2019
    SergeiL и DetSimen нравится это.
  9. offigate

    offigate Нерд

    Суммарная емкость проводов шины I2C не должна превышать 400 пФ. Это накладывает ограничения на длину кабеля. Существуют специальные микросхемы, позволяющие I2C работать на больших расстояниях. Они называются I2C Extender. Например, P82B715 может работать с кабелем емкостью до 3000 пФ.

    Проще использовать аналоговый ключ или аналоговый мультиплексор (например, TMUX1209), при помощи которого подключать пины SCL и SDA датчиков к шине I2C. Тогда в каждый момент времени на шине будет виден только один датчик.

    Управлять ключами/мультиплексором можно от микроконтроллера или от расширителя портов. На пины датчиков желательно поставить резисторы подтяжки к питанию, примерно по 22..100 кОм.
     
    Последнее редактирование: 16 ноя 2019