Skocz do zawartości

Kurs STM32 - #12 - I2C w praktyce, akcelerometr


Pomocna odpowiedź

Ciężko odpowiedzieć na tak ogólne pytanie - błąd może być właściwie wszędzie. Najpierw spróbuj może trochę wyjaśnić jak Twój układ wygląda. Czy używasz tego samego modelu procesora, płytki Nucleo, na pewno podłączasz taki sam moduł LSM303D?

Nieco dziwny jest brak komunikatu, proponowałbym więc powrót do części 3 kursu i włączenie debuggera: https://forbot.pl/blog/artykuly/programowanie/kurs-stm32-3-plytka-nucleo-konfiguracja-srodowiska-id4875

Dzięki temu będzie chociaż wiadomo gdzie program się zatrzymuje.

Tak używam elementów z zestawu, ale już udało mi się znaleźć błąd. układ był połączony w porządku. Problem jest taki, że akcelerometr nie stykał z tą 9-pinową przejściówką, która byłą do niego dołączona. Jak przyłożyć przewodu bezpośrednio do wyjść akcelerometru to wszystko ślicznie działa 🙂

  • 8 miesiące później...

Elvis co znaczy następująca linia kodu :

I2C_SendData(I2C1, 0x80 | reg);

i idea alternatywy rejestru z tą liczbą tzn 0x80 ??? dlaczego nie wystarczy wpisać samego rejestru REG po co ta alternatywa ??? Nie pytam bez powodu, bo jak wpiszę tylko zmienną reg bez alternatywy to mam błędne wyniki, a jak jest tak jak w kodzie na forum czyli z alternatywa to wszystko jest ok. Włosy sobie wyrywałem, żeby znaleźć błąd w kodzie a to ta linijka.

Nie bardzo rozumiem co złego widzisz w operatorze |, zapis (x | 0x80) to po prostu zapalenie 7 bitu.

A dlaczego ten bit ma być ustawiony opisane jest w dokumentacji układu:

The I2C embedded in the LSM303D behaves as a slave device and the following protocol must be adhered to. After the START condition (ST) a slave address is sent, once a slave acknowledge (SAK) has been returned, an 8-bit sub-address is transmitted: the 7 LSb represent the actual register address while the MSb enables address auto-increment. If the MSb of the SUB field is 1, the SUB (register address) is automatically incremented to allow multiple data read/write.

Elvis zapis rozumiem, chodzi o ten 7 bit licząc od 0, więc w ten sposób włącza się auto inkrementacje co rozwiązuje moje problemy z przesyłaniem danych czego nie doczytałem w dokumentacji dla lsm303D i błędnymi wynikami. Dzięki!

  • 8 miesiące później...

Spotkał się ktoś z takim problemem, że nie znajduje akcelerometru? Wrzucam pierwszy kompletny kod, kompiluje się, a w konsoli (Tera Term) pojawia się "Wyszukiwanie akcelerometru..." i nic dalej. Sprawdzałem podłączenie oraz na drugim akcelerometrze i wciąż nie działa.

EDIT:

Już działa, problemem było to, że akcelerometr nie stykał dobrze z tym "grzebieniem".

  • 3 lat(a) później...

Cześć, próbuje uruchomić układ na płytce nucleo-f7, niestety w tej generacji nie ma już dostępnej biblioteki "STM32F10x Standard Peripherals Library". Aktua;nie korzystam z biblioteki HAL. Czy jest jakiś dobry sposób aby przerobić ten kod pod generacje F7? Czy jest może już napisana jakaś biblioteka tego akcelerometru?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...