I²C Adressen - Ich versteh die Datenblätter nicht

Moin,

Ich plane an einem I²C Bus drei Bausteine zu verbauen.
Gerne würde ich auch die korrekte eindeutige I²C Adressen planen.
Allerdings verstehe ich die Datenblätter nicht.

Hier die drei Datenblätter:

Wie kann ich die I²C Adressen einstellen (durch Beschalten der AD0, AD1, AD2 Anschlüsse mit VIN (high) oder GND (low) ist mir schon klar).
Aber welche Beschaltung erzeugt welche Adresse? Das ist mir nicht klar?!

Vielleich kann mir da jemand weiterhelfen?

Danke und liebe Grüße,
Chris

Mehrere der Bits sind fest vorgegeben. Das must du mit den einstellbaren Pins verrechnen

z.B. Seite 15 im ersten Datenblatt. Das R/W wird von der Wire Klasse automatisch behandelt. Das kann etwas verwirrend sein

Du kannst doch die 1/2/3 Bit in allen Kombinationen bilden.
Damit bekommst Du die Zahlen:
1Bit: 0...1
2Bit: 0...3
3Bit: 0...7

Diese werden auf die Basisadresse aufaddiert.

Die Basisadresse kannst Du am Besten mit einem I2C-Scanner ermitteln, da hast Du auch gleich eine grundlegende Funktionsprüfung.

Ansonsten wird die Adresse in den Datenblättern in der Regel un 1 nach links verschoben (also mal 2 genommen), damit das R/W-Bit unten rein passt.

Gruß Tommy

Hi

DS2482-100, Seite 15
Rechts unten siehst Du, wie die Adresse aufgebaut ist.
Je nachdem, ob die Adresse in 7 oder 8 Bit von der Lib erwünscht ist, erbibt Sich dort:
0x18, 0x19, 0x1A (7bit)
0x30,0x32,0x34 (8bit)
Jeweils 4 Bit ergeben eine Ziffer.

DS3231, Seite 16, Figur 3
0x68 (7bit)
0xD0 (8bit)

DS2482-800, Seite 16
0x18,0x19,0x1A (7bit)
0x30,0x32,0x34 (8bit)

Bei 8bitiger Angabe ist immer nur jede 2.te ID 'die ID' : +1=lesen, 0=schreiben

MfG

Bisher habe ich recherchiert, dass die Adresse der DS3231 wohl nicht änderbar ist.
Diese ist 0x68 von der RTC.
Und 0x57 ist der Speicherchip auf der RTC.

An dem DS2482-100 habe ich AD0 und AD1 auf GND gelegt.
Welche Adresse ergibt sich dann daraus?
Wie rechnet man das aus?

Lieben Gruß,
Chris

Das steht doch im Datenblatt. A2 bis A6 sind fest. Also hast du 001 10xx

001 10 00 = 0x18
001 10 01 = 0x19
001 10 10 = 0x1A
001 10 11 = 0x1B

Siehe auch hier:
https://www.arduino.cc/en/Reference/Wire
Wire arbeitet mit 7-Bit Adressen

Okay, also wenn ich an dem DS2482-100 AD0 und AD1 auf GND lege, dann ergibt sich als Adresse 0x18, richtig?

Und wenn ich an dem DS2482-800 AD0, AD1 und AD2 auf GND lege, dann ergibt sich ebenfalls als Adresse 0x18, richtig?

Dann wäre es sinnvoll an dem DS2482-800 AD1, AD2 auf GND und AD0 auf VIN zu legen, damit sich als Adresse 0x19 ergibt, richtig?

Ohne da lange herumzurechnen kannst Du ein Bauteil am I2C Bus anschließen und der I2C scanner Sketch laufen lassen.
Grüße Uwe

Moin Uwe,

ja das ist mir klar. Hätte ich auch so gemacht.
In diesem Fall geht aber leider nicht try & error, weil ich die Teile nicht da habe und den Schaltplan plane.
Geht also nur theoretisch momentan.

Liege ich denn richtig in meinm #6 ?

Lieben Gruß,
Chris

uwefed:
Ohne da lange herumzurechnen kannst Du ein Bauteil am I2C Bus anschließen und der I2C scanner Sketch laufen lassen.
Grüße Uwe

Was bei Problemen eh der erste Schritt ist - also warum nicht von vorne herein die I²C-ID damit herausfinden und im Produktiv-Sketch verwenden?
Viel mehr, als den Scanner bei Problemen erneut nutzen zu müssen, kann eh nicht passieren.
So ist zumindest sicher gestellt, daß Da auch Jemand antwortet - weil Alle, Die NICHT angesprochen werden, bleiben ruhig - und wenn die ID nicht passt, passt's halt nicht.

MfG

PS: Zu 'richtig in #8' - genau DAS steht im Datenblatt, welche ID bei welchem Pegel zusammen kommt - und ob die Bits unbeschaltet HIGH oder LOW sind, ebenso.
Also auch, in welche Richtung das Ziehen überhaupt Sinn macht, weil die ICs die Pins selber in eine Richtung pullen, damit die Adresse eindeutig und definiert ist.

postmaster-ino:
PS: Zu 'richtig in #8' - genau DAS steht im Datenblatt, welche ID bei welchem Pegel zusammen kommt - und ob die Bits unbeschaltet HIGH oder LOW sind, ebenso.
Also auch, in welche Richtung das Ziehen überhaupt Sinn macht, weil die ICs die Pins selber in eine Richtung pullen, damit die Adresse eindeutig und definiert ist.

Das ist ein ganz gewichtiger Punkt!

I2C, an sich, ist sehr gut genormt(besser: spezifiziert).
Die Adressvergabe mit A0 bis ca A5, nicht.
Da kocht jeder Hersteller sein Süppchen.
Auch durchaus mit mehreren Rezepten.

Verallgemeinerungen(falsche Annahmen) sind hier die Mutter des Versagens.

OK, einen kann ich ja mal raus hauen!

Bei manchen I2C Komponenten kann man die Adresse einstellen.
Genauer kann ich es nicht.
Bei manchen über Adresspins, manche über Software, manche muss man (wunsch) konfiguriert erwerben, manche halten ihre Konfiguration über den Stromverlust hinweg, manche nicht, hats Pullup oder -down für die Ax Pins, oder nix davon.... und viele weitere Varianten.

.... genau DAS steht im Datenblatt, .....

Vielleicht bin ich blind oder blöd oder hab einfach nur total keine Ahnung davon?!
Im Datenblatt vom DS2482-800 habe ich 23 Stellen mit "low" und 23 Stellen mit "high" gefunden.
Die Antwort auf

und ob die Bits unbeschaltet HIGH oder LOW sind

habe ich da nicht gefunden?!
Vermutlich steht es da auch nicht im Klartext drin, sondern irgendwo zwischen den Zeilen?!

Warum steht da nicht einfach eine Tabelle drin, die jeder Depp verstehen kann, ohne irgendwas rechnen zu müssen?

Wahrscheinlich hab ich auch mal wieder zu viel erwartet.
Für mich war das eine einfache Frage, die man mit einer Tabelle hätte beantworten können, aber nun zieht hier schon wieder der 11 Post die Antwort immer noch nicht aus den Nasen. Schade....ich verstehe es nicht. Die Welt könnte so einfach sein

themanfrommoon:
Warum steht da nicht einfach eine Tabelle drin, die jeder Depp verstehen kann, ohne irgendwas rechnen zu müssen?

Weil Datenblätter nicht für Deppen, sondern für Leute mit Fachkenntnissen geschrieben werden.

Gruß Tommy

Leider bin ich kein Fachmann, schade, dass hier nur Fachleute dabei sind, die alles verstehen und man ein Elektronikstudium benötigt um hier Fragen stellen zu dürfen, bzw. ein Elektronikstudium benötigt um die Antworten verstehen zu können. Nichts für Anfänger und hobbybegeisterte Ahnungslose.

Wenn man das meint, also seine angebliche Unwissenheit kultiviert, dann geht das schief.
Du hast Durchaus auch praxisnahe hinweise bekommen, wie Du es lösen kannst.
Jammern macht aber anscheinend mehr Spaß.

Gruß Tommy

themanfrommoon:
Leider bin ich kein Fachmann, schade, dass hier nur Fachleute dabei sind, die alles verstehen und man ein Elektronikstudium benötigt um hier Fragen stellen zu dürfen, bzw. ein Elektronikstudium benötigt um die Antworten verstehen zu können. Nichts für Anfänger und hobbybegeisterte Ahnungslose.

Ist doch quatsch.
Auch als nicht Fachmann kann man das lernen. Da gibt es genug Möglichkeiten.
Wenn du willst, wirst du es auch lernen.

Wenn Du einen Eingang auf HIGH (Versorgungsspannung 5 bzw 3,3V) legst wird dieser als 1 erkannt. Mit GND geschaltet liest er 0.
Also das Beispiel aus #5
Das steht doch im Datenblatt. A2 bis A6 sind fest. Also hast du 001 10 A1 A0

