Interfejs I2C

Informacje: wikipedia, forbot

Interfejs I2C – praca z modułem IMU – MPU6050 (dokumentacja techniczna, mapa rejestrów)

1. Przygotowanie projektu
  1. utworzenie projektu: STM32 Project
  2. wybranie płytki: Nucelo STM32L432
  3. w zakładce Project Manager/Code Generator i aktywujemy opcję „Generate peripheral initialization….”
  4. konfigurowanie wyprowadzeń:
    1. SYS/Debug -> Serial Wire (SWD)
    2. PB3 – jako wyjście o nazwie „LED”
  5. konfigurowanie modułu komunikacji I2C:
    1. Connectivity/I2C1 i wybrać z listy I2C
    2. upewnić się, że I2C1_SDA jest na pin  PA10, w celu przeniesienia przyciskamy “ctrl” klikamy myszką na pin i przenosimy
    3. upewnić się, że I2C1_SCL jest na pin PA9
  6. konfigurowanie modułu UART – terminal PC
    1. Connectivity/ USART2 wybrać mode: Asynchronous, ustawić prędkość komunikacji na 9600 (Baud Rate)
  7. generujemy projekt

 

2. Podłączenie modułu MPU-6050

  1. podłączyć przewodami zgodnie z tabelką:
Opis

Płytka NUCLEO

Moduł MPU-6050

Zasilanie +5V

5V

VCC

Zasilanie GND

GND

GND

komunikacja I2C - SDA
D0 - PA10
SDA

komunikacja I2C - SCL

D1 - PA9

SCL

3.Obsługa I2C – odczyt rejestru
  1. do obsługi modułu podłączone po interfejsie I2C potrzebujemy znać jego adres (dokumentacja techniczna – 9.2). Moduł posiada AD0 podpięte do GND.
  2. uruchomić funkcję readAndShow() – co robi ta funkcja, jaka wartość powinna być w rejestrze “Who Am I” mapy rejestrów?
  3. “<<—-” – komentarze tak oznaczone należy uzupełnić odpowiednimi wartościami

 

4.Obsługa I2C zapisanie do rejestru – odczyt temperatury
  1. uruchomić funkcję readTemp() – co robi ta funkcja?
  2. domyślnie funkcja sprint nie potrafi wyświetlać liczb typu float, należy skonfigurować kompilator według instrukcji na stronie “Zestaw STM32”

5. Poziomnica
  1. Dołączyć bibliotekę “math.h” (#include “math.h”)
  2. uruchomić funkcję poziomnica() – co robi ta funkcja?

 

6.Pytania dodatkowe:
  1. uint8_t adresMPU6050=0x68<<1; //Adres modulu MPU6050 – dlaczego jest przesunięcie bitowe (0x68<<1)
  2. dlaczego odczyty poziomu jak płytka leży na nożkach są na poziomie 180 stopni?