Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вс ноя 20, 2016 06:16:50

Всё началось с того, что мне было интересно, удастся ли "уместить" 32-битную математику и работу с SI4432 в достаточно "дохлый" PIC16LF1823 и посмотреть сколько времени он будет просчитывать данные от BME280.
В реальности, получилось что от начала считывания данных с BME280 (константы + текущие значения параметров) до начала передачи 12mS.
Меня это вполне устроило и вот что получилось "на выходе":

Размер ПП 45.5х15.8мм. /печатную плату изготовил Уважаемый mial/
Изображение
СпойлерИзображение
Ток потребления платы между передачами пакетов - 1.8µA.
Рассчётное время автономной работы - более 3-ёх лет.
Передача пакета (9600bps) с ожиданием подтверждения о приёме + подбор мощности передатчика (если подтверждение не получено - повтор передачи с увеличением выходной мощности передатчика).
Передача и приём возможны на разнесённых каналах.
Поправка значения атм. давления по высоте установки датчика (в Па.).
Возможность изменения большинства параметров при регистрации датчика на БС (вход в этот режим по нажатию KN1 [в реальности - геркон]).

Значения температуры, давления и влажности передаются в двоично-десятичном виде с точностью 0,1 (значение атм. давления пересчитано в мм рт. ст.).
Так же, в пакете передаётся:
Номер датчика.
Информация о разряде батареи (0-7)
Значение текущей мощности передатчика (0-7).
Информация о том, что текущий пакет передаётся после рестарта и было ли получено подтверждение о приёме предыдущего пакета.

В ответе от базовой станции могут быть команды:
1. Пакет получен.
2. Изменение значения поправки атм. давления.
3. Однократная поправка времени до передачи следующего пакета.
4. Разрешение/запрет повтора передачи пакета через 10сек. если пакет не был принят.
5. Вкл/выкл светодиода "Передача".

Есть тестовый режим:
Кнопками, подключенными к разъёму ICSP (линии PGC и PGD), возможно изменение значения в регистре 09h (SI4432) "30 MHz Crystal Oscillator Load Capacitance" с сохранением в EEPROM.
На TP1 - 30 MHz + включение передатчика (несущая частота 434,0 MHz).

Если кто то захочет повторить этот уличный датчик и "подцепить" его к своему изделию - выложу прошивку и подробно распишу протокол общения с БС.
Оформлять статью не планирую, но отвечу на все ваши вопросы.
----
Схема + PCB + список деталей:
СпойлерИзображение
BMSI.PCB
(255.99 KiB) Скачиваний: 51

Детали.doc
(55.5 KiB) Скачиваний: 66

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вс ноя 20, 2016 07:48:46

Полагаю, что этот датчик для летающей модели или чего-то подобного (?) Иначе, если он для метеостанции, то зачем выносить датчик давления на улицу, если давление на улице и дома одинаковое, если только приемная станция не в барокамере? Конечно, это при условии установки датчика на высоте жилого помещения, но при разной высоте все равно-же предполагается корректировка давления. Еще вопрос: что удалось улучшить с помощью UPG и как часто передаются данные сенсора, если предполагается работа на протяжении 3 лет?

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вс ноя 20, 2016 08:36:02

Я ценю ваше чувство юмора насчёт БПЛА, но это действительно уличный датчик.
В настоящее время, данные передаются приблизительно один раз в пять минут.
БС работает с двумя такими датчиками, расположенными с разных сторон дома и "разруливает" времена, когда каждый из датчиков передаст свой следующий пакет (что бы два датчика не пытались передать пакет данных одновременно).
Если в BME280 есть датчик давления - почему бы не получать с него информацию?
Что касается коррекции значения давления именно в датчике - математически, лучше эту поправку делать до перевода из ПА. в мм рт. ст. (меньше ошибка после вычислений) да и БС лучше работать с уже с предварительно скорректированными данными (датчики расположены на разных высотах).
----
P.S.
Изначально, задачей (для себя) было написание своей 32-битной математики для 8-битного PIC16 /ненавижу пользоваться чужими библиотеками/.
Самое смешное, что получилось почти как у PETER HEMSLEY :)
Это потом уже появилось желание сделать что-то полезное.

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вс ноя 20, 2016 19:17:25

Ну если датчик все-равно давление показывает, действительно почему-бы и не взять его. Однако, что делать с показаниями давления от двух датчиков в пределах той-же местности? Отличие между ними будет одно и тоже, определяемое разностью высот установки датчиков. Я имел в виду передавать на базовую станцию сырые данные датчиков, а расчет давления делать на приемном конце, где, как правило больше вычислительных ресурсов и меньше ограничений на токопотребление. Насчет специфических констант сенсоров, примените более продвинутые датчики давления, например, LPS25 или более новый и более точный LPS22, показывающие давление сразу без всяких вычислений. Однако, если первоначальным интересом было получение температуры с улицы, можно было-бы датчик попроще поставить. Если-уж передавать что-то с улицы, так, например, температуру и влажность, но не давление, которое текое-же как дома.