A1 = GND und A0 = GND ergibt 001 10 00 = 0x18
A1 = GND und A0 = 5V ergibt 001 10 01 = 0x19
ecc

Grüße Uwe

Hi

Und aller spätestens, wenn Du einen Scanner über den Slave rennen lässt, wirst Du 'sehen', mit welcher Adresse der unbeschaltete Slave antwortet.
Wenn's Dir unbedingt darum geht, für jedes Adressbit einen Jumper auf's PCB zu bekommen: mach doch!
Wäre für 3er, also Vdd,Pin,GND - dann ist's auch egal, wohin der Kamerad zieht, der Jumper wird Ihn schon überzeugen können.

Wenn's Dir um die beiden DS2482 geht - Die haben bei identischer Beschaltung identische Adressen - hier einfach einem der Slaves A0 auf GND, dem Anderen auf Vdd - jesses, wir sind fertig, war doch gar nicht sooo schwer.

Bei der RTC ist's nicht vorgesehen, daß Diese einstellbar ist - auch macht's echt wenig Sinn, mehrere RTCs am gleichen Bus zu betreiben - oder reicht Dir Eine (recht genaue) Uhrzeit nicht?

Mehrere dieser Slaver am gleichen Bus würden - in Theorie und im Normalfall - identisch reagieren - also kein wirklicher Gewinn - und wenn Sie halt eben NICHT identisch reagieren, hast Du Datengulasch.
Also: Max 1 RTC

Zur aller aller größten Not muß man recherchieren - es wird Sich ja wohl irgendwo (in den Beispielen) ein Sketch finden lassen, Der eine DS3231 anschwätzen soll - die dort genannte ID mit Der im Datenblatt vergleichen und schon wird klar, ob's 7 oder 8 Bit sind.

MfG

themanfrommoon:
Vielleicht bin ich blind oder blöd oder hab einfach nur total keine Ahnung davon?!

Einigen wir uns auf ungeübt ;D

Datenblätter haben geübte, gut ausgebildete Entwickler als Zielgruppe. Hobbybastler gehören nicht dazu.

themanfrommoon:
Im Datenblatt vom DS2482-800 …

… in TYPICAL OPERATING CIRCUIT alle ADx an GND, also nicht in der Luft hängend.

… in PIN DESCRIPTION “I2C Address Inputs; must be tied to VCC or GND. These inputs determine the I2C slave address of the device, see Figure 8.”

==> GND oder VCC ist verpflichtend.

… in Figure 8. DS2482 Slave Address sehe ich die Grundadresse, die ich als “11000” in meinen Taschenrechner eintippe und 24 oder 0x18 angezeigt bekomme (Win10 Rechner/Programmierer). Das R/W-Bit zählt bei Wire nicht mit.

AD0, AD1 und AD2 auf GND ==> 0x18
AD1, AD2 auf GND und AD0 auf VIN ==> 0x19

Für geübte Leser ist das Datenblatt hinreichend eindeutig, finde ich :slight_smile:

PS: In meinen frühen Basteljahren hätte ich mich über einen freien Zugang zu Datenblättern extrem gefreut. Mit einer Firmenvisitenkarte ausgestattet war es immer noch sehr anstrengend, die Messestände aufzusuchen und nach Informationsmaterial zu fragen. Heute klickt man und muß den Inhalt “nur” noch verstehen.

agmue:
Einigen wir uns auf ungeübt ;D

:wink:

PS: In meinen frühen Basteljahren hätte ich mich über einen freien Zugang zu Datenblättern extrem gefreut. Mit einer Firmenvisitenkarte ausgestattet war es immer noch sehr anstrengend, die Messestände aufzusuchen und nach Informationsmaterial zu fragen. Heute klickt man und muß den Inhalt "nur" noch verstehen.

Meine Elektronik-Jugend bestand eigentlich nur aus Try&Error, Logic-ICs auf Loch/Streifenraster - daher dürften auch noch meine L297/L298 stammen :wink:
Eine CNC war schon in sehr frühen Jahren angedacht - Heute finde ich kaum Zeit, den Kram zu zeichnen, Den ich fräsen will ... eine kleine Chinesin wartet sehnsüchtig im Keller (oh oh ... Das liest Sich jetzt aber ...) - wurde aber Heute erst wieder benutzt - Konstruktion für des Bruders LKW, Spannungsversorgung zum 'untern Sitz schrauben'.

Trotzdem war 'früher' - auch in Sachen Elektronik - durchaus das Erleben wert.

MfG