Skocz do zawartości

Pomocna odpowiedź

Napisano

witam...walcze z mpu6050, sprawdzalem najpopularniejsze biblioteki i nie dziala...jedynie biblioteka adafruiit dziala choc nie do konca, mam dwa moduly, jesli podlacze stary to normalnie sie komunikuje z biblioteka, jesli podczas pracy wyciagne stary z plytki stykowej i wepne nowy mpu to dziala...jesli zresetuje esp to juz nie ma komunikacji z nowym mpu...oba mpu maja ten sam adres 0x68...moze ktos wyprobowac ta biblioteke u siebie? zalezy mi na tej wersji bo ma wszystko czego potrzebuje... https://github.com/jarzebski/Arduino-MPU6050

19 minut temu, farmaceuta napisał:

moze ktos wyprobowac ta biblioteke

Takie ogólne sprawdzanie nie ma sensu - tysiące osób już ją wykorzystywało.

Zainteresuj się tą biblioteką, jako jedna z niewielu potrafi wykorzystać wewnętrzny DMP układu.

  • Lubię! 1
  • Pomogłeś! 1

@jand już miałem tą bibliotekę tylko okrojoną wersję...nie dzialala...to co podałeś to zbiór wielu bibliotek i nie mogłem tego zainstalować...dopiero po wycięciu odpowiednich plików i wklejeniu do pierwszego folderu IDE przełkneło👍 no i działa na obu mpu👍 

Czym jest to DMP? Jaką ma przewagę nad zwykłym odczytem raw??

15 minut temu, farmaceuta napisał:

Czym jest to DMP? Jaką ma przewagę nad zwykłym odczytem raw??

DMP jest dodatkowym procesorem wbudowanym w MPU6050, który np. może  dostarczyć  gotowe kąty. Nie potrzeba się samemu męczyć z filtrem komplementarnym, czy filtrem Kalmana. 

  • Pomogłeś! 1
2 godziny temu, farmaceuta napisał:

jesli zresetuje esp to juz nie ma komunikacji z nowym mpu

Nic dziwnego - MPU został prawdopodobnie w jakimś dziwnym stanie w połowie transmisji.

Taki kawałek kodu gdzieś podejrzany:

int I2C_ClearBus() {
#if defined(TWCR) && defined(TWEN)
        TWCR &= ~(_BV(TWEN)); //Disable the Atmel 2-Wire interface so we can control the SDA and SCL pins directly
#endif

        pinMode(SDA, INPUT_PULLUP); // Make SDA (data) and SCL (clock) pins Inputs with pullup.
        pinMode(SCL, INPUT_PULLUP);

  // delay(2500);  // Wait 2.5 secs. This is strictly only necessary on the first power
  // up of the DS3231 module to allow it to initialize properly,
  // but is also assists in reliable programming of FioV3 boards as it gives the
  // IDE a chance to start uploaded the program
  // before existing sketch confuses the IDE by sending Serial data.

        boolean SCL_LOW = (digitalRead(SCL) == LOW); // Check is SCL is Low.
        if (SCL_LOW) { //If it is held low Arduno cannot become the I2C master.
                return 1; //I2C bus error. Could not clear SCL clock line held low
        }

        boolean SDA_LOW = (digitalRead(SDA) == LOW);  // vi. Check SDA input.
        int clockCount = 20; // > 2x9 clock

        while (SDA_LOW && (clockCount > 0)) { //  vii. If SDA is Low,
                clockCount--;
  // Note: I2C bus is open collector so do NOT drive SCL or SDA high.
                pinMode(SCL, INPUT); // release SCL pullup so that when made output it will be LOW
                pinMode(SCL, OUTPUT); // then clock SCL Low
                delayMicroseconds(10); //  for >5uS
                pinMode(SCL, INPUT); // release SCL LOW
                pinMode(SCL, INPUT_PULLUP); // turn on pullup resistors again
    // do not force high as slave may be holding it low for clock stretching.
                delayMicroseconds(10); //  for >5uS
    // The >5uS is so that even the slowest I2C devices are handled.
                SCL_LOW = (digitalRead(SCL) == LOW); // Check if SCL is Low.
                int counter = 20;
                while (SCL_LOW && (counter > 0)) {  //  loop waiting for SCL to become High only wait 2sec.
                        counter--;
                        delay(100);
                        SCL_LOW = (digitalRead(SCL) == LOW);
                }
                if (SCL_LOW) { // still low after 2 sec error
                        return 2; // I2C bus error. Could not clear. SCL clock line held low by slave clock stretch for >2sec
                }
                SDA_LOW = (digitalRead(SDA) == LOW); //   and check SDA input again and loop
        }
        if (SDA_LOW) { // still low
                return 3; // I2C bus error. Could not clear. SDA data line held low
        }

  // else pull SDA line low for Start or Repeated Start
        pinMode(SDA, INPUT); // remove pullup.
        pinMode(SDA, OUTPUT);  // and then make it LOW i.e. send an I2C Start or Repeated start control.
  // When there is only one I2C master a Start or Repeat Start has the same function as a Stop and clears the bus.
  /// A Repeat Start is a Start occurring after a Start with no intervening Stop.
        delayMicroseconds(10); // wait >5uS
        pinMode(SDA, INPUT); // remove output low
        pinMode(SDA, INPUT_PULLUP); // and make SDA high i.e. send I2C STOP control.
        delayMicroseconds(10); // x. wait >5uS
        pinMode(SDA, INPUT); // and reset pins as tri-state inputs which is the default state on reset
        pinMode(SCL, INPUT);
        return 0; // all ok
}

Wywołujesz w setup() gdzieś na początku, w każdym razie przed Wire.begin()

 

  • Lubię! 1
  • Pomogłeś! 1
2 godziny temu, farmaceuta napisał:

jesli podczas pracy wyciagne stary z plytki stykowej i wepne nowy

Wymiana modułów pod napięciem nie jest dobrą praktyką. Nie mamy kontroli nad kolejnością pojawiania się napięć na poszczególnych nóżkach i może się pojawić sekwencja której moduł nie lubi.

  • Lubię! 1
49 minut temu, jand napisał:

Wymiana modułów pod napięciem nie jest dobrą praktyką. Nie mamy kontroli nad kolejnością pojawiania się napięć na poszczególnych nóżkach i może się pojawić sekwencja której moduł nie lubi.

No tak tak, ja to rozumiem, tak tylko z pośpiechu zamieniałem...po resecie, czy resecie napięcia nowy mpu nie działał...może to klon klona, bo rozmiarem oba mpu się różnią (chip) 

@ethanak spróbuję wieczorem jak odpalę kompa 👍

@jand a polecisz coś dla HMC5883? Bo tutaj też mam problemy z bibliotekami...akurat te w których nie ma kalibracji chodzą...☹️ 

Ta od Ciebie (i2cdev) ma obsługę hmc, ale jest strasznie uboga w funkcje...próbowałem dołożyć prostą kalibrację (skopiowaną od Jarzębski) ale nie wiele to pomogło...kompas dalej przekłamuje...🤔

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...