Forum: Mikrocontroller und Digitale Elektronik Bascom Long - mir fehlt ein Bit


von Norbert S. (norberts)


Lesenswert?

Moin,

ich will immer noch den BMP085 auslesen.
Auf dem Rechenweg um mit den Kalibrierdaten den echten Druck zu 
bekommen, gibt es Schritte, bei denen Variablen unsigned Long werden 
können (laut Datenblatt). Das gibt es bei Bascom aber nicht, Long ist 
signed.
Bei Single oder Double fürchte ich um die Genauigkeit. Ich möchte 
wirklich jedes Bit nutzen, da ich die volle Auflösung zumindest 
probieren möchte.

Als Workaround habe ich jetzt folgende Idee:
Es soll z.B. B4= AC4 * (X3+32768) / 2^15 berechnet werden.
Das Ergebnis passt ev. nicht in ein signed Long und was anderes habe ich 
nicht.
Im nächsten Schritt geht es dann aber wieder mit signed Long weiter.
Ich nehme eine der Variablen, schiebe sie temporär nach rechts und 
prüfe, ob das Ergebnis in 30 bit passt. Wenn ja ist alles gut und ich 
rechne normal.
Wenn nicht, setze ich ein Flag (mein fehlendes 32. Bit) und 
berücksichtige den Overflow im nächsten Schritt.

Das erscheint mir irgendwie umständlich. /2^15 kann ich ja auch vorher 
machen, oder? A * B  X oder A  X * B ist ja das Gleiche.

In einem weiteren Schritt:
B7 = ((unsigned long)UP - B3) * (50000>>osrs)
Mein osrs ist 3, also wird das auch immer in 31 bit passen?
Wie muß ich ((unsigned long)UP - B3) verstehen? UP und B3 sind signed 
Long. Worauf bezieht sich hier das (unsigned long)?
Soll das Ergebnis UP - B3 in einer unsigned Long unter Null überlaufen 
(können)?

Die ganze Rechnerei ist so kompliziert, daß ich nicht überblicke, was 
passiert wenn ich das irgendwo vereinfache. Deswegen möchte ich mich 
möglichst an den Weg im Datenblatt halten.

Bin gespannt auf alle Hinweise, ausser, daß ich einen vernünftigen 
Compiler nehmen soll ;-)

Gruß,
Norbert

von Cooler (Gast)


Lesenswert?

Soso Long ist signed. Na und?

Verwende doch DWort das ist unsigned und dürfte deinen Bereich andecken.
Oder warum kannst du Dwort nicht verwenden?

von (prx) A. K. (prx)


Lesenswert?

Norbert S. schrieb:
> Bei Single oder Double fürchte ich um die Genauigkeit.

Interessante These, bezogen auf 64-Bit Double mit effektiv 53 
Mantissenbits vs 32-Bit Integer. Weshalb?

von Norbert S. (norberts)


Lesenswert?

Hi,

ich muß echt öfter in die aktuelle Bascom Hilfe schauen. Na klar, Dword 
ist das, was ich brauche - Danke!
Jetzt dämmert es auch, das gibt es wohl schon ein paar Jahre in Bascom.
Damit bin ich alle Sorgen los.

@A.K.:
Ganz ehrlich gesagt weiß ich es nicht. Wieviele Bit hat die Mantisse?
Edit: Jaja, nachträglich 53bit für die Mantisse reineditiert ;-) Danke!
Spielt jetzt hier keine Rolle mehr aber das muß ich mir vielleicht für 
die Zukunft nochmal reinziehen.

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
Noch kein Account? Hier anmelden.