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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren