Wie verbindet man I2C-Adress-Pins (A0, A1, A2, ...)?
Wenn du ein I2C-Gerät wie ein EEPROM verwenden möchtest, fragst du dich vielleicht, wie man die Adress-Pins (A0, A1 und A2) verbindet.
Die Grundregel: Keine unverbundenen Adress-Pins
Du musst dir die Grundregel der I2C-Adressierung merken: Lass niemals Adress-Pins unverbunden, außer es ist im Datenblatt ausdrücklich erlaubt!
Während es einige Geräte wie den MCP3472 gibt, die floating Adress-Pins erlauben, funktionieren die meisten Geräte möglicherweise nicht richtig (insbesondere in verrauschten Umgebungen).
Die zweite Regel: Adresskonflikte vermeiden
Du musst vermeiden, zwei Bauteile mit derselben I2C-Adresse auf demselben I2C-Bus zu haben (Adresskollisionen)!
Die I2C-Adresse eines I2C-Geräts ist 7 Bits lang und besteht typischerweise aus einem bauteilspezifischen Präfix (z.B. 0101) plus Adress-Pins (z.B. 0101ABC wobei A, B und C die Werte der Adress-Pins A0, A1 und A2 sind)
Zuerst musst du herausfinden, ob es andere Geräte auf demselben I2C-Bus gibt, d.h. andere ICs, die mit demselben Paar von SDA- und SCL-Pins verbunden sind.
- Wenn es keine anderen Geräte auf demselben I2C-Bus gibt, kannst du alle Pins mit GND verbinden (du kannst auch beliebige davon mit VCC verbinden, falls das besser für dich funktioniert. Im Zweifel verbinde sie mit GND!)
- Wenn es andere Geräte auf demselben I2C-Bus gibt, musst du wie unten beschrieben vorgehen
Wie verbindet man I2C-Adress-Pins mit mehreren Geräten auf demselben I2C-Bus?
Mehrere ICs mit derselben Teilenummer
Wenn du mehrere ICs mit derselben Teilenummer auf dem I2C-Bus hast (Beispiele: Mehrere I2C-ADCs, mehrere I2C-Port-Expander), ist es recht einfach, sie zu verkabeln, um Adresskollisionen zu vermeiden: Verbinde einfach jeden der ICs unterschiedlich. Dies führt zu unterschiedlichen Adressen für jeden einzelnen IC.
Mehrere verschiedene ICs
Wie wir zuvor geschrieben haben, musst du vermeiden, mehrere ICs mit derselben Adresse zu haben.
Höchstwahrscheinlich haben verschiedene ICs von vornherein unterschiedliche Adressen, unabhängig davon, wie du ihre Pins verbindest. Dies ist jedoch nicht garantiert! (wenn du dich glücklich fühlst, nur eine kleine Charge von Prototype-Boards herstellst und es dir nichts ausmacht, herumzulöten, kannst du dein Glück testen und einfach annehmen, dass sie unterschiedlich sind!).
Gehe wie folgt vor:
- Öffne die Datenblätter aller Bauteile, die du in deinem Design verwenden möchtest
- Suche in jedem Datenblatt den Abschnitt, der die Adressdetails auflistet.
Die Adressdetails werden so aussehen:
In fast allen I2C-Geräten sind die ersten Bits fest! Die anderen Bits ($A_2$, $A_1$ und $A_0$ in diesem Beispiel) hängen auf die eine oder andere Weise von den Adress-Pins ab.
Während sie in den meisten Geräten die Adress-Pins direkt darstellen, versuchen einige Geräte, mehr konfigurierbare Adress-Slots als Adress-Pins zu haben und verwenden daher floating Adress-Pins.
Vergleiche diese festen Bits zwischen den Geräten. Wenn du sicher sein kannst, dass keine zwei Geräte dieselbe Adresse haben können, kannst du die Adress-Pins entweder mit GND oder mit VCC verbinden, da es keine Rolle spielt.
In diesem Beispiel kann es offensichtlich keine konfliktierenden Adressen geben, da einige der festen Bits unterschiedlich sind (wie durch die roten Linien angezeigt).
Wenn du nicht sicher sein kannst, dass es keinen Konflikt gibt, musst du die Adress-Pins entsprechend zuweisen, sodass die Bauteile unterschiedliche I2C-Adressen haben.
Unsere Empfehlung ist, die I2C-Adressen tatsächlich aufzuschreiben und zu prüfen, ob sie wirklich unterschiedlich sind. Dieser Ansatz vermeidet schwer zu debuggende Fehler. Du kannst dies mit klassischem Stift & Papier tun oder in einem beliebigen Editor.
Hinweis: Du solltest immer die I2C-Adresse jedes ICs im Schaltplan notieren, besonders wenn du mehrere I2C-Bauteile hast! Wenn du dies nicht tust, führt typischerweise dazu, dass du die Berechnung immer wieder neu machen musst.
Interesse daran, wie wir die Adress-Diagramme in diesem Beitrag erstellt haben? Siehe How to visualize I2C first byte structure in TikZ