Działająca biblioteka do BMP085

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?

Reply to
Atlantis
Loading thread data ...

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.

Reply to
Pszemol

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? ;-)

Reply to
Pszemol

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

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

formatting link

Reply to
Elektrolot

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.