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
Norbert S. schrieb: > Also um eine 1 an Bit 2 (0000 0100) zu schreiben würde es heissen 1<<3, > richtig? Nein. Um aus 0001 den Wert 0100 zu gewinnen, muss man zweimal schieben, nicht dreimal.
Norbert S. schrieb: > Also um eine 1 an Bit 2 (0000 0100) > zu schreiben würde es heissen 1<<3, richtig? Nope. 1<<3 ist 8 (0x10 oder 0b00001000). Es ist "eins, dreimal nach links geschoben". Installier Dir auf Deinem PC mal einen C-Compiler und mach ein paar eigene Experimente - oder kauf Dir ein C-Buch. Siehe auch Bitmanipulation. Vorsicht: int auf dem PC ist 32 Bit, auf AVR nur 16 Bit.
Hi, ok, so wie ihr es schreibt hätte ich es auch gedacht, macht ja Sinn. Das passt aber nicht mit dem Datenblatt: 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) Das müsste doch dann write 0x34+(osrs<<5) sein, oder? osrs ist meinetwegen 2 oder 0000 0010 und soll an 0100 0000 verschoben werden. Das müsste doch <<5 sein? Waaaaa - vedammt! Ich hab den Denkfehler gefunden. osrs ist nur 2 bit groß, verschiebt das Ergebnis aber um maximal 3 bit. Ich lass den Quatsch oben jetzt stehen, damit Andere das vielleicht später nachvollziehen können. Gruß, Norbert
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.