Регистры BMP280

NoAlex
Offline
Зарегистрирован: 11.06.2019

Привет.
Можете посмотреть на своём датчике BMP280 (не китайской копии) значения всех 12 калибровочных регистров с 0x88 (да, я знаю, что они у всех разные :-) ), а также итоговое "сырое" число температуры (все три регистра вместе), реальную температуру на момент получения данных и выложить сюда? Мне необходимо для примерного сравнения.
И ещё... При измерении температуры сам кристалл датчика будет вносить погрешность (нагреваться). Как можно это учесть и исправить?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

NoAlex пишет:
Привет.
Можете посмотреть на своём датчике BMP280 (не китайской копии) значения всех 12 калибровочных регистров с 0x88

А как отличить родной датчик от китайской копии? Я свой брал на али. И я не знаю оригинал там или нет.

-NMi-
Offline
Зарегистрирован: 20.08.2018

NoAlex пишет:

Можете посмотреть на своём датчике BMP280 (не китайской копии) значения всех 12 калибровочных регистров с 0x88 (да, я знаю, что они у всех разные :-) ), а также итоговое "сырое" число температуры (все три регистра вместе), реальную температуру на момент получения данных и выложить сюда?

При измерении температуры сам кристалл датчика будет вносить погрешность (нагреваться). Как можно это учесть и исправить?

В протеусе можешь посмотреть всё, что тебе нужно,тока модель не с китая качай (шуткО)))

Он не предназначен для точного измерения температуры, посему +- лапоть - это нормально для 280-го )_))

NoAlex
Offline
Зарегистрирован: 11.06.2019

Насколько мне известно у оригинала чип квадратный и маркировка UP (у Китайцев YP или что-то другое)

NoAlex
Offline
Зарегистрирован: 11.06.2019

:-)
Что мне в протеусе смотреть? Все нужные регистры есть в даташите.
Про точное измерение это к тому, что нет компенсации температуры из-за самонагрева, так скажем?

NoAlex
Offline
Зарегистрирован: 11.06.2019

У меня вот такая "сырая" температура 532656.
Вот такие первые 3 числа (по 2 байта на число, 6 регистров), необходимые для перевода температуры в удобочитаемый вид
28508
4207
26896

При всём этом безобразии датчик показывает температуру в 5 с копейками градусов, что не есть гуд.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

NoAlex пишет:

Про точное измерение это к тому, что нет компенсации температуры из-за самонагрева, так скажем?

А как Вы себе представляете подобную компенсацию?

-NMi-
Offline
Зарегистрирован: 20.08.2018

NoAlex пишет:

При всём этом безобразии датчик показывает температуру в 5 с копейками градусов, что не есть гуд.

Да прочитай ты датаЩи от него, математика там ЭЛЕМЕНТАРНАЯ, формулы пересчёта не сложные, всё есть в Щах.  Напиши свою собственную библиотеку и не ной здеся... КаКанО задолбалОо(((

NoAlex
Offline
Зарегистрирован: 11.06.2019

Поправочный коэффициент при расчёте температуры.

NoAlex
Offline
Зарегистрирован: 11.06.2019

Ответ не по сути. Датащить изучен, формулы задействованы (в экселе проверяю их), коэффициенты из регистров вытягиваются. Хочу увидеть, что в регистрах у других людей и самое главное "сырое" число температуры, чтобы двигаться дальше в сторону выявления ошибки(ок).
Никому не жалуюсь.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

NoAlex пишет:

Поправочный коэффициент при расчёте температуры.

Это ответ на что? (желательно цитировать сообщение, на которое отвечаете)

Если на №6, то от чего может зависеть этот коэффициент?

- от того, закреплен датчик на плате или отдельно,

- при монтаже на плате - от толщины платы, ее площади, процента металлизации и др. параметров, влияющих на теплопроводность и теплоемкость платы,

- от времени, прошедшего с момента подачи напряжения на датчик,

- от конструкции кожуха или корпуса,

- от того, используется ли принудительная вентиляция,

...

Как Вы думаете, известны ли производителю все указанные особенности Вашей конструкции?

Кто способен их все учесть, производитель датчика или автор конструкции (т.е. Вы)?

Так, может, не следует требовать от производителя невозможного, а вместо этого лучше заняться тем, что можете сделать лично Вы?

-NMi-
Offline
Зарегистрирован: 20.08.2018

NoAlex пишет:

Ответ не по сути.

Ну а как тогда тебе отвечать? Ты просишь сам не зная что. Ну купи тогда у разных продаванов ещё 2-5 датчиков и сравнивай их друг с другом.

NoAlex
Offline
Зарегистрирован: 11.06.2019

andriano пишет:

NoAlex пишет:

Поправочный коэффициент при расчёте температуры.

Это ответ на что? (желательно цитировать сообщение, на которое отвечаете)

Если на №6, то от чего может зависеть этот коэффициент?

- от того, закреплен датчик на плате или отдельно,

- при монтаже на плате - от толщины платы, ее площади, процента металлизации и др. параметров, влияющих на теплопроводность и теплоемкость платы,

- от времени, прошедшего с момента подачи напряжения на датчик,

- от конструкции кожуха или корпуса,

- от того, используется ли принудительная вентиляция,

...

Как Вы думаете, известны ли производителю все указанные особенности Вашей конструкции?

Кто способен их все учесть, производитель датчика или автор конструкции (т.е. Вы)?

Так, может, не следует требовать от производителя невозможного, а вместо этого лучше заняться тем, что можете сделать лично Вы?

:-) да, на 6-е сообщение. Я просто подумал, что если нажму "ответить", то автоматом будет цитата.
Я не имел ввиду про то место, где закреплён датчик. оно понятно, что я могу его хоть где и хоть как закрепить. Я имел ввиду, что производитель учёл во время своих тестов (при им известных "идеальных" условиях тестирования) оказываемое влияние нагрева кристалла на показания температуры или нет? Я просто этого в даташите не увидел. Хорошо, я понял ваш ответ, спасибо.
А по поводу регистров, получится посмотреть (конечно, если датчик есть)?

NoAlex
Offline
Зарегистрирован: 11.06.2019

-NMi- пишет:

NoAlex пишет:

Ответ не по сути.

Ну а как тогда тебе отвечать? Ты просишь сам не зная что. Ну купи тогда у разных продаванов ещё 2-5 датчиков и сравнивай их друг с другом.

Конкретный вопрос: может ли кто-нибудь считать и выложить коэффициенты, "сырую" температуру своего датчика? И нужные регистры написал...
Что именно непонятно в вопросе, чего не хватает?
Я и прошу у других людей помощи, чтобы они выложили свои числа из нужных регистров, дабы мне не покупать несколько штук просто так...
Чего-то может я не улавливаю :-) 

-NMi-
Offline
Зарегистрирован: 20.08.2018

1000Pa, 25C

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

NoAlex пишет:

...оно понятно...

Судя по тому, что Вы дальше пишете - Вам совершенно непонятно.

Цитата:

, что я могу его хоть где и хоть как закрепить. Я имел ввиду, что производитель учёл во время своих тестов (при им известных "идеальных" условиях тестирования) оказываемое влияние нагрева кристалла на показания температуры или нет?

То, что производитель учел при "идеальных" условиях, Вам в Ваших условиях никак помочь не может. От слова "совсем". Производителю это известно (похоже, в отличие от Вас), поэтому он ничего об "идеальных" условиях писать и не стал. Дабы не засорять дэйташит никому не нужной информацией.

NoAlex
Offline
Зарегистрирован: 11.06.2019

andriano пишет:

NoAlex пишет:

...оно понятно...

Судя по тому, что Вы дальше пишете - Вам совершенно непонятно.

Цитата:

, что я могу его хоть где и хоть как закрепить. Я имел ввиду, что производитель учёл во время своих тестов (при им известных "идеальных" условиях тестирования) оказываемое влияние нагрева кристалла на показания температуры или нет?

То, что производитель учел при "идеальных" условиях, Вам в Ваших условиях никак помочь не может. От слова "совсем". Производителю это известно (похоже, в отличие от Вас), поэтому он ничего об "идеальных" условиях писать и не стал. Дабы не засорять дэйташит никому не нужной информацией.

Понятно, спасибо.

NoAlex
Offline
Зарегистрирован: 11.06.2019

-NMi- пишет:

1000Pa, 25C

Уважаемый, -NMi-, спасибо, но регистры немного не те :) 
Регистры коэффициентов с 0x88 по 0xA1. А регистры температуры с 0xFA по 0xFC. Не могли бы именно эти регистры посмотреть?

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Ребята добрый день. Подскажите где ошибаюсь (или чтение регистров или типы данных). Считываю с BMP коректирующие коэфициенты, значение температуры и по даташиту перевожу в температуру, но где-то ошибка и значения не верны.


