LTC2485 I2C-Datenformat

Ich versuche, das I2C-Datenformat einer 24-Bit-ACD (LTC2485) zu verstehen.

Das Datenblatt sagt, dass es 4 Bytes (32 Bit Integer) zurückgibt, aber es ist unklar, wo sich die 24 Bits befinden, die ich suche.

Hier ist, was ich nicht verstehe:

Die Rolle der Bits 31 und 30

Die zwei höchstwertigen Bits (30, 31) werden verwendet, um Überbereichs- oder Unterbereichsbedingungen anzuzeigen. Sie werden auch verwendet, um festzustellen, in welchem ​​"Viertel" des vollen Bereichs sich das Signal befindet.

In der Dokumentation steht: Wenn das Bit 31 gesetzt ist, dann liegt das Signal zwischen 0V und +Vref ansonsten liegt das Signal zwischen -Vref und 0V.

Ich verstehe das so: Wenn das Signal zwischen 0 V und + Vref liegt, liegt der Code zwischen 2 ^ 23 und 2 ^ 24, und wenn das Signal zwischen - Vref und 0 V liegt, liegt der Code zwischen 0 und 2 ^ 23.

Eine ähnliche Überlegung kann für Bit 30 und Vref/2 verwendet werden. So funktioniert die Binärzahl. Beide Bits können verwendet werden, um festzustellen, in welchem ​​"Viertel" des vollen Bereichs sich das Signal befindet.

Aus diesem Grund schätze ich, dass Bit 31 Bit 23 des Signals ist, Bit 30 entspricht Bit 22 und so weiter. Somit sollten die drei ersten Bytes mein 24-Bit-Code sein.

Die Dokumentation sagt jedoch später:

Das zweite Bit ist das höchstwertige Bit (MSB) des Ergebnisses.

Was bedeuten würde, dass das Ergebnis um ein Bit verschoben ist. Aber später:

Die Funktion dieser beiden Bits ist in Tabelle 1 zusammengefasst. Die nächsten 24 Bits enthalten die Umwandlungsergebnisse im binären Zweierkomplementformat. Die verbleibenden sechs Bits sind Sub-LSBs unterhalb des 24-Bit-Pegels.

Was darauf hindeuten würde, dass das Ergebnis um zwei Bits verschoben ist und dass die Bits 31 und 30 redundant sind (siehe meine Erklärung oben).

Und schließlich verwendet der bereitgestellte Beispielcode ... 32 Bits anstelle von 24.

signed int32 x;
// Reading X
x ^= 0x80000000;
voltage = (float) x;
voltage = voltage * 5.0 / 2147483648.0;// Multiply by Vref, divide by 2^31

Dadurch fühle ich mich verloren. Angesichts der 4 Bytes, die ich bekomme (nennen wir sie Bytes 0 bis 3 in der Reihenfolge des Abrufs), wie bekomme ich die vom ADC gemessene Spannung? Welche Rolle spielt "Die verbleibenden sechs Bits sind Sub-LSBs unterhalb der 24-Bit-Ebene"?

Danke, dass du mich gelesen hast. Die Dokumentation des Teils ist hier verfügbar . Erläuterungen zum I2C-Datenformat finden Sie auf Seite 15.

Antworten (3)

LTC2485 ist ein "24-Bit-Pluszeichen"-Konverter. Offiziell gibt es also 25 Bits in der Zweierkomplementdarstellung.

Die 2er-Komplementzahl sind die Bits 30 bis 0. Die niederwertigsten 6 Bits sind nicht Teil der 25 Bits (eine Art Bonus-Müll-Bits, die in den meisten Situationen wahrscheinlich wenig Bedeutung haben).

Bit 31 ist mehr oder weniger ** das Komplement von Bit 30 unter normalen Bedingungen, wenn sich der Eingang innerhalb des normalen Betriebsbereichs befindet** ( 0,5 v R E F < v ICH N < 0,5 v R E F ). Wenn Bit 30/31 gleich sind und die Ergebnisbits wie in Tabelle 3 gezeigt sind (alle Nullen mit beiden High-Werten oder alle 1en mit beiden Low-Werten), wissen Sie, dass der Eingang größer oder kleiner als die Referenzspannung ist (Bereichsüberschreitung).

Oft deutet dies auf einen defekten Sensor oder ein ähnliches Problem hin, sodass Sie angemessen damit umgehen möchten.

