Działająca biblioteka do BMP085

Apr 23, 2014 3 Replies

Próbuję właśnie uruchomić BMP085 w jednym ze swoich urządzeń i powoli zaczynam z tego powodu siwieć. ;)



Na samym początku, bez większego problemu udało mi się znaleźć taką oto bibliotekę w Sieci:



formatting link
Skompilowała się uruchomiła bez problemu. Wystarczyło właściwie tylko dodać pliki nagłówkowe do istniejącego projektu. Niestety moja radość nie trwała długo - okazało się, że wartość ciśnienia jest nieprawidłowa



- wychodzi jakieś 300 HPa...



Pierwsze o czym pomyślałem to uszkodzony czujnik. Wyjąłem więc z szuflady Arduino i wgrałem ten kod:



formatting link
Wszystko ruszyło bez najmniejszego problemu, wartości były prawidłowe (a przynajmniej prawdopodobne).



Zabrałem się więc za porównywanie kodu zawartego w obydwu bibliotekach. Odczytywanie danych kalibracyjnych wygląda praktycznie tak samo, podobnie jak końcowa konwersja.



Jedyny fragment, w którym mógłbym się czegoś dopatrywać to odczyt wartości ciśnienia ze scalaka. W bibliotece pod AVR wygląda to następująco:



pressure = bmp085ReadShort(0xF6,error_code); pressure = pressure << 8; pressure = pressure >> (8-OSS);



Funkcja bmp085ReadShort zwraca uint16_t, a więc czytane są tylko dwa bajty.



Natomiast w kodzie na Arduino znajduje się następujący fragment:



msb = Wire.read(); lsb = Wire.read(); xlsb = Wire.read();



up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);



Jak widać odczytywane są tutaj trzy jednobajtowe (char) zmienne, które potem są konwertowane do zwracanej wartości unsigned long.



Czy moja dedukcja jest prawidłowa? A może to nie ma nic do rzeczy i źródła problemu powinienem szukać gdzie indziej?


Co to jest za identyfikator OSS i jak jest ustawiony w obu porównywanych kodach? Zauważ, że od wartości OSS zależy przesunięcie wyniku w prawo aż o 8 bitów! Zła wartość OSS będzie bardzo silnie wpływać na wynik.

Z datasheeta:

formatting link
że cyfryzacja ciśnienia może działać na dokładności 16-19 bitów. Na stronie 18 jest przykład 16 bitowy, dwa bajty danych, sprawdź czy tak jest ustawiony.

p.s. latasz na lotni czy szybowcach? ;-)

W dniu 2014-04-23 19:10, Atlantis pisze:

Na tej stronie też jest przykładowy soft do obsługi BMP085:

formatting link

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required