Moin,
ich möchte den Drucksensor BMP085 auslesen und das Datenblatt ist etwas
knapp bzw. kapier ich ein Detail nicht sicher, u.a. auch weil ich kein C
kann und die Beschreibung basiert teilweise auf C-Pseudocode.
Da die Auswertung schweinekompliziert ist, (11 Calibrier-Words), dürfte
Ausprobieren sehr schwierig werden.
Also, zum Messen des Drucks gibt es 4 Befehle, die jeweils sagen, wie
oft gesamplet werden soll.
Dazu gibt es eine Variable osrs, die 0...3 sein kann, was jeweils 1, 2,
4 und 8 Samples entspricht, die Befehle dazu sind 0x34, 0x74, 0xB4 und
0xF4.
Offensichtlich ist osrs in den oberen Bits 5, 6 und 7 des Lesebefehls.
Zum Lesen steht da:
write 0x34+(osrs<<6)
Wie gesagt, C kann ich nicht aber ich vermute, osrs<<6 bedeutet, osrs
von links um 6 Stellen reinschieben? Also um eine 1 an Bit 2 (0000 0100)
zu schreiben würde es heissen 1<<3, richtig?
Während ich das hier beschreibe, fange ich fast an, es zu kapieren...
Dann liest man das MSB, LSB und das XLSB für die erweiterte Auflösung
und das Ergebnis soll man sich so zusammenbauen:
UP = (MSB<<16 + LSB<<8 + XLSB) >> (8-osrs)
Wenn ich das richtig verstehe, wäre also das Ergebnis bei einem Sample
bzw. osrs=0 z.B. so, "A" sind meine Bits, X werden nach rechts
rausgeschoben:
&B AAAA AAAA AAAA AAAA XXXX XXXX
Ich schiebe 8 Stellen nach rechts und habe mein Ergebnis:
&B AAAA AAAA AAAA AAAA
Bei osrs=3 wäre es:
&B AAAA AAAA AAAA AAAA AAAX XXXX
5 Stellen nach rechts und ich bekomme
&B AAA AAAA AAAA AAAA AAAA
Haut das so hin?
In der Berechnung tauchen dann noch die Ausdrücke (50000>>osrs) und
(blabla)<<osrs auf.
Sehe ich richtig, daß das "Schieben um osrs Stellen bedeutet?
Also X>>2 ist X/4 und X<<3 wäre X*8?
Falls einer sich tatsächlich die Mühe macht ins Datenblatt zu schauen:
Da ist mal die Rede von osrs und mal von oss. Ich gehe davon aus, daß
das ein Fehler ist und damit das Gleiche gemeint ist.
Bin für jeden Tipp dankbar, ausser, daß ich mir ein C-Buch kaufen solle
;-)
Das Ganze wird übrigens eine Navigationshilfe für einen Quadrocopter.
Ich habe ein KK2.0 Board (sowas zu programmieren tue ich mir nicht an
und das funktioniert prima) und klinke mich mit meinem ATMega324
zwischen Empfänger und KK2.0-Board ein.
Ein Heading-Lock mittels Kompass funktioniert schon.
Gruß,
Norbert