-diese Library dient zum ansteuern eines BMA180 (3-Achs-Beschleunigungs-Sensor)
von einem externen Modul das per SPI-BUS an die CPU angeschlossen ist.
-die Library liest den Sensor aus und stellt die X-Y-Z-Beschleunigungsdaten als Globale Struktur bereit.
-Die Auflösung kann per Software zwischen +/-1G bis +/-16G
eingestellt werden. Der Sensor liefert 14bit ist also sehr genau. Zusätzlich ist noch
ein Temp-Sensor eingebaut, der auch ausgelesen werden kann.
-der BMA180 ist an den SPI-Bus angeschlossen,
aus dem Grund wird auch der SPI-Treiber
“MK3_2560_SPI.h” benötigt
Funktionen :
1 2 3 4 5 | void EXT_INIT_BMA180(void); // init vom BMA180 void MK3_BMA180_getData(void); // auslesen der Beschleunigungs-Daten void MK3_BMA180_setFilter(BMA180_FILTER filter); // stellt den Filter ein void MK3_BMA180_setRange(BMA180_RANGE range); // stellt die Range ein void MK3_BMA180_enableINT(bool mode); // stellt Interrupt EIN/AUS |
Beispiel :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | //----------------------------------------------------------------------------- // Title : prj_ub003_mk3_bma180 //----------------------------------------------------------------------------- // Funktion : Beschleunigungs-Sensor-Modul (BMA180) // Schaltung : myAVR MK3 + BMA180-Modul //----------------------------------------------------------------------------- // Prozessor : ATMega2560 // Takt : 16 MHz // Sprache : C // Date : 16.12.2010 // Version : 1.1 // Autor : UB //----------------------------------------------------------------------------- #define F_CPU 16000000 #include <avr/io.h> #include <ub_mk3_2560/MK3_2560_LCD.h> #include <UB_EXT_MODULE/EXT_MOD_BMA180.h> //----------------------------------------------------------------------------- // Hinweis : Quick-Jumper Port-C+A muss gesetzt sein // Externes-Modul (mit BMA180) muss angeschlossen sein // (siehe H-File vom BMA180) // Nach der init des BMA180 werden die X,y,Z-Rohdaten // und die Temperatur-Rohdaten auf dem Display angezeigt // // Vorsicht : es sind keine G-Werte oder Grad-Celsius-Werte !! //----------------------------------------------------------------------------- int main (void) { char wert; unsigned int uint; unsigned int pause=0; MK3_INIT_LCD(); // init des LCD EXT_INIT_BMA180(); // BMA180 initialisieren MK3_LCD_CLEAR(); // LCD loeschen MK3_LCD_LIGHT(true); // beleuchtung einschalten MK3_LCD_STRING_AT(0,0,"BMA180-Projekt [V1.1]"); if(EXT_BMA180_OK==true) { MK3_LCD_STRING_AT(0,16,"BMA180 an SPI OK"); // Filter einstellen MK3_BMA180_setFilter(BMA_FILTER_10Hz); while (true) { MK3_LCD_STRING_AT(100,16,"."); // als Pause pause++; if(pause>1000) { pause=0; MK3_BMA180_getData(); // X-Daten anzeigen MK3_LCD_STRING_AT(0,32,"X= "); if(EXT_BMA180.raw.x_negativ==true) MK3_LCD_STRING_AT(12,32,"-"); uint=EXT_BMA180.raw.x_achse; MK3_LCD_UINT_AT(18,32,uint); // Y-Daten anzeigen MK3_LCD_STRING_AT(0,40,"Y= "); if(EXT_BMA180.raw.y_negativ==true) MK3_LCD_STRING_AT(12,40,"-"); uint=EXT_BMA180.raw.y_achse; MK3_LCD_UINT_AT(18,40,uint); // Z-Daten anzeigen MK3_LCD_STRING_AT(0,48,"Z= "); if(EXT_BMA180.raw.z_negativ==true) MK3_LCD_STRING_AT(12,48,"-"); uint=EXT_BMA180.raw.z_achse; MK3_LCD_UINT_AT(18,48,uint); // Temperatur anzeigen MK3_LCD_STRING_AT(0,56,"T= "); if(EXT_BMA180.raw.t_negativ==true) MK3_LCD_STRING_AT(12,56,"-"); uint=EXT_BMA180.raw.temperatur; MK3_LCD_UINT_AT(18,56,uint); } } } else { MK3_LCD_STRING_AT(0,16,"BMA180 nicht gefunden"); while(true) { } } return 0; } |
Hier die Library zum download :