Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

lpc1114+LIS3DH - Komunikacja poprzez SPI

docencior 09 Paź 2014 20:09 1095 5
  • #1 09 Paź 2014 20:09
    docencior
    Poziom 10  

    Witam

    Potrzebuję pomocy w weryfikacji kodu do komunikacji poprzez SPI z akcelerometrem LIS3DH.

    Połączenie mikrokontrolera z akcelerometrem według datasheetu (Vdd i Vdd_IO do zasilania 3.3V, gnd do gnd, CS do P2_0, SPC do P2_1, SDO do P2_2(MISO), SDI do P2_3(MOSI), nie wykorzystuję pull-upów w datasheecie napisali, że dla komunikacji SPI nie trzeba)

    Oto trzy główne funkcje pliku spi.c, dodam, że blok IOCON i SPI1 jest uruchomiony w startupie. Kod jest bardzo niespójny ale po setnym zaprogramowaniu i niepowodzeniu człowiek przestaje na to zwracać uwagę.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    W funkcji main wykonuję następujące czynności. Wyciąłem niepotrzebne rzeczy.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Problem jaki natrafiam to to, że oba wywołania funkcji spi1read zawsze zwracają słowa wypełnione jedynkami. Obawiam się, że po prostu źle przylutowałem układ (pierwszy raz z obudową LGA-16) i MISO się w ogólę nie zmienia przez co dochodzą same jedynki. Niestety nie mam oscyloskopu, żeby to sprawdzić.
    Dlatego proszę was o sprawdzenie kodu bo może szczęśliwie to tam jest błąd.

    0 5
  • #3 10 Paź 2014 00:01
    docencior
    Poziom 10  

    Niestety dalej same jedynki. Może właśnie to, że bufor zawiera same jedynki jest czegoś przyczyną?

    0
  • #4 10 Paź 2014 09:45
    michalko12
    Specjalista - Mikrokontrolery

    Odepnij MISO od LISa, zewrzyj do masy i sprawdź czy wtedy będziesz miał same zera.
    Po drugie na czas testów ustaw na SPI najwolniejszy zegar jaki się da.

    0
  • #5 10 Paź 2014 13:03
    Badmaneq
    Poziom 23  

    Sprawdź analizatorem stanów logicznych transmisję SPI.
    Poza tym uważam, że zapis w stylu while ((LPC_SSP1->SR & (0b10|0b10000))!=(0b10)) jest trudnym do odczytu. Mi się nawet w ten sposób zapisanego warunku nie chcę analizować.

    0
  • #6 10 Paź 2014 21:58
    docencior
    Poziom 10  

    Niestety nie posiadam analizatora stanów.
    Zmniejszyłem prędkość zegara SPI1 do 3kHz żeby łatwiej zmierzyć miernikiem czy coś się będzie zmieniać i okazało się, że SS, MOSI i SCK zmieniają się podczas gdy MISO jest sztywno przy 3,3V (musi to być pullup w mikrokontrolerze).

    Następnie podpiąłem MISO do masy i funkcje zaczęły zwracać zera, czyli SPI działa.
    Najprawdopodobniej albo uszkodziłem LIS3DH abo źle przylutowałem chociaż wciąż mam nadzieję, że jeszcze zadziała :|

    0