Forum: Mikrocontroller und Digitale Elektronik I2C Bus - welche Adresse ist das?


von Achim S. (achims)


Angehängte Dateien:

Lesenswert?

Hallo
in einem Prospekt zu einem Display vom Typ edip128 habe das Bild mit den 
Adressen gefunden.
Leider verstehe ich nicht, welche I2C Adresse gemeint bzw. welcher 
Bereich.
Kennt sich jemand damit aus?
achim

von Frank G. (frank_g53)


Lesenswert?

je nach Verdrahtung der Pins 11,7,6 wird die Adresse des Chip 
eingestellt.
Mit dem Befehl (rechte Seite auf dem Bild) sprichst du den Chip an.

von Achim S. (achims)


Lesenswert?

Hallo Frank
Nach Angabe des Herstellers hat das Display 8 Basisadressen (BA0 - BA2) 
und
8 Slaveadressen (SA0 - SA2) an den Pins 6,7,11 und 8,9,10.
Komme mit der schreibweise $10 nicht klar. Schreibe meine Adressen immer 
so z.B. 0x40
achim

von Frank G. (frank_g53)


Lesenswert?


von Achim S. (achims)


Lesenswert?

Da stimmt was nicht

Beispiel dazu: (am realen Display ermittelt)

BA0 - BA2 - Brücken auf offen - alle Pins auf H - Adresse ist $DE
BA0 - BA2 - alle Brücken geschlossen - alle Pins auf L - Adresse ist $40

alle Slave Anschlüsse sind dabei offen auf H

Nach der Tabelle ist bei BA0 - BA2 auf H die Adresse $D0

Das verstehe ich nicht

achim

von Achim S. (achims)


Lesenswert?

Sorry, was verwechselt. 0x40 ist ok, weil ich mein Display zur Kontrolle 
dran habe, zählt also nicht

von Achim S. (achims)


Lesenswert?

Kann mir keiner helfen?

von The D. (thedaz)


Lesenswert?

Was ist denn noch unklar?

von Falk B. (falk)


Lesenswert?

Mensch Achim, wo ist denn schon wieder das Problem?

Das LCD hat halt 3 Bits für die Basisadresse und 3 für die Slaveadresse. 
Das ist zwar ungewöhlich, aber OK. Stell die Pins ein wie du willst, 
daraus ergibt sich die I2C Adresse des LCDs. Fertig!

Schon mal den kleinen Satz unter der Tabelle gesehen?

"alle Pins offen:
Schreiben $DE
Lesen $DF"

von hp-freund (Gast)


Lesenswert?

Also ich sehe da auch kein Problem. Links wählst Du deine Wunschadresse 
die rechts daneben steht.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Achim S. schrieb:
> Kann mir keiner helfen?

 Vergiss BA2-BA0, die sind in der Tat unlogisch.

 Nimm nur die BaseAdress für HighNibble, SA2-SA0 für D3-D1, D0 = R/W
 und gut ist es.

von Achim S. (achims)


Lesenswert?

Hallo Falk
das habe ich gelesen und am Display ausprobiert. Bei allen Pins offen 
(alle Pins auf H) ist die Adresse DE und das display antwortet. Soweit 
ok.
Setze ich BA0 auf H müsste es die Adresse $20 sein. Gebe die Adresse 
ein, also 0x20, das Display meldet sich nicht. Wieso?
achim

von hp-freund (Gast)


Lesenswert?

Achim S. schrieb:
> Adresse DE und das display antwortet.

Achim S. schrieb:
> also 0x20, das Display meldet sich nicht. Wieso?

Versuch mal 0x2E

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Achim S. schrieb:
> Setze ich BA0 auf H müsste es die Adresse $20 sein.

 Aber nicht wenn BA1 und BA2 offen bleiben.

von langer (Gast)


Lesenswert?

Die Basisadresse wird an den Pins 6,7,11 verdrahtet.
Die Slaveadresse wird an den Pins 8,9,10 verdrahtet.
Um das Display anzusprechen wird in einem Befehl nach deiner geposteten 
Tabelle die Basisadresse in den Datenbits D7,D6,D5,D4 angegeben und die 
Slaveadresse in D3,D2,D1. D0 für Lese- oder Schreibbefehl.

Schau dir auch das "Pinout eDIP128-6: I2C mode" in einem Datenblatt an. 
Da stehen die Pins für die Slaveadresse, die in deiner geposteten 
Tabelle nicht aufgeführt sind.

