Страница 1 из 1
Датчик давления BMP180
Добавлено: Вт мар 31, 2015 14:58:23
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. Как вычислить значение после запятой ?
Re: Датчик давления BMP180
Добавлено: Вт мар 31, 2015 16:38:39
SergSV
Второй вопрос решил. Остаток умножил на 100 и поделил на 133322.
Первый вопрос остается.
Re: Датчик давления BMP180
Добавлено: Вт мар 31, 2015 19:24:08
mas123
SergSV писал(а):Мне немного не понятна запись (50000>>oss) и (((AC1*4+X3)<<oss).
Сдвинуть значение вправо (>>) или влево (<<) на указанное количество бит.
Что можно интерпретировать как деление (>>) на "
2*oss" или умножение (<<) на "
2*oss"
SergSV писал(а):Я написал расчет без учета его с параметрами из даташита. Результат совпал. В даташите его значение равно 0
Ты сдвинул значения влево/вправо на 0 бит - т.е. оставил "как былО".
Re: Датчик давления BMP180
Добавлено: Ср апр 01, 2015 09:44:05
SergSV
mas123 спасибо.
Re: Датчик давления BMP180
Добавлено: Ср апр 01, 2015 19:56:31
mas123
Сам себя не поправишь - никто не поправит. В каком бреду я это писал?
mas123 писал(а):Что можно интерпретировать как деление (>>) на "2*oss" или умножение (<<) на "2*oss"
Сдвиг влево равнозначен умножению на 2 ^ oss, и сдвиг вправо - делению на 2 ^ oss.
В степени, а не умножить!
SergSV писал(а):Результат умножаю на 1000 и делю на 133322. .....69964*1000/133322=524
А что касательно чисел после запятой - почему бы не пойти простым, логическим путём? Умножить на 100000 и разделить на 133322.
69964 * 100000 / 133322 = 52477. Как можно увидеть: два младших разряда - это "две цифры после запятой".
Нужно всего-навсего вставить запятую перед второй справа цифрой.
Re: Датчик давления BMP180
Добавлено: Ср апр 01, 2015 22:30:54
SergSV
mas123 спасибо, а то я уже хотел умножение 2*oss делать.
Я при расчете работаю с 32 битными числами, а 69964 * 100000 это уже больше чем 32 бита. Программу немного подкоректировал уменьшил в размерах , но пока без oss. На вычисления температуры и давления затрачивается 930 мкс. при частоте 16мГц. Попробую внедрить oss.
Re: Датчик давления BMP180
Добавлено: Чт апр 02, 2015 18:37:49
mas123
SergSV писал(а):Я при расчете работаю с 32 битными числами, а 69964 * 100000 это уже больше чем 32 бита.
100000 / 133322 == 50000 / 66661. Впритык, но влезаем в 32 бита
А если согласиться с некоторой погрешностью, то => 25000 / 33330 - вообще хорошо влезаем.
Впрочем, я не знаю какой диапазон измерения, какое допустимое максимальное давление...
Кстати, а так ли нужны сотые от давления? Если для барометра - у меня делает замер до десятых, и то там болтается туда-сюда.
А если для расчета высоты, то лично я использую давление в Паскалях .
Re: Датчик давления BMP180
Добавлено: Пт апр 03, 2015 08:40:07
SergSV
Я хотел целую часть и сотые выводить на матрицы. Но после пары дней наблюдения понял что достаточно только целую часть выводит. От дробной толку мало . Оставлю ее в расчетах. Но от вывода на матрицы откажусь.
Re: Датчик давления BMP180
Добавлено: Пт апр 03, 2015 08:53:24
pyzhman
И это верно. Бесят даже десятые в показаниях иных термометров.
- Этой мумии 4004 года.
- Откуда такая точность?
- Четыре года назад, когда я устроился смотрителем в этот музей, директор сказал, что ей 4000 лет.
Re: Датчик давления BMP180
Добавлено: Пт апр 03, 2015 11:55:19
Jack_A
pyzhman писал(а): Бесят даже десятые в показаниях иных термометров.
Надеюсь, не в медицинских ?

Кстати, угодив в больницу, обнаружил, что современные электронные занижают по сравнению с ртутными. Во всяком случае, заветные 36,6 так и не смог наблюдать.
Re: Датчик давления BMP180
Добавлено: Пт апр 03, 2015 12:01:51
pyzhman
Медицинский, как известно, градусник. А то, что на улице, термометр.
Заветные 36,6 только в книжках. Если обратиться к Фаренгейту, то окажется, что в его время нормальной считалась температура 35,5 градуса по Цельсию (фаренгейтовские 24*4 градусов).
Re: Датчик давления BMP180
Добавлено: Чт фев 11, 2016 18:17:06
RealHann
А со мной bmp180 не хочет дружить (
на первую посылку EE AA нормально квитирует ACK, а после посылки рестарта и EF - сразу NACK...
Не сложно свой протокол на асме показать? хочется бага убить и проверить одну идею с этим датчиком

Re: Датчик давления BMP180
Добавлено: Чт фев 11, 2016 19:15:09
Ser60
Всё правильно Вы делаете для чтения коэффициентов из памяти:
START ЕЕ АА RESTART EF BYTE1 BYTE2 ... BYTE22 STOP
Может где-то ошибка в общении с модулем I2C или программной реализации этого протокола. Возможно, что сигнал RESTART не формируется. Если есть лог. анализатор, посмотрите сигналы на линиях I2C. В любом случае советую посмотреть на сенсор атмосферного давления LPS25H. Работать с ним гораздо проще и приятнее.
http://radiokot.ru/circuit/digital/measure/120/
Re: Датчик давления BMP180
Добавлено: Чт фев 11, 2016 19:44:19
RealHann
Уже победить этот хочется ) Купил, подключил, написал, остался один глючок

По большому счету RESTART это же обычная комбинация START? просто опущен STOP?
Re: Датчик давления BMP180
Добавлено: Чт фев 11, 2016 22:49:25
Ser60
Да, именно так. Может у Вас линии SCL и SDA не отпускаются перед формурованием RESTART. Без кода трудно гадать. Попробуйте вместо RESTART осуществить STOP и потом START. Сенсору это без разницы, но в условиях Вашей реализации может сработает.
Re: Датчик давления BMP180
Добавлено: Чт сен 29, 2016 20:18:37
Vi7
Положу здесь, может кому пригодиться.
CVAVR BMP180 TWI (аппаратный i2c). Для работы необходимо подключить twi.h, в функции twi_master_init(указать скорость в kHz); и глобально разрешить прерывания.