Guten Tag ich habe den Druckluftsensor BMP180 in Betrieb genommen. Das
Programm läuft einwandfrei bis auf einen groben Fehler. Bei der Zeile
mit unsigned long B7 errechnet der uC B7 in einer höhe von ca 1650000000
und in den nächsten schritten wird p also der Druck berechnet. Am
Schluss ist p ca 25500. Dieser Wert ist ca. 4 mal zu klein. Bis an die
Stelle wo B4 ausgerechnet wird habe ich alles nachgerechnet und
überprüft auch mit dem Display. Ich vermute ev das es etwas mit den
Datentypen auf sich hat. Vielleicht sieht jemand das Problem oder meinen
Fehler.
Der Code ist im Anhang:
Der Code Ablauf steht das meiste schon im Datenblatt. Der fertige Code
ist sehr unübersichtlich und für meinen gebrauch ungeeignet. Ausserdem
ist dies so zusagen dieser Ablauf.
Der Display Treiber spielt keine Rolle, den ich teile am Schluss noch
durch 100 so das es auf dem Display einen maximalen wert einer 4
Stelligen Zahl ergib.
Stephan G. schrieb:> Simon X. schrieb:>> Ja diese habe ich mit dem Datenblatt überprüft.>> welcher prozessor?> welche länge hat short bei dir?
Hab noch einmal überprüft short ist bei dem 16Bit.
Diese Treiber sind alle unbrauchbar. Ich schreibe diesen Code um in 150
Zeilen und nicht 1500 mit unnötigen Berechnungen. Wer einen fertigen
Treiber benützt hat es einfach nicht begriffen. Vor allem wen es sich um
eine Grundstruktur handelt von einem Sensor!
Simon X. schrieb:> Diese Treiber sind alle unbrauchbar. Ich schreibe diesen Code um in 150> Zeilen und nicht 1500 mit unnötigen Berechnungen. Wer einen fertigen> Treiber benützt hat es einfach nicht begriffen. Vor allem wen es sich um> eine Grundstruktur handelt von einem Sensor!
Mach mal, aber lass uns dann das Ergebnis sehen.
Habe das Problem gefunden. Es lag an einem Datentypen bei der
Verrechnung nach dem Auslesen aus dem I2C Bus von UP.
Hier ist der Funktionale Treiber für den BMP180. Die Stelle ist markiert
wo das Problem lag. Man sieht also der Treiber mit über 1000 Zeilen ist
überflüssig geht auch ohne und selber schreiben. Weiss man danach auch
was man gemacht hat!
Hier werden 24 Bit gelesen!
Aber dieser Code liefert nur ein 16Bit Ergebnis, die Wertigkeiten
stimmen nicht:
a2 | a1 | a0
MSB | LSB | XLSB
Erg = a2*8² + a1*8¹ + a0*8⁰
Ich habe gerade auch eine BMP180 Implementierung anhand des Datenblattes
gemacht und könnte von meinen Erfahrungen berichten.
Ja das Stimmt ich habe ein wenig ausprobiert. Da XLSB immer einen 0
zurück bekommt habe ich dies vernachlässigt. Aber das Stimmt wen man OSS
auch hinzufügt dan muss man dies anders lösen werde ich noch nachtragen.
Aber so funktioniert dies auch mal. Stehe immer ein wenig auf Kriegsfuss
mit Datentypen.
Ja dies hatte ich auch mal am Anfang. Dies ist aber ein Problem, da mein
Compiler das nicht verarbeiten will auch mit #pragma optimize 0. Er
Speicherte mir den Wert UP nie und schrieb das Register mit FFFF...
voll. Somit musste ich auf eine andere Lösung zurückgreifen.