Хабрахабр

[Из песочницы] Как быстро и без лишних микросхем обойти неизменяемость адреса у датчика HTU21

Приветствую всех жителей Хабра!

Хочу рассказать о новом и неожиданном способе подключения нескольких датчиков HTU21 по шине I2C без использования дополнительных микросхем.

Данный датчик все еще пользуется популярностью среди разного рода DIY-мастеров, причем заслуженно: он более точен, чем предшественник и мал размерами (что удобно для встраивания в устройства).

Гугл, конечно же, выдал кучу статей о всяких мультиплексорах для шины I2C от «купить в известном всем китайском интернет-магазине» до «сделать схему своими руками». Совсем недавно меня, как и многих пользователей, озадачило отсутствие возможности изменить адрес у данного датчика. Это не могло не расстроить так как нужно было решить проблему здесь и сейчас (заказчики такие заказчики). Нигде не было вариантов без паяльника и дополнительных расходов. Заинтриговала? Хочу рассказать о более легком и непринужденном, очень простом выходе из данной ситуации. Тогда рассказываю.

Исходные данные: Arduino mega и 4 датчика HTU21.

Причем данные сенсоры — не единственные ведомые устройства на данной шине (в планах еще ЖК экран и другие датчики). Задача: необходимо подключить все датчики htu по шине I2C и считывать значения.

У датчика HTU21 фиксированный адрес на шине — 0x40 1. Что мы знаем? Как, имея микроконтроллер и 4 датчика с одинаковыми адресами на шине, обращаться к конкретному устройству без лишних микросхем?

Все оказывается довольно просто:

  1. подключаем землю, scl и sda как обычно (не забываем про подтягивающие резисторы для линии данных и синхронизации);
  2. подключаем провод питания каждого датчика к цифровому входу на Arduino (вы уже наверняка поняли куда я веду)
  3. поочередно подаем HIGH на каждый цифровой вход, питающий отдельный датчик и, после задержки, считываем значение с запитанного сенсора.
  4. подаем сигнал LOW для этого датчика и повторяем цикл для других сенсоров.

Но для использования в проектах этот принцип работает, и работает на достаточных расстояниях от микроконтроллера. Конечно же, в таком методе также есть недостатки, например, может просто отсутствовать необходимое количество свободных цифровых или аналоговых выходов. Надеюсь, данная статья поможет Вам сберечь нервы, средства и время.

Не зря говорится, что все гениальное — просто!

Листинг прилагается:

/* функция, считывающая значение температуры
и влажности с датчиков HTU21 и датчика BME280 */ void greenhouseHT()
digitalWrite(pin_HTU21_1, HIGH);
}

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть