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

[Atmega8][I2C][MPU 6050] - Komunikacja z akcelerometrem - konfiguracja i odczyt

browarmj 05 Kwi 2013 23:12 4518 7
  • #1 12161140
    browarmj
    Poziom 2  
    Witam,
    Tworzę projekt, który zawiera w sobie odczytywanie wartości akcelerometru (MPU 6050), który komunikuje się z atmega8, a ten z kolei wyświetla informacje na wyświetlaczu. Całość opiera się o I2C.

    Korzystam z tej inicjalizacji I2C:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Przeprowadziłem test i starałem się skomunikować ze slave, czyli:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Otrzymuję to co powinienem, czyli na razie wszystko ok.

    Następnie potrzebuję skonfigurować moduł akcelerometru, czyli dopisałem do tego funkcję, która tak jakby zapisuje dane w slave:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    i teraz stawiam sobie pytanie, czy to jest dobrze.

    I oczywiście potrzebuję funkcję która będzie odczytywała dane, ale jak na razie nie wiem czy obrałem dobry trop. Czy ktoś mógłby mnie ukierunkowywać, podpowiedzieć, pomóc?
  • #2 12167467
    Szumlus
    Poziom 17  
    Witam,

    Po pierwsze proponuje koledze zawsze po while, if, etc. wstawiać klamry nawet gdy jest tylko jedna linia kodu, w przyszłości kolega coś dopisze zapomni o klamrach i będzie zdziwiony że, nie działa...

    Po drugie fragment linii kodu, *dane++, nie inkrementuje wskaźnika tylko zmienną, która pod wskaźnikiem siedzi - a chyba nie taki był zamiar.

    Pozdrawiam,
    Marcin
  • #3 12167855
    michalko12
    Specjalista - Mikrokontrolery
    Szumlus napisał:
    Po drugie fragment linii kodu, *dane++, nie inkrementuje wskaźnika tylko zmienną, która pod wskaźnikiem siedzi - a chyba nie taki był zamiar.

    Proponuję zapoznać się priorytetami operatorów i nie wprowadzać w błąd.
  • #4 12171585
    Szumlus
    Poziom 17  
    Faktycznie mój błąd nie wiem czemu nie zwróciłem uwagi na priorytet ;(

    Pozdrawiam
  • #5 12171927
    browarmj
    Poziom 2  
    Dopisałem parę funkcji kolejnych i w tym momencie mam trochę inne zagadnienie do rozwiązania. Niestety pojawił się problem z rozmiarem programu dla procesora atmega8. Starałem się ograniczyć rozwiązanie do minimum, ale i tak mam adnotacje o nadmiarze realizowanych funkcji.

    Czy jedynym rozwiązaniem jest zmiana mikroprocesora na atmega16?
  • #6 12172136
    Szumlus
    Poziom 17  
    Kolega może przy kompilacji dać opcję aby usunięte zostały nieużywane funkcje z kodu wynikowego, jeśli takich nie ma to pozostaje tylko zmiana procesora na większy.
  • #7 12172260
    browarmj
    Poziom 2  
    A gdzie dokładnie mogę odnaleźć tę opcję?

    // Znalazłem opcję Optimization i pewnie o nią właśnie chodzi, tak?
  • Pomocny post
    #8 12172310
    Szumlus
    Poziom 17  
    Optymalizacja kodu opcja -Os do tego musisz przekazać kompilatorowi następujące flagi -ffunction-sections i -fdata-sections, a linkerowi -Wl,--gc-sections (czyli "garbage collect unused sections")

    Tyczy się to oczywiście AvrStudio 4.xx w AtmelStudio te opcje są do wyboru w ustawieniach jako kwadraciki do zaznaczenia.
REKLAMA