#define swSCL 3 // Пины подключения датчика BMP280 IO3
#define swSDA 1 // Пины подключения датчика BMP280
#define BMP280_ACCESS_ADDRESS 0x76
#define BMP280_ID 0x58
#define id_reg 0xD0
#include <Wire.h>
int32_t t_fine;
float T;
uint32_t dig_T1;
int32_t dig_T2, dig_T3;
float var1, var2;
int32_t adc_T;
byte tmp=0;
void setup() {
//  Wire.setClock(100e3);
  Wire.begin(1, 3); // софтварная I2C

  setRegister(0xF4, B01001101);//010(17бит температура)011(18бит давление)01(однократное измерение и переход в спячку 00)//было 10110111
  setRegister(0xF5, B11100000);// измерение раз в 4 сек(оно отключено в 0хF4) и фильтрация по 4м измерениям
  delay(1000);
  // читаю калибровку
  dig_T1 = (uint16_t)getRegister(0x88, 2);
  dig_T2 = (int16_t)getRegister(0x8A, 2);
  dig_T3 = (int16_t)getRegister(0x8C, 2);
  // читаю значение АЦП
  adc_T = (uint32_t)getRegister(0xFA, 3);
  adc_T >>= 4; // младший регистр содержит только 4 бита. Сдвигаем все данные на 4 бита
  //Расчет по даташиту
  var1 = ((((adc_T >> 3) - ((int32_t)dig_T1 << 1))) * ((int32_t)dig_T2)) >> 11;
  var2 = (((((adc_T >> 4) - ((int32_t)dig_T1)) *  ((adc_T >> 4) - ((int32_t)dig_T1))) >>  12) * ((int32_t)dig_T3)) >> 14;
  t_fine = var1 + var2 ;
  T = (t_fine * 5 + 128) >> 8;
  T /= 100;
}

void loop() {
  Serial.begin(115200);
  Serial.println(" ");
  Serial.println("Температура="+String(T));  
  Serial.println("adc_T="+ String(adc_T));
  Serial.println("dig_T1=" + String(dig_T1));
  Serial.println("dig_T2="+String(dig_T2));
  Serial.println("dig_T3="+String(dig_T3));
  Serial.println("var1="+ String(var1) + " var2="+ String(var2));
  delay (5000);
}

void setRegister(uint8_t reg, const uint8_t value) {
  Wire.beginTransmission(BMP280_ACCESS_ADDRESS);
  Wire.write(reg);
  Wire.write(value);
  Wire.endTransmission(true);
}

int32_t getRegister(uint8_t reg, uint8_t len) {
  if (1<len>4) return NAN;
  Wire.beginTransmission(BMP280_ACCESS_ADDRESS);
  Wire.write(reg);
  Wire.endTransmission(false);
  Wire.requestFrom(BMP280_ACCESS_ADDRESS, len, true);
  int32_t value=0;
  for (byte i = 0; i < len; i++) {
    value <<= 8;
    value |= (uint8_t)Wire.read();
  }
  return value;
}

На выходе получаю:

Температура=146.64
adc_T=527184
dig_T1=53867
dig_T2=-32669
dig_T3=12800
var1=667353.00 var2=83457.00

 

b707
Offline
Зарегистрирован: 26.05.2017

paha. вы столько лет вроде на Си пишете...

что за хрень у вас в 56 строке?

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