Перейти к содержанию

Почему BMP280 всё время показывает одно и то же значение?

Обновлено Редакция GAW

BMP280 измеряет только в двух режимах из трёх. По разделу 3.6 даташита Bosch после сброса он в режиме сна: регистры доступны, ID и калибровочные коэффициенты читаются, но измерений нет. Режим задают младшие биты регистра ctrl_meas (0xF4), там же — передискретизация давления и температуры.

Значение 0x80000

В таблице 18 даташита начальное значение регистров данных — 0x80 в старшем байте и нули в остальных. Наш расчёт: 20-битное сырое значение 0x80000 — это 524 288; программа пересчитывает его по коэффициентам в правдоподобное, но постоянное давление. То же число датчик пишет, если передискретизация поля выставлена в 000 — измерение пропущено.

Что записать в ctrl_meas

Биты регистра: osrs_t[2:0], osrs_p[2:0], mode[1:0]. Наш расчёт для передискретизации ×1 (код 001) по обоим каналам:

ctrl_meas=(001≪5)  ∣  (001≪2)  ∣  mode\text{ctrl\_meas} = (001 \ll 5) \;|\; (001 \ll 2) \;|\; \text{mode}
Режимmodectrl_measКак работает
Сон000x24измерений нет
Forced010x25одно измерение, затем сон
Normal110x27измеряет непрерывно
После сброса000x00измерений нет, каналы пропущены

В forced режим нужно записывать перед каждым измерением, дождаться конца преобразования и прочитать данные одним пакетом с 0xF7 по 0xFC — так советует Bosch, чтобы байты не перемешались из разных измерений. Собрать значение регистра из полей и сдвигов удобно в калькуляторе битовых масок. Режимы, фильтр и выбор передискретизации для метеостанции и высотомера разобраны в статье «BMP280, BME280 и BMP390: датчик давления»; если датчик не отвечает вовсе, начните с ответа «Как проверить шину I2C».

Похожие вопросы

Как понять, что датчик вообще отвечает?

Прочитать регистр 0xD0: у BMP280 там 0x58, у BME280 — 0x60. Если ID читается, связь по I²C или SPI в порядке и дело в режиме; если нет — проверяйте адрес 0x76 или 0x77 и подтяжки шины.

Сколько ждать после запуска forced?

Не меньше максимального времени измерения для выбранной передискретизации — по даташиту 6,4 мс при ×1 и до 43,2 мс при ×16 для давления. Можно и не ждать вслепую: пока идёт преобразование, бит measuring регистра 0xF3 равен единице.

Почему давление меняется, а температура стоит на месте?

Проверьте поле osrs_t регистра ctrl_meas: при 000 измерение температуры пропускается и её регистр держит 0x80000. Температура нужна и для пересчёта давления, поэтому выключать её нельзя.

Источники

  1. Bosch Sensortec. BMP280 Digital Pressure Sensor: Data sheet (BST-BMP280-DS001-26, revision 1.26, October 2021) — разд. 3.6: режимы задают биты mode[1:0] регистра 0xF4 — 00 сон, 01 и 10 forced, 11 normal; сон — по умолчанию после сброса; в forced одно измерение, затем сон, для следующего forced задают снова; разд. 3.9: читать данные пакетом с 0xF7 по 0xFC; табл. 18: значения сброса press_msb и temp_msb — 0x80, остальные байты данных — 0x00, ctrl_meas — 0x00, id — 0x58; табл. 19: бит measuring регистра 0xF3; табл. 20–21: osrs_p = 000 — измерение пропущено, выход 0x80000
  2. Bosch Sensortec. BMP280 — страница изделия и документация — текущая ревизия даташита и API для пересчёта сырых данных

Нашли ошибку?