Forum: Mikrocontroller und Digitale Elektronik Elegant digitales 8:3 Multiplexing implementieren?


von Dany (Gast)


Lesenswert?

Hallo!

Der Titel sagt es ja schon. Ich habe 8 digitale Eingänge und möchte 
gerne drei davon (die einen SPI-Bus bilden) auf drei Ausgänge legen. 
Anders gesagt: Auf den 8 Eingängen sind irgendwie SDI SDO und SCK und 
ich möchte die gerne auf drei Ausgangspins legen, damit ich diese 
wiederum an einen AVR anschliessen kann, der SDI/SDO/CLK auf fest 
definierte Pins erwartet.

Wahrscheinlich finde ich deshalb nichts, weil jeder ARM heutzutage 
Multiplexing schon integriert hat. Aber vielleicht kann mir ja doch noch 
jemand einen Tipp geben.

Bisher habe ich das via 3 8:1 ICs erledigt, aber alleine das kostet mich 
9 Steuerleitungen extra. Autsch.

von Wolfgang (Gast)


Lesenswert?

Dany schrieb:
> Der Titel sagt es ja schon.

Sagt er nicht. EIN Multiplexer schalten EINES von mehreren Signalen auf 
EINEN Ausgang durch.
Suchst du einen dreifach 8:1-Multiplexer, damit du aus 8 
Eingangssignalen beliebig auswählen kannst, welche dieser Signal auf 
deinen drei Ausgangsleitungen als SPI-Bus erscheinen?
Oder hast du am Eingang acht SPI Geräte, die du wahlweise auf einen 
Ausgang schalten möchtest (dann hast du das "BUS" bei SPI-Bus nicht 
verstanden)?

von Herbert (Gast)


Lesenswert?

Wolfgang schrieb:
> Dany schrieb:
>> Der Titel sagt es ja schon.
>
> Sagt er nicht.

Warum verstehst du den TO nicht? Was er will ist eindeutig.

von Teo (Gast)


Lesenswert?


von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Herbert schrieb:
> Warum verstehst du den TO nicht? Was er will ist eindeutig.

Ich kann dir sagen warum ich den TO nicht verstehe: Weil er Blödsinn 
labert. Er redet z.B. davon SDI, SDO und SCK auf Ausgangspins zu legen 
die dann an einen AVR gehen sollen. Blöd nur, dass er für SDO und SCK 
Eingangspins an seinem Multiplexer bräuchte.

Die nächste Frage die sich stellt ist warum er überhaupt SDI, SDO und 
SCK umschalten will. Hätte er anständige SPI-Peripherie könnte er diese 
kaskadieren oder sternförmig anschließen und müsste sich nur um das 
nicht erwähnte /CS-Signal kümmern.

Das klingt alles nach irgend welchem Arduino-Gemurkse für die Tonne.

von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

Gesucht sind drei bidirektionelle (weil jeder der 8 Pins Input oder 
Output sein kann) 8:1 (Analog-)Mux mit I2C-Steuerung.
Das Ziel ist dass man nur 2 Pins braucht um alle 3 Kanäle davon zu 
steuern (verschiedene I2C-Adressen vorausgesetzt).
Grob in die gewünschte Richtung ginge der hier: 
https://www.analog.com/media/en/technical-documentation/data-sheets/ADG792A_792G.pdf
Falls man den per I2C-Befehl auch auf komplett hochohmig schalten kann, 
könnten 2 solche Chips schon reichen um 8 Eingänge zu muxen.
Hab das aber nicht weiter vertieft. Maxim hat wahrscheinlich auch solche 
Mux-Chips.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

3x PCA9547

Oder du könntest drei 4051 mit einem PCF8574 kombinieren.

von MaWin (Gast)


Lesenswert?

Dany schrieb:
> Aber vielleicht kann mir ja doch noch jemand einen Tipp geben.

(analoge) Kreuzschienenverteiler, crosspoint switches, MT8806

https://www.microsemi.com/product-directory/switches/1453-analog-cross-point-switches

von Frank K. (fchk)


Lesenswert?

