Skocz do zawartości

JerryPK

Użytkownicy
  • Zawartość

    2
  • Rejestracja

  • Ostatnio

Posty napisane przez JerryPK


  1. Dobre pytanie. Zapomniałem 😉. Natomiast w kursie jest napisane:

    Moduł akcelerometru posiada wbudowane rezystory podciągające, więc nie ma konieczności podłączania rezystorów do linii SDA i SCL

    Za to jak teraz sprawdzam w dokumentacji wyraźnie stoi:

    If an I2C interface is used, pull-up resistors (recommended value 10 k) must be placed on

    the two I2C bus lines

    To teraz seria głupich pytań😉:

    - mogłem jakoś uszkodzić układ przez brak tych rezystorów?

    - trzeba je po prostu wpiąć szeregowo pomiędzy piny SDA oraz SCL na kontrolerze a analogiczne na akcelerometrze?


  2. To mój pierwszy post na forum więc witam wszystkich 🙂 Chociaż czytelnikiem jestem już od dawna;p

    Posiadam płytkę stm32f411re i próbuję przetestować akcelerometr jak w tytule(Był dołączony do kursu STM32F1). Do pomocy korzystałem z obu kursów STM32: F4 (HAL) oraz Kurs F1. Próbowałem już różnych konfiguracji interfejsu, różnych pinów itp. jednak ciągle nie mogę nawet odczytać rejestru WHO_AM_I.

    Konfiguracja I2C:

    static void MX_I2C1_Init(void)
    {
    
     hi2c1.Instance = I2C1;
     hi2c1.Init.ClockSpeed = 400000;
     hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
     hi2c1.Init.OwnAddress1 = 0;
     hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
     hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
     hi2c1.Init.OwnAddress2 = 0;
     hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
     hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
     if (HAL_I2C_Init(&hi2c1) != HAL_OK)
     {
       Error_Handler();
     }
    
    }

    Adres układu:

    #define LSM303D_ADDR (0x3a << 1)

    (Próbowałem też 0x3c oraz opcji bez przesunięcia bitowego)

    Pętla główna:

    while (1)
     {
     HAL_I2C_Mem_Read(&hi2c1, LSM303D_ADDR, 0x0f, 1, &who_am_i, 1, 100);
     }

    Gdzie 0x0f to adres rejestru WHO_AM_I z dokumentacji zamieszczonej w kursie, a &who_am_i to adres zmiennej globalnej typu uint_8t.

    Dokumentacja LSM303D

    Układ zmontowany poprawnie, SDA i SCL podpinam pod piny ustawione w Cube, dodatkowo masa i 3v3 do Vin.

    Oczekiwana wartość rejestru to wg dokumentacji 0x49, jednak śledzenie zmiennej w STMStudio zawsze wskazuje 0.

    Zaznaczę jeszcze, że próbowałem też odczytywać konkretne wartości z akcelerometru po uprzedniej konfiguracji, ale nigdy nie zadziałało. Zakładam więc, że jest jakiś podstawowy problem z komunikacją układów, dlatego chcę zacząć od poprawnego odczytu who_am_i.

    Dajcie znać, jeśli czegoś brakuje w opisie. Dzięki.

×
×
  • Utwórz nowe...