#1 2022-02-19 11:56:42

lem123
Учасник
Зареєстрований: 2022-02-19
Повідомлень: 2

Обработка прерывания дальномера VL53L0X

Использую плату Blue Pill и датчик расстояния VL53L0X-V2 совместно с библиотекой . В режиме однократных измерений как в тестовом примере все работает нормально, но хотелось бы использовать прерывания. Как это сделать совершенно не понятно. Если прерывание активировать до функции sensor_vl53l0x.InitSensor и в обработчике прерывания вызывать функцию sensor_vl53l0x.GetDistance то она ждет когда произойдет измерение в результате чего генерируется новое прерывание по этой причине основной цикл программы loop не выполняется. В случае активации прерывания после sensor_vl53l0x.InitSensor датчик переводится в режим однократных измерений и обработчик прерываний не выполняется (измерения не происходят).
Возникает два вопроса:
1. Как настроить датчик в режиме циклических измерений?
2. Как получить данные с датчика в обработчике прерывания?

Неактивний

#2 2022-02-19 19:14:05

Feanor_fs
Учасник
Зареєстрований: 2022-01-11
Повідомлень: 3

Re: Обработка прерывания дальномера VL53L0X

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

Неактивний

#3 2022-02-20 10:19:20

lem123
Учасник
Зареєстрований: 2022-02-19
Повідомлень: 2

Re: Обработка прерывания дальномера VL53L0X

Feanor_fs пише:

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

Похоже вы на 100% ситуацию не поняли. Как я понимаю вы с этим датчиком не работали.  Датчик может работать в двух режимах однократного измерения с помощью функции GetDistance и непрерывного, но как запустить второй вариант и какой функцией библиотеки читать значения в описании к самой библиотеки ничего не сказано, а в даташит на api датчика инфы крайне мало и ничего не понятно.
GetDistance нельзя использовать в обработчике прерывания, эта функция запускает процесс измерения и ждет его окончания. Естественно по окончанию происходит новое прерывание и так до бесконечности программа выходит из обработчика и сразу в него заходит.

Неактивний

#4 2022-02-21 12:41:20

Mishka
Учасник
Зареєстрований: 2019-11-18
Повідомлень: 84

Re: Обработка прерывания дальномера VL53L0X

GetDistance() вызывает StartMeasurementSimplified() в режиме разового опроса.

В коде указанного Вами драйвера есть примеры, которые устанавливают режим работы устройства через SetDeviceMode(), а затем в цикле получают данные через GetMeasurementDataReady() + GetRangingMeasurementData() и сбрасывает линию прерывания. Код выполняется в loop(), но его несложно переделать в ISR и проводить измерения регулярно (режимы VL53L0X_DEVICEMODE_CONTINUOUS_RANGING или VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING). Обработчик, конечно, должен обладать свойством повторной входимости.

N.B. С этим датчиком я тоже не работал.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму