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