Das wäre eine klassische Aufgabe für ein kleines CPLD oder FPGA. Die 
5V-Bausteine XC9536 werden ja leider nicht mehr hergestellt. Ansonsten 
gibts Lattice MachXO ab 2.50€, und die kleinste Version reicht für diese 
Aufgabe.

fchk

von Wolfgang (Gast)


Lesenswert?

Nikolaus S. schrieb:
> Gesucht sind drei bidirektionelle ...

Bist du der TO oder woher willst du das jetzt wissen?

https://www.mikrocontroller.net/articles/Hilfe:Forum_Nutzungsbedingungen
    Beteiligung an einer Diskussion unter verschiedenen Namen

von Matthias L. (Gast)


Lesenswert?

Herbert schrieb:
> Warum verstehst du den TO nicht? Was er will ist eindeutig.

Warum antwortest Du dem TO dann nicht einfach?

von Der Unwissende (Gast)


Lesenswert?

Dany schrieb:
> Ich habe 8 digitale Eingänge und möchte
> gerne drei davon (die einen SPI-Bus bilden) auf drei Ausgänge legen.
> Anders gesagt: Auf den 8 Eingängen sind irgendwie SDI SDO und SCK und
> ich möchte die gerne auf drei Ausgangspins legen, damit ich diese
> wiederum an einen AVR anschliessen kann, der SDI/SDO/CLK auf fest
> definierte Pins erwartet.

Diese Fragestellung habe ich mir mal durch den Kopf gehen lassen und 
komme zu dem Schluss das es wohl um 8 Anschlüsse an (Slave-)Geräten geht 
die an einen AVR angeschlossen werden sollen. Auch ist nicht definiert 
wo die jeweiligen Signale bei den 8 Anschlüssen geschaltet sind, scheint 
also im weitesten Sinn ein reverse engenierung zu sein. Das benötigt 
hier letztlich 2 1:8 Dekoder/Demultiplexer für CLK/MOSI sowie 1 8:1 
Enkoder/Multiplexer für MISO, jeweils also Unidirektionale Bauteile, 
ggf. noch einen Schutz wenn Ausgang an Ausgang geschaltet wird.
Bevor ich jetzt weiter denke stelle ich dem TE die Frage ob dem so ist, 
dann hat man die Basis zum weiter planen.

von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

Wolfgang schrieb:
> Nikolaus S. schrieb:
>> Gesucht sind drei bidirektionelle ...
>
> Bist du der TO oder woher willst du das jetzt wissen?

1. Nein. Und im Gegensatz zu Dir bin ich sogar angemeldet.
2. Ich habe den Beitrag des TO gelesen und verstanden was er erreichen 
will (ist m.E. eindeutig beschrieben - nein, ich bin auch nicht Herbert 
(Gast) sondern sehe das nur genauso) und in meinen Worten 
zusammengefasst was die Requirements sind. Dann habe ich einen 
Lösungsvorschlag angegeben.

Abgesehen davon wäre es ja unsinnig, dass ich erst eine Frage stelle und 
dann selbst eine Antwort gebe.

Und vor allem sehr seltsam ist dass mein Beitrag ein -1 bekommt, wobei 
da ja eine Lösung drinsteht, die funktionieren wird...

Wenn man jetzt schon fürs Helfen angemotzt wird, bin ich auch für einen 
Anmeldezwang und Abschaffen der Bewertungsfunktion.

: Bearbeitet durch User
von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

Wolfgang schrieb:
> Dany schrieb:
>> Der Titel sagt es ja schon.
>
> Sagt er nicht. EIN Multiplexer schalten EINES von mehreren Signalen auf
> EINEN Ausgang durch.
> Suchst du einen dreifach 8:1-Multiplexer, damit du aus 8
> Eingangssignalen beliebig auswählen kannst, welche dieser Signal auf
> deinen drei Ausgangsleitungen als SPI-Bus erscheinen?

Ich denke: ja.

Zitat1: "Auf den 8 Eingängen sind irgendwie SDI SDO und SCK und  ich 
möchte die gerne auf drei Ausgangspins legen"

Zitat2: "Bisher habe ich das via 3 8:1 ICs erledigt, aber alleine das 
kostet mich 9 Steuerleitungen extra. Autsch."

