I2C Bus - welche Adresse ist das?

OP #4585326
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
Angehängte Dateien:
OP
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
OP
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
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
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
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.
@ 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.
@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?
@ 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
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
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:
@ 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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.