Hab mich nochmal drauf gestürzt und noch ne C++ Klasse geschrieben der
man ne Funktion mitgeben kann um mehrere BMA020 über einem i2c switch zu
nutzen.
Es wird auch nur noch einmal Register 0Ah ausgelesen um die
Kalibrierungs Bits zu behalten.
Ich nutze immer noch die i2c_communicate.c aus dem ersten Beitrag.
Nun zur benutzung:
Aufruf der Klasse mit i2c_switch:
1 | void i2c_switch_1(){
|
2 | /*
|
3 | * Hier die den switch sagen das der erste BMA020 drann ist
|
4 | * (Wird immer vor einer i2c verbindung aufgerufen)
|
5 | */
|
6 | }
|
7 |
|
8 | void i2c_switch_2(){
|
9 | /*
|
10 | * Hier die den switch sagen das der zweite BMA020 drann ist
|
11 | * (Wird immer vor einer i2c verbindung aufgerufen)
|
12 | */
|
13 | }
|
14 | // BMA020 BMA_1(i2c_switch_1);
|
15 | BMA020 BMA_1(i2c_switch_1, (RANGE_4g | BANDWIDTH_1500hz));
|
16 |
|
17 | // BMA020 BMA_2(i2c_switch_2);
|
18 | BMA020 BMA_2(i2c_switch_2, (RANGE_8g | BANDWIDTH_1500hz));
|
Oder wenn man nur einen hat:
1 | // BMA020 BMA();
|
2 | BMA020 BMA((RANGE_4g | BANDWIDTH_1500hz));
|
Auslesen und werte nutzen:
1 | BMA.readAll(); // Liest alle Achsen aus
|
2 | BMA.readX(); // Liest nur die X Achse
|
3 | BMA.readY(); // Liest nur die Y Achse
|
4 | BMA.readZ(); // Liest nur die Z Achse
|
5 |
|
6 | // Nutzen kann man das ausgelesene mit
|
7 | int x = BMA.getX();
|
8 | int y = BMA.getY();
|
9 | int z = BMA.getZ();
|
10 | /*
|
11 | Wenn man will kann man auch LSB, MSB, FULL als wert mitgeben,
|
12 | wobei FULL standart ist und LSB und MSB zum 10Bit wert zusammensetzt.
|
13 | */
|
Die erklärung für sleep, soft_reset und shadow_disable spar ich mir hier
mal. Wer aber eine braucht, guckt ins Datenblatt ;).
Gruss
Robin Gerhartz