mpu 6050 I2C - Werte

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Moin Leute!

    Auf dem Weg zu einem netten kleinen Projekt möchte ich einen Lage-Beschleunigungssensor benutzen.
    Ich habe den Sensor MPU 6050 auf einen Breakout-Chip und alles verbunden, alles eingerichtet und ich bekomme
    auch Werte.
    Nun wird auf diversen Seiten/Foren und auch auf dem Datasheet die RohWerte-Verarbeitung erläutert.
    Dort ist jedoch immer davon zu lesen, dass die Werte z.B. für das Accelometer von -32750 (oder so) bis +32750 geliefert werden
    und je nach eingestellter Empfindlichkeit dann in die jeweiligen g oder winkel/s werte umgerechnet werden müssen.
    So: Lese ich meinen Chip aus, dann erhalte ich aber werte von 0 bis +65500 (=32750*2)....
    Erst dachte ich: Easy! Einfach -32750 rechnen und fertig. Dann habe ich aber festgestellt, dass z.b. der accel bei "positiver" neigung
    von 0 bis ~32750 arbeitet und bei negativer "springt" und von 65500 rückwärts (!!) bis ~ 32750 ausgibt. Das ist aber
    a) schei** (sry)
    b) doof zu lesen, falls es überlapp gibt (irgendwie...kp)
    und c) wäre die obige alternative einfach cooler.
    Kann da jemand helfen?

    Datenblatt des MPU 6050: http://invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf

    und mein bescheidener Quellcode:



    Heraus kommen werte, die faaaast passen (manchmal beschleunigungen größer 2g, was irgendwie sinnlos ist ;) . Aber sonst schon mal "funktionabel".
    Nur für mein Projekt hätte ich es gerne nicht fast, sondern richtig :D

    jaaa... irgendwie wäre das ohne den unteren Teil etwas netter ;) wenn ihr wisst, was ich meine.
    Ich bin kein Pro, das bitte bei den Antworten berücksichtigen! Danke!

    _lego2minecraft

    Einmal editiert, zuletzt von lego2minecraft (4. Dezember 2013 um 15:38)


  • Moin Leute!

    Auf dem Weg zu einem netten kleinen Projekt möchte ich einen Lage-Beschleunigungssensor benutzen.
    Ich habe den Sensor MPU 6050 auf einen Breakout-Chip und alles verbunden, alles eingerichtet und ich bekomme
    auch Werte.
    Nun wird auf diversen Seiten/Foren und auch auf dem Datasheet die RohWerte-Verarbeitung erläutert.
    Dort ist jedoch immer davon zu lesen, dass die Werte z.B. für das Accelometer von -32750 (oder so) bis +32750 geliefert werden


    ist die Grenze vielleicht 32767/32768 ?

    +-2^15 signed entspricht 2^16-1 unsigned ?

    eventuell stimmt was in deine Vairablen deklaration nicht ......

    signed unsigned

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • eventuell stimmt was in deine Vairablen deklaration nicht ......

    Nicht nur eventuell, ganz sicher. Der Bereich von -32768 bis 32767 entspricht 16 bit SIGNED Integer, du deklarierst aber einen uint16_t, also 16 bit unsigned. Das wird implizit gecastet und dann kommt dabei das beschriebene Phänomen heraus.


  • Nicht nur eventuell, ganz sicher.....

    und ich habe kaum Ahnung vom PI :lol:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Super Leute :thumbs1:

    Kurze Antwort und: Problem gelöst. Ich weiß selber nicht, warum ich da einen uint hingepackt habe... Naja.

    Zum nachlesen: So funktioniert das Auslesen jetzt super bei mir:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!