Forum: Mikrocontroller und Digitale Elektronik BMP280 am I2C Bus sporadisch falsche Werte


von Sebastian K. (sebastian_k683)


Angehängte Dateien:

Lesenswert?

ich lese an einem Raspberry Pi einen BMP280 regelmäßig aus, der ab und 
zu falsche Messwerte liefert. Immerhin liefert er dann zwar falsche, 
aber immerhin welche. Am I2C Bus hängt auch ein HTU21 der aber permanent 
richtige Werte liefert.

gestartet wird das Skript regelmäßig mit Cronjob, Weiterleitung an 
OpenHab mit MQTT

code habe ich von 
http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-BMP280/index.html 
benutzt, in Python

ab und an springt der Wert des Drucks in einen sehr kleinen Bereich, 
dies habe ich mit provisorisch abgefangen:
1
if pressure < 950:
2
  pressure = 950
3
elif pressure > 1100:
4
  pressure = 1100

jemand eine Idee was das sein kann?

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Sebastian K. schrieb:
> jemand eine Idee was das sein kann?

Rohdaten für die Temperatur falsch oder Rechenfehler

Prüfe mal, ob die Druckwerte ok sind, wenn du mit dem richtigen 
Temperaturwert rechnest.

von Der gemeine Bastler (Gast) (gemeine Bastler) (Gast)


Lesenswert?

Wie schuats mit den Cs zur Pufferung am BMP aus?

von Benjamin S. (recycler)


Lesenswert?

Wenn die Datenübertragung nicht CRC gesichert ist, dann kann es sein 
dass Bits kippen. entweder mehrfach auslesen oder die Kabel besser 
schirmen.

von M. K. (sylaina)


Lesenswert?

Benjamin S. schrieb:
> Wenn die Datenübertragung nicht CRC gesichert ist, dann kann es sein
> dass Bits kippen. entweder mehrfach auslesen oder die Kabel besser
> schirmen.

Japp, würde auch auf kippende Bits tippen.

von Wolfgang (Gast)


Lesenswert?

M. K. schrieb:
> Japp, würde auch auf kippende Bits tippen.

Auch dafür müsste man einen Blick auf die Rohdaten oder besser gleich 
mit Oszi und LA auf die Signale am I2C-Bus werfen.

von M. K. (sylaina)


Lesenswert?

Wolfgang schrieb:
> M. K. schrieb:
>> Japp, würde auch auf kippende Bits tippen.
>
> Auch dafür müsste man einen Blick auf die Rohdaten oder besser gleich
> mit Oszi und LA auf die Signale am I2C-Bus werfen.

Ich würd erstmal fragen: Wie groß sind die Pull-Ups aber auch die 
Signalform allgemein könnte interessant sein um zu sehen, ob die 
Pull-Ups zumindest die passende Größe haben.

von Sebastian K. (sebastian_k683)


Lesenswert?

vielen Dank für den schnellen Feedback! Dann habe ich erstmal zu tun :-)

ich habe einfach die Standard Breakout boards benutzt, die es überall zu 
kaufen gibt, werde mal ein Oszi besorgen, Zeichnung anhand der 
Datenblätter zur Übersicht erstellen.

Eventuell die Pullups von einem Breakoutboard ablöten? Kann man die 
Frequenz vom I2C Bus runter setzen? Ja, ich weiß, ist nicht das beheben 
der Ursache, aber geht vielleicht auch erst einmal

wie kann ich die denn bei I2C per CRC überprüfen?

: Bearbeitet durch User
Beitrag #5595108 wurde von einem Moderator gelöscht.
von M. K. (sylaina)


Lesenswert?

Sebastian K. schrieb:
> Eventuell die Pullups von einem Breakoutboard ablöten? Kann man die
> Frequenz vom I2C Bus runter setzen? Ja, ich weiß, ist nicht das beheben
> der Ursache, aber geht vielleicht auch erst einmal

Mit welcher Frequenz fährst du denn? Zwei sollten mindestens möglich 
sein, 100 kHz für Standard und 400 kHz für Fast. Wenn du mit 400 kHz am 
Start bist kannst du mal versuchen auf 100 kHz runter zu gehen.

von Karl (Gast)


Lesenswert?

Sebastian K. schrieb:
> werde mal ein Oszi besorgen

Gibt doch erstmal die empfangenen Rohdaten vor der Berechnung aus und 
schaue, ob es da Auffälligkeiten gibt.

Andere Möglichkeiten wären:

- Du fragst zu schnell ab und der Sensor antwortet nicht immer: Alle 
Bits auf 1.
- Das Acknowledge wird nicht richtig ausgewertet.
- Bestimmte Werte erzeugen einen Fehler in der Berechnung.

Die Berechnung der Bosch-Sensoren ist nicht trivial. Ich hab schon zu 
viel Mist in diversen Libs gesehen, als dass ich ihnen blind trauen 
würde.

Sebastian K. schrieb:
> ich weiß, ist nicht das beheben
> der Ursache

Bei I2C kann es das schon sein. Da spielt das Timing nunmal eine große 
Rolle. Es kann bereits Fehler geben, wenn SCL und SDA unterschiedliche 
Leitungskapazitäten haben - zum Beispiel wenn an nur einer der Leitungen 
ein Tastkopf hängt.

von Oh Weh (Gast)


Lesenswert?

Karl schrieb:
> Andere Möglichkeiten wären:
> ...........
> ...........

... und Hardware Fehler durch schlechten Aufbau kommen
natürlich auf keinen Fall in Frage!

Und überhaupt .... was die Hardware nicht kann wird mit
Software-Fakes kompensiert.

von Sebastian K. (sebastian_k683)


Lesenswert?

M. K. schrieb:
> Mit welcher Frequenz fährst du denn? Zwei sollten mindestens möglich
> sein, 100 kHz für Standard und 400 kHz für Fast. Wenn du mit 400 kHz am
> Start bist kannst du mal versuchen auf 100 kHz runter zu gehen.

in der /boot/config.txt steht nichts, also 100kHz?? gibt es einen Befehl 
die aktuelle aktive Bautrate auszulesen?

ansonsten mache ich mich an die Arbeit die Hardware anzugucken, kann ein 
bisschen dauern, ist ja Hobby

von M. K. (sylaina)


Lesenswert?

Wie das genau beim Raspberry geht weiß ich leider auch nicht aber ich 
gehe auch davon aus, dass er default-mäßig auf 100 kHz steht.

von Tim S. (tseidel)


Lesenswert?

Hast du den Hinweis im Datenblatt berücksichtigt die Daten in einem 
Rutsch auszulesen, damit du keine Sensorwerte von verschiedenen 
Messvorgängen gemischt bekommst?

Kapitel 4 und 4.1

Würde deinen Fehler genau beschreiben, wenn du im "Normal mode" einfach 
regelmäßig die Werte durch mehrere Byte-Weise Lesevorgänge ausliest. 
Dann trifft manchmal genau der Update-Zeitpunkt zwischen deine 
Lesevorgänge und du erhällst Unsinn.

von M. K. (sylaina)


Lesenswert?

Tim S. schrieb:
> Hast du den Hinweis im Datenblatt berücksichtigt die Daten in einem
> Rutsch auszulesen, damit du keine Sensorwerte von verschiedenen
> Messvorgängen gemischt bekommst?
>
> Kapitel 4 und 4.1
>
> Würde deinen Fehler genau beschreiben, wenn du im "Normal mode" einfach
> regelmäßig die Werte durch mehrere Byte-Weise Lesevorgänge ausliest.
> Dann trifft manchmal genau der Update-Zeitpunkt zwischen deine
> Lesevorgänge und du erhällst Unsinn.

Im Eröffnungspost hat er den Link zum Script gepostet, dass er zum 
Auslesen benutzt. Das liest die Daten (24 Byte, also Sensorwerte incl. 
Kalibrierwerte) in einem Rutsch, daher dürfte genau das nicht sein 
Fehler sein es sei denn er hat das Script verändert und davon noch 
nichts gesagt, das wäre natürlich blöd.

von Tim S. (tseidel)


Lesenswert?

Danke, den hatte ich nicht gesehen.

von Sebastian K. (sebastian_k683)


Angehängte Dateien:

Lesenswert?

laut scope sind es eindeutig 100kHz. gemessen an SCK zu GND

sind das die "kippenden Bits"? Die Spannung geht nur verhältnismäßig 
langsam runter. Wieso geht für das nächste Bit die Spannung dann ins 
negative (Messfehler?)?

Liegt das an der Kapazität der Leitung? Die sind ca. 10cm lang. 
ansonsten sind da noch Cs von VDD zu GND ( 
https://www.electroschematics.com/wp-content/uploads/2017/09/3-BMP280-Module_Schematic-400x212.jpg 
)

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Sebastian K. schrieb:
> Wieso geht für das nächste Bit die Spannung dann ins
> negative (Messfehler?)?

Fehler im Aufbau, Oszi falsch eingestellt/angeschlossen.
Wie sieht dein Schaltplan aus?

Der I2C-Pegel muss sich zwischen 0 und 3.3V abspielen. Woher soll eine 
negative Spannung kommen?

von Sebastian K. (sebastian_k683)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> Fehler im Aufbau, Oszi falsch eingestellt/angeschlossen.
> ...
> Der I2C-Pegel muss sich zwischen 0 und 3.3V abspielen. Woher soll eine
> negative Spannung kommen?

so, jetzt noch mal...

Wolfgang schrieb:
> Wie sieht dein Schaltplan aus?

sind einfach zwei Standardboard zusammengeschlossen, kann eine Skizze 
erstellen bei Bedarf

von M. K. (sylaina)


Lesenswert?

Sebastian K. schrieb:
> sind einfach zwei Standardboard zusammengeschlossen, kann eine Skizze
> erstellen bei Bedarf

Also die Flanken sehen IMO scheiße aus und diese komischen Spikes aus. 
Ne Skizze wäre echt spannend. Auf jeden Fall müssen bei 2 Boards die 
Pull-Ups angepasst werden.

von Timmo H. (masterfx)


Lesenswert?

M. K. schrieb:
> Also die Flanken sehen IMO scheiße aus
Die Flanken sehen für I²C völlig normal aus. Die I²C Signale werden nur 
durch die PullUp Widerstände gegen Vcc gezogen und vom Master/Slave via 
Open-Drain gegen GND. Darum ist die fallende Flanke steiler als die 
steigende weil diese aktiv gegen GND gezogen wird. Darum muss man bei 
höherem I²C Clock auch irgendwann die Pullups verkleinern

von omg (Gast)


Lesenswert?

M. K. schrieb:
> Also die Flanken sehen IMO scheiße aus ...

Hast du dich überhaupt schon mal mit I2C beschäftigt und verstanden, wie 
der Bus funktioniert, damit du dir so ein Urteil erlauben kannst?

von Wolfgang (Gast)


Lesenswert?

Sebastian K. schrieb:
> so, jetzt noch mal...

Das sieht doch viel besser aus ;-)
Woran lag das (nur so interessehalber)?

Jetzt müsstest du mal auf einen Ausreißer triggern und dazu die am 
Raspberry angekommenen Rohdaten zusammen mit dem daraus abgeleiteten 
Anzeigewert anzeigen.

von M. K. (sylaina)


Lesenswert?

Timmo H. schrieb:
> M. K. schrieb:
>> Also die Flanken sehen IMO scheiße aus
> Die Flanken sehen für I²C völlig normal aus. Die I²C Signale werden nur
> durch die PullUp Widerstände gegen Vcc gezogen und vom Master/Slave via
> Open-Drain gegen GND. Darum ist die fallende Flanke steiler als die
> steigende weil diese aktiv gegen GND gezogen wird. Darum muss man bei
> höherem I²C Clock auch irgendwann die Pullups verkleinern

Ich meine da, wo er zwei Module dran hatte, also bei den Bildern von 
12:36 Uhr. Da sieht das Signal auch für i2c scheiße aus. Wenn das so 
verschliffen ist wundert es mich nicht wenn ihm hin und wieder Werte 
durch die Lappen gehen.

von Marc Horby (Gast)


Lesenswert?

Hast du in deinem Code auch Interrupts am laufen?
Wenn ja, schalte den Int bei der Abfrage aus und danach wieder ein!

von Sebastian K. (sebastian_k683)


Lesenswert?

Wolfgang schrieb:
> Das sieht doch viel besser aus ;-)
> Woran lag das (nur so interessehalber)?

Kopplung stand auf AC, Tastkopf auf 1x gestellt, Voreinstellung war noch 
auf 10x gestellt... Klassiker würde ich sagen ;-)

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.