ATNEL tech-forum
https://forum.atnel.pl/

TWI Atmega8 nie mogę odczytać danych z HMC5883l
https://forum.atnel.pl/topic19262.html
Strona 1 z 1

Autor:  resonator [ 24 wrz 2017, o 18:31 ]
Tytuł:  TWI Atmega8 nie mogę odczytać danych z HMC5883l

Męczę się z tym problemem już od bardzo długiego czasu, więc postanowiłem wreszcie poszukać pomocy na forum. Mianowicie nie potrafię w żaden sposób sprawić by ten układ wysłał mi jakiekolwiek dane. Połączenie atmegi z kompasem jest poprawne ponieważ skaner wyszukuje jego adres:
Obrazek

Robiąc to bardziej ręcznie funkcjami z biblioteki też działa:
ObrazekObrazek

Problem zaczyna się gdy chce coś odczytać z jakiegoś rejestru:
ObrazekObrazek Program zawiesza się czekając na dane, mimo że według dokumentacji powinien odczytać 0x20.

Nie wiem co mogę zrobić, projekt bez tego stoi w miejscu. Program napisałem najbardziej prosty jak się da. Nie mam analizatora żeby sprawdzić co się dzieje na liniach ale pewnie niczego nowego by to nie wniosło. Na dole podaje kod biblioteki, ale wątpie że jest to jej wina ponieważ obsługiwała wcześniej RTC bez problemu. Błagam o pomoc bo już nie mam na to dziadostwo siły.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  micky [ 24 wrz 2017, o 19:10 ]
Tytuł:  Re: TWI Atmega8 nie mogę odczytać danych z HMC5883l

Ja zabaw z interfejsami nie wyobrażam sobie bez użycia dodatkowego wyposażenia jak analizator stanów logicznych, oscyloskop z dekoderem protokołów czy np urządzeń pokroju Bus Pirate itp. Pomyśl o takim zakupie. To nieduży wydatek a zaoszczędzisz mnóstwo czasu.

Autor:  resonator [ 24 wrz 2017, o 19:58 ]
Tytuł:  Re: TWI Atmega8 nie mogę odczytać danych z HMC5883l

roske napisał(a):
Nic dziwnego, że się zawiesza, skoro już funkcja i2c_start zwraca kod błędu - w tym momencie program powinien pomijać wykonanie dalszych transmisji i zająć się obsługą błędu (nawet jeżeli obsługa błędów ogranicza się tylko do pominięcia dalszego kodu). A błąd jest zapewne dlatego, że podajesz nieprawidłowy adres, który dla tego czujnika jest 0x3c dla operacji zapisu i 0x3d dla operacji odczytu (albo raczej zgodnie z konwencją tej biblioteki 0x3c+I2C_WRITE i 0x3c+I2C_READ) - Ty podajesz 0x0c i 0x0d.


To co napisałeś trochę mi rozjaśniło, napisałem program dokładnie tak samo jak jest napisany skaner, okazało się że adresem musi być 0x3D zamiast 0x3C (0 zamiast 3 wcześniej to literówka ze zmęczenia), nie zauważyłem też że zwrotna jedynka oznacza błąd. Teraz program już gładko przechodzi, jednak nadal jest jakiś problem z odczytem danych (niezależnie od rejestru jest to 0).
ObrazekObrazek

micky napisał(a):
Ja zabaw z interfejsami nie wyobrażam sobie bez użycia dodatkowego wyposażenia jak analizator stanów logicznych, oscyloskop z dekoderem protokołów czy np urządzeń pokroju Bus Pirate itp. Pomyśl o takim zakupie. To nieduży wydatek a zaoszczędzisz mnóstwo czasu.

Już od dłuższego czasu się do tego zabieram, jednak zawsze jak do tej pory udawało mi się rozwiązać problem dosyć sprawnie tradycyjnymi metodami. Co sądzisz o ośmiokanałowych podróbkach Saleae? Chodzą po 30-40zł, są chyba najtańszą opcją, jak dla mnie pewnie wystarczającą.

Autor:  SunRiver [ 24 wrz 2017, o 20:26 ]
Tytuł:  Re: TWI Atmega8 nie mogę odczytać danych z HMC5883l

Cytuj:
Co sądzisz o ośmiokanałowych podróbkach Saleae? Chodzą po 30-40zł, są chyba najtańszą opcją, jak dla mnie pewnie wystarczającą.



w zupełności ci wystarczy ... jest na tym samym cypressie co starsza wersja LOGIC8 i swoją pracę robi ...

Autor:  resonator [ 24 wrz 2017, o 21:20 ]
Tytuł:  Re: TWI Atmega8 nie mogę odczytać danych z HMC5883l

roske napisał(a):
Dalej podajesz nie ten adres. Teraz jest to 0x0d przesunięty w lewo, czyli 0x1a (zapis) i 0x1b (odczyt). Kody statusów wskazują brak błędów więc przypuszczam, że na magistrali masz jakieś inne urządzenie i2c o tym właśnie adresie.
Z adresami IIC jest istna kołomyjka: jedni podają, jak ja to nazywam, slave address - siedmiobitowy adres, który do urządzania trzeba wysłać przesunięty w lewo o jeden z dodanym najmłodszym bitem WRITE lub READ. Inni podają write address i read adress - ośmiobitowe adresy, już przesunięte w lewo, z już ustawionymi bitami write/read - te podaje się tak jak są. Dataszit Twojego czujnika podaje tę drugą wersję.
No i teraz Ty read address (na dodatek błędny) poddajesz przesunięciu w lewo i jeszcze dodajesz bit write/read. Przemyśl na spokojnie te operacje na adresach.


Wiem, jak to całe i2c powinno działać, tylko gdyby tak było to wysłałbym adres z dokumentacji i odbierał po kolei dane tak jak to robię z RTC. A tutaj próbuje na dziesiątki sposobów i nic. Więc sprawdziłem przeleciałem magistralę skanerem i tu zaskoczenie nie pojawia mi się w konsoli adres 0x3C tylko 0x0D. Skaner korzysta z tej samej biblioteki co kod powyżej:
Obrazek
Inkrementuje uinta w każdej iteracji pętli. Gdy coś na magistarli odpowie na adres zwraca uinta do konsoli, w tym wypadku 0x0D.

I właśnie w poście wyżej użyłem tego adresu w dokładnie ten sam sposób co skaner, co wreszcie dało jakieś rezultaty. Nie ma możliwości, żeby odpowiadał inny slave, kompas jest podłączony prosto do uC, więc jak dla mnie to z tym układem jest coś nie tak.

Autor:  resonator [ 25 wrz 2017, o 20:33 ]
Tytuł:  Re: TWI Atmega8 nie mogę odczytać danych z HMC5883l

Miałem rację, nie jest to ten sam układ, który deklaruje sprzedawcy modułów! Jeśli się dobrze przyjrzeć obudowie to można tam odczytać oznaczenie "DA5883". W necie wyczytałem że oryginalny producent układów o oznaczeniu "HMC5883" przestał produkować czy tam sprzedał prawa do produkcji, nie wnikałem o co chodziło. Sedno w tym, że teraz są to zupełnie inne układy o oznaczeniu "QMC5883L". Mają inny adres (0x0D), Inaczej poustawiane rejestry (program wyżej był poprawny a odczytywał z rejestrów zera, ponieważ były to rejestry od danych pomiaru, który nie był wyzwalany) i w ogóle wydaje mi się, że mają mniej opcji do konfigurowania.

Więc uwaga na moduły, których sprzedawcy deklarują że jest tam taki a nie inny układ, bo można się męczyć bardzo długo.

Teraz próbuje coś mierzyć tym układem, na razie moduł podaje mi cały czas te same wartości(wydaje mi się, że przez chwile za pierwszym razem wyniki nawet sensownie się zmieniały), ale teraz kiedy przyszedł od nowa zapał jeszcze z tym powalczę :D

Tutaj datasheet tego całego QMC https://nettigo.pl/attachments/440

Autor:  eVol68 [ 27 wrz 2017, o 17:24 ]
Tytuł:  Re: TWI Atmega8 nie mogę odczytać danych z HMC5883l

resonator napisał(a):
Miałem rację, nie jest to ten sam układ, który deklaruje sprzedawcy modułów! Jeśli się dobrze przyjrzeć obudowie to można tam odczytać oznaczenie "DA5883". W necie wyczytałem że oryginalny producent układów o oznaczeniu "HMC5883" przestał produkować czy tam sprzedał prawa do produkcji, nie wnikałem o co chodziło. Sedno w tym, że teraz są to zupełnie inne układy o oznaczeniu "QMC5883L". Mają inny adres (0x0D), Inaczej poustawiane rejestry (program wyżej był poprawny a odczytywał z rejestrów zera, ponieważ były to rejestry od danych pomiaru, który nie był wyzwalany) i w ogóle wydaje mi się, że mają mniej opcji do konfigurowania.


Tak, to prawda, trzeba na to zwracać uwagę. Też kupowałem HMC5883L (L883), a otrzymałem QMC5883L (DA5883), który różni się od układu Honeywell'a.

Podobnie jak kolega resonator walczyłem z tym układem, jednak udało mi się stworzyć program do jego obsługi, lecz mam rażenie, że wyniki, które odczytuje strasznie szaleją (i chyba nie są poprawne(?)) - nie wiem :/

PS: resonator czy udało Ci się "opanować" odczyt z tego magnetometru?

Wrzucam swój kod:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  resonator [ 28 wrz 2017, o 18:22 ]
Tytuł:  Re: TWI Atmega8 nie mogę odczytać danych z HMC5883l

eVol68 napisał(a):
resonator napisał(a):
Miałem rację, nie jest to ten sam układ, który deklaruje sprzedawcy modułów! Jeśli się dobrze przyjrzeć obudowie to można tam odczytać oznaczenie "DA5883". W necie wyczytałem że oryginalny producent układów o oznaczeniu "HMC5883" przestał produkować czy tam sprzedał prawa do produkcji, nie wnikałem o co chodziło. Sedno w tym, że teraz są to zupełnie inne układy o oznaczeniu "QMC5883L". Mają inny adres (0x0D), Inaczej poustawiane rejestry (program wyżej był poprawny a odczytywał z rejestrów zera, ponieważ były to rejestry od danych pomiaru, który nie był wyzwalany) i w ogóle wydaje mi się, że mają mniej opcji do konfigurowania.


Tak, to prawda, trzeba na to zwracać uwagę. Też kupowałem HMC5883L (L883), a otrzymałem QMC5883L (DA5883), który różni się od układu Honeywell'a.

Podobnie jak kolega resonator walczyłem z tym układem, jednak udało mi się stworzyć program do jego obsługi, lecz mam rażenie, że wyniki, które odczytuje strasznie szaleją (i chyba nie są poprawne(?)) - nie wiem :/

PS: resonator czy udało Ci się "opanować" odczyt z tego magnetometru?

Wrzucam swój kod:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Tak w pewnym sensie. Na początku w jednym miejscu pomiar potrafił przeskakiwać o kilka stopni. Ja nie potrzebowałem zbyt dokładnego wyniku (starczyło by mi 30 stopni na kąt pełny :P), więc zmieniłem rozdzielczość z 8G na 2G, częstotliwość wyników do 50Hz i końcowe przeliczanie na liczbę całkowitą. Teraz wynik waha się o 1-2 stopnie mówiąc oczywiście o obrocie względem osi prostopadłej do Ziemi, ja potrzebuje znać kierunek niezależnie od ułożenia sensora i z tym teraz się męczę.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/