По моему опыту всё работало замечательно.
Для начала надо исключить ошибки, тем более библиотеки самописные.
Всё что написали вы тоже не имеет ничего общего с опытом. Или вы встречали конкретно такую ситуацию?
Вы не помогли решить проблему, а тоже предлагаете анализировать.
Не понимаю что вам не нравится?
Вы не решили проблему, я не решил.
Вы предложили снять карту.
Я предложил начать с того чтобы убедиться в правильности подключения и работы библиотек, задействовав другие датчики висящие на этой же шине.
Я привык решать проблемы последовательно, а не тыкая пальцем в небо. Собственно это и предлагаю.
При чём здесь ID? Чего вы к нему прицепились? Работая с данным датчиком нет необходимости считывать его ID, я никогда этой ерундой не занимался и не обращал внимание. В моих устройствах не было и не могло быть что на шину будет установлено устройство с таким же адресом, но другое.
При этом, имея ошибки в самописной библиотеке или проблемные устройства висящие на той же шине можно считать что угодно.
Хотите из личного? Попадались устройства которые отвечали на адреса не соответствующие даташиту. А так же попадались устройства которые слали мусор когда считывали не с них, а с других устройств.
Что может быть проще имея 3 датчика на одной шине и на одной этой плате, проверить другие два тоже? Если с ними нет никаких проблем, значит проблема в BMP. Логично что сначала надо исключить данную ситуацию. Иначе считывая карту можно считать что угодно.
[uquote="DESIER",url="/forum/viewtopic.php?p=3459417#p3459417"]сегодня решил считать id чипа, он оказался 68h(0b01011000), а по datasheet должен быть 58h(0b01101000).[/uquote]
Вам, лично по своему опыту, есть что сказать?
Перечитав ваши посты я понял что вам нечего сказать.
Вы предложили считать карту. Я предложил поработать с остальными двумя датчиками, дабы убедиться что проблема именно в BMP.
Что не так то?
Если я вас правильно понял, вы почти утверждаете, что поскольку DESIER пользуется самописной библиотекой - там есть ошибки.
Не слишком ли смелое предположение? Вы видели его текст программы?
AndTer писал(а):Хотите из личного? Попадались устройства которые отвечали на адреса не соответствующие даташиту. А так же попадались устройства которые слали мусор когда считывали не с них, а с других устройств.
Конечно хочу. Логи с логического анализатора и подробное описание этих багов (включая фото железа и монтажа) в студию! Так же, не забудьте приложить "картинку что на шине" с осциллографа.
Вы игнорируете все мои вопросы ПО ДЕЛУ в ваш адрес:
[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]
А может что-то ещё нужно? Вы пишите, не стесняйтесь. Но только давайте будем последовательны, сначала ответьте на мои вопросы.
AndTer, Вы невнимательно читали сообщения : [uquote="DESIER",url="/forum/viewtopic.php?p=3459469#p3459469"]вариант неправильного чтения данных не может быть, на этой же шине сидят часы DS3231 и дисплей (на который я вывожу все данные) SSD1306.[/uquote]
У него уже есть 3 устройства на шине и все остальные работают (одновременно) исправно.
Какой смысл цеплять ему ещё датчики на шину ?
Цеплять их не надо, они на одной плате с BMP280. К ним надо просто обратиться.
Их правильная работа это проверка всей платы и питания этих устройств.
Самописный код иногда преподносит сюрпризы. И он может слать/принимать разное в зависимости от разных данных. Это тоже из далёкого практического прошлого.
Эта простая проверка гарантирует правильный фокус в дальнейшем.
Добавлено 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. Если датчик не ответил бы, мне бы выдало ошибку, а то что я каким то образом с указанным адресом обращаюсь на самом деле к какому то другому датчику я считаю не реальным.
Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.
Всем привет. Я частично разобрался с датчиком. Не правильно делал инициализацию, после настройки датчика делал chip reset и соответственно данные не обновлялись. Сырые данные с регистров читаются, показания меняются при воздействии на датчик. Вот только обработать не получается, калибровочные данные почему то все по нулям.
Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.
Разобрался. Во все виноват опять chip reset. Вот такая получилась инициализация. Проблема осталась с расчетом, давление сильно смещено на 50 кПа. Пока еще не нашел в чем причина.
Приветствую всех!
Ни кто не сталкивался с такой бодягой - Датчик BME280, прицепил на STM32f100, протокол I2C, все вычисления по даташиту...
НО при положительных температурах все хорошо. Как только переваливается за 0 - температура "409", давление вообще ерунда какая то...
С температурой решил примерно так же как у DS18B20 (вставка в стандартный код):
passer_by, так не прокатит. Вы применив расчет схожий с DS18B20 изменили показания температуры только на конечном выходе, то что вы видите. Но при расчетах с датчиками BOSCH по другому, там есть переменная t_fine, сырое значение температуры, которая потом передаётся в расчеты давления. Нужно искать ошибку в коде расчета.
P.S. А я решил свою проблему. Дело было в объединении принятых байт с датчика.
Я передавал данные в функцию вот так, складывал значения:
[uquote="DESIER",url="/forum/viewtopic.php?p=3515198#p3515198"]passer_by, так не прокатит. Вы применив расчет схожий с DS18B20 изменили показания температуры только на конечном выходе, то что вы видите. Но при расчетах с датчиками BOSCH по другому, там есть переменная t_fine, сырое значение температуры, которая потом передаётся в расчеты давления. Нужно искать ошибку в коде расчета.[/uquote]
Да нет. Тут как раз все нормально. Я меняю выдачу температуры именно на выходе. Переменная t_fine рассчитывается ранее, до выдачи результата и на расчет давления ни как не влияет.
Да ладно, бог с ним с давлением. Почему фирменный расчет глючит ... Такое ощущение, что я где то намудрил с форматами переменных. Типа переход с uint32_t на float?
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
Вот как раз t_fine влияет на давление. У вас где-то косяк до расчета t_fine. Вы как бы замаскировали проблему, но не устранили её.
Вот код расчета из datashee на датчик. Посмотрите внимательно на функцию расчета давления. И при расчете влажности она тоже участвует.
Вы не совсем поняли, что я имел в виду. t_fine рассчитывается до расчета значение Т, которое возвращается для показа температуры. Его я и правлю. А не t_fine.
Другой вопрос - из какого даташита вы привели пример? У меня совсем другие формулы расчета в даташите. Если можно скинте ссылку на этот даташит.
P.S. О! нашел - это с даташита на BMP280
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
Хм. Я брал формулы со страницы 23 этого даташита. До конца не листал. У Вас со страницы 49. Заявлено как "Alternative compensation formulas". Ну попробую с конвертировать под мою микруху, посмотрим.
А Вы проверяли этот "Alternative compensation formulas" на работу в отрицательных температурах? Не глючит?
Если птичка уже в одном прыжке от тебя, всё-таки побереги свой нос, может она за оконным стеклом???
[uquote="passer_by",url="/forum/viewtopic.php?p=3515510#p3515510"]А Вы проверяли этот "Alternative compensation formulas" на работу в отрицательных температурах? Не глючит?[/uquote]
В отрицательных не проверял, у меня не предусмотрена работа на улице. А для эксперимента пока нет возможности вынести датчик на улицу.
Я, конечно, могу вести себя нормально. Но чёрт возьми - это ведь так скучно.