Измените адрес I2C на несколько датчиков VL53L0X с помощью Python - PullRequest
0 голосов
/ 07 ноября 2019

Как видно из названия, я пытаюсь получить значение от двух датчиков vl53l0x, подключенных к Raspberry Pi Zero W.

Я все хорошо подключил и проверил датчики один за другим. Они хорошо работают.

Проблема в том, что, когда они оба подключены к шине I2C, я не могу с ними разговаривать, потому что они имеют одинаковый адрес по умолчанию 0x29 (проверяется с помощью следующей команды: sudo i2cdetect -y 1)

Я прочитал таблицу данных датчика и искал в Интернете ресурсы, чтобы понять, как изменить значение регистра датчика, в котором хранится адрес. Есть конкретный способ сделать это, как вы можете видеть здесь: AN4846 Замечание по применению со страницы 5.

И чем я нашел этот репозиторий , который я сейчас используюдля достижения цели.

Но когда я запускаю VL53L0X_multi_example.py, я получаю этот вывод

VL53L0X Start Ranging Address 0x2B

Setting I2C Address to 0x2B
Call of VL53L0X_SetAddress
API Status: -20 : Control Interface Error
VL53L0X Start Ranging Address 0x2D

Setting I2C Address to 0x2D
Call of VL53L0X_SetAddress
API Status: -20 : Control Interface Error
VL53L0X_BETTER_ACCURACY_MODE
Set Accuracy
API Status: -20 : Control Interface Error
VL53L0X_BETTER_ACCURACY_MODE
Set Accuracy
API Status: -20 : Control Interface Error
Timing 20 ms
1 - Error
2 - Error
...
Call of VL53L0X_StopMeasurement
API Status: -20 : Control Interface Error
Call of VL53L0X_StopMeasurement
API Status: -20 : Control Interface Error

Я не могу понять, почему эта ошибка ( Состояние API: -20:Ошибка интерфейса управления ) с комментариями

Ошибка при очистке прерывания

в Api / core / inc / vl53l0x_def.h. Что не так?

1 Ответ

0 голосов
/ 08 ноября 2019

Хорошо, поэтому VL53L0X имеет возможность установить адрес I2C, и документация выглядит для новичков (как я), как если бы вы могли «прошивать» каждый L0X разными адресами I2C, и эффект будет постоянно где-то на EEPROM. Это не так. I2C-адреса VL53Lxx сбрасываются к значениям по умолчанию после сброса.

Способ, которым он работает, заключается в том, что XSHUT подключается от uC к каждый L0X таким образом, например, через сдвиговый регистр 74LSxxx, что после перезагрузки системы хост uC включит и настроит каждыйL0X один за другим, пока все L0X на шине не будут сброшены и настроены таким образом, чтобы они не конфликтовали, и все XSHUT мог работать.

Например, что? Таблица данных звучит как вывод GPIO1чтобы их объединить, но это не так, как это реализовано.

...