BMP280, датчик давления и температуры
Re: BMP280, датчик давления и температуры
По моему опыту всё работало замечательно.
Для начала надо исключить ошибки, тем более библиотеки самописные.
Всё что написали вы тоже не имеет ничего общего с опытом. Или вы встречали конкретно такую ситуацию?
Вы не помогли решить проблему, а тоже предлагаете анализировать.
Не понимаю что вам не нравится?
Вы не решили проблему, я не решил.
Вы предложили снять карту.
Я предложил начать с того чтобы убедиться в правильности подключения и работы библиотек, задействовав другие датчики висящие на этой же шине.
Я привык решать проблемы последовательно, а не тыкая пальцем в небо. Собственно это и предлагаю.
Для начала надо исключить ошибки, тем более библиотеки самописные.
Всё что написали вы тоже не имеет ничего общего с опытом. Или вы встречали конкретно такую ситуацию?
Вы не помогли решить проблему, а тоже предлагаете анализировать.
Не понимаю что вам не нравится?
Вы не решили проблему, я не решил.
Вы предложили снять карту.
Я предложил начать с того чтобы убедиться в правильности подключения и работы библиотек, задействовав другие датчики висящие на этой же шине.
Я привык решать проблемы последовательно, а не тыкая пальцем в небо. Собственно это и предлагаю.
Глупый не задает вопросы. Глупый и так все знает.
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: BMP280, датчик давления и температуры
Перечитайте свои посты и угомонитесь.
Надеюсь, сейчас уже знаете что такое ID (chip identification number)...
Надеюсь, сейчас уже знаете что такое ID (chip identification number)...
Re: BMP280, датчик давления и температуры
При чём здесь ID? Чего вы к нему прицепились? Работая с данным датчиком нет необходимости считывать его ID, я никогда этой ерундой не занимался и не обращал внимание. В моих устройствах не было и не могло быть что на шину будет установлено устройство с таким же адресом, но другое.
При этом, имея ошибки в самописной библиотеке или проблемные устройства висящие на той же шине можно считать что угодно.
Хотите из личного? Попадались устройства которые отвечали на адреса не соответствующие даташиту. А так же попадались устройства которые слали мусор когда считывали не с них, а с других устройств.
Что может быть проще имея 3 датчика на одной шине и на одной этой плате, проверить другие два тоже? Если с ними нет никаких проблем, значит проблема в BMP. Логично что сначала надо исключить данную ситуацию. Иначе считывая карту можно считать что угодно.
[uquote="DESIER",url="/forum/viewtopic.php?p=3459417#p3459417"]сегодня решил считать id чипа, он оказался 68h(0b01011000), а по datasheet должен быть 58h(0b01101000).[/uquote]
Вам, лично по своему опыту, есть что сказать?
Перечитав ваши посты я понял что вам нечего сказать.
Вы предложили считать карту. Я предложил поработать с остальными двумя датчиками, дабы убедиться что проблема именно в BMP.
Что не так то?
При этом, имея ошибки в самописной библиотеке или проблемные устройства висящие на той же шине можно считать что угодно.
Хотите из личного? Попадались устройства которые отвечали на адреса не соответствующие даташиту. А так же попадались устройства которые слали мусор когда считывали не с них, а с других устройств.
Что может быть проще имея 3 датчика на одной шине и на одной этой плате, проверить другие два тоже? Если с ними нет никаких проблем, значит проблема в BMP. Логично что сначала надо исключить данную ситуацию. Иначе считывая карту можно считать что угодно.
[uquote="DESIER",url="/forum/viewtopic.php?p=3459417#p3459417"]сегодня решил считать id чипа, он оказался 68h(0b01011000), а по datasheet должен быть 58h(0b01101000).[/uquote]
Вам, лично по своему опыту, есть что сказать?
Перечитав ваши посты я понял что вам нечего сказать.
Вы предложили считать карту. Я предложил поработать с остальными двумя датчиками, дабы убедиться что проблема именно в BMP.
Что не так то?
Глупый не задает вопросы. Глупый и так все знает.
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: BMP280, датчик давления и температуры
Если я вас правильно понял, вы почти утверждаете, что поскольку DESIER пользуется самописной библиотекой - там есть ошибки.
Не слишком ли смелое предположение? Вы видели его текст программы?
Не слишком ли смелое предположение? Вы видели его текст программы?
Конечно хочу. Логи с логического анализатора и подробное описание этих багов (включая фото железа и монтажа) в студию! Так же, не забудьте приложить "картинку что на шине" с осциллографа.AndTer писал(а):Хотите из личного? Попадались устройства которые отвечали на адреса не соответствующие даташиту. А так же попадались устройства которые слали мусор когда считывали не с них, а с других устройств.
Re: BMP280, датчик давления и температуры
Вы игнорируете все мои вопросы ПО ДЕЛУ в ваш адрес:
[uquote="DESIER",url="/forum/viewtopic.php?p=3459417#p3459417"]сегодня решил считать id чипа, он оказался 68h(0b01011000), а по datasheet должен быть 58h(0b01101000).[/uquote]
Первый вопрос: Вам, лично по своему опыту, есть что сказать?
Вы встречали такую ситуацию? Перечитав ваши посты я понял что вам нечего сказать.
Вы предложили считать карту. Я предложил поработать с остальными двумя датчиками, дабы убедиться что проблема именно в BMP.
Второй вопрос: Что не так то?
[uquote="Albert_V",url="/forum/viewtopic.php?p=3459577#p3459577"]Не слишком ли смелое предположение? Вы видели его текст программы?[/uquote]
Я не утверждал что там есть ошибки. Но и вы не можете утверждать что их там нет. Третий вопрос: вы видели текст его программы?
Что может быть проще, обратиться к другим двум устройствам? Четвёртый вопрос: Каким образом этот совет вам претит?
[uquote="Albert_V",url="/forum/viewtopic.php?p=3459577#p3459577"]Логи с логического анализатора и подробное описание этих багов (включая фото железа и монтажа) в студию! Так же, не забудьте приложить "картинку что на шине" с осциллографа.[/uquote]
А может что-то ещё нужно? Вы пишите, не стесняйтесь. Но только давайте будем последовательны, сначала ответьте на мои вопросы.
[uquote="DESIER",url="/forum/viewtopic.php?p=3459417#p3459417"]сегодня решил считать id чипа, он оказался 68h(0b01011000), а по datasheet должен быть 58h(0b01101000).[/uquote]
Первый вопрос: Вам, лично по своему опыту, есть что сказать?
Вы встречали такую ситуацию? Перечитав ваши посты я понял что вам нечего сказать.
Вы предложили считать карту. Я предложил поработать с остальными двумя датчиками, дабы убедиться что проблема именно в BMP.
Второй вопрос: Что не так то?
[uquote="Albert_V",url="/forum/viewtopic.php?p=3459577#p3459577"]Не слишком ли смелое предположение? Вы видели его текст программы?[/uquote]
Я не утверждал что там есть ошибки. Но и вы не можете утверждать что их там нет. Третий вопрос: вы видели текст его программы?
Что может быть проще, обратиться к другим двум устройствам? Четвёртый вопрос: Каким образом этот совет вам претит?
[uquote="Albert_V",url="/forum/viewtopic.php?p=3459577#p3459577"]Логи с логического анализатора и подробное описание этих багов (включая фото железа и монтажа) в студию! Так же, не забудьте приложить "картинку что на шине" с осциллографа.[/uquote]
А может что-то ещё нужно? Вы пишите, не стесняйтесь. Но только давайте будем последовательны, сначала ответьте на мои вопросы.
Глупый не задает вопросы. Глупый и так все знает.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: BMP280, датчик давления и температуры
AndTer, Вы невнимательно читали сообщения : [uquote="DESIER",url="/forum/viewtopic.php?p=3459469#p3459469"]вариант неправильного чтения данных не может быть, на этой же шине сидят часы DS3231 и дисплей (на который я вывожу все данные) SSD1306.[/uquote]
У него уже есть 3 устройства на шине и все остальные работают (одновременно) исправно.
Какой смысл цеплять ему ещё датчики на шину ?
У него уже есть 3 устройства на шине и все остальные работают (одновременно) исправно.
Какой смысл цеплять ему ещё датчики на шину ?
Re: BMP280, датчик давления и температуры
[uquote="DESIER",url="/forum/viewtopic.php?p=3459469#p3459469"]У меня готовая китайская плата CJMCU-8128.[/uquote]
Она? https://www.banggood.com/ru/CJMCU-8128- ... 67432.html
Она? https://www.banggood.com/ru/CJMCU-8128- ... 67432.html
Re: BMP280, датчик давления и температуры
Цеплять их не надо, они на одной плате с BMP280. К ним надо просто обратиться.
Их правильная работа это проверка всей платы и питания этих устройств.
Самописный код иногда преподносит сюрпризы. И он может слать/принимать разное в зависимости от разных данных. Это тоже из далёкого практического прошлого.
Эта простая проверка гарантирует правильный фокус в дальнейшем.
Их правильная работа это проверка всей платы и питания этих устройств.
Самописный код иногда преподносит сюрпризы. И он может слать/принимать разное в зависимости от разных данных. Это тоже из далёкого практического прошлого.
Эта простая проверка гарантирует правильный фокус в дальнейшем.
Глупый не задает вопросы. Глупый и так все знает.
Re: BMP280, датчик давления и температуры
[uquote="dosikus",url="/forum/viewtopic.php?p=3459605#p3459605"][uquote="DESIER",url="/forum/viewtopic.php?p=3459469#p3459469"]У меня готовая китайская плата CJMCU-8128.[/uquote]
Она? https://www.banggood.com/ru/CJMCU-8128- ... 67432.html[/uquote]
Да, именно такая. Только от другого продавца.
Добавлено after 42 minutes 29 seconds:
[uquote="AndTer",url="/forum/viewtopic.php?p=3459607#p3459607"]Цеплять их не надо, они на одной плате с BMP280. К ним надо просто обратиться.
Их правильная работа это проверка всей платы и питания этих устройств.
Самописный код иногда преподносит сюрпризы. И он может слать/принимать разное в зависимости от разных данных. Это тоже из далёкого практического прошлого.
Эта простая проверка гарантирует правильный фокус в дальнейшем.[/uquote]
Всего на шине у меня ведущий микроконтроллер Atmega2560 и 6 ведомых устройств.
1: Дисплей SSD1306. Работает исправно так как я на него и вывожу все данные (по uart в компьютер я не передаю ничего).
2: Часы DS3231 и память AT24C128 на одной плате. Часы отлично функционируют, к памяти не обращался.
3: BMP280 датчик давления и температуры, HDC1080 датчик влажности и температуры, CCS811 датчик CO2 и VCO находятся на своей отдельной плате. С BMP280 соответственно пытаюсь разобраться, к остальным двум еще не обращался.
Вот эта функция у меня читает один байт данных из области памяти датчика. При вызове функции TWI_Start(адрес устройства); контролируется ответ от устройств ASK/NASK. Если датчик не ответил бы, мне бы выдало ошибку, а то что я каким то образом с указанным адресом обращаюсь на самом деле к какому то другому датчику я считаю не реальным.
Она? https://www.banggood.com/ru/CJMCU-8128- ... 67432.html[/uquote]
Да, именно такая. Только от другого продавца.
Добавлено after 42 minutes 29 seconds:
[uquote="AndTer",url="/forum/viewtopic.php?p=3459607#p3459607"]Цеплять их не надо, они на одной плате с BMP280. К ним надо просто обратиться.
Их правильная работа это проверка всей платы и питания этих устройств.
Самописный код иногда преподносит сюрпризы. И он может слать/принимать разное в зависимости от разных данных. Это тоже из далёкого практического прошлого.
Эта простая проверка гарантирует правильный фокус в дальнейшем.[/uquote]
Всего на шине у меня ведущий микроконтроллер Atmega2560 и 6 ведомых устройств.
1: Дисплей SSD1306. Работает исправно так как я на него и вывожу все данные (по uart в компьютер я не передаю ничего).
2: Часы DS3231 и память AT24C128 на одной плате. Часы отлично функционируют, к памяти не обращался.
3: BMP280 датчик давления и температуры, HDC1080 датчик влажности и температуры, CCS811 датчик CO2 и VCO находятся на своей отдельной плате. С BMP280 соответственно пытаюсь разобраться, к остальным двум еще не обращался.
Код: Выделить всё
char RDB (unsigned char addr)
{
char t = 0;
TWI_Start(0xEC);
TWI_WriteData(addr);
TWI_Stop();
TWI_Start(0xED);
t = TWI_ReadData();
TWI_Stop();
return t;
}
Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: BMP280, датчик давления и температуры
DESIER, Загляните в ЛС.
Re: BMP280, датчик давления и температуры
Всем привет. Я частично разобрался с датчиком. Не правильно делал инициализацию, после настройки датчика делал chip reset и соответственно данные не обновлялись. Сырые данные с регистров читаются, показания меняются при воздействии на датчик. Вот только обработать не получается, калибровочные данные почему то все по нулям.
Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.
Re: BMP280, датчик давления и температуры
Разобрался. Во все виноват опять chip reset. Вот такая получилась инициализация. Проблема осталась с расчетом, давление сильно смещено на 50 кПа. Пока еще не нашел в чем причина.
Код: Выделить всё
void Initial_BMP280()
{
while((id() != CHIP_ID) && !status());
BMP280_Start(WRITE);
TWI_WriteData(0x88); // начальный адрес для чтения калибровочных бит
BMP280_Start(READ);
for (uint8_t i = 0; i<26; i++)
{
if (i==25) dig[i] = TWI_ReadData(NACK);
else dig[i] = TWI_ReadData(ACK);
}
BMP280_Start(WRITE);
TWI_WriteData(0xF4); // ctrl_meas register
TWI_WriteData(0xB7);
BMP280_Start(WRITE);
TWI_WriteData(0xF5); // config register
TWI_WriteData(0x80);
TWI_Stop();
dig_T1 = (dig[1] << 8) | dig[0];
dig_T2 = (dig[3] << 8) | dig[2];
dig_T3 = (dig[5] << 8) | dig[4];
dig_P1 = (dig[7] << 8) | dig[6];
dig_P2 = (dig[9] << 8) | dig[8];
dig_P3 = (dig[11] << 8) | dig[10];
dig_P4 = (dig[13] << 8) | dig[12];
dig_P5 = (dig[15] << 8) | dig[14];
dig_P6 = (dig[17] << 8) | dig[16];
dig_P7 = (dig[19] << 8) | dig[18];
dig_P8 = (dig[21] << 8) | dig[20];
dig_P9 = (dig[23] << 8) | dig[22];
}Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.
Re: BMP280, датчик давления и температуры
Приветствую всех!
Ни кто не сталкивался с такой бодягой - Датчик BME280, прицепил на STM32f100, протокол I2C, все вычисления по даташиту...
НО при положительных температурах все хорошо. Как только переваливается за 0 - температура "409", давление вообще ерунда какая то...
С температурой решил примерно так же как у DS18B20 (вставка в стандартный код):
А вот с давлением ума не дам
Или я вообще не туда капаю?
Ни кто не сталкивался с такой бодягой - Датчик BME280, прицепил на STM32f100, протокол I2C, все вычисления по даташиту...
НО при положительных температурах все хорошо. Как только переваливается за 0 - температура "409", давление вообще ерунда какая то...
С температурой решил примерно так же как у DS18B20 (вставка в стандартный код):
Код: Выделить всё
temper_float = ((temper_int * 5 + 128) >> 8);
temper_float /= 100.0f;
if(temper_float>100) //если температура <0
{
temper_float =409 - temper_float;
temper_float = -temper_float; //Маркировка отрицательной температуры
}
return temper_float;А вот с давлением ума не дам
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
Re: BMP280, датчик давления и температуры
passer_by, так не прокатит. Вы применив расчет схожий с DS18B20 изменили показания температуры только на конечном выходе, то что вы видите. Но при расчетах с датчиками BOSCH по другому, там есть переменная t_fine, сырое значение температуры, которая потом передаётся в расчеты давления. Нужно искать ошибку в коде расчета.
P.S. А я решил свою проблему. Дело было в объединении принятых байт с датчика.
Я передавал данные в функцию вот так, складывал значения:
А нужно было через логическое или:
В общем у меня все теперь заработало.
P.S. А я решил свою проблему. Дело было в объединении принятых байт с датчика.
Я передавал данные в функцию вот так, складывал значения:
Код: Выделить всё
bmp280_compensate_T(((int32_t)ptd[3]<<12) + ((int32_t)ptd[4]<<4) + ((int32_t)ptd[5]>>4));Код: Выделить всё
bmp280_compensate_T(((int32_t)ptd[3]<<12) | ((int32_t)ptd[4]<<4) | ((int32_t)ptd[5]>>4));Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.
Re: BMP280, датчик давления и температуры
[uquote="DESIER",url="/forum/viewtopic.php?p=3515198#p3515198"]passer_by, так не прокатит. Вы применив расчет схожий с DS18B20 изменили показания температуры только на конечном выходе, то что вы видите. Но при расчетах с датчиками BOSCH по другому, там есть переменная t_fine, сырое значение температуры, которая потом передаётся в расчеты давления. Нужно искать ошибку в коде расчета.[/uquote]
Да нет. Тут как раз все нормально. Я меняю выдачу температуры именно на выходе. Переменная t_fine рассчитывается ранее, до выдачи результата и на расчет давления ни как не влияет.
Да ладно, бог с ним с давлением. Почему фирменный расчет глючит ... Такое ощущение, что я где то намудрил с форматами переменных. Типа переход с uint32_t на float?
Да нет. Тут как раз все нормально. Я меняю выдачу температуры именно на выходе. Переменная t_fine рассчитывается ранее, до выдачи результата и на расчет давления ни как не влияет.
Да ладно, бог с ним с давлением. Почему фирменный расчет глючит ... Такое ощущение, что я где то намудрил с форматами переменных. Типа переход с uint32_t на float?
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
Re: BMP280, датчик давления и температуры
Вот как раз t_fine влияет на давление. У вас где-то косяк до расчета t_fine. Вы как бы замаскировали проблему, но не устранили её.
Вот код расчета из datashee на датчик. Посмотрите внимательно на функцию расчета давления. И при расчете влажности она тоже участвует.
Вот код расчета из datashee на датчик. Посмотрите внимательно на функцию расчета давления. И при расчете влажности она тоже участвует.
Код: Выделить всё
// Returns temperature in DegC, double precision. Output value of “51.23” equals 51.23 DegC.
// t_fine carries fine temperature as global value
BME280_S32_t t_fine;
double BME280_compensate_T_double(BME280_S32_t adc_T)
{
double var1, var2, T;
var1 = (((double)adc_T)/16384.0 – ((double)dig_T1)/1024.0) * ((double)dig_T2);
var2 = ((((double)adc_T)/131072.0 – ((double)dig_T1)/8192.0) *
(((double)adc_T)/131072.0 – ((double) dig_T1)/8192.0)) * ((double)dig_T3);
t_fine = (BME280_S32_t)(var1 + var2);
T = (var1 + var2) / 5120.0;
return T;
}
// Returns pressure in Pa as double. Output value of “96386.2” equals 96386.2 Pa = 963.862 hPa
double BME280_compensate_P_double(BME280_S32_t adc_P)
{
double var1, var2, p;
var1 = ((double)t_fine/2.0) – 64000.0;
var2 = var1 * var1 * ((double)dig_P6) / 32768.0;
var2 = var2 + var1 * ((double)dig_P5) * 2.0;
var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);
var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;
var1 = (1.0 + var1 / 32768.0)*((double)dig_P1);
if (var1 == 0.0)
{
return 0; // avoid exception caused by division by zero
}
p = 1048576.0 – (double)adc_P;
p = (p – (var2 / 4096.0)) * 6250.0 / var1;
var1 = ((double)dig_P9) * p * p / 2147483648.0;
var2 = p * ((double)dig_P8) / 32768.0;
p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;
return p;
}
// Returns humidity in %rH as as double. Output value of “46.332” represents 46.332 %rH
double bme280_compensate_H_double(BME280_S32_t adc_H);
{
double var_H;
var_H = (((double)t_fine) – 76800.0);
var_H = (adc_H – (((double)dig_H4) * 64.0 + ((double)dig_H5) / 16384.0 * var_H)) *
(((double)dig_H2) / 65536.0 * (1.0 + ((double)dig_H6) / 67108864.0 * var_H *
(1.0 + ((double)dig_H3) / 67108864.0 * var_H)));
var_H = var_H * (1.0 – ((double)dig_H1) * var_H / 524288.0);
if (var_H > 100.0)
var_H = 100.0;
else if (var_H < 0.0)
var_H = 0.0;
return var_H;
}
Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.
Re: BMP280, датчик давления и температуры
Вы не совсем поняли, что я имел в виду. t_fine рассчитывается до расчета значение Т, которое возвращается для показа температуры. Его я и правлю. А не t_fine.
Другой вопрос - из какого даташита вы привели пример? У меня совсем другие формулы расчета в даташите. Если можно скинте ссылку на этот даташит.
P.S. О! нашел - это с даташита на BMP280
Другой вопрос - из какого даташита вы привели пример? У меня совсем другие формулы расчета в даташите. Если можно скинте ссылку на этот даташит.
P.S. О! нашел - это с даташита на BMP280
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
Re: BMP280, датчик давления и температуры
Я тогда вообще ничего не понимаю где вы и что изменяете. Расчет я брал вот из этого datasheet, BME280.
Почти в конце документа все функции описаны.
Почти в конце документа все функции описаны.
- Вложения
-
- BME280.pdf
- (1.85 МБ) 368 скачиваний
Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.
Re: BMP280, датчик давления и температуры
Хм. Я брал формулы со страницы 23 этого даташита. До конца не листал. У Вас со страницы 49. Заявлено как "Alternative compensation formulas". Ну попробую с конвертировать под мою микруху, посмотрим.
А Вы проверяли этот "Alternative compensation formulas" на работу в отрицательных температурах? Не глючит?
А Вы проверяли этот "Alternative compensation formulas" на работу в отрицательных температурах? Не глючит?
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
Re: BMP280, датчик давления и температуры
[uquote="passer_by",url="/forum/viewtopic.php?p=3515510#p3515510"]А Вы проверяли этот "Alternative compensation formulas" на работу в отрицательных температурах? Не глючит?[/uquote]
В отрицательных не проверял, у меня не предусмотрена работа на улице. А для эксперимента пока нет возможности вынести датчик на улицу.
В отрицательных не проверял, у меня не предусмотрена работа на улице. А для эксперимента пока нет возможности вынести датчик на улицу.
Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.