I2C Bus - welche Adresse ist das?

OP #4585396
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
#4585430
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"
OP #4585444
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
Gast #4585457
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.
#4585464
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.
#4585472
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?
#4585474
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.
OP #4585483
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
Gast #4585513
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
Angehängte Dateien:
#4585514
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.
OP #4585555
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
Gast #4585571
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.
Gast #4585579
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.
Gast #4585721
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 ...
Angehängte Dateien:
Gast #4585762
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
.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren