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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 11 lip 2025, o 03:21


    Strefa czasowa: UTC + 1





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

    Dołączył(a): 25 lut 2015
    Posty: 43
    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 ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    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:10 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2596
    Pomógł: 129

    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: 43
    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

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

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

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



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

    Dołączył(a): 25 lut 2015
    Posty: 43
    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: 43
    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 ] [ Zaznacz wszystko ]
    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: 43
    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 ] [ Zaznacz wszystko ]
    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: 8 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO