Cześć!
Zabrałem się za projekt którego celem jest zbieranie danych o przyśpieszeniu z akcelerometru LIS3DH i wyświetlenie ich na wyświetlaczu LCD/ Napotkałem jednak problem z komunikacją pomiędzy moim mikrokontrolerem a LIS'em poprzez SPI. Napisany kod wydaje mi się poprawny i zgodny z dokumentacją a mimo to nie mogę ruszyć dalej. Problem wygląda następująco, gdy próbuję odczytać rejestr WHO_AM_I z akcelerometru otrzymuję wartość 0 na wyświetlaczu która moim zdaniem jest błędna. Przy próbie odczytania jakiegokolwiek innego rejestru nie dostaję nic.
Kod mojego programu:
W funkcji SPI_masterinit() inicjuję moją Atmegę jako MASTER układu oraz definiuje odpowiednie piny jako wyjścia. W funkcji spi_transmit() ustawiam wartość pinu CS na 0 co oznacza zgodnie z dokumentacją rozpoczęcie transmisji poprzez SPI. Następnie program oczekuje na flagę potwierdzenia zakończenia transmisji i wtedy CS wskakuje na 1. Wynik wyświetlam za pomocą odpowiedniej biblioteki dla LCD. Rozwiązania szukalem już po utworzonych wątkach jednak niec co by mi pomogło nie znalazłem. Czy ktoś wie w czym może tkwić problem albo co robię nie tak? Poniżej załączam schemat połączenia mojego układu oraz dokumentację do akcelerometru.
![[Atmega32][C] - komunikacja z akcelerometrem LIS3DH po SPI [Atmega32][C] - komunikacja z akcelerometrem LIS3DH po SPI](https://obrazki.elektroda.pl/8164710200_1501964222_thumb.jpg)
Zabrałem się za projekt którego celem jest zbieranie danych o przyśpieszeniu z akcelerometru LIS3DH i wyświetlenie ich na wyświetlaczu LCD/ Napotkałem jednak problem z komunikacją pomiędzy moim mikrokontrolerem a LIS'em poprzez SPI. Napisany kod wydaje mi się poprawny i zgodny z dokumentacją a mimo to nie mogę ruszyć dalej. Problem wygląda następująco, gdy próbuję odczytać rejestr WHO_AM_I z akcelerometru otrzymuję wartość 0 na wyświetlaczu która moim zdaniem jest błędna. Przy próbie odczytania jakiegokolwiek innego rejestru nie dostaję nic.
Kod mojego programu:
Kod: C / C++
W funkcji SPI_masterinit() inicjuję moją Atmegę jako MASTER układu oraz definiuje odpowiednie piny jako wyjścia. W funkcji spi_transmit() ustawiam wartość pinu CS na 0 co oznacza zgodnie z dokumentacją rozpoczęcie transmisji poprzez SPI. Następnie program oczekuje na flagę potwierdzenia zakończenia transmisji i wtedy CS wskakuje na 1. Wynik wyświetlam za pomocą odpowiedniej biblioteki dla LCD. Rozwiązania szukalem już po utworzonych wątkach jednak niec co by mi pomogło nie znalazłem. Czy ktoś wie w czym może tkwić problem albo co robię nie tak? Poniżej załączam schemat połączenia mojego układu oraz dokumentację do akcelerometru.