Moin,
falls es jemanden interessiert:
Seit einiger Zeit befasse ich mich mit Drucksensoren der Firma CFSensors. Da es derzeit bei Digikey wegen "Global Partner"-Beschränkungen umständlich und teuer ist, solche Komponenten zu beziehen, habe ich mir ein paar Exemplare mit unterschiedlichen Messbereichen von 5 bis 100 kPa über AliExpress besorgt.
Die Sensoren funktionieren grundsätzlich, allerdings gab es einige Überraschungen:
Heute wurde für die Reihe XGZP6857D ein neues Datenblatt (V2.9) veröffentlicht, das grundlegende Änderungen in der Belegung der internen Datenregister enthält.
Viele Arduino-Bibliotheken auf GitHub basieren noch auf der vorherigen Registernummerierung. Wer ab heute neue Sensoren über offizielle Kanäle bezieht, wird feststellen, dass bestehende Treiber nicht mehr funktionieren und angepasst werden müssen. Ich selbst habe mir ohnehin eigene Sensor-Routinen geschrieben.
Das Hersteller Beispiel Programm enthält m.M.n. Fehler. Die Behandlung des ACK/NAK ist falsch, weil es nur den Zustand des ACK/NAK checken will. Der Host setzt üblicherweise beim Read nämlich den ACK oder NAK Zustand am Datenbus. Testen alleine tut nichts Nützliches und verhindert dem Slave mitzuteilen, daß der letzte READ mit dem NAK die Datenübergabe beenden soll. Ich habe aber das Herstellerprogramm nicht ausprobiert und kann nicht beurteilen ob es trotzdem funktioniert.
Zusätzlich stimmen die Angaben zum I2C-Leseprotokoll im Datenblatt nicht vollständig. Beim Einzellesen der Ausgaberegister muss der Host ein NAK nach dem Lesen senden, was im Datenblatt nicht erwähnt wird. Wenn man nur mit ACK liest, kommt es zu Fehlern in der Synchronisierung im I2C-Teil und gibt bei nachfolgenden Lesen einige mal nur Nullwerte aus. Abhilfe: nach jedem Lesen vor dem Stop ein NAK senden. Das Datenblattbeispielprogramm nimmt augenscheinlich darsuf keine Rücksicht.
Da das Einzellesen der fünf Datenregister auf diese Weise zeitaufwendig ist, habe ich getestet, ob man alle fünf Register gleichzeitig auslesen kann. Obwohl das Datenblatt keine Reihenlesung vorsieht, funktionierte es problemlos nach dem üblichen Schema: die ersten vier Lesevorgänge mit ACK, der fünfte mit NAK. Ich verwende übrigens nicht die Wire Bibliothek von Arduino, sondern arbeite mit der kompakteren ASM SoftI2CMaster Bibliothek.
Die Arduino Sensor Bibliothek verwendet die Multy-Byte Read Funktion. Ich habe nicht untersucht inwieweit dort auf ACK/NAK Rücksicht genommen wurde. Es ist sicher, daß es sich so verhält, weil diese Bibliothek zuverlässig funktioniert.
Alle verfügbaren Bibliotheken beziehen sich auf Versionen vor 2.9. Neu bezogene Devices sollten unbedingt überprüft und ggf. angepasst werden – besonders bei Bestellungen über AliExpress oder eBay. Zu berücksichtigen ist, daß das Datenaustausch Protokoll auch mit ähnlichen Parallelversionen ihrer Sensoren funktioniert.
Ich stehe derzeit mit dem technischen Kundensupport von CFSensors in Kontakt und werde neue Informationen hier teilen. Der FEI erklärte mir, dass keine neue Typenbezeichnung vorgesehen sei, wodurch die Marktunsicherheit leider bestehen bleibt – persönlich finde ich das suboptimal.
Unklar bleibt zudem die Herstellungsgeschichte der im Markt existierenden Devices. Möglicherweise stammen einige Sensoren aus fragwürdigen Quellen.
Interessant ist: Ein gemessener 100 kPa-Sensor zeigt ein Grundrauschen von ±0,1 %, was für einen 24‑Bit-ADC relativ hoch ist. Ich habe diesbezüglich ebenfalls angefragt und vorbeugend für eine saubere Versorgungsspannung mit entsprechender Filterung gesorgt. Nachtrag: im neuen Datenblatt gibt es Einstellungen zum Mitteln. Das kann ich allerdings erst nach Erhalt von Exemplaren der neuesten Generation prüfen.
Ich hoffe, diese Informationen sind für den einen oder anderen nützlich. Übrigens, ich gebe hier nur meine praktischen Erfahrungen weiter und möchte keinen Anspruch auf Korrektheit erheben.
Gruß, Gerhard