MAL4X Научно-технический форум разработчиков симуляторов и автоматики


Симуляторы перегрузок. DIY электроника. ЭВМ. Компьютерные сети.
Up

Датчик давления влажности температуры BME280 обмен опытом

Техническая поддержка нахаляву, но не оперативная.

Модераторы: Death_Morozz, FELiS, null

Датчик давления влажности температуры BME280 обмен опытом

Сообщение scan11 » 29 янв 2017, 22:58

Народ! "Пилю" взаимодействие STM32F103C8T6 с датчиком давления, влажности, температуры BME280 от Bosch Sensortec . Хочу сказать.. Сумасшедшая штуковина!!! Учитывая то, что "стаж" в программировании STM32 на языке "С" год с небольшим, успехи таки, тоже "сумасшедшие". :D Можно сказать, что процесс взаимодействия STM32F103C8T6 и BME280 идёт в компании я, STM32F103C8T6, BME280 и его даташит на английском языке. Информации в инете практически никакой. В основном "умничанье", общие описания и бесполезные "тупняки".
Но несмотря на все эти препоны остался всего один шаг до получения на дисплее вожделенных показаний :D :D
Если вдруг на Mal4X найдётся чел, который решится на общение с этой "скотиной", то вэлкам в эту тему, :lol: пообщаемся. Есть наработки. Чую, нехилая метеостанция в итоге получится.. :mrgreen: :mrgreen:
ВотЪ!
Аватара пользователя
scan11
Беспроводных Дел Мастер
 
Сообщения: 301
Зарегистрирован: 16 июн 2011, 19:25
Благодарил (а): 16 раз.
Поблагодарили: 115 раз.
Баллы репутации: 169
ТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение null » 30 янв 2017, 13:14

Есть такая штука, работает у меня пару месяцев. Вполне пригодная. У меня был путь проще, ардуина с библиотекой :oops: :lol:
Русский X-Simulator
Изображение
За пределами форума. Мой инстаграмм.
Аватара пользователя
null
SIMER
 
Сообщения: 1041
Зарегистрирован: 03 мар 2010, 18:42
Откуда: Ростов-на-Дону
Благодарил (а): 219 раз.
Поблагодарили: 160 раз.
Баллы репутации: 138
ТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение scan11 » 30 янв 2017, 23:25

Оооо, тебе полегче,а я пилю "с нуля". Тяжко было, но всё легче и легче по мере углубления в тему. На сегодняшний момент уже получена окончательная температура. Точнейшие показания. Чувствительный, сволочь.. Была проблема с компенсационными формулами. Хрен поймёшь из даташита что к чему прибавляется, что из чего вычитается, что на что умножается, делится и что куда в результате этих йопнутых вычислений записывается .:D Но чел с киберфорума http://www.cyberforum.ru/ дал ссылку https://github.com/avislab/sensorstest/blob/master/BME280/BME280.py так там более менее адекватно приведены эти грёбаные формулы. Температура пошла без проблем, теперь дело за давлением и влажностью. Запилю, отпишусь. Есть правда один "затык" с передачей в датчик байтов конфигурации, но думаю пофиксю в будущем.. Если не жалко, кинь ардуиновскую библиотеку для изучения: scan11@yandex.com или ссылку, где брал. 8-)
А у меня отладочная плата собственного изготовления. на ней STM32F103C8T6, LCD 1604, светодиоды, питание. разъёмы под датчики. Вобщем всё что требуется для отладки. На ней уже запилен двухточечный термометр на двух DS1621. Тоже пришлось покорячиться. Учитывая то, что 3 месяца назад I2C для меня был "тёмным лесом". I2C интерфейс программный. Чё-то "не стоит" на аппаратный.. Во всяком случае пока.. Там дальше будет видно. :)
Во всяком случае хорошо что есть ещё чел, который заморочился на BME280. Уже не уныло.. Пообщаемся если что.
Когда полностью закончу процедуру компенсационных вычислений могу поделиться кодом. Если кому будет нужно. :D
Аватара пользователя
scan11
Беспроводных Дел Мастер
 
Сообщения: 301
Зарегистрирован: 16 июн 2011, 19:25
Благодарил (а): 16 раз.
Поблагодарили: 115 раз.
Баллы репутации: 169
ТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение fercmann » 31 янв 2017, 00:15

