Отговори на тема  [ 24 мнения ]  Отиди на страница 1, 2  Следваща
Bosch BMP085, Някой ползвал ли е този Сензор? 
Автор Съобщение
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Bosch BMP085, Някой ползвал ли е този Сензор?
Работя по една играчка която ползва този сензор за атмосферно налягане и температура
Свързах го през i2c, прочетох информацията за калибриране на сензора, чета регистрите в които се съдържа температурата, но после при пресмятането по 'простата' формула нещо се прецакват нещата.

http://www.electroguru.net/pics/bmp085.jpg

Тук е описан алгоритъма по който се смятат стойностите.

Първи проблем.
Когато визуализирам стойности (с функцията itoa() обръщам Integer стойностите на променливите в стринг за да ги визуализирам). Ако използвам Двуична бройна система или 16-тична всичко е ок. Обаче ако сложа 10тична бройна система, част от числата стават отрицателни и ... ми е много трудно да зацепя логиката по която точно стават отрицателни.

DECIMAL__________________HEX
AC1=8053_________________0x 1F75
AC2=-1101________________0x FBB3
AC3=-14322_______________0x C80E
AC4=-31380_______________0x 856C
AC5=24929________________0x 6161
AC6=25984________________0x 6580
B1=5498__________________0x 157A
B2=58____________________0x 003A
MB=-32768________________0x 8000
MC=-11075________________0x D4BD
MD=2432__________________0x 0980

100% нещо много сериозно ми убягва и проблема е в мен, уви не можах да го открия.

Другото което е, че нещо не мога да осмисля тая формула за смятането на налягането от горната картинка...

Та някой ако е ползвал подобни датчици и има няква идея за ползването им със Atmega8 или 128 или подобен...

В момента ползвам Atmega8, с AVR Studio 5, пиша на C


Вто Ное 29, 2011 5:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
klez написа:
Обаче ако сложа 10тична бройна система, част от числата стават отрицателни и ... ми е много трудно да зацепя логиката по която точно стават отрицателни.


Кое му е трудното?
Ако най-старшия бит е 1, числото е отрицателно... т.е. ако е >0x8000

Положително:
8053 = 0x1F75

Отрицателно:
0xFBB3 = -1101

0x10000 - 0xFBB3 = 0x44d = (-1) * 1101


и един съвет - ако числата са unsigned използвай unsigned променливи и като ги печаташ използвай %u ;-)


Вто Ное 29, 2011 5:25 pm
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
хммм...
сега зацепих чак.
Мерси, Миро.

Аз сега гледам и още един проблем. нещо сметките не излизат.

На ръка го смятах преди малко и ст-ста за температурата излизаше 0x4A3 (1187) което ще рече 118.7 градуса, тъй като са на стъпка по 0.1градус целзий.

Сега вкарах алгоритъма който Бош са дали в API-то иии учудващо ама то сметна същата стойност. Което вече.. и аз не знам ко да го правя :)
Функцията която ползвам е следната:
Код:
unsigned int bmp_readT() {
   unsigned long int X1,X2,B5,Temp;
   unsigned long int tempvalue, temperature;
   twiStart(0b01110111, 0); //изпращане на СТАРТ чрез Twi модула. Адрес на Slave у-вото 01110111, 0 = Писане
   twiCommit(0xf4);  Изпращане на адреса на регистъра за писане (0xF4 - контролен регистър
   twiCommit(0x2e); //Изпращане на стойност 0х2е към контролния регистър. Тази стойност показва, че искаме да измерим температурата
   twiStop(); // Изпращане на TWI STOP

   tempvalue = bmp_read16bit(0xf6,0xf7); // Четене на 2та регистъра 0xF6 (Старшите 8 бита) и 0xF7.

   //Пресмятане на температурата използвайки формулата от API-то на Бош, Прочетената информация от ADC-то на сензора и Калибриращите константи
   X1 = (((long) tempvalue - (long) bmp_AC6) * (long) bmp_AC5) >> 15;
   X2 = ((long) bmp_MC << 11) / (X1 + bmp_MD);
   B5 = X1 + X2;
   temperature = ((B5 + 8) >> 4);
      
   return temperature;

}


Вто Ное 29, 2011 5:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Да няма някакъв офсет - примерно 100 градуса в + за да може с unsigned да ти дава резултат и в отрицателните градуси. Тъй като гледам 18,7 (+100) градуса - тамън стайна температура :)


Вто Ное 29, 2011 10:41 pm
Профил ICQ
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Ще направя някви измервания, но според дейташийта не видях да има такова нещо.

Сега стои на 132.5
в стаята ми едва ли е толкова...
като сложа пръст на него отива на 137.3.
А и с примерните стойности от дейташийта всичко излиза точно без офсет.


Вто Ное 29, 2011 11:13 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 02, 2008 10:24 pm
Мнения: 105
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
къде чакаш 4,5мс(25,5мс) за конвертиране, не се вижда в функцията
гледам че има EOC пин, bmp_read16bit() ли го гледа


Сря Ное 30, 2011 12:00 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Пич, темературата ти е сметната в стъпки от по 0.1 градус, т.е. това 132.5, дето го смяташ трябва да е 13.2 градуса. Просто го раздели на 10.
ПП. Много студено в тая твоята стая бе - аз ще умра от студ ако в стаята е 13 градуса :D .