von Joachim B. (jar)


Lesenswert?

hp-freund schrieb:
> Versuch mal 0x2E

kommt auf die Betrachtungsweise an, die einen gucken nur 7-Bit 00-7F 
(ohne I2C Erweiterung) die anderen shiften mit dem R/W Bit weil Bit0 R/W 
ist
Das wäre dann 01-FE (oder so ähnlich)

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@ Marc Vesely (Firma: Vescomp) (logarithmus)

> Vergiss BA2-BA0, die sind in der Tat unlogisch.

Das einzige was hier immer wieder unlogisch ist, bist du.

Eine Tabelle hat den Sinn, einen Zusammenhang von Eingangsvariablen zu 
Ausgangsvariablen darzustellen. Der muss nicht linear und auf 1. Klasse 
Niveau sein. Im allgemeinen ist er das nämlich nicht, sonst würde man 
keine Tabelle brauchen.

von hp-freund (Gast)


Lesenswert?

Wie ich das verstehe werden dur Pin 11,7,6 einfach nur die oberen 4bit 
gewählt/getauscht.
Die unteren sind unabhängig davon.

von hp-freund (Gast)


Lesenswert?

dur -> durch

von Falk B. (falk)


Lesenswert?

@Achim Seeger (achims)

>das habe ich gelesen und am Display ausprobiert. Bei allen Pins offen
>(alle Pins auf H) ist die Adresse DE und das display antwortet. Soweit
>ok.

Und warum bleibst du nicht dabei? Oder willst du 64 LCDs an deinen Bus 
anschließen?

>Setze ich BA0 auf H müsste es die Adresse $20 sein.

Nö, du musst ja noch die Slaveadresse berücksichtigen. Ausserdem sind 
alle offenen Pins automatisch H (interner Pull-Up).

Also, wie stehen ALLE deine Pins BA2-0 und SA2-0?

von Falk B. (falk)


Lesenswert?

@ langer (Gast)

>Schau dir auch das "Pinout eDIP128-6: I2C mode" in einem Datenblatt an.
>Da stehen die Pins für die Slaveadresse, die in deiner geposteten
>Tabelle nicht aufgeführt sind.

Nö, das ist EXAKT die Tabelle aus dem Datenblatt. Und eigentlich (tm) 
nicht allzu schwer zu verstehen.

von Achim S. (achims)


Lesenswert?

langer schrieb:
> Schau dir auch das "Pinout eDIP128-6: I2C mode" in einem Datenblatt an.
> Da stehen die Pins für die Slaveadresse, die in deiner geposteten
> Tabelle nicht aufgeführt sind.

Was meinst du mit der Satz. Der PIN 12 liegt auf GND und damit ist der 
I2CMode eingestellt.

Beim Begriff Basisadresse gehe ich da von aus, das man damit die 
Grunddaten einstellen kann. Falls das nicht reicht kann man 
wahrscheinlich mit Slaveadressen noch was verändern. Finde in der 
Tabeklle aber keine Logik
Falls jemand eine Vorschlag hat, habe das Display angeschlossen und kann 
sofort alles testen.
Noch was dazu. Gerade Zahl (Adresse) schreiben, ungerade lesen.
Dann müsste z.B. 2,4,6,8,10 usw die schreibadresse sein. Könnte man ja 
auch testen?
achim

von Achim S. (achims)


Lesenswert?

Alle Pins sind offen und damit stehen sie auf H

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Falk B. schrieb:
> Das einzige was hier immer wieder unlogisch ist, bist du.

 Dass du mit Logik auf Kriegsfuss steht, wird mir mittlerweile klar.

 Dass jemand an einem Beitrag nur seinen Author zu bemängeln hat,
 dann aber dessen Beitrag praktisch wiederholt, spricht für sich.

von hp-freund (Gast)


Lesenswert?

Achim S. schrieb:
> Alle Pins sind offen und damit stehen sie auf H

Richtig.
Damit kannst Du dann mit 0xDE auf das Display zugreifen, stimmts?

von Achim S. (achims)


Lesenswert?

stimmt genau, wenn alle Pins (B und S)offen sind, also auf H liegen 
bekomme 0xDE.
Welche Adresse muss den kommen wenn ich BA0 auf GND stecke?

von hp-freund (Gast)


Lesenswert?

