[image]

Простой цифровой ракетомодельныйный высотомер на Ардуино.

Высотомер своими руками.
 
1 5 6 7 8 9 10 11
+
-
edit
 

Брат-2

опытный

Nec> Платы спаяны между собой "штырьками", которые идут в комплекте. Подключение "в лоб", ....
Интересно, а ты на самом деле наш Nec? :) По переделки цепей питания понятно, а вот так периферию лепить к любым pin, первый раз вижу. :eek: Допустим, выходы держат до 40мА, а I2C, можно организовать на любые pin? Честно, в шоке! :eek: Предполагаю, некую подставу. :(
   2525
+
-
edit
 

Nec

втянувшийся

Брат-2> Допустим, выходы держат до 40мА
Так точно.

Брат-2> а I2C, можно организовать на любые pin?
Любую шину на любой пин. Тут организован софт-I2C и софт-SPI.

Брат-2> Предполагаю, некую подставу. :(
Пробуйте. Расскажите потом. Софт "сырой" и, наверное, буду "допиливать" время от времени.
   127.0.0.0127.0.0.0
RU apakhom #14.02.2025 22:01  @Брат-2#14.02.2025 20:29
+
+1
-
edit
 

apakhom

опытный

Nec>> Платы спаяны между собой "штырьками", которые идут в комплекте. Подключение "в лоб", ....
Брат-2> Интересно, а ты на самом деле наш Nec? :) По переделки цепей питания понятно, а вот так периферию лепить к любым pin, первый раз вижу.

Nec нормально все сделал. Ножками "дергать" можно как угодно :)
Программно можно все делать - и I2C, и SPI, и UART и пр. Быстродействие меги позволяет.
Для SPI (25Qxx) pinko пример кода еще когда давал...
Я и то (на заре увлечения) "баловался" программной реализацией интерфейса. И сейчас еще несколько Pro mini с распаянным BMP280 использую (в РП-40 такой вариант летает).
 

   134.0134.0
+
-
edit
 

Брат-2

опытный

....
Брат-2>> а I2C, можно организовать на любые pin?
Nec> Любую шину на любой пин. Тут организован софт-I2C и софт-SPI.
....
Ну, да, мы же условные программисты! :) У нас все привязано к конкретным выводам! Если взять распиновку любого Arduino, да и любого МК, то шины SPI и I2C привязаны к конкретным pin. Нет, бывает и 2 и 3 шины, но не на любые pin!
   2525

Nec

втянувшийся

Nec> Настройка и чтение памяти происходит через терминал COM-порта

В выходные сваял небольшую программку (если ее так можно назвать) в Excel, для связи с описываемым мной высотомером. Чтобы упростить задачу чтения памяти и настройки высотомера. Прога и файлы прошивки (*.hex) микроконтроллеров (с исходниками на бейсике) размещу на Я.Диск. Там же пара логов (для примера, "из-под шприца Жане"), которые автоматически создаются в той же папке, где и прога, после чтения памяти высотомера.
Форматирование листов и код VBA доступен для редактирования каждому, под свои нужды и хотелки. Никаких паролей и прочих ограничений - доработка "под себя" приветствуется! :) Считаю Excel более доступной и "народной" платформой. Однако, проверить совместимость х32/х64 нет возможности и предугадать все наперед не могу. Нужно пробовать.
Прикреплённые файлы:
No_Connect.jpg (скачать) [1280x540, 99 кБ]
 
Tun.jpg (скачать) [1279x539, 124 кБ]
 
Полет_1.jpg (скачать) [1278x537, 178 кБ]
 
Полет_2.jpg (скачать) [1280x543, 191 кБ]
 
 
   133.0.0.0133.0.0.0
Это сообщение редактировалось 04.03.2025 в 16:37
+
+1
-
edit
 

Nec

втянувшийся

Для тех, кто привык писать на флешку, в папке BMP280+SDHC исходники и файлы прошивки на высотомер по схеме Брат-2. Как под Atmega168, так и под Atmega328. Все характеристики и возможные настройки унаследованы от высотомера на W25Q128.
Поддерживает карты памяти поколения SDHC и большую часть SDXC. MicroSD используется только в качестве внешней памяти, соответственно, никаких файловых систем и прочего. Как отформатирована и отформатирована ли вообще - не важно. Важно чтобы на карте не было никакой ценной информации, потому что она может быть перезаписана и потеряна безвозвратно. Настроить и прочитать высотомер можно, как и высотомер на W25Q128, через терминал или Excel-программку. Все это по ссылке на файлообменник.
   133.0.0.0133.0.0.0

apakhom

опытный

apakhom>>>> Вопрос: почему тогда так выходит?
pinko> Nec>> Ответ кроется в Даташите и "фруктовой" библиотеке.
apakhom>> ну, так 43мс в худшем случае, а я читаю 50 мс - не должно быть "дважды из горшка"
apakhom>> У pinko вообще - 20 мс. Dyanko! ты как с датчиком общаешься?
pinko> Привет apakhom,
pinko> Я только сейчас увидел твой вопрос, прошу прощения, жизнь как-то отвлекла меня от хобби.
pinko> Похоже, проблема в том, как библиотека взаимодействует с датчиком.
pinko> - Либо буфер библиотеки вызывает повторяющиеся показания
pinko> - Либо библиотека не использует режим непрерывных данных, а запрашивает одиночное преобразование через регулярные периоды и что-то не так с тем. Также может быть проблемой как и когда отправляются запросы и считываются данные.
pinko> Кстати после инициализации датчика можно считать регистр управления, чтобы увидеть какой режим установлен.

Сегодня дошли руки - занялся анализом...
1. После инициализации ВМР280 состояние регистров 0xF4 = B7, 0xF5 = 0
(т.е. нормальный режим с периодом 0,5мс - как и положено)
2. Померил на всякий случай время на замер (получение давления функцией библиотеки) - 2мс

Но при считывании данных с периодом 50мс каждый 4-5 отсчет дублируются. Такое впечатление, что период обновления данных в датчике в нормальном режиме не 0,5мс, а 62,5мс. Но регистр 0xF5 говорит что "все нормально" :)

Библиотека стандартная "фруктовая", датчики пробовал разные...
Еще мысли есть?
Похоже, надо oversampling поменять с х16 на что-то по-проще :)
   115.0115.0
+
+1
-
edit
 

Nec

втянувшийся

apakhom> Еще мысли есть?
Регистр F4 = 0x25 (0010_0101) — oversampling temp x1, oversampling press x1, forced mode.
Регистр F5 0x00 (0000_0000) — STANDBY = 0,5мс (хоть оно и не нужно, исходя из предыдущего регистра), Filter OFF, Disable SPI.

Получаем единоразовый замер с максимальной скоростью. Чтобы иметь возможность контролировать периодичность замеров.
Когда необходимо, (к примеру, после всех вычислений) снова пишем в регистр F4 значение 0x25 и делаем новый замер. С временем оцифровки данных не заморачивался, но много меньше 10мс. BMP280 мне не интересен.
Всё исходники (файлы.bas) по ссылке на Я.Диск можно открыть даже блокнотом, для анализа кода. Не си и, тем более, не ардуиновское подобие C++, но разобраться можно.
   127.0.0.0127.0.0.0

apakhom

опытный

apakhom>> Еще мысли есть?
Nec> Регистр F4 = 0x25 (0010_0101) — oversampling temp x1, oversampling press x1, forced mode.

Спасибо! Очень хороший полноценный ответ.
Ветер сильный, запуск отложил, остался "на диване", докопался сам :)
Как итог: пошел почти твоим путем. Но до х1 опускаться не стал.
При х4 (01101111) - в normal получил период 18 мс - мне вполне подходит. С forced не стал связываться.

Пишут, что для х1 разрешение (без фильтра) = 2,6Па (это примерно 0,3 м), а для х4 - 0,7Па.
Так что - есть куда ускоряться :)

PS для тех кто пользуется "адафруит" в лоб (без "поднастройки") надо иметь ввиду, что периодичность обновления данных о давлении в буфере датчика - около 66 мс. А если еще и высоту считать, то...
   115.0115.0

M&D
mihail66

аксакал

apakhom> PS для тех кто пользуется "адафруит" в лоб (без "поднастройки") надо иметь ввиду, что периодичность обновления данных о давлении в буфере датчика - около 66 мс.

"66 мс" это микросекунды (0,000066с)?
   134.0.0.0134.0.0.0
+
+1
-
edit
 

pinko

опытный

apakhom> Сегодня дошли руки - занялся анализом...
apakhom> 1. После инициализации ВМР280 состояние регистров 0xF4 = B7, 0xF5 = 0
apakhom> (т.е. нормальный режим с периодом 0,5мс - как и положено)
apakhom> 2. Померил на всякий случай время на замер (получение давления функцией библиотеки) - 2мс
apakhom> Но при считывании данных с периодом 50мс каждый 4-5 отсчет дублируются. Такое впечатление, что период обновления данных в датчике в нормальном режиме не 0,5мс, а 62,5мс. Но регистр 0xF5 говорит что "все нормально" :)

Привет apakhom,

Регистр 0xF4 = 0хB7 = b10110111, т.е. 16х передискретизация как по температуре так и по давлением.

Время ожидания 0.5 миллисекунды — это время между измерениями, однако при 16-кратной передискретизации каждое измерение занимает до 43,2 мс. Таким образом, максимальное время от измерения до измерения составляет примерно 44 мс.

Если посмотреть на диаграмму, то сначала измеряется температура, а затем давление. Таким образом, между последним обновлением данных о давлении и следующим обновлением данных о давлении может пройти более 50 мс.

Также следует отметить, что если регистры давления считываются в "пакетном режиме", то считывание данных происходит в режиме теневого копирования - тоесть регистр данных давления не обновляется новыми данными до тех пор, пока текущее преобразование не будет полностью завершено.
Прикреплённые файлы:
BMP280.jpg (скачать) [657x315, 67 кБ]
 
 
   136.0136.0

Nec

втянувшийся

apakhom> С forced не стал связываться.

Forced mode тем и хорош, что можем квантовать время как нам удобно, без привязки к барометру. В любой момент, когда нам нужно, "пнули" барометр и занимаемся своими делами, пока он измеряет и обновляет регистры АЦП. Сделали свои дела (прошло достаточно времени для конвертации) - считали АЦП, поместили в массив и дальше занимаемся своими делами. Время от замера до чтения = Const. Время между замерами = Const. Все константы задаём сами.

apakhom> Пишут, что для х1 разрешение (без фильтра) = 2,6Па (это примерно 0,3 м), а для х4 - 0,7Па.
Всё это фигня, т.к. реальное давление, в тепличных условиях, пляшет ±10-15Па = ±1м. А в условиях шума и ветра итого больше. Поэтому, шумы барометра всегда будут ниже фактического порога.

З.Ы. Как всегда, ничего никому не навязываю, просто делюсь информацией. Каждый вправе делать как считает нужным :)
   127.0.0.0127.0.0.0
1 5 6 7 8 9 10 11

в начало страницы | новое
 
Поиск
Настройки






Статистика
Рейтинг@Mail.ru
АвиаТОП
 
Яндекс.Метрика
website counter
 
free counters