ITG 3200 - wie auf ° ?

Gast #2855473
Lesenswert?
• ▲
▼
Hey,

Ich habe einen ITG 3200 per I²C an einen ATMEGA2560 angeschlossen und 
übertrage die Messwerte per RS232 an ein PC-Programm. Soweit 
funktioniert mittlerweile alles super.

Einziges Problem ist, dass ich keinen Plan habe wie ich auf die 
Neigungswinkel in Grad oder Rad komme - habe zwar einige Artikel im Web 
gefunden, aber die widersprechen sich meistens gegenseitig.

Hier mal was ich bisher mache:

Init ITG:
1
i2c_write_reg_itg(0x15,0x00,a_itg1); //a_itg1 = write addr
2
i2c_write_reg_itg(0x16,0x18,a_itg1);
3
i2c_write_reg_itg(0x3E,0x01,a_itg1);

Die Werte auslesen und "zusammen rechnen" (passiert ~ alle 100ms)
1
itgval[0] = i2c_read_reg_itg(0x1D,a_itg1,(a_itg1 + 1)); //itgval = char
2
itgval[1] = i2c_read_reg_itg(0x1E,a_itg1,(a_itg1 + 1));
3
itgval[2] = i2c_read_reg_itg(0x1F,a_itg1,(a_itg1 + 1));
4
itgval[3] = i2c_read_reg_itg(0x20,a_itg1,(a_itg1 + 1));
5
itgval[4] = i2c_read_reg_itg(0x21,a_itg1,(a_itg1 + 1));
6
itgval[5] = i2c_read_reg_itg(0x22,a_itg1,(a_itg1 + 1));
7
    
8
ix = ((int)itgval[1]<<8)|(int)itgval[0]; //ix, iy & iz = unsigned int
9
iy = ((int)itgval[3]<<8)|(int)itgval[2];
10
iz = ((int)itgval[5]<<8)|(int)itgval[4];

Dann werden die Daten an den PC gesendet, welcher dann die endgültige 
Umrechnung machen soll:
1
dItg_c[0] = iItg[0] / 14.375;
2
dItg_c[1] = iItg[1] / 14.375;
3
dItg_c[2] = iItg[2] / 14.375;

Das Problem hierbei ist, dass meine 3 Werte nun irgendwo zw. 0 und 
4558,95 liegen (klar, wegen der Division durch 14.375 - die Zahl hab ich 
aus einem der oben erwähnten Artikel).

Hoffe ihr könnt mir ein wenig auf die Sprünge helfen - danke schonmal!

MfG,
John
#2855739
Lesenswert?
• ▲
▼
John schrieb:
> Division durch 14.375 - die Zahl hab ich
> aus einem der oben erwähnten Artikel

Der steht übrigens im Datenblatt, wo man sich solche Werte immer her 
holen sollte und nicht aus irgendwelchen Artikeln. Da steht nämlich 
wirklich drin wie sich der Chip laut Hersteller zu verhalten hat. In 
diesem Fall "Sensitivity Scale Factor 14,375 LSB pro °/s".

In der Register Map steht dann auch was Stephan schon schrieb: du hast 
high- und low-byte vertauscht.
Gast #2897884
Lesenswert?
• ▲
▼
Sorry für die späte Antwort und vielen Dank für den Hinweis mit Low & 
High Byte.

Michael Frangenberg schrieb:
> Der steht übrigens im Datenblatt, wo man sich solche Werte immer her
> holen sollte und nicht aus irgendwelchen Artikeln. Da steht nämlich
> wirklich drin wie sich der Chip laut Hersteller zu verhalten hat. In
> diesem Fall "Sensitivity Scale Factor 14,375 LSB pro °/s".

Stimmt, den hatte ich ja auch aus dem Datenblatt, hatte dahinter noch 
einen Wert stehen den ich hier jetzt rausgenommen habe, weil er zu 
keinem Ergebnis führte - der war aus nem Artikel.

Das Problem ist nur weiterhin, dass ich keine Ahnung davon habe wie ich 
ich jetzt auf die Neigung in X- / Y-Richtung komme (in °). Habe nun 
schon sehr viel getestet und probiert, komme aber auf keinen grünen 
Zweig...

Hat jemand zufällig einen Tipp für mich?

Danke und mfG,
John

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.