Er hat also bisher drei MUXe (vielleicht sogar Analoge) mit 3 Steuerbits 
für die 1-aus-8-Auswahl, die zusammen 9 Steuerleitungen brauchen.

Was ist daran schwer zu verstehen?

Daher meine ich die Lösung einen Analog-MUX mit I2C-Steuerung zu 
verwenden vereinfacht ihm die Problematik von 9 Steuerleitungen.

> Oder hast du am Eingang acht SPI Geräte, die du wahlweise auf einen
> Ausgang schalten möchtest (dann hast du das "BUS" bei SPI-Bus nicht
> verstanden)?

Ich denke: nein. Er hat nirgends 8 SPI-Geräte erwähnt. Und auch nicht 
von mehreren BUSsen gesprochen sondern 3 Signalen aus 8 die einen 
SPI-Bus bilden.

Da hätte er wahrscheinlicher gefragt: "ich habe 8 SPI devices aber nur 
einen SPI-Bus - wie kann ich die Multiplexen?".

Was ist daran für Euch schwer zu verstehen?

Ich denke immer noch dass er einen Kreuzkoppler oder Analog-MUX braucht 
der sich möglichst sparsam ansteuern läßt.

Lassen wir doch den TO antworten welche Vorschläge ihm am besten 
gefallen...

von Herbert (Gast)


Lesenswert?

Matthias L. schrieb:
> Herbert schrieb:
>> Warum verstehst du den TO nicht? Was er will ist eindeutig.
>
> Warum antwortest Du dem TO dann nicht einfach?

Ich provoziere gerne Leute wie Dich und Wolfgang, weil ich eure 
Scheinheiligkeit nicht leiden kann.

von Vancouver (Gast)


Lesenswert?

Mal abgesehen davon, dass ich deine SPI-Sache auch nicht ganz verstanden 
habe... bleiben wir mal bei deiner Frage zum 3-fachen 8:1 Multiplexing. 
Wenn du die möglichen Kombinationen einschränken und ein Steuerbit 
sparen könntest, dann könntest du die drei Muxer mit den 8 Ausgängen 
eines 74hct595 steuern, der seriell über 3 Leitungen vom AVR geladen 
wird. Oder du nimmst stattdessen einen MCP23017 mit 16 Ausgängen, der 
über I2C angesteuert wird. Damit hast du die maximale Flexibilität.
Ist die Frage, was für dich elegant genug ist. Wenn du nur einen 
einzigen Baustein verwenden willst, dann wäre die Sahnelösung sicher der 
FPGA, wie schon jemand erwähnt hat, aber der Designaufwand ist 
vergleichsweise eher heftig.

von Dany (Gast)


Lesenswert?

OK, ich hole etwas mehr aus, da es immernoch Raum für Missverständnisse 
gibt.

Also ich habe hier gut 30 verschiedene Bastelgeräte. Alle möglichen 
Gadgets. Um Ordnung in das Chaos zu bringen habe ich eine eigene 
ISP-Schnittstelle entworfen, die 10 Pins hat. Die 10 Pins sind so 
definiert: VCC, GND, GIO0...GIO7

Es gibt aber keine Rules, welcher GIO welche Funktion haben muss. Ein 
Gerät hat einen AVR, der über GIO0 bis GIO2 programmiert wird, dann hat 
er aber noch auf GIO4 eine UART-Schnittstelle für Nutzdaten. Ein anderer 
hat auf GIO3-GIO6 noch einen SPI für Nutzdaten etc.

Das ist das eine.

Was ich jetzt mache ich einen generellen Debugger, der mit allen Geräten 
kommunizieren können soll. Eine Art "Handy" mit "Apps" halt, wenn man so 
will.

Wenn ich jetzt ein Gadget an meinen Debugger anstecke, muss ich jetzt 
die GIO0...GIO7 so routen, dass sie an einen USART des Debuggers 
ankommen. Ich glaube man nennt sowas Cross Switch.

An einen FPGA dachte ich auch schon, allerdings müsste ich da das SPI 
Protokoll implementieren, und ich habe davon keine Ahnung.

Die anderen Lösungen schaue ich mir nachher nochmal im Detail an. Ich 
wollte jetzt erstmal schnell die Missverständnisse aufklären.

von Dieter W. (dds5)


Lesenswert?

Der Thread läuft mal wieder so, wie viele andere vorher.

Der TO schildert seine Lösung für ein Problem und fragt: geht das nicht 
auch einfacher, besser, ...
Jetzt fängt jeder Leser erst mal an, die angebotene Lösung in das 
Problem zurückzuführen und von da aus eine Verbesserung/Vereinfachung zu 
suchen.

Dabei kommt es oft zu Mehrdeutigkeiten und schon gehen die Diskussionen 
los.
Dass die Schilderung des eigentlichen Problems schneller zu brauchbaren 
Ideen führen könnte, scheint weitgehend unbekannt zu sein.

Just my 2 cents.

Sorry, zu lange kein update gemacht.

: Bearbeitet durch User
von Markus M. (adrock)


Lesenswert?

Ich habe manchmal den Eindruck, die Leute warten hier einfach nur 
darauf, dass sie andere "runtermachen" können. Echt traurig wie offenbar 
gelangweilt, borniert und/oder frustriert einige doch sein müssen.

An den TO: Du hättest genau das besser am Anfang geschrieben, dann wäre 
Deine Frage verständlicher gewesen.

Wie auch immer, der oben vorgeschlagene MT8806 ist so eine Switchmatrix, 
die 8 Eingänge (bidirektional) mit 4 Ausgängen verbinden kann.

https://www.microsemi.com/document-portal/doc_download/127032-mt8806-datasheet-sept11

Gibt es z.B. bei Mouser für um die 4 EUR. Benötigt aber immernoch 6 
Steuerleitungen (5 für die Switchkonfiguration, 1 für STROBE zur 
Datenübernahme).

von Bauform B. (bauformb)


Lesenswert?

Dany schrieb:
> An einen FPGA dachte ich auch schon, allerdings müsste ich da das SPI
> Protokoll implementieren, und ich habe davon keine Ahnung.

Du brauchst doch kein SPI-Protokoll, der Baustein muss doch nicht 
wissen, was für Signale er multiplext. Ein FPGA sollte Tri-State Pins 
haben, also kann jeder Pin Eingang oder Ausgang sein, das muss doch 
reichen. Von echt bidirektionalen Signalen war doch nie die Rede.

Auf der anderen Seite vom FPGA brauchst du allerdings das I2C-Protokoll. 
Naja, vielleicht reichen auch Schieberegister...

von Stefan F. (Gast)


Lesenswert?

Da ISP Programmieradapter Software enthalten, kann man die Pins 
zuordnen, wie man will. Man muss nur das Programm entsprechend 
erweitern. Entsprechende Quelltexte (z.B. USBASP von Thomas Fischl) sind 
frei zugänglich.

So ein Kreuzschalter ist daher nicht notwendig. Und wenn doch, nimm halt 
einen. Aber beklage sich nicht über Aufwand oder Kosten.

Früher als ich noch jung war, kostete ein 8x8 Kreuzschalter Chip von 
Maxim satte 50 Euro. Das war gegenüber allen diskreten Alternativen 
dennoch billig.

Ich persönlich halte gar nichts von solchen "universellen" Geräten, denn 
spätestens in zwei Jahren fehlt da wieder eine Funktion, die du nun 
brauchst aber anfangs nicht berücksichtigt war. Und: Je universeller, 
umso aufwändiger. Selbst wenn wir mal das Geld außen vor lassen lohnt es 
sich nur, wenn man das Ding täglich zig mal benutzt -  für Hobbybastler 
also niemals.

von Peter D. (peda)


Lesenswert?

Dany schrieb:
> Also ich habe hier gut 30 verschiedene Bastelgeräte. Alle möglichen
> Gadgets. Um Ordnung in das Chaos zu bringen habe ich eine eigene
> ISP-Schnittstelle entworfen, die 10 Pins hat. Die 10 Pins sind so
> definiert: VCC, GND, GIO0...GIO7

Sowas nennt man fehlende Planung.
Wenn man nicht vorher vereinbart, welche der 8 Pins SDI/SDO/CLK sind, 
dann muß man eben einen riesen Aufwand treiben.
Man darf auch im Hobbybereich Sachen planen und Vereinbarungen 
aufschreiben.

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.