Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Bmp180 и pic18f2520 проблема не верное значение.

Вт май 17, 2022 21:28:50

Добрый вечер, помогите пожалуйста, есть датчик бмр180 атмосферного давления, температуру выводит правильно, то есть похожую которая в доме, но вот давление кажет 5301 в даташите на данный датчик сказано, что выводит в паскалях и чтоб получить мм. рт. ст надо разделить на 133.
Уже неделю бьюсь не получаеться и все.
Вложения
bmp180-shutl_63b5f94f01.pdf
(1.74 MiB) Скачиваний: 74
dht22_bmp180_pic18f2520.X.rar
(163.59 KiB) Скачиваний: 87

Re: Bmp180 и pic18f2520 проблема не верное значение.

Ср май 18, 2022 00:55:43

Nobodyred писал(а):надо разделить на 133.
Уже неделю бьюсь не получаеться и все.
Не получается поделить ?

Re: Bmp180 и pic18f2520 проблема не верное значение.

Ср май 18, 2022 00:59:56

Nobodyred писал(а):надо разделить на 133.
Уже неделю бьюсь не получаеться и все.
Не получается поделить ?

Если бы поделить не получалось, не получаеться вывести давление хрень кажет.
В расчетах все верно, А вот кажет не правильные цифры, что не так я сделал, к явному типу приводил.

Re: Bmp180 и pic18f2520 проблема не верное значение.

Ср май 18, 2022 01:07:37

Nobodyred писал(а):но вот давление кажет 5301

А в течение суток показания хоть как-то меняются?
Или вот это "5301" висит, независимо от состояния атмосферы?

зы.. В порядке бреда- у вас число в обратном порядке считано- если 1035 поделить на 1,33, то получится 778.... :dont_know:
Спойлер

Re: Bmp180 и pic18f2520 проблема не верное значение.

Ср май 18, 2022 04:42:27

Nobodyred писал(а):но вот давление кажет 5301

А в течение суток показания хоть как-то меняются?
Или вот это "5301" висит, независимо от состояния атмосферы?

зы.. В порядке бреда- у вас число в обратном порядке считано- если 1035 поделить на 1,33, то получится 778.... :dont_know:
Спойлер

Смотрите, температура выводит правдивую, она меняется, проверял программный i2c все работает считывает, записывает, каждое уравнение проверял, затем делю полученное число в паскалях на 133 и получаю бред.
Может кто-то код глянет либо проверит.
Я уже не знаю, что делать.

Re: Bmp180 и pic18f2520 проблема не верное значение.

Ср май 18, 2022 07:05:03

Если у вас проблемы только с расчетом, то можно попробовать:
На некоторых компиляторах у меня была проблема в последовательности действий.
Действия должны быть простыми.

Можете ввести промежуточную переменную и выполнить арифметические действия с более простыми равенства.
Код:
p1 = BMP180_calpressure();
long p_tmp = (long)(p1 / 133);
send_byte_number(p_tmp, 5);

Некоторые действия не нужны 1:1, поэкспериментируйте, например с печатью: по последовательному каналу, на дисплее: отображению промежуточных результатов. Узнайте: неверный номер возвращает датчик, или просчитывания, или печат ... ?

Re: Bmp180 и pic18f2520 проблема не верное значение.

Ср май 18, 2022 07:27:55

Если у вас проблемы только с расчетом, то можно попробовать:
На некоторых компиляторах у меня была проблема в последовательности действий.
Действия должны быть простыми.

Можете ввести промежуточную переменную и выполнить арифметические действия с более простыми равенства.
Код:
p1 = BMP180_calpressure();
long p_tmp = (long)(p1 / 133);
send_byte_number(p_tmp, 5);

Некоторые действия не нужны 1:1, поэкспериментируйте, например с печатью: по последовательному каналу, на дисплее: отображению промежуточных результатов. Узнайте: неверный номер возвращает датчик, или просчитывания, или печат ... ?

Хочу попробовать, ввести все значения с даташита и получить, то что должно быть в конце даташита в паскалях.

Re: Bmp180 и pic18f2520 проблема не верное значение.

Ср май 18, 2022 08:39:32

Не уверен, что вот в этом :
Спойлер
Код:
long BMP180_calpressure(void){

B6 = B5 - 4000;

X1 = ((B6 * B6 / 4096)*data3.B2)/ 2048;//*

X2 = B6 * data3.AC2  / 2048;//*

X3 = X1 + X2;

B3 = ((((long)data3.AC1*4+X3) <<3 ) + 2) / 4;//*


X1 = (B6 * data3.AC3)  / 8192;

X2 = ((B6 * B6 / 4096) * data3.B1) / 65536;

X3 = ((X1 + X2) + 2) / 4;

B4 = (long)data3.AC4 * (unsigned long)(X3 + 32768) / 32768;

B7 = ((unsigned long)UP - B3) * (50000 >> 3);

if (B7 < 0x80000000)
{ p = (B7 * 2) / B4; }
   
else
{ p = (B7 / B4) * 2;}

X1 = (p / 256)*(p / 256);

X1 = (X1 * 3038) / 65536 ;
       
X2 = (p * -7357 ) / 65536;

p = p + (X1 + X2 + 3791) / 16;

return p;



}
будет кто-то разбираться.
Прогоните код в отладчике и проанализируйте каждую написанную Вами строку.

Re: Bmp180 и pic18f2520 проблема не верное значение.

Ср май 18, 2022 10:41:34

"Компенсацию" правильно вычисляешь?
Вот, может поможет - мой говнокод для работы с этим датчиком (под STM32F103, но сам файл обработки данных от платформы не зависит).

Кстати, у тебя-то 8-битный МК! Возможно, где-то да возникает переполнение. И я бы не пользовался для вычислений нестрогими типами (int, short, long...) - их длина зависит от платформы, лучше пользоваться строгими: uint16_t, int64_t и т.п.

Re: Bmp180 и pic18f2520 проблема не верное значение.

Ср май 18, 2022 21:10:19

"Компенсацию" правильно вычисляешь?
Вот, может поможет - мой говнокод для работы с этим датчиком (под STM32F103, но сам файл обработки данных от платформы не зависит).

Кстати, у тебя-то 8-битный МК! Возможно, где-то да возникает переполнение. И я бы не пользовался для вычислений нестрогими типами (int, short, long...) - их длина зависит от платформы, лучше пользоваться строгими: uint16_t, int64_t и т.п.

Спасибо.
Ответить