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.
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)?
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.
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.
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
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.
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.
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...
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.
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.
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.
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.
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).
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...
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.
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.