| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Bosch BMP085, Някой ползвал ли е този Сензор? http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=9566 |
Страница 1 от 2 |
| Автор: | klez [ Вто Ное 29, 2011 5:03 pm ] |
| Заглавие: | 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 |
|
| Автор: | miro_atc [ Вто Ное 29, 2011 5:25 pm ] | |||||||||
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? | |||||||||
Кое му е трудното? Ако най-старшия бит е 1, числото е отрицателно... т.е. ако е >0x8000 Положително: 8053 = 0x1F75 Отрицателно: 0xFBB3 = -1101 0x10000 - 0xFBB3 = 0x44d = (-1) * 1101 и един съвет - ако числата са unsigned използвай unsigned променливи и като ги печаташ използвай %u |
||||||||||
| Автор: | klez [ Вто Ное 29, 2011 5:34 pm ] | |||||||||
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? | |||||||||
хммм... сега зацепих чак. Мерси, Миро. Аз сега гледам и още един проблем. нещо сметките не излизат. На ръка го смятах преди малко и ст-ста за температурата излизаше 0x4A3 (1187) което ще рече 118.7 градуса, тъй като са на стъпка по 0.1градус целзий. Сега вкарах алгоритъма който Бош са дали в API-то иии учудващо ама то сметна същата стойност. Което вече.. и аз не знам ко да го правя Функцията която ползвам е следната:
|
||||||||||
| Автор: | Cekins [ Вто Ное 29, 2011 10:41 pm ] |
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? |
Да няма някакъв офсет - примерно 100 градуса в + за да може с unsigned да ти дава резултат и в отрицателните градуси. Тъй като гледам 18,7 (+100) градуса - тамън стайна температура |
|
| Автор: | klez [ Вто Ное 29, 2011 11:13 pm ] |
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? |
Ще направя някви измервания, но според дейташийта не видях да има такова нещо. Сега стои на 132.5 в стаята ми едва ли е толкова... като сложа пръст на него отива на 137.3. А и с примерните стойности от дейташийта всичко излиза точно без офсет. |
|
| Автор: | Cino [ Сря Ное 30, 2011 12:00 am ] |
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? |
къде чакаш 4,5мс(25,5мс) за конвертиране, не се вижда в функцията гледам че има EOC пин, bmp_read16bit() ли го гледа |
|
| Автор: | klez [ Сря Ное 30, 2011 3:13 pm ] |
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? |
Димитър, показанието е 1325, деля го на 10 и получавам 132.5 Цино, виж това с чакането... май наистина си прав че съм го пропуснал, довечера ще експериментирам пак, благодаря за забележката. |
|
| Автор: | miro_atc [ Сря Ное 30, 2011 3:22 pm ] |
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? |
Видях че едни променливи трябва да signed, други unsigned... При теб AC4 май не трябва да е с знак, провери си типовете. По възможност разкарай тайпкастването, това може да източник на грешка. Имаш умножение на число със знак, което си заместил с <<, което по принцип е правилно, но съм виждал и компилатори, които не правят разлика между logical и arithmetic shift. А пък като имаш примерни стойности, просто ги ползвай вместо да четеш от чипа. Така ще видиш проблема в сметките ли е, или в това какво четеш... |
|
| Автор: | klez [ Сря Ное 30, 2011 3:26 pm ] |
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? |
заместването на умножението и деленитето със << и >> съм го взаимствал от API файла който идва със този сензор, там има примерни C, функции. това с типовете на променливите мисля, че точно е проблема ама ще хвана първо да прочета пак някоя книжка за типовете и после ще продължавам да ръчкам. Иначе информация от регистрите си я чете, като сложа пръст на сензора се забелязва как стойността на 2та регистъра се променя... |
|
| Автор: | Dimitar [ Сря Ное 30, 2011 3:46 pm ] |
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? |
Сори, някак си съм го пропуснал тоя пост по-горе |
|
| Автор: | klez [ Сря Яну 18, 2012 12:02 pm ] |
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? |
След няколко месеца борба имам леко развитие. Променливата в която чета стойността от ADC-то за температура в дейташийта е описана като SIGNED. Вчера реших все пак да пренебрегна това и да я взема като Unsigned и Воала... всички сметки излизат перфектно. Проблема е, че 1 от променливите си иска да е LONG а микроконтролера ми не може да ги поеме като Long ще трябва някой друг да пробвам Ще се мъча днеска да оптимизирам колкото се може повече кода че да я събера ама надали ще се получи |
|
| Автор: | klez [ Сря Яну 18, 2012 1:19 pm ] | |||||||||||||||||||||||||||
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? | |||||||||||||||||||||||||||
Изтрих някои работи дето не ползвам и се събират променливите сега обаче нещо.. На 2 от променливите има сметки които надхвърлят 65536 и там и на 2те места имам проблем.
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 + T = 209 = 20.9 C - OK ----------------------------------------------------------------------
Та тук Х1 директно съм го заменил със стойност. Х2 като заменя '-11075 * 2048' със това което директно се получава (-22681600) и го направя: X2 = -22681600 / (X1 + bmp_MD) си го смята нормално. Но оставя ли го да сметне -11075 * 2048 и показва 0 Декларирани променливи:
|
||||||||||||||||||||||||||||
| Автор: | ps66 [ Сря Яну 18, 2012 2:05 pm ] |
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? |
сложи поне едно "L" ... че да знае компилатора какво искаш ...: X2 = -11075 * 2048L / (6021 + 2432) |
|
| Автор: | klez [ Сря Яну 18, 2012 2:09 pm ] | |||||||||
| Заглавие: | Re: Bosch BMP085, Някой ползвал ли е този Сензор? | |||||||||
Явно ще трябва още да чета;) Като му дам да сметне първата част: X1 = (tempvalue - bmp_AC6) с променливите си я смята перфектно Като дам целия израз да сметне .. показва някаква стойност не каквато трябва. Като заменя в целия израз само TEMPVALUE с число го смята пак като хората. tempvalue е LONG, X1 също, а другите променливи в израза SHORT и там някъде се бърка щото съм малко глупав и не са ми ясни точно все още математическите изрази с различни по тип променливи пробвах с (long)bmp_AC6 и (long)bmp_AC5 ама пак получава оная другата ст-ст П.С. Пробвах да копирам израза директно от BMP_API файла който дават от Бош:
Резултата е същият |
||||||||||
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|