Почему 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) по обоим каналам:
| Режим | mode | ctrl_meas | Как работает |
|---|---|---|---|
| Сон | 00 | 0x24 | измерений нет |
| Forced | 01 | 0x25 | одно измерение, затем сон |
| Normal | 11 | 0x27 | измеряет непрерывно |
| После сброса | 00 | 0x00 | измерений нет, каналы пропущены |
В 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. Температура нужна и для пересчёта давления, поэтому выключать её нельзя.
Источники
- 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
- Bosch Sensortec. BMP280 — страница изделия и документация — текущая ревизия даташита и API для пересчёта сырых данных
Нашли ошибку?
Смотрите также
- BMP280Барометр I²C и SPI: питание, адреса, точность, шум, режимы, отличие от BME280
- Датчики давления BMP280, BME280, BMP390Точность, подключение по I²C и SPI, режимы, фильтр, компенсация, высота по давлению
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- Битовые маскиПоле регистра: маска, сдвиг, чтение и запись, код на C
- Как проверить шину I2C?Уровни SDA и SCL в покое, сканер адресов и девять тактов