Датчик давления BMP180

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Прорезались зубы
Сообщения: 230
Зарегистрирован: Вс янв 26, 2014 22:40:17
Откуда: Рязань

Сообщение SergSV »

Написал расчет давления под этот датчик на ассемблере. Осталось два вопроса.
1. В формулах есть такой параметр oss обозначающий точность измерения.

При подсчете B3
B3=(((AC1*4+X3)<<oss)=2)/4

При подсчете B7
B7=((unsigned long)UP-B3)*(50000>>oss)
if (B7<0x80000000){p=(B7*2)/B4}
else {p=(B7/B4)*2}

Мне немного не понятна запись (50000>>oss) и (((AC1*4+X3)<<oss). Я написал расчет без учета его с параметрами из даташита. Результат совпал. В даташите его значение равно 0 т.е стандартное измерение. Я хочу использовать точное oss=3. Как oss учитывать в формулах?

2. Второй вопрос перевод давления из паскалей в мм. рт. ст.
С целой частью проблем нет.
Результат умножаю на 1000 и делю на 133322. По примеру из даташита получаем:
69964*1000/133322=524 мм. рт. ст. . После деления остается остаток 0x019750 (104272)
Конечный результат должен быть 524,7746. Как вычислить значение после запятой ?
Последняя прошивка для часов на RGB матрицах на 21 странице в теме https://www.radiokot.ru/forum/viewtopic ... &start=400
Контактная информация:
Реклама
Прорезались зубы
Сообщения: 230
Зарегистрирован: Вс янв 26, 2014 22:40:17
Откуда: Рязань

Сообщение SergSV »

Второй вопрос решил. Остаток умножил на 100 и поделил на 133322.
Первый вопрос остается.
Последняя прошивка для часов на RGB матрицах на 21 странице в теме https://www.radiokot.ru/forum/viewtopic ... &start=400
Контактная информация:
Реклама
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Сообщение mas123 »

SergSV писал(а):Мне немного не понятна запись (50000>>oss) и (((AC1*4+X3)<<oss).
Сдвинуть значение вправо (>>) или влево (<<) на указанное количество бит.
Что можно интерпретировать как деление (>>) на "2*oss" или умножение (<<) на "2*oss"
SergSV писал(а):Я написал расчет без учета его с параметрами из даташита. Результат совпал. В даташите его значение равно 0
Ты сдвинул значения влево/вправо на 0 бит - т.е. оставил "как былО".
Прорезались зубы
Сообщения: 230
Зарегистрирован: Вс янв 26, 2014 22:40:17
Откуда: Рязань

Сообщение SergSV »

mas123 спасибо.
Последняя прошивка для часов на RGB матрицах на 21 странице в теме https://www.radiokot.ru/forum/viewtopic ... &start=400
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Сообщение mas123 »

Сам себя не поправишь - никто не поправит. В каком бреду я это писал? :shock:
mas123 писал(а):Что можно интерпретировать как деление (>>) на "2*oss" или умножение (<<) на "2*oss"
Сдвиг влево равнозначен умножению на 2 ^ oss, и сдвиг вправо - делению на 2 ^ oss.
В степени, а не умножить!
SergSV писал(а):Результат умножаю на 1000 и делю на 133322. .....69964*1000/133322=524
А что касательно чисел после запятой - почему бы не пойти простым, логическим путём? Умножить на 100000 и разделить на 133322.
69964 * 100000 / 133322 = 52477. Как можно увидеть: два младших разряда - это "две цифры после запятой".
Нужно всего-навсего вставить запятую перед второй справа цифрой.
Реклама
Прорезались зубы
Сообщения: 230
Зарегистрирован: Вс янв 26, 2014 22:40:17
Откуда: Рязань

Сообщение SergSV »

mas123 спасибо, а то я уже хотел умножение 2*oss делать.
Я при расчете работаю с 32 битными числами, а 69964 * 100000 это уже больше чем 32 бита. Программу немного подкоректировал уменьшил в размерах , но пока без oss. На вычисления температуры и давления затрачивается 930 мкс. при частоте 16мГц. Попробую внедрить oss.
Последняя прошивка для часов на RGB матрицах на 21 странице в теме https://www.radiokot.ru/forum/viewtopic ... &start=400
Контактная информация:
Реклама
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Сообщение mas123 »

SergSV писал(а):Я при расчете работаю с 32 битными числами, а 69964 * 100000 это уже больше чем 32 бита.
100000 / 133322 == 50000 / 66661. Впритык, но влезаем в 32 бита
А если согласиться с некоторой погрешностью, то => 25000 / 33330 - вообще хорошо влезаем.
Впрочем, я не знаю какой диапазон измерения, какое допустимое максимальное давление...

Кстати, а так ли нужны сотые от давления? Если для барометра - у меня делает замер до десятых, и то там болтается туда-сюда.
А если для расчета высоты, то лично я использую давление в Паскалях .
Прорезались зубы
Сообщения: 230
Зарегистрирован: Вс янв 26, 2014 22:40:17
Откуда: Рязань

Сообщение SergSV »

Я хотел целую часть и сотые выводить на матрицы. Но после пары дней наблюдения понял что достаточно только целую часть выводит. От дробной толку мало . Оставлю ее в расчетах. Но от вывода на матрицы откажусь.
Последняя прошивка для часов на RGB матрицах на 21 странице в теме https://www.radiokot.ru/forum/viewtopic ... &start=400
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

И это верно. Бесят даже десятые в показаниях иных термометров.
- Этой мумии 4004 года.
- Откуда такая точность?
- Четыре года назад, когда я устроился смотрителем в этот музей, директор сказал, что ей 4000 лет.
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6332
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

pyzhman писал(а): Бесят даже десятые в показаниях иных термометров.
Надеюсь, не в медицинских ? :)
Кстати, угодив в больницу, обнаружил, что современные электронные занижают по сравнению с ртутными. Во всяком случае, заветные 36,6 так и не смог наблюдать.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Медицинский, как известно, градусник. А то, что на улице, термометр. :beer:
Заветные 36,6 только в книжках. Если обратиться к Фаренгейту, то окажется, что в его время нормальной считалась температура 35,5 градуса по Цельсию (фаренгейтовские 24*4 градусов).
Docendo discimus
Контактная информация:
Открыл глаза
Сообщения: 55
Зарегистрирован: Ср май 14, 2014 15:46:02
Откуда: Харьков

Сообщение RealHann »

А со мной bmp180 не хочет дружить (
на первую посылку EE AA нормально квитирует ACK, а после посылки рестарта и EF - сразу NACK...
Не сложно свой протокол на асме показать? хочется бага убить и проверить одну идею с этим датчиком :)
Друг Кота
Аватара пользователя
Сообщения: 3785
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Всё правильно Вы делаете для чтения коэффициентов из памяти:
START ЕЕ АА RESTART EF BYTE1 BYTE2 ... BYTE22 STOP
Может где-то ошибка в общении с модулем I2C или программной реализации этого протокола. Возможно, что сигнал RESTART не формируется. Если есть лог. анализатор, посмотрите сигналы на линиях I2C. В любом случае советую посмотреть на сенсор атмосферного давления LPS25H. Работать с ним гораздо проще и приятнее.
http://radiokot.ru/circuit/digital/measure/120/
Открыл глаза
Сообщения: 55
Зарегистрирован: Ср май 14, 2014 15:46:02
Откуда: Харьков

Сообщение RealHann »

Уже победить этот хочется ) Купил, подключил, написал, остался один глючок :) По большому счету RESTART это же обычная комбинация START? просто опущен STOP?
Друг Кота
Аватара пользователя
Сообщения: 3785
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Да, именно так. Может у Вас линии SCL и SDA не отпускаются перед формурованием RESTART. Без кода трудно гадать. Попробуйте вместо RESTART осуществить STOP и потом START. Сенсору это без разницы, но в условиях Вашей реализации может сработает.
Vi7
Встал на лапы
Аватара пользователя
Сообщения: 147
Зарегистрирован: Пн авг 09, 2010 19:14:00
Откуда: Горловка

Сообщение Vi7 »

Положу здесь, может кому пригодиться.
CVAVR BMP180 TWI (аппаратный i2c). Для работы необходимо подключить twi.h, в функции twi_master_init(указать скорость в kHz); и глобально разрешить прерывания.
Вложения
BMP180twi.c
(3.23 КБ) 592 скачивания
Решительный шаг вперёд - есть результат хорошего пинка сзади.
Ответить

Вернуться в «Периферия»