BMP280 am I2C Bus sporadisch falsche Werte

OP #5594741
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?
Angehängte Dateien:
#5594928
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.
OP #5595088
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?
Beitrag #5595108 wurde von einem Moderator gelöscht.
#5595156
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.
Gast #5595323
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.
OP #5595837
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
#5596166
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.
#5596200
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.
OP #5601778
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 
)
Angehängte Dateien:
OP #5601827
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
Angehängte Dateien:
#5601917
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
#5602156
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren