Witam.
Kilka dni temu zakupiłem moduł 3-osiowy akcelerometr i 3-osiowy żyroskop MPU-6050 (6 DOF). Połączenie przez interfejs I2C działa, bo mogę zapisywać i odczytywać stany rejestrów z niego. Moim problemem jest inicjalizacja tego układu. Po przeczytaniu artykułu
http://playground.arduino.cc/Main/MPU-6050
oraz
https://www.elektroda.pl/rtvforum/topic2602993.html#12492860
wywnioskowałem że rejestr PWR_MGMT_1 wystarczy zapisać wartością 0x00 (wyzerować bit SLEEP). Po podłączeniu zasilania odczytałem wartość z tego rejestru i wynosił 0b01100000, więc wczytałem do niej 0x00, ale po tej czynności układ był cały czas w stanie RESET (0b10000000). Nie wiem czy coś jest z wewnętrznym oscylatorem 8MHz? Po wyborze innego zegara, układ już nie pozostawał w RESECIE, ale wartości z rejestrów ACCEL_XOUT... tak samo jak i GYRO_XOUT zawsze miały wartość 0x80, niezależnie od zmian położenia.
W nocie katalogowej
http://www.invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf
napisano:
The reset value is 0x00 for all registers other than the registers below.
• Register 107: 0x40.
• Register 117: 0x68.
Wiec skąd się biorą na innych rejestrach wartości 0x80?
Poniżej przedstawiam krótki kod którym testowałem.
Wartości rejestrów odczytuje na konsoli. Są one takie:
0b01100000
0b00000010
I w pętli odczyt z żyroskopu z osi X:
0b10000000
Coś na pewno źle inicjalizuję, jakieś ustawienia ale nie mogę znaleźć co:/ Proszę o pomoc doświadczonych ludzi, którzy już mieli styczność z tym układem.
Pozdrawiam.
Kilka dni temu zakupiłem moduł 3-osiowy akcelerometr i 3-osiowy żyroskop MPU-6050 (6 DOF). Połączenie przez interfejs I2C działa, bo mogę zapisywać i odczytywać stany rejestrów z niego. Moim problemem jest inicjalizacja tego układu. Po przeczytaniu artykułu
http://playground.arduino.cc/Main/MPU-6050
oraz
https://www.elektroda.pl/rtvforum/topic2602993.html#12492860
wywnioskowałem że rejestr PWR_MGMT_1 wystarczy zapisać wartością 0x00 (wyzerować bit SLEEP). Po podłączeniu zasilania odczytałem wartość z tego rejestru i wynosił 0b01100000, więc wczytałem do niej 0x00, ale po tej czynności układ był cały czas w stanie RESET (0b10000000). Nie wiem czy coś jest z wewnętrznym oscylatorem 8MHz? Po wyborze innego zegara, układ już nie pozostawał w RESECIE, ale wartości z rejestrów ACCEL_XOUT... tak samo jak i GYRO_XOUT zawsze miały wartość 0x80, niezależnie od zmian położenia.
W nocie katalogowej
http://www.invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf
napisano:
The reset value is 0x00 for all registers other than the registers below.
• Register 107: 0x40.
• Register 117: 0x68.
Wiec skąd się biorą na innych rejestrach wartości 0x80?
Poniżej przedstawiam krótki kod którym testowałem.
Kod: C / C++
Wartości rejestrów odczytuje na konsoli. Są one takie:
0b01100000
0b00000010
I w pętli odczyt z żyroskopu z osi X:
0b10000000
Coś na pewno źle inicjalizuję, jakieś ustawienia ale nie mogę znaleźć co:/ Proszę o pomoc doświadczonych ludzi, którzy już mieli styczność z tym układem.
Pozdrawiam.