Так все-таки какие преимущества применения RF фронт-енда на UPG21xx? Сам трансивер без ухищрений обеспечивает устойчивый прием на расстоянии порядка 500м при мощности +13dbm. У меня в аналогичном проекте он работает на +10dbm и никогда повторная передача не требовалась. Датчик помимо нашего дома также обслуживает станцию в доме соседей. На такой мощности при передаче каждую минуту среднее токопотребление не превосходит пары десятков микроампер, т.е. его литиевой батарейки хватит лет на 7. Подобная станция у меня уже работает более 3 лет. Это я к тому, зачем регулировать мощность? Если сначала передавать на меньшей для экономии батареи а потом мощность увеличивать в случае неудачи, то с повторной пересылкой да еще и с приемом подтверждения понадобится больше энергии, чем если просто передать 1 раз с большей мощностью. Даже если одну минуту данных не принять из-за помех, ничего страшного. Даже если 2-3 не принять. Погодные условия на улице не меняются так быстро. Кстати, трансивер Ваш не рекомендуется для новых проектов, т.к. фирма уже несколько лет выпускает модернизацию этих чипов с лучшими параметрами.

А насчет 32-битной библиотеки, разве у Микрочипа нет соответствующего апноута? Это именно вопрос, а не утверждение, т.к. помню читал их апноут по операциям с плавающей точкой. Да и у других производителей 32-битные апноты имеются, помню читал у кого-то раньше. Тут я с Вами полностью солидарен - написать свою библиотеку как упражнение имеет смысл. Про Питера я никогда не слышал, но примеры операций с мультибайтовой арифметикой имеются, как правило в книгах. Я это к тому, что книги реферируются по крайней мере, а апноуты пишутся профессилналами.

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Пн ноя 21, 2016 17:53:59

Я видел ваши статьи.
Есть что "почерпнуть".
Спасибо за здоровую критику и идеи.
:beer:
---
Что касается передачи сырых данных - можно было бы и так сделать, но тогда пришлось бы хранить в БС калибровочные коэффициенты или передавать слишком длинный пакет данных.
SI7021 хороший датчик, но пришлось бы переходить на другой контроллер, поскольку этот датчик с интерфейсом I2C, а общение с SI4432 по SPI (у меня оба "висят" на одном SPI, только выбираются по CS). /у PIC16LF1823 один MSSP/.
Про UPG2214 (антенный коммутатор), честно говоря, я не могу обоснованно сказать будет ли без этого коммутатора хуже или нет. У меня нет измерительной техники, с помощью которой я смог бы провести измерения.
Я просто сделал по AN435 (да и китайцы UPG ставят на свои платы).
По поводу того что SI4432 снята с производства - я в курсе, но на складах в китае их ещё очень много, да и цена на них ощутимо ниже.
Что касается подбора выходной мощности: её уменьшение происходит не после первой удачной передачи. К тому же, есть возможность в настройках отключить эту функцию и задать фиксированную мощность.
Ну а что касается библиотек - я как то давно привык к тому, что сделал сам, оттестировал, знаешь как это работает и можно смело использовать в других проектах.
Микрочиповские видел но, на мой взгляд, они не оптимально сделаны.
Да и "зажрался" я что то в последнее время с контроллерами, у которых памяти столько, что можно особо не думать про оптимизацию кода (оптимизация только по времени).
А тут 2К Flash, 128 байт SRAM и 256 EEPROM. Хороший тренинг для мозга.
----
В любом случае, этот датчик нормально работает и переделывать его не вижу смысла.
Если кто то захочет повторить - подготовлю и выложу полную информацию.

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Пн фев 25, 2019 13:35:47

Здравствуйте товарищи!
Тоже вот решил потренировать мозг - только на атмеле и асме. Возник вопрос по калибровочным коэффициентам BME280 dig_H4 и dig_H5. В датащите они указаны как signed short, однако представлены в 12-ти битном виде. Означает ли это, что они однозначно положительные, так как четыре старших бита по дефолту нули, или я чего-то не понимаю?

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вт фев 26, 2019 11:19:03

Возможно это ошибка, но у меня в программе они именно как signed short с дополнением до 16-ти бит. Знак по старшему биту.

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вт фев 26, 2019 14:16:57

Albert_V писал(а):...Знак по старшему биту.

То есть по 12-му, и в засисимости от его значения число дополняется до 16-ти нулями или единицами - я правильно понял?
Просто у меня dig_H4 = 0х156, а dig_H5 = 0х000. dig_H4 однозначно положительное. Но хотелось бы написать код, который бы гарантированно работал со всеми датчиками, а не только с моим.

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вт фев 26, 2019 14:51:15

ALEXLAB писал(а):...я правильно понял?
Да. У меня сделано так.
Датчиков сделано немногим более 20-ти и, вроде, у всех показания совпадают с бытовыми гигрометрами.
Единственное замечено: Если брать отдельно BME280 (как деталь) - они работают нормально, а вот с ардуриновскими платами (вначале взял на пробу) - мне не повезло (полный ужас).
То ли китайцы их паяют с нарушением технологии, то ли отбраковку ставят. А может, просто такие попались...

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вт фев 26, 2019 15:17:11

Спасибо за ответ! Так и будем делать. На счет работоспособности датчиков не сомневаюсь - у меня чистокровные немцы. Взял еще в 15-м году пару штук за сумасшедшие деньги.

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вс мар 03, 2019 20:09:52

UPD:
Albert_V, Позвольте еще вопрос - какую формулу Вы использовали для расчета истинного значения давления? А то их несколько вариантов. Я использую для 32-х разрядов с GitHub-а. Но на выходе у меня творится черт знает что. Возможно, я сам допустил где-то косяк, но отловить его пока не могу. Температура и отн. влажность работают стабильно.

Re: BME280 + SI4432 + PIC16LF1823 (уличный датчик)

Вс ноя 20, 2022 09:09:17

Всем привет!
Конечно тема уже давно умерла, но всё таки может у кого сохранились исходники данного девайса?
Хотелось бы повторить...
Ответить