Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

Antwort: smbus2 write_i2c_block_data: Was ist das "cmd"-Byte für einen ADS1115?

Von English mit KI übersetzt ·

„cmd“ ist SMBus-Bezeichnung. Bei einem SMBus-Blockschreibzugriff heißt das erste Byte nach der Adresse Command-Byte, und bei registerbasierten Chips wie dem ADS1115 ist dieses Byte der Registerzeiger. Ihre erste Zeile setzt den Zeiger also auf das Config-Register (0x01) und schreibt darin 0xC3 und dann 0x83. Auf dem Bus: Start, 0x90, 0x01, 0xC3, 0x83, Stopp.0xC383 bedeutet: eine Einzelwandlung starten, AIN0 gegen GND, Messbereich ±4,096 V, Einzelschussmodus, 128 Samples/s. Das Lesen setzt den Zeiger auf 0x00 (Conversion-Register) und liest zwei Bytes.Ihr Fehler liegt in der Byte-Reihenfolge. Der ADS1115 sendet zuerst das höchstwertige Byte, und das Ergebnis ist vorzeichenbehaftet:

data = bus.read_i2c_block_data(0x48, 0x00, 2)
raw = (data[0] << 8) | data[1]
if raw > 0x7FFF:
    raw -= 0x10000
volts = raw * 4.096 / 32768

Bei vertauschten Bytes wird eine kleine Änderung im niederwertigen Byte zu einem riesigen Sprung, und genau das ist Ihr 900 gegenüber 52.000. Für AIN1 ändern Sie die MUX-Bits: [0xD3, 0x83]. Und 10 ms reichen bei 128 SPS aus (eine Wandlung dauert etwa 8 ms), die Wartezeit ist also in Ordnung.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 7