Прикачени файлове:
temp.JPG
temp.JPG [ 68.79 KiB | Прегледано 2636 пъти ]
temp.JPG
temp.JPG [ 58.12 KiB | Прегледано 2636 пъти ]
Сря Ное 30, 2011 12:12 am
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Димитър, показанието е 1325, деля го на 10 и получавам 132.5 ;) мисля че го бях описал 2 поста по-нагоре

Цино, виж това с чакането... май наистина си прав че съм го пропуснал, довечера ще експериментирам пак, благодаря за забележката.


Сря Ное 30, 2011 3:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Видях че едни променливи трябва да signed, други unsigned... При теб AC4 май не трябва да е с знак, провери си типовете. По възможност разкарай тайпкастването, това може да източник на грешка. Имаш умножение на число със знак, което си заместил с <<, което по принцип е правилно, но съм виждал и компилатори, които не правят разлика между logical и arithmetic shift.

А пък като имаш примерни стойности, просто ги ползвай вместо да четеш от чипа. Така ще видиш проблема в сметките ли е, или в това какво четеш...


Сря Ное 30, 2011 3:22 pm
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
заместването на умножението и деленитето със << и >> съм го взаимствал от API файла който идва със този сензор, там има примерни C, функции.
това с типовете на променливите мисля, че точно е проблема ама ще хвана първо да прочета пак някоя книжка за типовете и после ще продължавам да ръчкам. Иначе информация от регистрите си я чете, като сложа пръст на сензора се забелязва как стойността на 2та регистъра се променя...


Сря Ное 30, 2011 3:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Сори, някак си съм го пропуснал тоя пост по-горе :) .


Сря Ное 30, 2011 3:46 pm
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
След няколко месеца борба имам леко развитие.

Променливата в която чета стойността от ADC-то за температура в дейташийта е описана като SIGNED. Вчера реших все пак да пренебрегна това и да я взема като Unsigned и Воала... всички сметки излизат перфектно.
Проблема е, че 1 от променливите си иска да е LONG а микроконтролера ми не може да ги поеме като Long ще трябва някой друг да пробвам :). Но на ръка като ги смятам поне вече са ОК.
Ще се мъча днеска да оптимизирам колкото се може повече кода че да я събера ама надали ще се получи ;). Една от работните и стойности е около 122 милиона


Сря Яну 18, 2012 12:02 pm
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Изтрих някои работи дето не ползвам и се събират променливите сега обаче нещо.. На 2 от променливите има сметки които надхвърлят 65536 и там и на 2те места имам проблем.

Код:
UT=  33898  UNSIGNED

X1 = (UT - AC6) * AC5 / 32768
X2 = MC * 2048 / (X1 + MD)
B5 = X1 + X2
T=(B5 + 8) / 16


X1, X2, B5 са ми LONG (макар че B5 Няма нужда)

Ето сметките надолу разбити (на ръка):
--------------------------------------------------------------------
X1 = 7914 * 24929 / 32768
X1 = 197288106 / 32768
X1 = 6021

X2 = -11075 * 2048 / (6021 + 2432)
X2 = -22681600 / 8453
X2 = -2683

B5 = 6021 - 2683
B5 = 3338

T = (3338 + 8) / 16
T = 209 = 20.9 C - OK
----------------------------------------------------------------------
Код:
X1 = 6021;
X2 = -11075 * 2048 / (X1 + bmp_MD);
B5 = X1 + X2;
temperature = ((B5 + 8) >> 4);


Та тук Х1 директно съм го заменил със стойност.
Х2 като заменя '-11075 * 2048' със това което директно се получава (-22681600) и го направя: X2 = -22681600 / (X1 + bmp_MD) си го смята нормално.
Но оставя ли го да сметне -11075 * 2048 и показва 0


Декларирани променливи:
Код:
volatile short bmp_AC1,bmp_AC2,bmp_AC3;
volatile unsigned short bmp_AC4,bmp_AC5,bmp_AC6;
volatile short bmp_B1,bmp_B2,bmp_MB,bmp_MC,bmp_MD;

long X1, X2,B5;
unsigned long tempvalue;
int temperature;


Сря Яну 18, 2012 1:19 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
сложи поне едно "L" ... че да знае компилатора какво искаш ...:
X2 = -11075 * 2048L / (6021 + 2432)


Сря Яну 18, 2012 2:05 pm
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Нед Ное 08, 2009 12:17 am
Мнения: 512
Мнение Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Явно ще трябва още да чета;)
;) сега си играх със X1

Като му дам да сметне първата част: X1 = (tempvalue - bmp_AC6) с променливите си я смята перфектно
Като дам целия израз да сметне .. показва някаква стойност не каквато трябва.
Като заменя в целия израз само TEMPVALUE с число го смята пак като хората.

tempvalue е LONG, X1 също, а другите променливи в израза SHORT и там някъде се бърка щото съм малко глупав и не са ми ясни точно все още математическите изрази с различни по тип променливи :)

пробвах с (long)bmp_AC6 и (long)bmp_AC5
ама пак получава оная другата ст-ст


П.С.
Пробвах да копирам израза директно от BMP_API файла който дават от Бош:

Код:
    X1 = (((long) tempvalue - (long) bmp_AC6) * (long) bmp_AC5) >> 15;
    X2 = ((long) bmp_MC << 11) / (X1 + bmp_MD);
    B5 = X1 + X2;
   temperature = ((B5 + 8) >> 4);
   
   return X1;

Резултата е същият ;)


Последна промяна klez на Сря Яну 18, 2012 2:29 pm, променена общо 1 път



Сря Яну 18, 2012 2:09 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 24 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни