sicklinger.com

  • Schrift vergrößern
  • Standard-Schriftgröße
  • Schriftgröße verkleinern
  • English (United States)
  • Deutsch (DE-CH-AT)
Start ATMEL AVR ATMEGA BMP085 library in C

ATMEL AVR ATMEGA BMP085 library in C

E-Mail Drucken PDF
( 11 Votes )

Hallo,

anbei gibt es eine C-Bibliothek für den Bosch BMP085 Drucksensor für Atmel AVR Atmega Familie.

Die Bibliothek wurde mit dem AVR Studio (4.18 SP2) und mit dem WinAVR-20100110 Compiler erzeugt (Projektdatei enthalten).

Die Treiberroutinen unterstützen folgende Features:

  1. Oversampling settings 0,1,2 --> max. Genauigkeit (RMS noise typ. 4 Pa) (RMS noise typ. 0.3 m)
  2. Fehlercoderückgabe für jede TWI (I2C) Aktion.
  3. Temperaturausgabe
  4. Druckausgabe
  5. Höhenberechnung mittels barometrischer Höhenformel (siehe http://en.wikipedia.org/wiki/Atmospheric_pressure)
  6. UART und TWI Bibliothek werden mitgeliefert

Beispiel:

Dieses kleine Beispiel soll zeigen wie einfach die Bibliothek benutzt werden kann.

 

#include "atmega_bmp085_lib.h"
#include "uart.h"
//#########################################
//#########################################
//#########################################
// S T A R T  M A I N  P R O G R A M 
int main(void)
{    

//-----------------------------------------
// Allocate memory
//-----------------------------------------    
 int32_t temperature = 0;
 int32_t pressure = 0;
 int16_t BMP085_calibration_int16_t[8];
 int16_t BMP085_calibration_uint16_t[3];
 uint8_t error_code=0;
//-----------------------------------------
// Initialize Stuff
//-----------------------------------------
 uart_init();                //Initialize UART0
 _delay_ms(11);
 i2cSetBitrate(1000);        //Initialize TWI 1000kHz    
 BMP085_Calibration(BMP085_calibration_int16_t, BMP085_calibration_uint16_t,&error_code);////Initialize BMP085
//-----------------------------------------
// Do forever
//-----------------------------------------
 
 printf("error code global init: %d \n",error_code);
 while(1)
 {
 
 printf("------------------------\n");
 printf("------------------------\n");
 printf("------------------------\n");
 bmp085Convert(BMP085_calibration_int16_t, BMP085_calibration_uint16_t,&temperature, &pressure,&error_code); //Read and convert temp. and pressure
 printf("Temperature: %ld (in 0.1 deg C)\n", temperature);
 printf("Pressure: %ld Pa\n\n", pressure);    
 printf("Altitude: %ld dm\n", bmp085CalcAltitude(pressure));        
 printf("error code global: %d \n",error_code);
 printf("------------------------\n");
 printf("------------------------\n");
 _delay_ms(10);        
 }


 return 0;
}
// E N D  M A I N  P R O G R A M 
//#########################################
//#########################################

 

Die Bibliothek steht unter GNU LGPL v2.1 und kann hier heruntergeladen werden.

Zuletzt aktualisiert am Freitag, den 07. Mai 2010 um 00:05 Uhr  

Kommentare  

 
0 #8 2011-09-06 17:01
ich denke schon dass es dadran gelegen ist, da das hex file 20kb groß war, also ein bischen mehr als 4kb...
hab mir einen atmega 32 besorgt, und nach einigen problemen immerhin jetzt schon einmal die temperatur bekommen, allerdings kommt mir der werd für den druck etwas seltsam for... : 30670
hast du eine ahnung was ich falsch gemacht haben könnte, oder is das irgenteine komische eineheit?
Gruß
Moritz
Zitieren
 
 
0 #7 Stefan Sicklinger 2011-08-01 09:09
Zitat:
Hallo Stefan
ich benutze einen bmp 085 und bin gerade am rumprobieren wie ich die daten aus ihm rausbekomm, deine Bibliothek hat mir dabei schon sehr gehofen, allerdings hab ich etwas probleme sie auf meinen atmega48 umzuschreiben. jetzt wo ich dachte ich häte es kommt beim programmieren des controllers die fehlermeldung: "The Contents of the HEX file does not fit in the selected device" soll dass heißen, dass der Flasch speicher des atmega 48 zu klein für das programm is, oder habe ich beim umschreiben einen fehler gemacht? ich bitte dringend um hilfe vielen dank
Moritz



Hallo Moritz,

es könnte schon sein, dass die 4KB Flash Speicher etwas zu wenig sind. Ich habe die lib leider noch nicht optimiert, daher kann ich mir das schon vorstellen.

Viele Grüße,

Stefan
Zitieren
 
 
0 #6 2011-06-13 15:14
Hallo Stefan
ich benutze einen bmp 085 und bin gerade am rumprobieren wie ich die daten aus ihm rausbekomm, deine Bibliothek hat mir dabei schon sehr gehofen, allerdings hab ich etwas probleme sie auf meinen atmega48 umzuschreiben. jetzt wo ich dachte ich häte es kommt beim programmieren des controllers die fehlermeldung: "The Contents of the HEX file does not fit in the selected device" soll dass heißen, dass der Flasch speicher des atmega 48 zu klein für das programm is, oder habe ich beim umschreiben einen fehler gemacht? ich bitte dringend um hilfe vielen dank
Moritz
Zitieren
 
 
0 #5 Stefan Sicklinger 2010-11-07 19:28
zitiere Alex:
Servus,
danke schonmal für den bereitgestellte n Code. Ich beschäftige mich zur Zeit auch mit dem BMP085 und habe deinen Code etwas durchgeschaut.
Nun würde ich gern wissen, warum du beim auslesen der Temperatur und Druck nur das Register mit MSB (0xF6) und nicht das LSB(0xF7) noch ausliest. Auch beim kalibrieren verwendest du nur die MSB´s z.Bsp bei AC1 nimmst du auch nur 0xAA und nicht noch 0xAB.
So wie ich das Datenblatt verstehe müssten die LSB auch noch ausgelesen werden.
Oder hatte es einen bestimmten Grund warum du es so gemacht hast?

Danke
Gruß Alex

Hallo Alex,

Die Prozedur bmp085ReadShort liest immer MSB und LSB gleichzeitig.
Das heißt

bmp085ReadShort (0xAA,errorcode );//ac1

gibt AC1 = 0xAA 0xAB als 16bit integer zurück.
Ich hoffe ich konnte deine Frage beantworten.

Grüße,

Stefan
Zitieren
 
 
0 #4 2010-11-07 13:47
Servus,
danke schonmal für den bereitgestellte n Code. Ich beschäftige mich zur Zeit auch mit dem BMP085 und habe deinen Code etwas durchgeschaut.
Nun würde ich gern wissen, warum du beim auslesen der Temperatur und Druck nur das Register mit MSB (0xF6) und nicht das LSB(0xF7) noch ausliest. Auch beim kalibrieren verwendest du nur die MSB´s z.Bsp bei AC1 nimmst du auch nur 0xAA und nicht noch 0xAB.
So wie ich das Datenblatt verstehe müssten die LSB auch noch ausgelesen werden.
Oder hatte es einen bestimmten Grund warum du es so gemacht hast?

Danke
Gruß Alex
Zitieren
 
 
0 #3 2010-10-20 05:04
zitiere Klaus Gregorski:
Hallo Stefan,
Wo hast Du deine Sensoren her?

Hallo Klaus,
ich habe die Sensoren als Muster bekommen für ein Projekt.
Leider habe ich auch keinen Weg gefunden sie zu einem vernüpftigen Preis zu kaufen.
Gruß,
Stefan
Zitieren
 
 
0 #2 2010-06-09 16:22
Very Great job! J looked this:)
thnks ;)
Zitieren
 
 
0 #1 2010-05-30 17:35
Hallo Stefan,

ich werde Deinen Code testen sobald ich einen Sensor ergattern konnte. Wo hast Du deine Sensoren her?
Ansonsten Dank für die Mühe.

Gruß
Klaus
Zitieren
 

Kommentar schreiben


Sicherheitscode
Aktualisieren


Schlagzeilen


Hallo,
habe soeben die überarbeitete Fassung der Latex Installationsanleitung unter Windows online gestellt. Es wird jetzt auch die Inkscapeversion 0.48 in Verbindung mit dem textext-Plugin unterstützt.
http://sicklinger.com/de/latex-installationsanleitung.html

 

Hallo,
seit heute ist die USA 2010 Bildergalerie online. Hier geht es lang
P.S. Freu mich über Kommentare