Luftdruckmessungen mit dem Bosch BMP085 auf ATMEGAx8 in C Wer schon einmal einen Luftdruckmesser mit analogen Sensoren aufgebaut hat, der weiß das einfache Handling der kalibrierten und digital auslesbaren Sensoren zu schätzen. Es gibt es eine sehr gute Dokumentation zum BMP085 und auch zahlreiche Programmbeispiele. Aber in den von mir gesichteten waren die Oversampling Modes nur teilweise implementiert. Daher habe ich - aufbauend auf den Standardvorlagen - den C-Code für die ATMEGA's etwas umgehäkelt. In der "bmp085_a.h" kann eingestellt werden: - Oversampling Mode [0 .. 3] für die Pressure-Werte - optionales Software Oversampling der Pressure-Wert - Einlesen von 16 oder 19-Bit-Pressure-Messwerten (bei OSS > 0) - optionale gleitende Mittelwertbildung der Druckmesswerte Die Ausgabe erfolgt via serieller Schnittstelle. Angezeigt werden zuerst die Raw-Werte des Sensors und anschließend die umgerechneten Temperatur- und Luftdruckwerte (siehe Beispiel "messwerte_1.jpg"). Da in die Berechnung des Luftdruckes auch die Temperatur eingeht - und deren Messwerte natürlich auch rauschen, werden die Temperaturwerte als gleitender Mittelwert aus den letzten 8 Messungen berechnet. Das Rauschen der Pressure-Werte wird beeinflusst durch die Anzahl der Messungen (und dem daraus ermittelten Durchschittswert). Je nach Einstellung des OSS werden bereits vom Chip Mittelwerte über 0 bis 8 Einzelmessungen geliefert. Dadurch reduziert sich der Datenverkehr mit dem Sensor und die Messzeit. Zusätzlich kann per Software gemittelt werden. Die Abbildung "messwerte_1.jpg" zeigt Messwerte, im Abstand von ca. 1 Sekunde gemessen. Die gewählte Programmeinstellung ist: OSS = 3 (hardwareseitig 8 Samples), SOFTWARE_SAMPLING 4 = (softwareseitig 4 Samples -> 4 * 8 = 32 Messungen je Messwert), READ_DATA_BITS = 19 (Messwerte des Druckes bis zu 19 Bit breit einlesen), FLOATING_AVERAGE = FALSE (keine gleitende Mittelwertbildung der Druckwerte). Die umgerechneten Druckwerte weichen um bis zu +- 5 Pa ab, die Temperaturwerte sind während des Messzeitraumes unverändert. Die Wahl kleinerer Werte für OSS und Software-Sampling beschleunigt die Messung, die Reduktion auf 16-Bit Messwerte verkleinert den Rechen/Speicheraufwand (der liegt übrigens in der Größenordnung von 3 Kb). Um die Messwerte zu filtern, kann wie bei der Temperatur ein gleitender Mittelwert über z.B. 4 Messungen eingeführt werden: das Ergebnis zeigt "messreihe_2.jpg". Die Luftdruckwerte differieren hier nur noch um +- 2 Pa, allerdings werden Veränderungen auch mit leichter Verzögerung weitergegeben. Viel Spaß beim Messen Michael S.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.