BMP085 mit Bascom I2C will nicht

OP #3269177
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
Gast #3269933
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.)
OP #3270423
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
OP #3271772
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren