eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaDziałająca biblioteka do BMP085Re: Działająca biblioteka do BMP085
  • Data: 2014-04-24 01:06:10
    Temat: Re: Działająca biblioteka do BMP085
    Od: "Grzegorz Niemirowski" <g...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Atlantis <m...@w...pl> napisał(a):
    > Hmm... Dziwna sprawa. Sądziłem, że winę za taki stan rzeczy ponosi błąd
    > w bibliotece. Jednak trafiłem na inną służącą do obsługi BMP085.
    > http://davidegironi.blogspot.com/2012/10/avr-atmega-
    bmp085-pressure-sensor
    > .html#.U1g0nFdpNIJ
    > Po podmienieniu plików, dostosowaniu źródeł i wgraniu hex-a okazało się,
    > że efekt nie zniknął. Ciągle otrzymuję dziwną wartość ciśnienia.
    > Prawdopodobieństwo wystąpienia tego samego błędu w dwóch różnych
    > bibliotekach jest niewielkie, więc należy założyć, że błąd tkwi w innym
    > miejscu.
    > W chwili obecnej procedura wysyłania wyniku wygląda w sposób następujący:
    > char result[10];
    > int32_t pressure = bmp085_getpressure();
    > itoa(pressure, result, 10);
    > strcpy_P(pAnswer, PSTR("+PRESS: "));
    > strcat(pAnswer, result);
    > strcat_P(pAnswer, PSTR("\r\n"));
    > Wskaźnik do bufora pAnswer jest następnie przekazywany do funkcji
    > zajmującej się wysyłaniem odpowiedzi na zapytania UDP.
    > Próbowałem także zastosować stdio:
    > printf_P(pAnswer, PSTR("+PRESS: %d\r\n"), bmp085_getpressure());
    > Efekt był dokładnie taki sam.
    > Ktoś ma jakiś pomysł gdzie mogę zacząć szukać przyczyny, co jeszcze
    > ewentualnie mogę sprawdzić?

    Zacząłbym od zignorowania bibliotek nietrzymających się dokumentacji BMP085.
    A ta mówi, żeby odczytać trzy bajty: najstarszy MSB, młodszy LSB i
    najmłodszy XLSB. Są to rejestry F6, F7 i F8. Te bajty są składane w inta, a
    potem całość przesuwana jest w prawo o 8-oss, gdzie oss oznacza
    over-sampling setting. W ten sposób otrzymujemy nieskompensowaną
    temperaturę. Następnie wykonywane są obliczenia kompensacyjne.
    A jaki mikrokontroler? Ma JTAG? Jak ma to użyj, bo kombinujesz strasznie
    zamiast użyć debuggera. Jak nie ma JTAGa, to użyj czegoś innego, np. portu
    szeregowego. Sprawdź jakie wartości masz odczytane w MSB, LSB i XLSB.
    Następnie zobacz co robi z nimi kod kompensacyjny. Na oko wygląda dobrze,
    ale może gdzieś jest pomieszane signed i unsigned. Prześledź działanie kodu
    w trakcie działania. Wrzucając hexy i patrząc na końcowy wynik będzie Ci
    bardzo trudno ustalić co się dzieje. Pomóc Ci też jest trudno, jeśli nie
    podajesz odczytanych wartości MSB, LSB i XLSB. Ja niestety nie posiadam
    BMP085 i nie porównam ze swoim, ale jakbyś podał wartości, to myślę, że
    byłoby łatwiej. Mógłbym np. odpalić sobie biblioteki z danymi z Twojego
    czujnika. Poza tym wkleiłeś bardzo krótkie fragmenty kodu, np. nie wiadomo
    jak Arduino liczy kompensację. Czy też dzielenie robi przesunięciem bitowym?
    A może robi normalne dzielenie? Bo to nie jest to samo: patrz przesuwanie
    bitów w liczbach ujemnych. I jeszcze jedno: o ile dobrze rozumiem, to żeby
    prawidłowo obliczyć ciśnienie, musisz mieć zmierzoną najpierw temperaturę.
    Mierzysz ją?

    --
    Grzegorz Niemirowski
    http://www.grzegorz.net/
    OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
    Uptime: 12 days, 22 hours, 55 minutes and 19 seconds

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: