Forum: Mikrocontroller und Digitale Elektronik PCA9548A Expander stören sich gegenseitig


von Thomas K. (thomas_k943)


Lesenswert?

Hallo,
ich nutze diese Expander an einem PicoW .
Die Expander sind mit 0x72 und 0x73 Adressiert.
Wenn ich nun beide Oled Expander parallel an den Pico W anschließe
stören sich die Expander gegenseitig und der Pico findet keinen von 
beiden.
Im Solo Betrieb ist alles heile Welt.
Parallel dazugeschaltet I/O Expander haben keinen Einfluß auf die oled 
Expander.
Der Pico wird über Rocrail (Moba Steuerung) angesteuert. RR gibt auch 
die Anfangsadresse von 0x72 vor.
Wie kann man die gegenseitige Störung verhindern?

von Falk B. (falk)


Lesenswert?

Thomas K. schrieb:
> ich nutze diese Expander an einem PicoW .
> Die Expander sind mit 0x72 und 0x73 Adressiert.

Sicher? Hast du ALLE Adress-Pins suaber auf VCC oder GND gelegt?

> Wenn ich nun beide Oled Expander parallel an den Pico W anschließe
> stören sich die Expander gegenseitig und der Pico findet keinen von
> beiden.
> Im Solo Betrieb ist alles heile Welt.

Mit DIESEN Adressen?

von Christian M. (christian_m280)


Lesenswert?

Was sind "Oled Expander"?
Pull-Ups richtig gesetzt? (Jeweils nur am Ende des Bus)
Schaltplan und Photos wären hilfreich (wie immer!)!

Gruss Chregu

von Thomas K. (thomas_k943)


Angehängte Dateien:

Lesenswert?

Hier mal Bilder von dem Expander und eine Skizze
Die freien Pins von A0 A2 A2 brauchen keien Masse Anschluß da dieser auf 
dem Chip schon vorhanden sind.
Versuche mit oder ohne hatten keinen Einfluß.

von Falk B. (falk)


Lesenswert?

Thomas K. schrieb:
> Hier mal Bilder von dem Expander und eine Skizze
> Die freien Pins von A0 A2 A2 brauchen keien Masse Anschluß da dieser auf
> dem Chip schon vorhanden sind.

FALSCH! Alle drei Pins A0-A2 müssen EXPLIZIT auf GND oder VCC gelegt 
werden. Punkt!

von Thomas K. (thomas_k943)


Lesenswert?

Habe ich geändert,
das Ergebniss ist das gleiche.

von Holger T. (holgert)


Lesenswert?

Thomas K. schrieb:
> Hier mal Bilder von dem Expander und eine Skizze

Ich sehe in der Skizze keine Pull-Ups an SCL/SDA. Und falls jetzt kommt: 
"brauche ich nicht, sind auf dem Board" ist das auch falsch, denn dann 
sind die bei Verwendung zweier Boards ja doppelt/parallel - und dann 
evtl. zu klein.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Holger T. schrieb:
> ist das auch falsch, denn dann
> sind die bei Verwendung zweier Boards ja doppelt/parallel - und dann
> evtl. zu klein.

Ist auch falsch, denn auf den Boards sind fast immer 10K Pullups
drauf, und wenn man z.B. 5 Boards parallel am Bus hängen hätte
würden sich erst 2K resultierend ergeben --> alles im grünen
Bereich.

von Thomas K. (thomas_k943)


Lesenswert?

Gut dann ist soweit alles richtig.
Warum die sich aber nicht vertragen ist mir dennoch nicht klar.

von Thomas K. (thomas_k943)


Lesenswert?

Pull ups habe ich auch probiert.
2,2k an 3,3V  direkt am Eingang vom Pico SDA SCL.
Ergebniss auch gleich Null.

von Björn W. (bwieck)


Lesenswert?

Das sind Bus-Multiplexer und keine Port-Expander.

von Thomas K. (thomas_k943)


Lesenswert?

Ok,
also haben wir das auch geklärt.
Wer hat noch einen Tip für mich?

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Thomas K. schrieb:
> Ok,
> also haben wir das auch geklärt.
> Wer hat noch einen Tip für mich?

Sogar zwei:

1) Lerne Datenblätter lesen
2) Lerne Programmieren

von Felix A. (davinciclaude)


Lesenswert?

Falk B. schrieb:

>> Wenn ich nun beide Oled Expander parallel an den Pico W anschließe
>> stören sich die Expander gegenseitig und der Pico findet keinen von
>> beiden.
>> Im Solo Betrieb ist alles heile Welt.
>
> Mit DIESEN Adressen?

Du hast Falks Frage nicht beantwortet. Bist du sicher, dass du beide so 
ansprechen kannst, einzeln?

Und: Legst du am Schluss 0x72 auf den Bus, oder 0xe4? Überleg dir was 
passiert, wenn du den Wert um eins nach links schiebst und das R/nW Bit 
einfügst.

von Thomas K. (thomas_k943)


Lesenswert?

Ich bin nicht nur sicher; ich habe beide Expander mit den von mir
eingestellten Adressen einzeln ansprechen können.
Ich habe noch einen Test gemacht in dem ich den 2. Expander einer 
seperaten Spannungsquelle habe zukommen lassen.
Auch hier war das Ergebniss das gleiche.

von Eckhard T. (etik)


Lesenswert?

Testest Du die Expander alleine oder mit angeschlossenen Oleds (Typ, 
Anzahl?).

von Felix A. (davinciclaude)


Lesenswert?

Woran hat du gesehen, dass es nicht funktioniert?

Kannst du mal ein Bild des Aufbaus machen?

Was soll deine Schaltung am Schluss tun, und warum hast du genau diesen 
Expander gewählt?

Wie gross sind die Pull Widerstände auf dem Board?

: Bearbeitet durch User
von Nicht Joachim B. (roehrmond)


Lesenswert?

Hier sind Schaltplan und Doku von dem Board:
https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout/downloads

Offenbar sind die Pull-Up Widerstände standardmäßig inaktiv. Man muss 
Lötbrücken schließen.

Ich empfehle allerdings stattdessen externe 2,2 kΩ Widerstände. Die 10 
kΩ auf den Boards sind oft zu hochohmig.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Steve van de Grens schrieb:
> Hier sind Schaltplan und Doku von dem Board:
> 
https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout/downloads

Ahhhh, MOMENT! Wie hat denn der OP seine Board angeschlossen? Das Ding 
ist ein I2C Multipelexer, welcher den I2C Bus, der ihn selber steuert, 
auf einen oder mehrere der acht Ausgänge schalten kann. Sowas macht man 
meistens, wenn man viele I2C Slaves hat, welche die gleiche, 
unveränderliche Adresse haben und man trotzdem viele davon an einen I2C 
Bus hängen will.

Was ist denn an den Ausgängen des Multiplexers angeschlossen? Wenn da 
mehr als ein Ausgang aktiv ist, kann es sein, daß sich da was verklemmt.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Thomas K. schrieb:
> Wenn ich nun beide Oled Expander parallel an den ...

Ich habe immer noch nicht verstanden, was ein OLED Expander ist.

Aber davon mal abgesehen:
Wenn man I2C Schnittstellen in betrieb nehmen will, oder dort debuggen 
muss, sind folgende Werkzeuge sinnvoll, bzw. wichtig.
Oszi und LA.
Das Oszilloskop zeigt dir die Signalform.
Solange die Mist ist, braucht man auf keiner anderen Baustelle buddeln.
Das Protokoll kann man dann mit dem Logikanalyser untersuchen.

Natürlich gibts auch beides in einem Gerät.
Ist halt eine Frage der Vorlieben und Kosten.

: Bearbeitet durch User
von Thomas K. (thomas_k943)


Lesenswert?

Hallo der Oled Expander erlaubt bis zu 8 Oled LED Display´s anzusteuern.
Rocrail erlaubt bis zu 16 Oled Display´s mit 2 Expandern mit den 
Adressen 0x72, 0x73 anzusteuern. An einem Pico
Um zu testen habe ich mir mal die Scoopy Software auf das Handy gepackt
und einen Pico W entsprechend eingerichtet. (Ozzy Software).
Beides funzt.
Gehe ich mit dem Messkabel jetzt am Pico der die Multiplexer verwaltet 
an den SDA oder SLC Anschluß dann stürzt der Pico ab.
Das beide Expander im solo Betrieb funktionieren kann man in Rocrail 
auslesen.

von Wastl (hartundweichware)


Lesenswert?

Thomas K. schrieb:
> bis zu 8 Oled LED Display´s anzusteuern

Bitte keine Deppenapostrophe.
Siehe http://www.deppenapostroph.info

Thomas K. schrieb:
> PCA9548A Expander

Thomas K. schrieb:
> beide Oled Expander

Ich frage mich warum die Worte OLED und Expander auf keiner
der 30 Seiten im Datenblatt des PCA9548A vorkommen, da müssen
die Datenblatt-Schreiber beim Hersteller etwas falsch gemacht
haben.

von Falk B. (falk)


Lesenswert?

Wastl schrieb:
> Ich frage mich warum die Worte OLED und Expander auf keiner
> der 30 Seiten im Datenblatt des PCA9548A vorkommen, da müssen
> die Datenblatt-Schreiber beim Hersteller etwas falsch gemacht
> haben.

Der OP ist ein wenig begriffstutzig und auch faul. Die OLED Displays 
hängen hinter den I2C MUXen (PCA9548A). Ein Schaltplan sowie Bild vom 
REALEN Aufbau wären sehr hilfreich.

von Max M. (jens2001)


Lesenswert?

Thomas K. schrieb:
> Die Expander sind mit 0x72 und 0x73 Adressiert.

Sicher nicht!
Jeder MULTIPLEXER hat 2 Adressen. Eine Read-Adresse und eine 
Write-Adresse. Und die sind sicher nicht 0x72 und 0x73!

Felix A. schrieb:
> Du hast Falks Frage nicht beantwortet. Bist du sicher, dass du beide so
> ansprechen kannst, einzeln?
>
> Und: Legst du am Schluss 0x72 auf den Bus, oder 0xe4? Überleg dir was
> passiert, wenn du den Wert um eins nach links schiebst und das R/nW Bit
> einfügst.

von Christian M. (christian_m280)


Lesenswert?

Björn W. schrieb:
> Das sind Bus-Multiplexer und keine Port-Expander.

Thomas K. schrieb:
> Ok,
> also haben wir das auch geklärt.

Thomas K. schrieb:
> Oled Expander

Falk B. schrieb:
> Der OP ist ein wenig begriffstutzig und auch faul.

Gruss Chregu

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Max M. schrieb:
> Sicher nicht!
> Jeder MULTIPLEXER hat 2 Adressen. Eine Read-Adresse und eine
> Write-Adresse. Und die sind sicher nicht 0x72 und 0x73!

I2C Dinger, zumindest diese, haben eine 7 Bit Adresse und ein r/W Bit.
Das r/w Bit stecht zwar im selben Byte, ist aber nicht Teil der Adresse.

So steht es in vielen Datenblättern, so handelt es Arduino Wire ab.
Und viele weitere.

Ja, ich weiß, dass einige meinen das r/w Bit würde zur Adresse gehören, 
ist aber meiner Ansicht nach falsch.

von Nicht Joachim B. (roehrmond)


Angehängte Dateien:

Lesenswert?

Thomas K. schrieb:
> Die Expander sind mit 0x72 und 0x73 Adressiert.

Max M. schrieb:
> Sicher nicht!
> Jeder MULTIPLEXER hat 2 Adressen. Eine Read-Adresse und eine
> Write-Adresse. Und die sind sicher nicht 0x72 und 0x73!

