Forum: Projekte & Code BMA020 library (ohne Interruptfunktionen)


von Robin G. (gawin)


Angehängte Dateien:

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 ;)

von Robin G. (gawin)


Angehängte Dateien:

Lesenswert?

Hier nochmal für alle die kein C++ mögen in reinem C.

Gruß Robin

von Robin G. (gawin)


Angehängte Dateien:

Lesenswert?

Hi leute sry hab Gestern erst bemerkt das die "reine C" nicht rein ist 
hatte vergessen die eine init rauszunehmen und die andere anzupassen 
naja is hiermit erledigt und sollte keine Probleme geben wenn doch lasst 
es mich wissen.

von Robin G. (gawin)


Angehängte Dateien:

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.