Аватара пользователя
fercmann
Зашел на огонёк
 
Сообщения: 3
Зарегистрирован: 02 ноя 2012, 00:24
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: 0

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение null » 31 янв 2017, 09:44

Ага, эта библиотека. Я это использую в связке с raspberry pi, openhab и протоколом mqtt. 1604 не модно ;)
Русский X-Simulator
Изображение
За пределами форума. Мой инстаграмм.
Аватара пользователя
null
SIMER
 
Сообщения: 1041
Зарегистрирован: 03 мар 2010, 18:42
Откуда: Ростов-на-Дону
Благодарил (а): 219 раз.
Поблагодарили: 160 раз.
Баллы репутации: 138
ТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение scan11 » 02 фев 2017, 20:40

Ага, спс. поглядим.
1604 не модно
попозже, когда опыт наберёт достаточную "критическую массу" буду пробовать что-либо графическое :) Тут от написания программы на 2 штуки BME280 мозг "рвёт".. Но справился вроде. Сам с себя фигею, сказал бы кто год назад, что буду такие программы писать, послал бы куда подальше :mrgreen: :mrgreen: Но гляди ж, фигачу и не мычу. Да ещё в "регистровом" стиле..
Аватара пользователя
scan11
Беспроводных Дел Мастер
 
Сообщения: 301
Зарегистрирован: 16 июн 2011, 19:25
Благодарил (а): 16 раз.
Поблагодарили: 115 раз.
Баллы репутации: 169
ТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение scan11 » 12 июн 2017, 08:09

Люди! кто "волочёт" в Си и STM32 и иных МК "геть до кучи";););) Надо обмозговать одну заморочку. Может кто чего прояснит или мысли какие будут.. Щас похаваю и напишу подробно..
Аватара пользователя
scan11
Беспроводных Дел Мастер
 
Сообщения: 301
Зарегистрирован: 16 июн 2011, 19:25
Благодарил (а): 16 раз.
Поблагодарили: 115 раз.
Баллы репутации: 169
ТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение Ale » 12 июн 2017, 18:12

scan11 писал(а):Люди! кто "волочёт" в Си и STM32

Я немного занимаюсь сабжэм. Без фанатизьма, но кое что на stm32f4 пишу в среде CooCox
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение scan11 » 12 июн 2017, 21:07

Вот такая "метаморфоза" имеет место:
Задействую детектор напряжения питания (PVD) чтобы была индикация разряда LI-Ion батареи. Вообще-то уже работает..
1. Нужно установить порог срабатывания PVD на 2,9v
1.1 Объявляю макрос : #define PVDT2V9 PWR->CR|=PWR_CR_PLS_2V9
1.2 В "main" выполняю его: PVDT2V9;
п. 1 выполняется и корректно работает.
**
2. Нужно разрешить работу PVD.
2.1 Объявляю макрос : #define PVDEN PWR->CR|=PWR_CR_PVDE
2.2 В "main" выполняю его: PVDEN;
п. 2 выполняется и корректно работает.
**
Теперь по состоянию флага PVDO в регистре PWR_CSR нужно выводить "N" (батарея в норме) или "D" (батарея разряжена)
Вот тут начинаются "чудеса"..
3. Объявляю макрос : #define PVDLVL PWR->CSR & PWR_CSR_PVDO
3.1 И вот так проверяя состояние флага (через макрос) должен вывести "N" или "D"
if (PVDLVL) // Проверка состояния "Hi" PVDO.
{PrintRow(R4,14,"D");} // PVD=1. Вывод знака разрядки батареи.
else // PVD=0. Вывод знака нормального заряда батареи.
{PrintRow(R4,14,"N");}
Через макрос PVDLVL условие не выполняется!! хоть тресни;(;(;(
А вот если строку условия написать так:
if (PWR->CSR & PWR_CSR_PVDO) // Проверка состояния "Hi" PVDO.
то есть "в лоб", не через макрос..
и далее так же как выше, то всё начинает работать как положено!
То есть налицо "непонимание" состояния флага если оно отслеживается через макрос;(;(
Есть какие-либо соображения?? (на всякий случай среда - Keil 5.20, "косяков" такого типа пока не наблюдалось)
Какая-то фигня получается. Конечно применение макроса непринципиально, но для "общего развития" неплохо было бы обсудить.;);)
А по поводу "борьбы" с этим датчиком, так он уже давно "взнуздан" и объезжен. Крутейший сабж!! Сейчас работают два датчика, улица и помещение. Выводятся все метеоданные, разностная температура, разностная влажность, вводится и сохраняется высота измерения давления, отображается давление, приведённое к уровню моря в точке измерения и значение барической ступени на установленной высоте. А сейчас это безумное устройство "обкатывается" под батарейное питание и вот такой вопрос попутно возник;);)
Фуфф!
ВотЪ!
;)
Аватара пользователя
scan11
Беспроводных Дел Мастер
 
Сообщения: 301
Зарегистрирован: 16 июн 2011, 19:25
Благодарил (а): 16 раз.
Поблагодарили: 115 раз.
Баллы репутации: 169
ТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение Ale » 13 июн 2017, 14:17

scan11 писал(а):Вот такая "метаморфоза" имеет место:

Эк... однако.

А проделай ка вот такой опыт
if (PVDLVL != 0) // Проверка состояния "Hi" PVDO.
{PrintRow(R4,14,"D");}
Интересно, будет работать?
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение scan11 » 14 июн 2017, 17:15

ыгЫ, попробую, отпишусь.Но закавыка забавная. Может на уровне, действительно, синтаксиса какой-то косячок? И именно в этом случае, с PVD..
Вот ещё есть подозрение на одну "гадость". В референс мануале, в секции описания регистра PWR_CSR (а именно в нём и "живёт" флаг PVDO) написано следующее:
"Additional APB cycles are needed to read this register versus a standard APB read."
Что в переводе. насколько я понимаю означает:
Для чтения этого регистра необходимы дополнительные APB циклы по сравнению с чтением APB в обычном случае.
Может процедура условия как-то через макрос "не успевает" сработать.. ХЗ..
И ещё, вспоминаю, было как-то вот что. Ох уж это несовершенство компиляторов..;);)
При объявлении глобальных переменных в одном порядке кое-что не работало, а переставил объявление одной из переменных на 2 строки ниже (или выше, не помню уже), и таки всё заработало. Маразм, кажется, но это факт!
Вобщем попробую, обязательно напишу;););)
Аватара пользователя
scan11
Беспроводных Дел Мастер
 
Сообщения: 301
Зарегистрирован: 16 июн 2011, 19:25
Благодарил (а): 16 раз.
Поблагодарили: 115 раз.
Баллы репутации: 169
ТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение scan11 » 14 июн 2017, 20:48

Конгениально!!! Всё работает!
Итак, в окончательном виде:
Макрос: #define PVDLVL PWR->CSR & PWR_CSR_PVDO
**
Код условия вывода:
if ((PVDLVL)!=0) // Проверка состояния "Hi" PVD. Здесь, если написать так: if (PVDLVL != 0) Keil "матюкается" а со скобками всё гуд..
{PrintRow(R4,14,"D");} // PVD=1. Вывод знака разрядки батареи.
else // PVD=0.
{PrintRow(R4,14,"N");} // Вывод знака нормального заряда батареи.
Спасибо за подсказочку:):):):) Учту в будущем что есть разные методики указания условий.
Аватара пользователя
scan11
Беспроводных Дел Мастер
 
Сообщения: 301
Зарегистрирован: 16 июн 2011, 19:25
Благодарил (а): 16 раз.
Поблагодарили: 115 раз.
Баллы репутации: 169
ТехнарьТехнарь

Re: Датчик давления влажности температуры BME280 обмен опыто

Сообщение Ale » 15 июн 2017, 09:31

scan11 писал(а):Всё работает!

Я давно замечал, что операции с битами не очень "честно" оставлять без доп. проверки. Уж что это за особенность, не знаю. Но взял себе за правило всегда делать явную проверку на равенство\неравенство нулю в таких случаях. А может это во мне "паскальщик" возмущается таким "сишным" сокращенным синтаксисом :lol:

А вообще, конечно, это ляп компилятора. По идее перед компиляцией текста все макросы должны вставляться в соответствующие места текста. Поэтому мне не понятно, почему при явном написании все работает, а при использовании макроса - нет..
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь


Вернуться в Техподдержка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

x

#{title}

#{text}