Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

stm 32 - Magnetometr zwraca tylko dwie wartości

Tojmak 23 Sty 2015 21:17 645 2
  • #1 23 Sty 2015 21:17
    Tojmak
    Poziom 7  

    Witam,
    mam mały problem z magnetometrem hmc5883l. Zwraca on zaledwie 3 wartości (0x00, 0xff, 0xfe), może 4 i nic więcej. Na wyświetlaczu dostaję wartości 0, albo 253-255. Poniżej zamieszczam funkcję za pomocą której pobieram surowe wartości magnetometru.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    oraz fragment main'a gdzie wykorzystany jest magnetometr

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Byłbym bardzo wdzięczny za pomoc/znalezienie błędu. Mam nadzieję, że wrzuciłem wszystko co istotne. Dziękuje za jakąkolwiek uzyskaną pomoc :)
    Pozdrawiam

    ps. biblioteka nie została napisana przeze mnie, co za tym idzie, proszę nie sugerować się w pełni komentarzami, gdyż nie zostały one poprawione po mojej ingerencji.

    Zapomniałem, że może jeszcze się przydać funkcja inicjalizująca, więc ją również zamieszczam

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Dodano po 17 [minuty]:

    Problem się chyba jednak rozwiązał po tygodniu rozkmin :)

    dla zainteresowanych w funkcji magnetometru powinno być na końcu
    *Mx=(( Bufor[0] << 8 ) | Bufor [1] );
    *My=((Bufor[2] << 8 ) | Bufor [3] );;
    *Mz=((Bufor[4] << 8 ) | Bufor [5] );;

    Mimo wszystko mam pytanie, czy jest możliwość uspokojenia trochę wyników? Liczby latają dość mocno, są strasznie czułe.

    Dodano po 1 [godziny] 11 [minuty]:

    No i jeszcze jeśli ktoś by mógł czy może wytłumaczyć ten fragment?
    *Mx=(( Bufor[0] << 8 ) | Bufor [1] );
    *My=((Bufor[2] << 8 ) | Bufor [3] );
    *Mz=((Bufor[4] << 8 ) | Bufor [5] );
    tak właściwie to nie wiem co tu się dzieje :)

    Pozdrawiam

    0 2
  • #2 26 Sty 2015 16:42
    Tojmak
    Poziom 7  

    Zwracam się ponownie z prośbą. Po dłuższym posiedzeniu z powyższym magnetometrem wnioskuje, że surowe dane zczytywane z magnetometru szaleją. Nie ruszam nim a wartości przeskakują same nawet o 30 jednostek, ciągle się zmieniają. Ogólne wartości wynoszą jakoś od 0 do 250. Czy da się je jakoś ogarnąć. Może jakaś korekta w funkcji GetPositionMagn, która zamieściłem wyżej? Proszę o pomoc.

    0
  • #3 26 Sty 2015 17:23
    BlueDraco
    Specjalista - Mikrokontrolery

    Ja bym zaczął od tego:

    sprintf((char*)Magn," %.2d ",(const char)Mx);

    - każesz wypisać nie mniej niż dwie cyfry liczby całkowitej stanowiącej mniej znaczący bajt 16-bitowej zmiennej Mx, wcześniej konwertując typ char * na typ char * (czyli tożsamościowo).

    Dllaczego nie tak?:
    sprintf(Magn," %d ", Mx);

    0