Doch, das stimmt schon so. Schau ins Datenblatt!

DIe Adresse besteht aus 7 Bits. Unterscheidung zwischen Read und Write 
gibt das R/W Bit vor, das nicht zur Adresse gehört.

Bei einem Chip hat er nur A1 auf High gelegt, das ergibt die Adresse 
1110010 = 0x72. Beim anderen sind A0 und A1 auf High, also 1110011 = 
0x73.

Thomas K. schrieb:
> Im Solo Betrieb ist alles heile Welt.

Was die Adressen bestätigt.

: Bearbeitet durch User
von Ralf D. (doeblitz)


Lesenswert?

Max M. schrieb:
> Thomas K. schrieb:
>> Die Expander sind mit 0x72 und 0x73 Adressiert.
>
> Sicher nicht!
> Jeder MULTIPLEXER hat 2 Adressen. Eine Read-Adresse und eine
> Write-Adresse. Und die sind sicher nicht 0x72 und 0x73!

Das ist eine Frage der Terminologie. Es gibt da zwei Sichtweisen:
* 8bit-Adresse, die R/W enthält, damit hat jedes Gerät dann zwei 
unterschiedliche Adressen für Read/Write – so sehen das Programmierer 
gerne
* 7bit-Adresse und ein zusätzliches R/W-bit an der niederwertigsten 
Stelle, damit hat ein Gerät dann eine logische Adresse – so findet man 
das in vielen Datenblättern der Hersteller, die da zwischen der 
Slave-Address und dem Address-Byte, das man auf den Bus schickt, 
unterscheiden.

0x72 und 0x73 sind eben die Slave-Address-Werte und nicht die 
Address-Bytes, die da auf den Bus gehen.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Thomas K. schrieb:
> Gehe ich mit dem Messkabel jetzt am Pico der die Multiplexer verwaltet
> an den SDA oder SLC Anschluß dann stürzt der Pico ab.

Heißt für mich, dass die Messstrippe den Bus zu sehr belastet.
Was ein Indiz für zu schwache Pullup sein könnte.

von Max M. (jens2001)


Angehängte Dateien:

Lesenswert?

Arduino F. schrieb:
> Das r/w Bit stecht zwar im selben Byte, ist aber nicht Teil der Adresse.
>
> So steht es in vielen Datenblättern,

Nicht so in dem Von NXP

Steve van de Grens schrieb:
> Max M. schrieb:
>> Sicher nicht!
>> Jeder MULTIPLEXER hat 2 Adressen. Eine Read-Adresse und eine
>> Write-Adresse. Und die sind sicher nicht 0x72 und 0x73!
>
> Doch, das stimmt schon so. Schau ins Datenblatt!

Du verinkst einen Auschnitt aus dem Datenblatt, bist aber nicht inder 
Lage zu verstehen was da steht!

> The last bit of the slave address defines the operation to be performed

Das R/W-Bit ist Teil der Addresse!!!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas K. schrieb:
> Wenn ich nun beide Oled Expander parallel an den Pico W anschließe
> stören sich die Expander gegenseitig
Ist das immer noch das selbe Problem wie im
Beitrag "Re: I/O Erweiterung einfach erklärt"

von Nicht Joachim B. (roehrmond)


Lesenswert?

Max M. schrieb:
> Das R/W-Bit ist Teil der Addresse!!!

Die Adresse hat 7 Bit (0x00 bis 0x7F). Das R/W Flag hat 1 Bit. Beide 
zusammen werden als erstes Bytes nach der Start Bedingung übertragen.

Arduino erwartet 7 Bit Adressen als Funktionsargument.

Linux arbeitet mir 7 Bit Adressen (siehe Ausgabe von i2cdetect).

Rocrail arbeitet mit 7 Bit Adressen.

Es funktioniert mit 7 Bit Adressen beim TO.

Warum zum Teufel versuchst du ihm krampfhaft deine 8 Bit Adressen 
einzureden? Würde er dir nun folgen, dann würde es nicht mehr 
funktionieren. Also höre bitte damit auf, deine Sichtweise 
durchzusetzen. Das stört hier nur. Dieses 7/8 Kopf-Problem hast nur du. 
Alle anderen beteiligten kamen damit schon zurecht, bevor dieser Thread 
eröffnet wurde. Auch der TO.

: Bearbeitet durch User
von Max M. (jens2001)


Lesenswert?

Steve van de Grens schrieb:
> Also höre bitte damit auf, deine Sichtweise mit 8 Bit durchzusetzen.

Das ist nicht MEINE Sichtweise sondern die vom Datenblatt!

> The last bit of the slave address defines the operation to be performed

von Nicht Joachim B. (roehrmond)


Lesenswert?

Max M. schrieb:
> Das ist nicht MEINE Sichtweise sondern die vom Datenblatt!

Back dir ein Ei drauf!

von Nicht Joachim B. (roehrmond)


Lesenswert?

Dort ist die Doku von Rockrail zu dem Konstrukt:
https://wiki.rocrail.net/doku.php?id=wio:wio-displaymultiplex-en

von Felix A. (davinciclaude)


Lesenswert?

Ich würde den TO mal seine Hausaufgaben machen und alle Fragen 
beantworten lassen. Probleme lösen sich oft durch dokumentieren ;)

von Falk B. (falk)


Lesenswert?

Steve van de Grens schrieb:
> Dort ist die Doku von Rockrail zu dem Konstrukt:
> https://wiki.rocrail.net/doku.php?id=wio:wio-displaymultiplex-en

Naja, dort ist ja schon eine Stolperfalle. Dort werden einige 
Adresseingänge mit "open" definiert. Das funktioniert nur, wenn die 
Birads EXTERNE Pull-DOWN Widerstände haben. Das hat das Board des OPs 
nicht. Also zum 3. Mal. Alle Eingänge A0-A2 müssen EXPLIZIT auf GND oder 
VCC gelegt werden!

von Nicht Joachim B. (roehrmond)


Angehängte Dateien:

Lesenswert?

Falk B. schrieb:
> Naja, dort ist ja schon eine Stolperfalle. Dort werden einige
> Adresseingänge mit "open" definiert. Das funktioniert nur, wenn die
> Birads EXTERNE Pull-DOWN Widerstände haben.

Haben sie ja auch. Siehe Foto und Schaltplan von Adafruit (mein Link 
weiter oben). Der Teil ist OK.

Allerdings finde ich, dass die Doku auf I²C Pull-Ups hätte hinweisen 
sollen. Die sind nämlich standardmäßig nicht aktiviert.

: Bearbeitet durch User
von Max M. (jens2001)


Lesenswert?

Falk B. schrieb:
> Dort werden einige
> Adresseingänge mit "open" definiert. Das funktioniert nur, wenn die
> Birads EXTERNE Pull-DOWN Widerstände haben. Das hat das Board des OPs
> nicht.

Ich seh da 6 Rs.
1x RESET
1x SCL
1x SDA
Und die anderen 3?

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Steve van de Grens schrieb:
> Haben sie ja auch. Siehe Foto und Schaltplan von Adafruit (mein Link
> weiter oben). Der Teil ist OK.
>
> Allerdings finde ich, dass die Doku auf I²C Pull-Ups hätte hinweisen
> sollen. Die sind nämlich standardmäßig nicht aktiviert.

Im Plan sind Lötbrücken.
Auf dem Board sehe ich sie nicht.
Auch nicht auf der Unterseite

Also, so ich meine:
Bus Pullup und Adress Pulldown sind dauerhaft verbunden.

Ach ja:
Habe bisher noch nie ein Adafruitboard mit dem HW-617, oder ähnlichen, 
Aufdruck gesehen.
Somit wird das wohl ein anderer Hersteller sein. bzw. ein vereinfachter 
Nachbau.

: Bearbeitet durch User
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.