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

Bascom - czujnik ciśnienia i temperatury MS5803 i2c jak odczytywać dane

topstar 10 Wrz 2012 17:03 2535 10
REKLAMA
  • #1 11297338
    topstar
    Poziom 18  
    Posty: 388
    Pomógł: 24
    Ocena: 39
    Witam ,
    projektuje sobie stacje pogodową która mierzy temperaturę i ciśnienie z jednego czujnika (MS5803). Ma on dwie możliwości sterowania po i2c oraz SPI . Ja chcę odczytywać z niego dane po i2c i tu mam pytanie jak się zabrać za to ? Prosiłbym kogoś o zaglądniecie do DS i naprowadzenie mnie czy dobrze kombinuje z odczytem po i2c.
    Napisałem taki program wstępnie żeby sprawdzić jakie wartości kalibracyjne są zapisane fabrycznie ale w każdym adresie od C1 do C6 wyświetla mi na Lcd wynik 255.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Czy odczyt danych kalibracyjnych musi być w pętli głównej programu , czy wystarczy że program zrobi to raz i wpisze je do zdefiniowanych zmiennych wykorzystywanych później do obliczeń? Oraz jak się odczytuje dane temperatury i ciśnienia z wbudowanego ADC który wysyła wynik w postaci 24 bitów?
    Załączniki:
    • MS5803-01BA.pdf (267.55 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 11297382
    Konto nie istnieje
    Poziom 1  
  • #3 11297417
    topstar
    Poziom 18  
    Posty: 388
    Pomógł: 24
    Ocena: 39
    Tak tu jest błąd bo ack wystawia slave czyli czujnik , ale przy odbiorze danych z czujnika master powinien potwierdzać ACK odebrane dane . TU akurat dane kalibracyjne są 16 bitowe i nie wiem jak sie zabrać za to . Czy trzeba gdzieś pierwsze 8 bitów i zapisać je w jakiejś zmiennej następnie potwierdzić odbiór i odebrać kolejne 8 bitów i połączyć je w liczbę 16 bitowa?
  • REKLAMA
  • #4 11297444
    Konto nie istnieje
    Poziom 1  
  • #5 11298248
    topstar
    Poziom 18  
    Posty: 388
    Pomógł: 24
    Ocena: 39
    No wiec jak powinna wyglądać komenda która sczyta mi najpierw 2 bajty MSB potem 2 bajty LSB i później je połączy w zmienną long ? Jakoś nie mogę nic wymyślić jak się za to zabrać.

    EDIT:
    Może ktoś mnie naprowadzi jak należy odebrać dane 16 bitowe z czujnika ? Jeśli czujnik wysyła najpierw 8bit MSB , a później kolejne 8 bit LSB to gdzie je zapisać i jak je później połączyć w wynik, które bity trzeba przesunąć , o ile i w którą stronę ?
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Czy ten fragment kodu jest poprawny do odczytu danych ? Bo połączeniu dwóch zmiennych zawierających msb i lsb wychodzi mi wynik 65536 lub 255.
    Bascom - czujnik ciśnienia i temperatury MS5803 i2c jak odczytywać dane

    Posty scaliłem.
    [zumek]
  • REKLAMA
  • #6 11300933
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    topstar napisał:
    ..Może ktoś mnie naprowadzi jak należy odebrać dane 16 bitowe z czujnika ?


    Kolego :!:
    Aby cokolwiek odczytać z urządzenia za pomocą magistrali I2C, to najpierw należy to urządzenie prawidłowo zaadresować :idea:
    Nie wiem skąd Ty wziąłeś &H76, ale nie jest to na pewno adres Twojego "scalaka".
    Przypatrz się rysunkowi, który załączyłeś i sprawdź jaką liczbę dają bity(8szt.) umieszczone pomiędzy S(tart) i A(cknowledge). W/g moich "obliczeń" (zakładając ,że pin CSB jest podpięty do GND), adres do zapisu to &HEE, a do odczytu &HEF.
    A teraz, do dzieła :D

    PS
    Po zaadresowaniu układu warto sprawdzić, czy "wystawił" ACK.
    W Bascomie, robi się to przez sprawdzenie zmiennej systemowej "Err".
  • #7 11300993
    topstar
    Poziom 18  
    Posty: 388
    Pomógł: 24
    Ocena: 39
    Ok , działa :) Teraz pytanie odnośnie odbioru danych jeśli odbieram pierwsze 8 Bitów MSB to zapisuje je do zmiennej np. A1 i przesuwam o 8 bitów w lewo czy w prawo ? a Bity LSB nie przesuwa się czy też trzeba przesunąć ?
  • REKLAMA
  • #8 11301177
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    topstar napisał:
    Ok , działa :) ... przesuwam o 8 bitów w lewo czy w prawo ? a Bity LSB nie przesuwa się czy też trzeba przesunąć ?


    W Bascom-ie, jest do tego specjalna instrukcja, a więc skorzystaj z niej i tyle.
  • #9 11301370
    topstar
    Poziom 18  
    Posty: 388
    Pomógł: 24
    Ocena: 39
    Chodzi o instrukcję SHIFT ? Próbuję jej użyć ale nie wiem jak ja zastosować. Czy jeśli odczytuje MSB i zapisuje ja do np A1 to mam przesunąć w lewo a , LSB zapisane w np. A2 mam przesunąć w prawo i później dodać je do siebie czy przesunąć tylko MSB a LSB po prostu dodać bez przesunięcia ?
    -----------------------------------------------------------------
    Ok poradziłem sobie , należało zapisać MSB do tymczasowej zmiennej , następnie przesunąć w lewo o 8 , odebrac LSB zapisac do drugiej zmiennej tymczasowej i dodać je do siebie .
  • #10 11301678
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    topstar napisał:
    Chodzi o instrukcję SHIFT ? ...


    Nie, chodziło mi o MAKEINT(LSB,MSB), bo co Ci po SHIFT, skoro nie wiesz w którą stronę przesuwać :D
  • #11 11305000
    topstar
    Poziom 18  
    Posty: 388
    Pomógł: 24
    Ocena: 39
    Temat do zamknięcia , nie potrafię sobie poradzić z obliczeniami wyników temperatury i ciśnienia.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik projektuje stację pogodową z czujnikiem MS5803, który komunikuje się przez I2C. Zadaje pytanie dotyczące odczytu danych kalibracyjnych z czujnika, który zwraca wartości 255. Odpowiedzi wskazują na konieczność poprawnego adresowania urządzenia oraz potwierdzania odbioru danych (ACK). Użytkownik dowiaduje się, że dane kalibracyjne są 16-bitowe i powinny być odczytywane w dwóch częściach: MSB i LSB. Wskazówki dotyczące kodu sugerują użycie instrukcji do przesunięcia bitów oraz łączenia wartości w jedną zmienną. Użytkownik ostatecznie rozwiązuje problem, stosując odpowiednie przesunięcia i dodawanie wartości.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA