logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Brak komunikacji I2C między LIS302DL a ATtiny2313 - identyfikator 255 zamiast 59

Simson671 14 Sie 2017 16:40 1041 2
  • #1 16641930
    Simson671
    Poziom 12  
    Cześć, ostatnio chciałem uruchomić układ do pomiaru położenia kątowego oparty na czujniku LIS302DL i mikrokontrolerze ATtiny2313 wg projektu opisanego pod tym linkiem: http://mikrokontrolery.blogspot.com/2011/03/Akcelerometr-LIS302DL-biblioteka-przyklad.html
    Nie miałem styczności wcześniej z magistralą I2C i wiele musiałem się domyślać jeśli chodzi o podłączenie układu i tak powstał schemat poniżej:

    Brak komunikacji I2C między LIS302DL a ATtiny2313 - identyfikator 255 zamiast 59

    Płytki wytrawiłem i zaprogramowałem mikrokontroler ale jedyne co potrafił wyświetlić to identyfikator 255 (powinien być 59) i wartości przyspieszeń mierzonych na każdych osiach równe -1 ( a powinny się zmieniać w zakresie ok. -59...59) niezależnie od położenia czujnika. Rozłączyłem przewody łączące uC z czujnikiem i dane na LCD nie zmieniały się więc nie było komunikacji z LIS-em. Dopiero później wg noty katalogowej zacząłem podłączać czujnik ale nie zadziałało a na koniec wyrwałem pad z czujnika ( można dostać szału przy lutowaniu obudowy LGA-14, ostrzegam :)). Wg mnie błąd jest w nieprawidłowym podłączeniu LISka. Wykluczam raczej błąd w programie bo ze strony projektu pobrałem na początek kod źródłowy i pliki nagłówkowe.

    Sprawdzałem konwertery poziomów - sprawne, napięcia 5V i 3,3V oraz GND były na miejscu. Nie miałem pewności co do podłączenia pinu SDO(12), ostatecznie podłączyłem go przez rezystor 4,7kΩ do +3,3V, błędem było na pewno nie podłączenie pinu VDD(3) oraz VDD1(6) do +3,3V. Później to podłączyłem, odłączałem też rezystor 4,7kΩ a CS(13) podłączałem do GND ale bez skutku, prawdopodobnie spaliłem LISa. Mógłby ktoś rzucić okiem na schemat ?
    Poniżej schemat z datasheet:
    Brak komunikacji I2C między LIS302DL a ATtiny2313 - identyfikator 255 zamiast 59LIS302DL d...asheet.pdf Download (595.8 kB)
  • #2 16642330
    Konto nie istnieje
    Konto nie istnieje  
  • #3 16642459
    Simson671
    Poziom 12  
    Nie sprawdzałem co dzieje się na magistrali bo nie mam czym szczerze mówiąc. Słabo u mnie z ang. ale teraz jeszcze trochę poczytałem notę i dowiedziałem się, że nie miałem podłączonego +3.3V do pinów 3 i 6 i że powinienem był zostawić SDO(12) podłączone rezystorem też do +3.3V. Może dlatego zepsułem czujnik, pewnie tak, jak na razie drugiego nie mam pod ręką a wcześniej właśnie chcę zrobić rozeznanie, żeby naprawić błąd bo LIS kosztuje 30zł+wysyłka... Konwertery zostawiam bo chyba nie ma sensu ich wyrzucać jak są sprawne. Trochę dziwi mnie natomiast sytuacja w kodzie, że jak odczytuję wartość przyspieszenia z osi:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    to jako adres urządzenia z którego zczytuję tą wartość używam konfiguracji bitów dla Write a nie dla Read
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Bo zgodnie z tabelą 10 ten adres służy do operacji zapisu a nie odczytu, zakładając, że mam pin SDO podiągnięty do VCC ( a mam przecież rezystorem 4,7kΩ). Do odczytu powinno się chyba odczytywać wartość z adresu 00111011. Brak komunikacji I2C między LIS302DL a ATtiny2313 - identyfikator 255 zamiast 59
    Programowanie to dla mnie ciemna magia więc nie wiem czy dobrze rozumuję...
REKLAMA