BMA020 library (ohne Interruptfunktionen)

OP #2798924
Lesenswert?

Hi leute,
dachte stell mal die BMA020 lib hierhin.
Dabei möchte ich mich nochmal bei allen bedanken für die Tipps und 
Tricks, bin ja noch am anfang und muss noch lernen. ;)

Enthalten in der lib ist z.B.:
  - starten/beenden des Sleep-modus
  - starten des Soft reset
  - setzten des Messbreichs
  - setzten der Mess-frequenz
  - setzten des Shadow_disable flags
  - auslesen aller Achsen oder nur einer ((LSB)/MSB und der 10 Bit wert 
werden in Variabeln zwischen gespeichert)

Ich hoffe es hilft ein paar leuten den BMA020 schnell und einfach nutzen 
zu können.

Gruß Robin Gerhartz

ps.: Wenn noch wer Tipps hat oder nen Tutorial hat was ich mal lesen 
sollte immer her damit ;)
Angehängte Dateien:
OP #2844981
Lesenswert?

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
Angehängte Dateien:

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