t_fine используется в расчетах давления, а также влажности и качества воздуха, если датчик имеет эти плюшки, как температурный корректор. По этой причине в Вашем (и любом) коде температуру нужно считать в первую очередь, чтобы "оживить" эту переменную. Честно говоря, не в курсе, каков алгоритм расчетов внутри самого датчика. Да и зачем?
Только не смейтесь . . . Мне попался датчик для ардуино BMP280 и я хочу приспособить его к ПИК'у. SPI мне знаком, действия с 16разрядными числами тоже, datasheet ВМР прочитал от корки до корки. Если смогу сформулировать задачу, думаю справлюсь. Меня устроит самая низкая точность; просто интересно.
Все в моей метеостанции работало отлично, но ВМ280 начал выдавать отрицательное давление и влажность 100%... Кто-нибудь сталкивался с такими показателями ?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
У меня после сброса питания измерение влажности не проходят и значения плавают около 72%. Но после второй инициализации (сбрасываю микроконтроллер) - измеряет корректно.
Считайте константы из датчика, затем сырые данные и результаты расчётов, чтобы было понятно, откуда может возникать ошибка.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: BMP280, датчик давления и температуры
Добавлено: Чт ноя 09, 2023 17:22:39
Открыл глаза
Зарегистрирован: Пн май 04, 2015 12:30:18 Сообщений: 50
Рейтинг сообщения:0
И еще раз про проблему отрицательных температур. Мне не понятно как 32 битном int может взяться 1 в 31 разряде при условии что данные с датчика приходят вообще в 20 битном виде?
Заголовок сообщения: Re: BMP280, датчик давления и температуры
Добавлено: Пт ноя 17, 2023 23:52:36
Открыл глаза
Зарегистрирован: Пн май 04, 2015 12:30:18 Сообщений: 50
Рейтинг сообщения:0
Проблема отрицательных температур - РЕШЕНА! И так, что бы понять, что и где меняет знак, я вывел данные из модуля в десятичном и двоичном коде (данные собраны с нескольких логов, которые были сгенерированы в разное время): СпойлерStart dig_T1 28409 0110111011111001 dig_T2 26591 0110011111011111 dig_T3 50 0000000000110010
T_raw 770881 00000000000010111100001101000001 Val1 513408 00000000000001111101010110000000 Val2 291 00000000000000000000000100100011 T_fine 513699 00000000000001111101011010100011 T 10033 00000000000000000010011100110001 P 749.301 H 0.000%
T_raw 722467 00000000000010110000011000100011 Val1 434830 00000000000001101010001010001110 Val2 208 00000000000000000000000011010000 T_fine 435038 00000000000001101010001101011110 T 8497 00000000000000000010000100110001 P 749.429 H 0.000%
T_raw 691286 00000000000010101000110001010110 Val1 384219 00000000000001011101110011011011 Val2 163 00000000000000000000000010100011 T_fine 384382 00000000000001011101110101111110 T 7507 00000000000000000001110101010011 P 749.231 H 0.000%
T_raw 615507 00000000000010010110010001010011 Val1 261235 00000000000000111111110001110011 Val2 75 00000000000000000000000001001011 T_fine 261310 00000000000000111111110010111110 T 5104 00000000000000000001001111110000 P 749.240 H 6.703%
T_raw 518922 00000000000001111110101100001010 Val1 104481 00000000000000011001100000100001 Val2 12 00000000000000000000000000001100 T_fine 104493 00000000000000011001100000101101 T 2041 00000000000000000000011111111001 P 745.099 H 25.223%
T_raw 457789 00000000000001101111110000111101 Val1 5258 00000000000000000001010010001010 Val2 0 00000000000000000000000000000000 T_fine 5258 00000000000000000001010010001010 T 103 00000000000000000000000001100111 P 745.393 H 21.098%
T_raw 455064 00000000000001101111000110011000 Val1 843 00000000000000000000001101001011 Val2 0 00000000000000000000000000000000 T_fine 843 00000000000000000000001101001011 T 16 00000000000000000000000000010000 P 745.409 H 21.790%
T_raw 454396 00000000000001101110111011111100 Val1 209690 00000000000111111111111100001001 Val2 0 00000000000000000000000000000000 T_fine 209690 00000000000111111111111100001001 T 40955 00000000000000001001111111111011 P 1154.772 H 0.000%
T_raw 453091 00000000000001101110100111100011 Val1 209478 00000000000111111111011011000100 Val2 0 00000000000000000000000000000000 T_fine 209478 00000000000111111111011011000100 T 40914 00000000000000001001111111010010 P 1155.549 H 0.000%
T_raw 451810 00000000000001101110010011100010 Val1 209271 00000000000111111110111010100111 Val2 0 00000000000000000000000000000000 T_fine 209271 00000000000111111110111010100111 T 40873 00000000000000001001111110101001 P 1156.318 H 0.000%
Как видно при переходе через ноль - появляется 1 в 20 разряде вычисляемой переменной Val1. Вот тут то и кроется корень зла. Это как раз и есть знаковый бит. Если в нём 1 - то температура отрицательная. Так же при переходе через 0 начинают врать давление и влажность. Максимум который что может вычислить модуль - это 188,5 градусов, а минимум -143 градуса (+/- с моими коэффициентами dig_T1 - dig_T3). Так же видно, что вычисляемая переменная Val2 - не может быть меньше 0. По этому я добавил в код следующую строчку:
Заголовок сообщения: Re: BMP280, датчик давления и температуры
Добавлено: Вс дек 17, 2023 17:16:00
Открыл глаза
Зарегистрирован: Пн май 04, 2015 12:30:18 Сообщений: 50
Рейтинг сообщения:0
Кто ни будь работал с этими модулями по SPI шине? Не понятно как работать с R/W регистрами? Посылка данных по SPI: Спойлерvoid BME280_send (uint8_t data) { PORTB &= ~(1<<PORTB2); //устанавливаем в 0 ножкe выбора устройства. SPDR = data; while(!(SPSR & (1<<SPIF))); //подождем пока данные передадутся } Чтение данных из регистра: Спойлерuint8_t BME280_read (uint8_t reg) { uint8_t Data_bme280; BME280_send(reg); BME280_send(0); Data_bme280=SPDR; PORTB |= 1<<PORTB2; asm ("NOP"); PORTB &= ~(1<<PORTB2); return Data_bme280; } А вот как организовать запись данных в регистр? По идее: BME280_send(reg); BME280_send(Data); PORTB |= 1<<PORTB2; asm ("NOP"); PORTB &= ~(1<<PORTB2); Но ведь это ничем не отличается от чтения данных из регистра....
Заголовок сообщения: Re: BMP280, датчик давления и температуры
Добавлено: Пн дек 18, 2023 13:59:40
Открыл глаза
Зарегистрирован: Пн май 04, 2015 12:30:18 Сообщений: 50
Рейтинг сообщения:0
К сожалению я читал перевод. Плохо понимаю по англицки. А перевод оказался не полным. Там заканчивается пунктом 6.2.2 (I2C шина)..... Полез в оригинал. И, таки да, при записи обнуляется старший бит адреса регистра.... Вот уже о чем не мог подумать. И еще, что бросилось в глаза - все адреса регистров начинаются с 88, а не с 0 т.е. 1 в старшем бите всегда присутствует. и ее обнуление - не приведет к путанице с адресами регистров. Теперь (для таких же как я) функция записи выглядит так: Спойлерvoid BME280_write (uint8_t reg, uint8_t data) { reg &=0x7F; BME280_send(reg); BME280_send(data); } И еще вопросы 1) стоит ли дергать CS после завершения записи? 2) оверсемплинг - повышает точность измерений и увеличивает время измерения? 3) Как работает БИХ фильтр? Производится несколько измерений и вычисляется достоверное?
Заголовок сообщения: Re: BMP280, датчик давления и температуры
Добавлено: Пн дек 18, 2023 20:32:22
Опытный кот
Карма: 16
Рейтинг сообщений: 170
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 829 Откуда: Уже не город Белых гор
Рейтинг сообщения:0
1) По даташиту CS опускается перед записью и поднимается после. Можно записывать несколько значений и потом поднимать CS. 2) да 3) лучше почитай мурзилку. Это фильтр с бесконечной импульсной функцией.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения