mikrocontroller.net

Forum: Projekte & Code BMA020 library (ohne Interruptfunktionen)


Autor: Robin Gerhartz (gawin)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Robin Gerhartz (gawin)
Datum:
Angehängte Dateien:

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

Gruß Robin

Autor: Robin Gerhartz (gawin)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Robin Gerhartz (gawin)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
void i2c_switch_1(){
  /*
   * Hier die den switch sagen das der erste BMA020 drann ist
   * (Wird immer vor einer i2c verbindung aufgerufen)
   */
}

void i2c_switch_2(){
  /*
   * Hier die den switch sagen das der zweite BMA020 drann ist
   * (Wird immer vor einer i2c verbindung aufgerufen)
   */
}
// BMA020 BMA_1(i2c_switch_1);
BMA020 BMA_1(i2c_switch_1, (RANGE_4g | BANDWIDTH_1500hz));

// BMA020 BMA_2(i2c_switch_2);
BMA020 BMA_2(i2c_switch_2, (RANGE_8g | BANDWIDTH_1500hz));

Oder wenn man nur einen hat:
// BMA020 BMA();
BMA020 BMA((RANGE_4g | BANDWIDTH_1500hz));

Auslesen und werte nutzen:
BMA.readAll(); // Liest alle Achsen aus
BMA.readX(); // Liest nur die X Achse
BMA.readY(); // Liest nur die Y Achse
BMA.readZ(); // Liest nur die Z Achse

// Nutzen kann man das ausgelesene mit
int x = BMA.getX();
int y = BMA.getY();
int z = BMA.getZ();
/*
Wenn man will kann man auch LSB, MSB, FULL als wert mitgeben,
wobei FULL standart ist und LSB und MSB zum 10Bit wert zusammensetzt.
*/

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.