** mit Ausnahme einer möglichen Differenz direkt bei Nulleingang.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Ihr vorzeichenbehaftetes 25-Bit-Ergebnis erhalten Sie also, indem Sie die 32-Bit-Zahl um ein Bit nach links verschieben und die niederwertigsten (jetzt) ​​7 Bits ausblenden.

Die niederwertigsten 6 Bits werden so ziemlich alles Rauschen sein, aber wenn Sie Berechnungen mit doppelter Genauigkeit oder 64-Bit-Festkomma mit voreingenommenem Wert durchführen, kostet es wahrscheinlich nichts extra, sie zu verwenden (Sie können das Ergebnis als 31-Bit-Zahl mit Vorzeichen, sobald Sie sie nach links verschieben). ENOB (Equivalent Number of Bits) der meisten ADCs ist nicht besser als etwa 20 Bits, und das unter idealen Bedingungen.

Danke für Ihre Antwort. 24 Bit + Vorzeichen bedeutet also, dass ich 24 Bit zwischen 0 V und + Vref und 24 Bit zwischen -Vref und 0 V habe? Welche Rolle spielt dann das 6-Bit-LSB? Warum Bits 30 bis 0 verwenden? Warum nicht durch 2^24 statt durch 2^31 teilen? Das Zweierkomplement einer 24-Bit-Zahl sollte eine 24-Bit-Zahl sein?
Hoffe, ich habe in meiner Bearbeitung vollständig geantwortet. Es ist eine 25-Bit-Zahl, nicht 24-Bit, in "2er-Komplement- Darstellung ". Wobei +FS = 0b0111111111111111111111111 und -FS = 0b10000000000000000000000000.
Sehr interessant. Das bedeutet, dass Sie die Wahl zwischen Zweierkomplement und Offset-Binär haben. Ich bin mir nicht sicher, wie nützlich das ist, aber die Bits sind da, also haben sie die Funktion aufgenommen

Bit 31 ist ein Vorzeichenbit = hier ist es HIGH, wenn die gemessene Spannung positiv ist (>= 0 V), ansonsten ist es LOW. Es ist nicht Teil des tatsächlichen Wertes. Daher x ^= 0x80000000;löscht es dieses Bit aus dem gelesenen Wert.

Nehmen wir an, Sie schließen eine 1,5-V-Batterie an Ihren Sensoreingang an, wobei + mit dem Vin + -Pin verbunden ist, dieses Bit ist HIGH. Schalten Sie dann die Batterieseiten um: Verbinden Sie den + Pol mit dem Vin- Pin, Bit31 wird LOW sein.

In Bezug auf Bit 30 ist der wichtige Teil, If both bits are LOW, the input voltage is below –FS and the following 24 bits are set to HIGH to indicate an underrange conditiondass Sie nur diese beiden Möglichkeiten prüfen müssen und sich dann um die Bits 29 bis 6 kümmern müssen, die die interessanten 24 Bits Ihres Ergebnisses sind.

Ich muss zugeben, dass der The remaining six bits are Sub LSBs below the 24-bit levelTeil etwas undurchsichtig ist. Wahrscheinlich ist es bedeutungsloses Rauschen?

Danke für Ihre Antwort. Nun, ich bin auch mit dem LSB verloren. Sie scheinen im Codebeispiel 31 Bit zu verwenden … Und wenn Daten vom Chip gelesen werden, enthält das LSB Werte.
Wie @Spehro Pefhany zu bestätigen scheint, ist es Rauschen, ich würde mir keine Sorgen machen. Ich bin nicht fließend in I2C, aber wenn es Bytes verwendet und der Chip insgesamt 26 Bits verwendet (24 Bits für Daten + diese 2 zusätzlichen Bits für Vorzeichen und MSB), mussten sie diese 6 Bits sowieso als Polsterung einfügen.
Viele Δ Σ Konverter haben den Müll unterhalb der LSB-Ausgangsbits bereitgestellt. Sie sind fast bedeutungslos. Vielleicht nützlich für einen Zufallszahlengenerator Seed oder so etwas.

Um Ihre Frage zu beantworten, welche Bits welche sind, denke ich, dass das Datenblatt ziemlich klar ist. Immer wenn Sie einen I 2 C-Lesezyklus durchführen, lesen Sie 32 Datenbits (4 Bytes), und diese Bits sind die Bits, die in Tabelle 3 von links nach rechts aufgelistet sind.

Ob eine Konvertierung bereit ist, erkennen Sie daran, ob das Gerät das Adressbyte bestätigt oder nicht.