Подключение нескольких VL6180 (датчик приближения) на одну шину I2C
- Войдите на сайт для отправки комментариев
Добрый день!
Столкнулся с вопросом, который слабо освещен в результатах поисковиков. Задача - подключить несколько одинаковых VL8160 к одной шине I2C Arduino.
С точки зрения теории, это возможно, однако по данным продавцов, адрес в устройствах прошит один и тот же.
По ссылке: https://www.ebay.com/itm/232497222931 указано, что: "I2C address:0x29 (7-bit)".
Однако, если обратиться к информации об устройстве: http://wiki.amperka.ru/_media/продукты:troyka-proximity:dt_vl6180x.pdf -адрес можно изменить, однако после сброса питания эта настройка будет утрачена.
Вопрос: Как реализовать присоединение и инициализацию, к примеру, трех-четырех таких дальномеров, без "изобретения" каких-то мультиплексоров, которые последовательно их включат в шину после запуска питания и "прошьют" уникальный для I2C адрес перед стартом основного цикла Arduino?
Большое спасибо за ответы.
В апноте к даччику написано, что у него есть GPIO0, притянув который к земле, можно отключить датчик. А адрес i2c меняется записью в регистр 0х212
Видится простое решение, не меняя адрес i2c, сделать оналог CS, по очереди подавая High на GPIO0 каждому. И читать данныя. Можно даже через какойнить 595й регистр
Пробовать нада
По сути это и есть мультиплексор )) т.е. придется "тратить" другие ноги ардуина, и прикручивать транзистор, который будет "тянуть к земле" во время чтения. Это очень "кривое" на мой взгляд решение, если учесть возможности спецификации I2C и то что эти модули не предполагают штатного подключения в единственном экземпляре к такой шине.
Я почему-то тоже подумал нечто аналогичное сделать при инициализации: перепрограммировать адрес, мультиплексором отключив остальные и потом работать с ними в штатном протоколе. Я вот не понимаю, как производитель предлагает решать подобную регулярную задачу - может есть какой-то протокол без "притягивания" устройств к шине это решить?
Продолжаю читать http://wiki.amperka.ru/_media/продукты:troyka-proximity:dt_vl6180x.pdf, и нахожу в части 6.2.6-6.2.8 некие IDENTIFICATION__DATE_HI, IDENTIFICATION__DATE_LO и IDENTIFICATION__TIME с описанием: "..Part of the register set that can be used to uniquely identify a module" - интересно, возможно ли использование этих данных для идентификации экземпляра устройства на самой шине без танцев с аппаратным мультиплексором? Если да, то какими библиотеками это можно (и можно ли?) сделать в Ардуине?
Я пас. Так далеко мое скудоумие не простираеца. Пятница. Надо уже вотки попить.
))) зря вы так.. я все же думаю победить этого буржуйского гада. Подожду вот как в руки попадет, постараюсь отписаться как это победил.
Попробуйте эту библу, или эту - и там и там есть возможность задать адрес девайса.
и нахожу в части 6.2.6-6.2.8 некие IDENTIFICATION__DATE_HI, IDENTIFICATION__DATE_LO и IDENTIFICATION__TIME с описанием: "..Part of the register set that can be used to uniquely identify a module" -
чтобы его получить, нужно обратиться к устройству, а адреса одинаковые :))) (могу ошибаться...)
если для i2c есть какой-нить регистр, можно костыльно использовать регистр для прошивки адресов (при каждом запуске) а потом опрашивать их по адресу... ну а если кого нет - инициализировать кой-нить сброс...
в порядке бреда, но может на идею натолкнет...
В который раз уже... Короче - SCL каждого датчика через канал той же 74HC125, если датчик не надо опрашивать - канал ВЫКЛ. Если надо датчик опрашивать - канал ВКЛ, всё. И хоть гроздями увешайте I2C устройствами с одним адресом: нет ножек - нет мультиков. А ножки, в смысле тактирование - рвутся когда вам надо, всё просто. Единственный минус - выходы на управление каналами надо, но и тут можно заюзать 74HC525, если устройств овердохера (больше 4-х, тогда будет экономия в ногах) и не хочется тратить на каждое из них отдельную ногу дуньки на управление каналом.
да. эт я чото втупил. hc-sr04\5 не пойдут видимо - негерметичные. Както их заливать и мастырить при наличии нормальных аутодоор сенсоров будет както глупо выглядеть. И форм фактор (плата вместе с сенсором) както не айс. Это тоже смое что плату вмастрячить в бампер. Всетки платы должны быть в боксе, а сенсоры в уличном исполнении вынесены во вне.
Задавая этот вопрос я и имел ввиду переключение сенсоров. а не платы, конечно.
может попробовать использовать сдвиговый регистр для включения выключения TOF.
потребуется две ноги ардуино (data и clock, latch можно сразу посадить на +).
при инициализации пройтись по очереди поменять адреса (путем "гоненния" единицы в виде бегущего огня), а потом загнать все единицы, чтобы включить модули и в путь.
правда, придется до этого определить в индивидуальном порядке их серийные номера, чтобы в правильно определить TOFы в применяемый массив
Привет. Нужно подключенить несколько датчиков приближения последовательно на один пин arduino, что бы получать информацию со всех одновременно и что бы у каждого датчика был свой адрес. В итоге должен получиться массив датчиков приближения. Кто нибудь знает решение?