Achim S. schrieb:
> Welche Adresse muss den kommen wenn ich BA0 auf GND stecke?

0xBE

von Achim S. (achims)


Lesenswert?

Habe es sofort getestet, es stimmt genau.
Was für Logig ist das?

BA1 auf GND oder BA2 auf GND?
Welchen einfluss haben die Slave?
achim

von Falk B. (falk)


Lesenswert?

@Achim Seeger (achims)

>Welche Adresse muss den kommen wenn ich BA0 auf GND stecke?

Du Plinse! Oben schriebst du noch was von H!!!!

von hp-freund (Gast)


Lesenswert?

Achim S. schrieb:
> BA1 auf GND oder BA2 auf GND?
Und BA0 auf H bzw. offen?
Dann: 0x2E


> Welchen einfluss haben die Slave?
Betrachte einfach die oberen und die unteren 4 Bit getrennt.

von Achim S. (achims)


Lesenswert?

Nach Angabe im Datenblatt sind die offenen Pins automatisch auf H, mit 
der Brücke lege ich sie auf GND

von langer (Gast)


Angehängte Dateien:

Lesenswert?

Achim S. schrieb:
> langer schrieb:
>> Schau dir auch das "Pinout eDIP128-6: I2C mode" in einem Datenblatt an.
>> Da stehen die Pins für die Slaveadresse, die in deiner geposteten
>> Tabelle nicht aufgeführt sind.
>
> Was meinst du mit der Satz. Der PIN 12 liegt auf GND und damit ist der
> I2CMode eingestellt.

OK. Ich meinte die angehangene Tabelle. Die Pins für die Slaveadresse 
sind bei dir vermutlich offen und liegen damit auf high. Die mußt du 
natürlich in deinem Adressbyte berücksichtigen.

Wenn du BA0 auf high setzt (ist ja sowieso auf high wenn offen, also 
BA1, BA2 auf GND verdrahtest) sind alle Slaveadressen wenn offen auch 
noch auf high. Adresse müßte also 2E zum Schreiben oder 2F zum Lesen 
sein. Basis 0010 + Slaveaddr. 111x (x Lesen/schreiben) = 0010111x

von Falk B. (falk)


Lesenswert?

@ Achim Seeger (achims)

>Habe es sofort getestet, es stimmt genau.
>Was für Logig ist das?

Die LogiK der Tabelle!

>BA1 auf GND oder BA2 auf GND?

Quark!

>Welchen einfluss haben die Slave?

TABELLE!!

Wenn

BA2=H
BA1=H
BA0=L

dann gilt die vorletzte Zeile. D.h.

Bit    D7 D6 D5 D4 D3 D2 D1 D0
binär   1  0  1  1  1  1  1 R/_W
hex              B           E

D3-D1 müssen den gleichen Wert haben wie SA2-0, hier also 1!!!

Oder um es anders zu sagen. Den Wert der Adressbits D7-D4 muss man aus 
der Tabelle ablesen, abhängig von BA2-0. SA2-0 trägt man direkt in der 
Adresse ein.

Für die Leute, die das überfordert, müsste der Hersteller eine Tabelle 
mit 64 Zeilen angeben. Dazu hatte er wohl keine Lust. Oder er nahm an, 
daß die Tabelle verständlich sei.

von Achim S. (achims)


Lesenswert?

Jetzt habe ich BA1 auf GND und BA0 und BA2 auf H.
Die adresse 0x2e geht nicht

von hp-freund (Gast)


Lesenswert?

Achim S. schrieb:
> Jetzt habe ich BA1 auf GND und BA0 und BA2 auf H.

Dann sind das auch 0x9E

von The D. (thedaz)


Lesenswert?

Ich hau mich weg. Genau das richtige für einen launigen Freitag Abend. 
Dankeschön!

von Achim S. (achims)


Lesenswert?

BA0 auf H, BA1 auf H, BA2 auf L ergibt 4e

von hp-freund (Gast)


Lesenswert?

Richtig.

von langer (Gast)


Lesenswert?

Achim S. schrieb:
> BA0 auf H, BA1 auf H, BA2 auf L ergibt 4e

Aber nur wenn SA0..SA2 nicht verdrahtet sind
Beitrag "Re: I2C Bus - welche Adresse ist das?"

von Achim S. (achims)


Lesenswert?

Wenn ich das richtig verstanden habe, besteht eine Adresse z.B. aus

0xDE das sind D für die Basisadresse und E für die Slave Adresse, 
jeweils 3 Pins ergibt 8 mögliche Adressen für Basis und Slave.
Wenn ich das von Falk ansehe

Falk B. schrieb:
> Wenn
>
> BA2=H
> BA1=H
> BA0=L
>
> dann gilt die vorletzte Zeile. D.h.
>
> Bit    D7 D6 D5 D4 D3 D2 D1 D0
> binär   1  0  1  1  1  1  1 R/_W
> hex              B           E
>
> D3-D1 müssen den gleichen Wert haben wie SA2-0, hier also 1!!!
>
> Oder um es anders zu sagen. Den Wert der Adressbits D7-D4 muss man aus
> der Tabelle ablesen, abhängig von BA2-0. SA2-0 trägt man direkt in der
> Adresse ein.

ist es klar. Ist bloss sehr kompliziert erklärt oder gar nicht. Denke, 
habe es begriffen
Danke für eure Hilfe
achim

von langer (Gast)


Lesenswert?

Achim S. schrieb:
> Wenn ich das richtig verstanden habe, besteht eine Adresse z.B. aus
>
> 0xDE das sind D für die Basisadresse und E für die Slave Adresse,
> jeweils 3 Pins ergibt 8 mögliche Adressen für Basis und Slave.

Im Prinzip ja. Aber das E von DE beinhaltet als D0 (Datenbit 0) auch 
noch das R/W Bit. Die gleiche Adresse/Device wird also auch mit DF 
angesprochen, abhängig ob geschrieben oder gelesen werden soll.

Wenn man sich deine gepostete Tabelle anschaut, ist sie eigentlich eine 
Verdrahtungsanweisung für die Basisadressen. So ausführlich, wohl weil 
es die Basisadressen nicht fortlaufend gibt. 0x50 fehlt zum Beispiel. 
Ist die Basisadresse HW-mäßig festgelegt, wird sie im Adressbyte in 
D7..D4 mit 4 Bits binär codiert. Bei den Slaveadressen stimmt die 
Beschreibung mit den 3 Pins für 8 mögliche Adressen.

von langer (Gast)


Lesenswert?

langer schrieb:
> D7..D4 mit 4 Bits binär codiert. Bei den Slaveadressen stimmt die
> Beschreibung mit den 3 Pins für 8 mögliche Adressen.

... fortlaufend codiert in 3 Bits  meinte ich eigentlich.

Eine von 8 Basisadressen wird natürlich auch mit 3 HW Pins festgelegt - 
die Adressen sind aber nicht fortlaufend.

von W.A. (Gast)


Angehängte Dateien:

Lesenswert?

Man sollte sich nicht durch das Datenblatt verwirren lassen. In dem 
Zeitdiagramm wird richtig eine 7-Bit I2C Adresse gezeigt und in der 
Tabelle werden 8-Bit Baseaddressen (z.B. $D0) angegeben. Das passt nicht 
zusammen.

So schwer ist es doch eigentlich gar nicht, die 7-Bit I2C Adresse von 
den 8 Bit des als erstes übertragenen Adress-Bytes zu unterscheiden, 
dass sich eben aus besagter 7-Bit Adresse und dem R/W-Bit zusammen setzt 
- so wie in dem Zeitdiagramm gezeigt ...

von Jobst M. (jobstens-de)


Lesenswert?

Vergiss die Spalte 'BaseAddress'. Die sorgt nur für Verwirrung. Diese 
ist nämlich in D7:D4 von I²C-Address schon enthalten. Dazu kommen eben 
noch Deine 3 SA-Bits und R/W.


Gruß

Jobst

: Bearbeitet durch User
von langer (Gast)


Lesenswert?

langer schrieb:
> Ist die Basisadresse HW-mäßig festgelegt, wird sie im Adressbyte in
> D7..D4 mit 4 Bits binär codiert.

Basisadresse | "binär codiert"
HW-verdrahtet| im Adressbyte
-------------+----------------
$10          | 0001xxxx
$20          | 0010xxxx
$30          | 0011xxxx
$40          | 0100xxxx
$70          | 0111xxxx
$90          | 1101xxxx
.

$1 = b0001
.
$9 = b1101
.

von langer (Gast)


Lesenswert?

langer schrieb:
> $9 = b1101
> .

hat man davon, wenn man es zu genau machen will

$9 = b1001  !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.