|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:16 am
Bosch BMP085, Някой ползвал ли е този Сензор?
| Автор |
Съобщение |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 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 |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Кое му е трудното? Ако най-старшия бит е 1, числото е отрицателно... т.е. ако е >0x8000 Положително: 8053 = 0x1F75 Отрицателно: 0xFBB3 = -1101 0x10000 - 0xFBB3 = 0x44d = (-1) * 1101 и един съвет - ако числата са unsigned използвай unsigned променливи и като ги печаташ използвай %u 
|
| Вто Ное 29, 2011 5:25 pm |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
хммм... сега зацепих чак. Мерси, Миро. Аз сега гледам и още един проблем. нещо сметките не излизат. На ръка го смятах преди малко и ст-ста за температурата излизаше 0x4A3 (1187) което ще рече 118.7 градуса, тъй като са на стъпка по 0.1градус целзий. Сега вкарах алгоритъма който Бош са дали в API-то иии учудващо ама то сметна същата стойност. Което вече.. и аз не знам ко да го правя  Функцията която ползвам е следната:
|
| Вто Ное 29, 2011 5:34 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Да няма някакъв офсет - примерно 100 градуса в + за да може с unsigned да ти дава резултат и в отрицателните градуси. Тъй като гледам 18,7 (+100) градуса - тамън стайна температура 
|
| Вто Ное 29, 2011 10:41 pm |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Ще направя някви измервания, но според дейташийта не видях да има такова нещо.
Сега стои на 132.5 в стаята ми едва ли е толкова... като сложа пръст на него отива на 137.3. А и с примерните стойности от дейташийта всичко излиза точно без офсет.
|
| Вто Ное 29, 2011 11:13 pm |
|
 |
|
Cino
Ранг: Новодошъл
Регистриран на: Чет Окт 02, 2008 10:24 pm Мнения: 105
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
къде чакаш 4,5мс(25,5мс) за конвертиране, не се вижда в функцията гледам че има EOC пин, bmp_read16bit() ли го гледа
|
| Сря Ное 30, 2011 12:00 am |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Пич, темературата ти е сметната в стъпки от по 0.1 градус, т.е. това 132.5, дето го смяташ трябва да е 13.2 градуса. Просто го раздели на 10. ПП. Много студено в тая твоята стая бе - аз ще умра от студ ако в стаята е 13 градуса  .
|
| Сря Ное 30, 2011 12:12 am |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Димитър, показанието е 1325, деля го на 10 и получавам 132.5  мисля че го бях описал 2 поста по-нагоре Цино, виж това с чакането... май наистина си прав че съм го пропуснал, довечера ще експериментирам пак, благодаря за забележката.
|
| Сря Ное 30, 2011 3:13 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Видях че едни променливи трябва да signed, други unsigned... При теб AC4 май не трябва да е с знак, провери си типовете. По възможност разкарай тайпкастването, това може да източник на грешка. Имаш умножение на число със знак, което си заместил с <<, което по принцип е правилно, но съм виждал и компилатори, които не правят разлика между logical и arithmetic shift.
А пък като имаш примерни стойности, просто ги ползвай вместо да четеш от чипа. Така ще видиш проблема в сметките ли е, или в това какво четеш...
|
| Сря Ное 30, 2011 3:22 pm |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
заместването на умножението и деленитето със << и >> съм го взаимствал от API файла който идва със този сензор, там има примерни C, функции. това с типовете на променливите мисля, че точно е проблема ама ще хвана първо да прочета пак някоя книжка за типовете и после ще продължавам да ръчкам. Иначе информация от регистрите си я чете, като сложа пръст на сензора се забелязва как стойността на 2та регистъра се променя...
|
| Сря Ное 30, 2011 3:26 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
Сори, някак си съм го пропуснал тоя пост по-горе  .
|
| Сря Ное 30, 2011 3:46 pm |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
След няколко месеца борба имам леко развитие. Променливата в която чета стойността от ADC-то за температура в дейташийта е описана като SIGNED. Вчера реших все пак да пренебрегна това и да я взема като Unsigned и Воала... всички сметки излизат перфектно. Проблема е, че 1 от променливите си иска да е LONG а микроконтролера ми не може да ги поеме като Long ще трябва някой друг да пробвам  . Но на ръка като ги смятам поне вече са ОК. Ще се мъча днеска да оптимизирам колкото се може повече кода че да я събера ама надали ще се получи  . Една от работните и стойности е около 122 милиона
|
| Сря Яну 18, 2012 12:02 pm |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 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 +  / 16 T = 209 = 20.9 C - OK ---------------------------------------------------------------------- Та тук Х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 |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
 Re: Bosch BMP085, Някой ползвал ли е този Сензор?
сложи поне едно "L" ... че да знае компилатора какво искаш ...: X2 = -11075 * 2048L / (6021 + 2432)
|
| Сря Яну 18, 2012 2:05 pm |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 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 файла който дават от Бош: Резултата е същият 
Последна промяна klez на Сря Яну 18, 2012 2:29 pm, променена общо 1 път
|
| Сря Яну 18, 2012 2:09 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|