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



Teraz jest 8 lip 2026, o 16:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 24 kwi 2014, o 21:55 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 22 mar 2014
Posty: 12
Lokalizacja: Gdynia
Pomógł: 0

Witam :)
Jako, że to mój pierwszy post na forum, chciałbym najsampierw się "uroczyście" ze wszystkimi przywitać. Więc witajcie drodzy forumowicze. :D
Słowem opisu, mam na imię Kamil, lat 17. :P
Jednak do rzeczy...
Jestem w trakcie czytania Bluebooka i postanowiłem dłuższą przerwę zrobić przy obsłudze I2C. Pożyczyłem od kumpla moduł z LSM303D czyli ackel+magneto, i postanowiłem sobie napisać w C obsługę tegoż czujnika :P
Notę przewertowałem, internet przekopałem no i końcem końców coś tam skleciłem. Moje pytanie, które się rodzi jest następujące...
Czy poniższe wskazania akcelerometru, dałem tu przykładowo oś Z, są wiarygodne, czy wszystko tutaj działa...
Wszystko złożone na zestawie ATB :) Taktowane kwarcem 11.0592MHz.

Obrazek

Wskazania wydają mi się dosyć bardzo dziwne. Więc jeśli coś jest nie tak, to wcale się nie zdziwię, i po to przychodzę do Was o pomoc :D
Dodam, że czujnik przez większość pomiaru z rzutu był skierowany ku górze.
Poniżej jeszcze zamieszam kod.
Wszelkie rady mile widziane :)
Pozdrawiam :D

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 kwi 2014, o 23:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Witamy serdecznie :D

Z pobieżnego przejrzenia kodu strzelam, że zmienne wynikX, wynikY i wynikZ powinny być większego typu, a najlepiej float lub double.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2014, o 06:41 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 22 mar 2014
Posty: 12
Lokalizacja: Gdynia
Pomógł: 0

Po zmienieniu zmiennych wynikX, wynikZ, i Y, na typ float... Cały czas widać bardzo dziwne wyniki, dla czujnika skierowanego osią Z w dół.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2014, o 08:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Oczywiście niezbędne są funkcje do wyświetlania (wysyłania) liczb zmiennoprzecinkowych, a nie "intów". W tym przypadku trzeba by było dołączać pewne biblioteki do linkera, a niepotrzebnie to utrudni sprawę, więc można zaokrąglić te wartości przy wyświetlaniu funkcją round, z jednoczesnym rzutowaniem jej wyniku na typ int32_t tzn.:

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

Możliwe, że będzie potrzeba dołączenia biblioteki stdio.h lub math.h.

------------------------ [ Dodano po: 3 minutach ]

Oczywiście niezbędne są funkcje do wyświetlania (wysyłania) liczb zmiennoprzecinkowych, a nie "intów". W tym przypadku trzeba by było dołączać pewne biblioteki do linkera, a niepotrzebnie to utrudni sprawę, więc można zaokrąglić te wartości przy wyświetlaniu funkcją round, z jednoczesnym rzutowaniem jej wyniku na typ int32_t tzn.:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Możliwe, że będzie potrzeba dołączenia biblioteki stdio.h lub math.h.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2014, o 15:58 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 22 mar 2014
Posty: 12
Lokalizacja: Gdynia
Pomógł: 0

Po zastosowaniu się do kolegi wskazówek odczyty z osi Z są następujące...

Obrazek

Chyba zmniejszył się "rozrzut" wyników, jednak zastanawiające jest to, że przy nieruchomym czujniku, wartości jak widać, cały czas znacznie skaczą... Czy możliwe jest, że co jakiś czas do tablicy bufor2, trafiają śmieci?

-------------------------------------------------

Poprawiłem błąd w bibliotece i2c, związany z funkcją TWI_stop(). Dla położenia czujnika osią Z równolegle do płaszczyzny, wyniki się zmieniły, jednak dalej to nie jest to raczej, ponieważ dla czujnika w bezruchu odczyty raczej powinny być bez przerwy porównywalne...

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2014, o 14:03 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 22 mar 2014
Posty: 12
Lokalizacja: Gdynia
Pomógł: 0

W dalszym ciągu nie umiem sobie poradzić z problemem :( Z kodu wyrzuciłem delay'a. Po pomnożeniu wartości przez 0.061, co odpowiada rozdzielczości 1LSB przy +/- 2g, otrzymałem takie wartości.

Obrazek


http://www.st.com/web/en/resource/technical/document/datasheet/DM00057547.pdf

Czy odpowiednie ustawienie bitów AHPM[1:0] w rejestrze CTRL7, umożliwi mi włączenie filtra górnoprzepustowego, czy trzeba jeszcze coś ustawiać aby on chodził?
Zastanawiałem się też nad podłączeniem przerwania z czujnika do ATmegi, jednak wyjście INT2 w LSM nie posiada konwertera napięć i tu jest moje pytanie czy mogę połączyć je z INT0 w ATmedze, skoro poziom będzie maks 3.3V... Kiedyś gdzieś wyczytałem, że AVR rozpoznają logiczną '1' od poziomu 0.6*Vcc... Przy zasilaniu 5V, byłyby to 3V.

Z góry dziękuję za wszelką pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2014, o 23:20 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 22 mar 2014
Posty: 12
Lokalizacja: Gdynia
Pomógł: 0

Problem rozwiązany. Powodem zła kolejność odczytywanych bajtów LSB i MSB.

Dziękuję koledze atmel za pomoc.
Temat do zamknięcia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2014, o 05:24 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 595
Lokalizacja: Jaworzno
Pomógł: 39

Jeżeli teraz wskazania masz OK, to może pokaż jak to wygląda w terminalu. :) Jestem ciekawy bo mam do uruchomienia moduły IMU 10DOF z MPU6050 + HMC5883L + MS5611 na pokładzie.

_________________
Pozdrawiam
PP



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2014, o 10:51 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 22 mar 2014
Posty: 12
Lokalizacja: Gdynia
Pomógł: 0

Generalnie "produktem finalnym" miały być wskazania przechylenia i pochylenia czujnika, wyrażone w stopniach. Kolegę interesują wartości podawane w 'g', czy jakieś inne? Obsługę wyświetlania mam zrobioną na LCD alfanumerycznym i wygląda to następująco...

Obrazek



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: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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