Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 16 paź 2017, o 23:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 24 wrz 2017, o 18:31 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 36
Pomógł: 1

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2017, o 19:07 
Offline
Użytkownik

Dołączył(a): 26 lip 2017
Posty: 34
Pomógł: 4

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.

_________________
ignorance is bliss



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2017, o 19:10 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1047
Pomógł: 51

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2017, o 19:58 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 36
Pomógł: 1

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ą.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2017, o 20:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8497
Pomógł: 329

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 ...

_________________
╔═════════════════╗
║...:: z każdym bitem serca



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2017, o 20:34 
Offline
Użytkownik

Dołączył(a): 26 lip 2017
Posty: 34
Pomógł: 4

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.

_________________
ignorance is bliss



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2017, o 21:20 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 36
Pomógł: 1

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2017, o 20:33 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 36
Pomógł: 1

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2017, o 17:24 
Offline
Nowy

Dołączył(a): 14 kwi 2014
Posty: 21
Pomógł: 0

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.

_________________
Mój kanał Youtube



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2017, o 18:22 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 36
Pomógł: 1

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ę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO