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

LPC1114 i VL53L1X: Błędy w kodzie biblioteki I2C - jak naprawić?

docencior 23 Kwi 2019 12:20 618 2
REKLAMA
  • #1 17921518
    docencior
    Poziom 10  
    Posty: 77
    Ocena: 9
    Cześć

    Mam problem z komunikacją pomiędzy mikrokontrolerem LPC1114/302 a modułem pomiaru odległości VL53L1X. Komunikacja odbywać się ma poprzez I2C.

    Wykorzystuję bibliotekę do I2c, którą ściągnąłem z oficjalnej strony NXP. Wygląda ona tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Adres czujnika odległości to 0x52. By sprawdzić komunikację zgodnie z sugestią producenta odczytuję zawartość rejestru 0x010F pod którym ma się znajdować 0xEA.
    LPC1114 i VL53L1X: Błędy w kodzie biblioteki I2C - jak naprawić?Captur..PNG (16.41 kB)Musisz być zalogowany, aby pobrać ten załącznik.

    Oto funkcja odczytująca jeden bajt ze slave. Odczytuję jeden bajt oraz zapisuję trzy, jeden to adres urządzenia z bitem read (0x53) a dwa pozostałe to adres rejestru zgodnie z rysunkiem poniżej.

    LPC1114 i VL53L1X: Błędy w kodzie biblioteki I2C - jak naprawić?Captur..PNG (21.88 kB)Musisz być zalogowany, aby pobrać ten załącznik.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Funkcja main wygląda następująco:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Oto co odczytuję ze sniffera
    LPC1114 i VL53L1X: Błędy w kodzie biblioteki I2C - jak naprawić?Captur..PNG (9.79 kB)Musisz być zalogowany, aby pobrać ten załącznik.

    Program co jakiś czas powinien odczytać zawartość rejestru 0x010F a dzieje się coś dziwnego. Program od razu po wysłaniu adresu z bitem read 0x53 (0x29 i 0x1) wysyła bajty. Co ciekawe te bajty nie są losowe. Za każdym razem gdy resetuje zasilanie są one identyczne tj. 0x01, 0x29, 0x02, 0x10, 0x00 itd..

    Poniżej screen pojedynczej ramki

    LPC1114 i VL53L1X: Błędy w kodzie biblioteki I2C - jak naprawić?Captur..PNG (19.73 kB)Musisz być zalogowany, aby pobrać ten załącznik.

    Z góry dziękuję za każdą pomoc.
  • REKLAMA
  • Pomocny post
    #2 17921562
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Żeby to działało, to przecież najpierw musisz wysłać adres urządzenia z LSB ustawionym na zero (zapis), potem te 2 bajty adresu, potem zrobić "repeated start", znów adres urządzenia z LSB ustawionym na 1 (odczyt) i dopiero odczytać ten jeden bajt o który Ci chodzi.
  • #3 17923308
    docencior
    Poziom 10  
    Posty: 77
    Ocena: 9
    Dzięki wielkie za pomoc. Wszystko teraz działa.

    pozdro
REKLAMA