Акселерометр LIS2DS12: ошибка платы модуля
Миниатюрный акселерометр LIS2DS12 оснащен контроллером со встроенными функциями шагомера, датчика падения, термометром и т.д. Но модуль на основе LIS2DS12 содержит досадную ошибку, которая может озадачить неопытного разработчика.
О микросхеме акселерометра я расскажу в отдельной статье, а здесь поговорим о плате модуля, которую можно приобрести в Китае. Строго говоря, выбора-то у нас нет. На момент написания этой статьи был доступен только один вариант модуля:

Кстати, выводы модуля я рекомендую припаять именно со стороны монтажа элементов. Так будут видны подписи выводов платы.
У микросхемы LIS2DS12 есть замечательная опция: логические уровни на линиях SCL и SDA можно подтягивать к независимому источнику питания через резисторы с номиналом 10 кОм и не заботиться о согласовании логических уровней. Теоретически, можно подключить этот модуль к любой плате Arduino c пятивольтовой логикой, и шина I2C будет работать с пятивольтовыми логическими уровнями.
Проблема!
Подключаем модуль LIS2DS12 к плате Arduino, на модуль подаем питание +5 В (на плате есть встроенный стабилизатор +1,8 В для питания микросхемы) иииии…. ничего не работает. Модуль не виден на шине I2C. Начинаем разбираться и выясняем, что два резистора подтяжки логических уровней на плате модуля подключены не к выводу VCC, что было бы правильно, а к выходу встроенного стабилизатора напряжения +1,8 В. То есть, пятивольтовые контроллеры просто не видят логические уровни модуля на шине I2C. Впрочем, и не каждая трехвольтовая плата будет работать с модулем, у которого уровень логической единицы не превышает 1,8 вольта.
Мы можем решить проблему двумя способами:
Простой, но не очень корректный. Использовать внешние подтягивающие резисторы, подключенные к линии питания VCC. Опытным путем установлено, что модуль стабильно работает с платами Arduino при номинале подтягивающих резисторов 2,2 кОм. При превышении это номинала модуль не определяется на шине.

У этого способа два недостатка: нужны внешние резисторы, и напряжение питания через эти резисторы и резисторы на плате поступает на выход стабилизатора 1,8 вольта. Это неправильный режим и не очень здорово. Акселерометр, конечно, не выйдет из строя, но гарантировать стабильность и помехоустойчивость я бы не стал. Вдобавок, при подключении на шину I2C других устройств, они могут не работать из-за подтягивающих резисторов 2,2 кОм. Имейте это в виду.
Внести исправления в плату. Если у вас зоркое орлиное зрение и твердая рука, нужно разрезать две дорожки и добавить две проволочные перемычки. На следующем рисунке места, где нужно перерезать дорожки, отмечены желтыми линиями, а на перемычки указывают красные стрелки.

После корректировки платы обязательно проверьте отсутствие соединения между перемычками до подачи питания! Иначе напряжение питания +5 В может попасть на шину питания +1,8 В и модуль выйдет из строя.
Теперь, в зависимости от напряжения питания, на выводах SCL и SDA будут выставляться правильные логические уровни трех- или пятивольтовой логики.
Добрый день,
Я перепаял по второму варианту. Подключил к NanoPi Duo2 с armbian bionic. Но armbian этот модуль не видит. По даташиту: 6.1.1 I2C operation … The Slave Address (SAD) associated to the LIS2DS12 is 00111xxb where the xx bits are modified by the SA0/SDO pin in order to modify the device address. If the SA0/SDO pin is connected to the supply voltage, the address is 0011101b, otherwise if the SA0/SDO pin is connected to ground, the address is 0011110b. This solution permits to connect and address two different accelerometers to the same I2C lines.
Наверное, SDO надо с GND закоротить, чтобы адрес появился?