logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

BMP180/C/ATMega8 - BMP180 pisanie własnego sterownika

marijuz 31 Sie 2016 12:19 1722 1
REKLAMA
  • #1 15902947
    marijuz
    Poziom 18  
    Witam.

    Wpadł mi w ręce czujnik temperatury i ciśnienia BMP180. Znalazłem w internecie sterownik tego czujnika, ale w celu samodoskonalenia i lepszego zrozumienia działania tego urzadzenia postanowiłem tez sam napisać taki sterownik.

    I teraz tak - sterownik, który znalazłem w internecie działa rewelacyjnie, wyświetlane ciśnienie odpowiada danym z okolicznych stacji meteorologicznych, również odczyt wysokosci jest dośc dokładny (błąd ok 1 metra, może nawet mniej). Tak samo odczyt temperatury.

    Za to sterownik napisany przeze mnie poprawnie wyświetla tylko temperaturę. Ciśnienie, które wyświetla to ok 100/200hPa. Sprawdziłem dokładnie obliczenia, ale nie znalazłem błedów. Po obejrzeniu działającej biblioteki zauważyłem, że są tam zastosowane zupełnie inne typy zmiennych. Nota katalogowa BMP180 określa jakiego typu są poszczególne dane i zastosowałem sie do tego, jednak w działającej bibliotece wygląda to inaczej. Ponizej mój kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Na wzór działającej biblioteki zmieniłem
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    na
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    i
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    na
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    (choć to ostatnie nawet nie wiem jak skutkuje)
    i otrzymałem zupełnie inny odczyt. Dalej nieprawidłowy, bo ok 1400hPa, kiedy prawidłowy wynosił ok 1006hPa, ale jednak zupełnie inny od tych ok 200hPa, które otrzymywałem wcześniej. To skłania mnie ku teori, że jest cos nie tak ze zmiennymi. Dla jasności wrzucam bibliotekę do obsługi TWI (tak, za radą kolegów z forum przerzuciłem się na sprzętowe TWI)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I jeszcze male wyjaśnienie pocedury "wysw" - to taki mój wynalazek, że wyświetlam tą procedurą 2 cyfrową warość na 2 wyświetlaczach 8 segmentowych (nie mam na razie dostępu do lepszego wyświetlacza). To tylko kwestia kosmetyczna, mam z tym więcej roboty żeby odczytać wiekszy wynik i nie wyglada to dobrze, ale działa poprawnie i na pewno tu nie siedzi błąd.

    Bardzo proszę o pomoc w znalezieniu błędu i pozdrawiam.
  • REKLAMA
  • Pomocny post
    #2 15913032
    Drako1988
    Poziom 20  
    Witam

    Co do odczytywania parametrów konfiguracyjnych, to tam są wartości 16 bitowe zapisane jako dwa 8 bitowe bajty. Robisz odczyt w następujący sposób:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Operacja dodawania arytmetycznego + i dodawania logicznego | nie są tożsame. Generalnie dla liczb dodatnich będzie działać tak samo, ale co jeśli mamy liczby ujemne? np -21 + 10 = -11
    bitowo: [1000 0000 0001 0101 + 0000 0000 0000 1010 = 1000 0000 0000 1011]
    ale: -21 | 10 = -31
    bitowo: [1000 0000 0001 0101 | 0000 0000 0000 1010 = 1000 0000 0001 1111]

    Proponuję zacząć od tego.
REKLAMA