Új hozzászólás Aktív témák

  • Teasüti

    nagyúr

    MPU6050 lelkivilágához ért itt vki?

    Átnyálaztam magam ezen, mellé felcsaptam még ezt is.
    Viszont akad pár kérdésem, amit nem értek, infót neten nem találtam, a program és a kézikönyv nem tárgyalja.
    Pl. a FIFO olvasása és írása hogy működik?
    Van egy FIFO_R_W regiszterem, de ez csak egyetlen bájt az 1024-ből. Szóval ezt miként használja a modul? Az olvasás gondolom úgy megy, mint a 60 KB soros puffer esetén, hogy a kiolvasott adat helyére a sorban következő kerül míg ki nem ürül a FIFO. Így van?
    Viszont az írás teljesen ködös, egyáltalán mit és miért kéne ebbe írni kívülről az adatbusz felől?

    Aztán ott van a low pass filter és a sample rate.
    Ha jól értem a kézikönyvet, akkor a chip a mintavételi frekinél alacsonyabb szűrő frekivel írja ki a szűrt értéket a regiszterbe.
    Viszont ennek látszólag ellenmond az alábbi kód:
    // Configure MPU6050 gyro and accelerometer for bias calculation
    writeByte(MPU6050_ADDRESS, CONFIG, 0x01); // Set low-pass filter to 188 Hz
    writeByte(MPU6050_ADDRESS, SMPLRT_DIV, 0x00); // Set sample rate to 1 kHz
    writeByte(MPU6050_ADDRESS, GYRO_CONFIG, 0x00); // Set gyro full-scale to 250 degrees per second, maximum sensitivity
    writeByte(MPU6050_ADDRESS, ACCEL_CONFIG, 0x00); // Set accelerometer full-scale to 2 g, maximum sensitivity

    uint16_t gyrosensitivity = 131; // = 131 LSB/degrees/sec
    uint16_t accelsensitivity = 16384; // = 16384 LSB/g

    // Configure FIFO to capture accelerometer and gyro data for bias calculation
    writeByte(MPU6050_ADDRESS, USER_CTRL, 0x40); // Enable FIFO
    writeByte(MPU6050_ADDRESS, FIFO_EN, 0x78); // Enable gyro and accelerometer sensors for FIFO (max size 1024 bytes in MPU-6050)
    delay(80); // accumulate 80 samples in 80 milliseconds = 960 bytes

    Tehát 80 ms-et vár, ami e szerint 80 minta (1 kHz). Viszont feljebb meg 188 Hz-es lowpass van beállítva, szóval ezt nem értem.

    A célom az volna, hogy egy tetszőleges lowpass frekvencián megtöltsem a FIFO-t a gyorsulásérzékelő adataival, majd ezt burst read módban kiolvasni relatíve ritkán, hogy a fő programomat ne lassítsa be a 200 hz-es I2C olvasás szerencsétlen Uno-n. E helyett mondjuk a megengedhető legnagyobb késleltetéssel végezni egyetlen I2C műveletet a teljes FIFO puffert kiemelve, majd matekozni.
    Ehhez talán interrupt se fog kelleni, max flag-ként.
    Illetve azon fílózom még, hogy ha overflow interrupt-ot választok, akkor a FIFO eleje már felülírodott, mire jön a jel? Mert tök jó lenne úgy időzíteni a burst read-et is, hogy teli puffernél olvasson.

    szerk: illetve továbbra se tudok interrupt-ban I2C műveletet végezni. Ez normális?

    Köszi! :R

Új hozzászólás Aktív témák

Hirdetés