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