Forum: Mikrocontroller und Digitale Elektronik BMP085 mit Bascom I2C will nicht


von Norbert S. (norberts)


Lesenswert?

Moin,

ich versuche einen BMP085 Drucksensor auf einem Breakoutboard 
auszulesen.
I2C funktioniert in Hardware und von der Configuration in Bascomher, ich 
lese mit dem Setup auch einen Kompass aus - funktioniert prima.
Nur der BMP085 will nicht.
Es scheitert schon an der Temperatur.
So sieht der relevante Teil aus:
1
Do
2
   Bmporder = &H2E                                          'Temperature order
3
   Gosub Bmpmeasstart                                       'Start measurement
4
   Waitms 5                                                 '4,5ms conversion time
5
   Bmpbytetoreadad = &HF6                                   'Start address for data, MSB
6
   Gosub Bmpbyteget                                         'Get a byte
7
   Print "MSB  " ; Bmpbyte                                  'The received byte
8
   Bmput = Bmpbyte
9
   Shift Bmput , Left , 8                                   'its the MSB and the data is 16 bit
10
   Bmpbytetoreadad = &HF7                                   'next address for the LSB
11
   Gosub Bmpbyteget
12
   Print "LSB  " ; Bmpbyte
13
   Bmput = Bmput + Bmpbyte                                  'ad it to the raw data
14
   Shift Bmput , Left , 16                                  'as It Is Signed , Shift To The Left Of The Long Bmput
15
   Shift Bmput , Right , 16 , Signed                        'Shift back to 16 bit but keep the sign
16
   Print "Bmput" ; Bmput
17
   Gosub Tempcalc
18
   Print "Temp   " ; Bmp_t
19
Loop
20
21
Bmpmeasstart:
22
   I2cstart
23
   I2cwbyte &HEE
24
   I2cwbyte &HF4
25
   I2cwbyte Bmporder                                        'Var
26
   I2cstop
27
Return
28
29
Bmpbyteget:                                                
30
   I2cstart
31
   I2cwbyte &HEE
32
   I2cwbyte Bmpbytetoreadad                                 'Var
33
   I2cstart
34
   I2cwbyte &HEF
35
   I2crbyte Bmpbyte , Nack
36
   I2cstop
37
Return

Das LSB ist immer 0, das MSB ändert sich nicht (ok, kann angehen).
Der Berechnung im Datenblatt kann man entnehmen, daß das LSB der 
relevante Teil ist denn zuerst wird mal von dem Rohwert Bmput ein 
beträchtlicher Offset abgezogen.
Sieht hier einer nen Fehler?
Ich verstehe nicht, was da noch falsch sein soll.

Ich hatte einen anderen Ansatz, bei dem auch nur Schwachsinn rauskam.
Für den unkompensierten Druck bekam ich eine Zahl die ich zwar nicht 
beurteilen kann aber die sich um kein Bit änderte.
Dabei soll der Sensor doch nicht unerheblich rauschen.

Ich habe auch eine Software getestet, die ich im Netz gefunden habe.
Nur abgeändert auf den Mega324 den ich nutze, Frequenz usw aber auch nur 
Müll gekommen. Da hat der Autor allerdings es mit den Variablen nicht so 
genau genommen. Wo es laut Datenblatt eine unsigned Long werden kann, 
hat er einfach ne Long genommen, die in Bascom immer signed ist. Also 
habe ich darauf nicht so viel gegeben, daß das auch nicht klappte. Je 
nach Calibration Data kann das bei ihm ja gutgegangen sein.

Ich denke fast der Sensor selbst ist im Eimer.

Ich schaue jetzt mal, was die gefundene SW an MSB und LSB roh ausspuckt.

Oder hat sonst noch einer ne Idee?

Gruß,
Norbert

von Norbert S. (norberts)


Lesenswert?

Hi,

den Beispielcode habe ich von hier:
http://www.trabi-schorsch.de/?p=201
MSB und LSB werden damit immer zu 0 gelesen.
Demnach befinde ich mich auf 30km Höhe, müsste bei 2,36Pa gleich 
ersticken wenn ich nicht demnächst bei 0,05°C erfriere.
In meiner Version ist das MSB immer 231dec.
Was ist da bloß los?

Gruß,
Norbert

von Billy Boy (Gast)


Lesenswert?

Dein Sensor muss kaputt sein, denn der ahnungslose Bastler, von dessen 
Seite du den Bascom-Code hast, hats mit seinem Sensor hingekriegt (was 
der so drauf hat kann man aus dem Zitat: "Zu beachten ist noch, dass der 
ausgebene Druck der absolute Druck ist. Er müsste noch auf relativ Druck 
umgerechnet werden.  Dazu gibt es bei Wikipedia ganz interessante 
Artikel mit ganz wilden Formeln." erahnen.)

von Norbert S. (norberts)


Lesenswert?

Hi,

ich fass es nicht. Heute ist ein weiterer Sensor gekommen.
Geht mit der Beispielsoftware und mit meiner - naja, die Rechnung haut 
noch nicht ganz hin aber er reagiert sinnvoll auf Temperaturänderungen.
Zwei Abende verballert für den Mist. Zu 99% liegt es am eigenen 
Gefrickel wenn was nicht klappt aber hier war es ainfach ein kaputtes 
Sensormodul...

Gruß,
Norbert

von Norbert S. (norberts)


Lesenswert?

Hi,

nur der Vollständigkeit halber, falls Jemand das hier sucht und mit dem 
Ding kämpft:
Temperatur funktioniert jetzt. Ich hatte noch einen kleinen Fehler drin, 
da ich dachte, die Rohdaten seien ja Long, also müsste das Byte 7 des 
MSB ja Vorzeichen sein.
Ist es natürlich nicht...
Die eine Fallunterscheidung bei der Druckberechnung dient dazu, die max. 
Auflösung zu bekommen ohne daß B7 dabei überläuft.
Mal sehen wie das jetzt mit dem Druck klappt...

Gruß,
Norbert

von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Lesenswert?

Norbert S. schrieb:
> Hi,
>
> den Beispielcode habe ich von hier:
> http://www.trabi-schorsch.de/?p=201

die machen jetzt wohl in Klamotten...

von Alex D. (allu)


Lesenswert?

Norbert S. schrieb:
> Nur der BMP085 will nicht.

Beitrag "Re: Luftdrucksensor mit I2C"

Das Programm ist in Bascom. Vielleicht kannst Du was davon verwenden. 
Nur "Set Test" und "Reset Test" müssen vor dem compilieren noch gelöscht 
werden.

Gruß   Alex

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.