Weisen Sie mehreren Geräten am selben Bus eine I²C-Adresse zu

Ich habe ein paar ADCs auf demselben I²C-Bus, die alle standardmäßig dieselbe Adresse haben. Mein erster Instinkt sagt mir, dass ich einen I²C-Multiplexer wie den TCA9544A verwenden soll, aber dazu müsste ein Byte an den MUX gesendet werden, bevor die Daten vom ADC abgerufen werden, und das möchte ich vermeiden (da ich Daten kontinuierlich so schnell lesen muss so wie ich kann).

Die ADCs unterstützen die benutzerdefinierte Adresszuweisung über I²C, daher muss ich nur sicherstellen, dass ich das Konfigurationsbyte an einen einzigen ADC sende. Ich könnte einen FET in die SDL-Leitung zu jedem ADC einbauen, sodass während der Adresszuweisung nur ein ADC angeschlossen wäre, aber es gibt wahrscheinlich eine viel elegantere Lösung, da es da draußen eine Menge Leute geben muss, die das gleiche Problem haben. Meine Google-Suchbegriffe sind einfach nicht gut genug, um die Antwort zu finden :(

Die ADC-Teilenummer kann hier relevant sein.
Oh, Entschuldigung, es ist der MAX11617 ( maximintegrated.com/en/products/analog/data-converters/… )
Dieser Teil hat keine benutzerdefinierten Slave-Adressen, soweit ich im Datenblatt sehen kann.
@Passant, einverstanden. Und das ist keine Funktion, die ich jemals von einem I2C-Slave-Gerät gehört habe (außer uCs).
Hoppla, tut mir leid. I²C-Multiplexer ist es dann. :)
[Ihre Frage gehört jetzt uns, und wir sind noch nicht fertig, @Clayton.] Ich wollte hinzufügen, dass die I²C-Adresskollision ein ausreichender Grund ist, nach einem anderen äquivalenten A/D-Chip zu suchen, der Adressauswahl-Pins hätte ).
Sie könnten so etwas wie cds.linear.com/docs/en/datasheet/4317fa.pdf verwenden , das transparente Adressänderungen ermöglicht. Es muss keine zusätzliche Transaktion hinzugefügt werden, um den Bus zu wechseln.
Wie verbinde ich mehrere gleiche Geräte mit I2C mit einem Arduino? hat einige gute Informationen und Links. Über das bisher Erwähnte hinaus schlägt das TI-Dokument Troubleshooting I2C Bus Protocol , Abschnitt 3, einen I²C-Puffer als weitere Option vor.
Vielen Dank Jungs! Ich denke, der LTC4317 sieht nach einer hervorragenden Lösung aus, also mein Problem ...

Antworten (1)

Dieses Problem ist in der Tat ziemlich häufig. Hier ist die typische Lösung ...

(All dies setzt voraus, dass Sie Ersatzstifte zur Verfügung haben, die sehr unterschiedlich sein können, was möglicherweise nicht der Fall ist.)

Wenn der Chip über einen CE-Pin (Chip Enable) verfügt, sollten Sie diesen verwenden können, um mehrere identische Geräte auf demselben Bus und derselben Adresse zuzulassen. Leider hat Ihr angegebener Chip diesen Pin nicht :(

Alternativ können Sie die Chips über MCU-Pins mit Strom versorgen, was einen ähnlichen Effekt hat.


Die erste ist die bessere Option, da der Chip nicht unbedingt jedes Mal konfiguriert werden muss und möglicherweise ADC-Erfassungen ausführen könnte, während ein anderer Chip den Bus verwendet.

Andernfalls benötigt der Chip jedes Mal, wenn er aktiviert/gestartet wird, etwas Start- und Erfassungszeit. Dies wird die Bandbreite/Latenz beeinträchtigen, aber das könnte ausgeblendet werden.


Wenn dies nicht auf CE-Weise möglich ist und die Alternative für Sie zu problematisch ist, benötigen Sie höchstwahrscheinlich eine Art Puffer-IC. Sie stellen Einheiten her, die keinen Konfigurationsbefehl erfordern. Siehe Mcmayers Kommentar zum Originalbeitrag.