Forum: Mikrocontroller und Digitale Elektronik 8 zu 3(1) zu 8 Multiplexen


von row-she (Gast)


Lesenswert?

Hallo zusammen,

ich bräuchte eine Lösung/Empfehlung für folgende Situation:

Ich habe 8 analoge Schalter und möchte über eine Leitung mit max 3 Adern
ein kodiertes Signal schicken dass am Ende 8 Relais ansteuert.
An die Schalter kann ich eine relativ beliebige Spannung anlegen.
(preferiert 9 oder 5 V)

So wie ich das verstehe, ist das ein klassischer Fall für
Multiplexer/Demultiplexer.

Bin neu auf diesem Gebiet und leider recht unerfahren.

Muss ich die Schalter so verdrahten, dass jeder einen binären
Zustand ausgibt (also z.B. Schalter 1 schaltet 5V/0V/0V auf die 
Adresspins
usw.) und dann über eine "gemeinsame" Datenleitung zum Demultiplexer 
schicken wo dann z.B. der Input 1 vom Multiplexer auf den Output 1
vom Demultiplexer geschalten wird?

Oder gibt es da vielleicht eine einfachere Lösung bei der ich nur eine
oder max drei Leitungen habe und einen IC der erkennt wenn z.B Input 1
high ist dann schalte ich Output 1 high usw...? Also sprich ohne
Adresspins...?

Ich hoffe ich hab mich nicht zu missverständlich ausgedrückt,
fall ja, verzeiht es mir, ist wie gesagt recht neu das Ganze für mich..

Vielen Dank im Voraus schonmal für die Antworten.

Cheers

von Sebastian Hepp (Gast)


Lesenswert?

Warum verschaltest du die Schalter nicht so, dass sie die Schalternummer 
in BCD übertragen?
Schalter 1 - Low, Low, Low
Schalter 2 - Low, Low, High
Schalter 3 - Low, High, Low
Schalter 4 - Low, High, High
(...)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

8to3 encoder: 74HC148
3to8 decoder: 74HC138

von Sebastian Hepp (Gast)


Lesenswert?

Sorry, habe nicht genau gelesen, dass die Schalter gleichzeitig auch 
verschiedene Relais schalten sollen.

Wie wäre es mit Schieberegister und über die 3 Leitungen schickt man 
Data, Clock und Reset? (letzteres zur Synchronisation)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Frank M. schrieb:
> 8to3 encoder: 74HC148
> 3to8 decoder: 74HC138

Sorry, das funktioniert nur, wenn nur ein Taster/Schalter aktiv wird. 
Bei mehreren aktiven Tastern funktioniert das nicht.

von Blinky (Gast)


Lesenswert?

Parallel -> Seriell Wandler (Schieberegister)

3 Adern (Clock/Sync, Data, GND)

Seriell -> Parallel Wandler

von The D. (thedaz)


Lesenswert?

Frank M. schrieb:
> Frank M. schrieb:
>> 8to3 encoder: 74HC148
>> 3to8 decoder: 74HC138
>
> Sorry, das funktioniert nur, wenn nur ein Taster/Schalter aktiv wird.
> Bei mehreren aktiven Tastern funktioniert das nicht.

Dann willst du keine Multiplexer/Demultiplexer sondern musst die 
Schalterpositionen als Datenpaket serialisieren/deserialisieren wie 
Blinky beschrieben hat.

Muss über die 3-adrige Leitung auch die Stromversorgung laufen ?

: Bearbeitet durch User
von row-she (Gast)


Lesenswert?

Ok. Danke schonmal für die Antworten!

Das heißt wenn ich mehrere Schalter gleichzeitig aktiv haben will,
brauche ich ein Schieberegister. Womit ich mich natürlich gar nicht
auskenne ;-) Kann man da solch eines verwenden?

http://www.produktinfo.conrad.com/datenblaetter/1000000-1099999/001074782-da-01-en-IC_8BIT_SHFT_REG_SN74AHC595N_DIP_16_TID.pdf

oder gibt es andere Empfehlungen?

Und dabei würde ich dann meine Schalter an QA-QH legen und
die SER und SRCLK Pins benutzen um dann ein Signal auf einen
weiteren solchen IC zu senden wo das Prinzip genau umgekehrt 
funktioniert?

von Peter D. (peda)


Lesenswert?

Es gab früher mal spezielle Fernsteuer-ICs dafür.
Heutzutage würde man 2 MCs entsprechend programmieren, z.B. ATtiny24. 
Einer fragt die 8 Schalter ab, der andere setzt die Relais entsprechend.

von row-she (Gast)


Lesenswert?

Alles klar. Und ohne programmieren? ;-)

von Axel S. (a-za-z0-9)


Lesenswert?

Wenn man maximal 3 Adern für die Verbindung hat, dann geht kein 8-zu-3 
Encoder. Dafür braucht man mindestens eine 4. Ader für GND. Auch 
gewöhnliche Schieberegister brauchen 3 Logiksignale (Clock, Daten, 
Latch) und somit 4 Adern.

Man kann jetzt entweder tricksen und die Schieberegistersteuerung mit 
nur 2 Signalen hinbekommen. Z.B. könnte man bei Relais auf ein extra 
Latch-Signal verzichten; wenn man schnell genug schiebt, dann klappern 
die Relais beim Durchschieben der Daten nicht weil sie zu langsam sind.

Oder man nimmt etwas, das mit 1 oder 2 Signalen auskommt. I²C. 1-Wire 
Bus. UART. Oder irgendwas handgestricktes. Sobald man sich hier 
festgelegt hat, kann man über die Realisierung nachdenken. Aber nachdem 
wir hier in einem µC-Forum sind, würde wohl ein µC mit hinreichend 
vielen Pins für 8 Eingänge (bzw. 8 Ausgänge am anderen Ende) mit einer 
unidirektionen UART Verbindung passen. Braucht sogar nur 2 Adern bzw. 3 
wenn man die Betriebsspannung mit zur Tasten-Einheit übertragen will.

von The D. (thedaz)


Lesenswert?

row-she schrieb:
> Alles klar. Und ohne programmieren? ;-)

Geht, aber dann musst du die Clock-Generierung diskret aufbauen. Der 
Bastel-Aufwand ist mehr oder weniger identisch, aber die uC Lösung ist 
deutlich flexibler.

von row-she (Gast)


Lesenswert?

Axel S. schrieb:
> Wenn man maximal 3 Adern für die Verbindung hat, dann geht kein 8-zu-3
> Encoder. Dafür braucht man mindestens eine 4.

Sorry. Hab mich dumm außgedrückt. Ich hab max. 3 Adern PLUS GND...
...also 4

von The D. (thedaz)


Lesenswert?

row-she schrieb:
> Axel S. schrieb:
>> Wenn man maximal 3 Adern für die Verbindung hat, dann geht kein 8-zu-3
>> Encoder. Dafür braucht man mindestens eine 4.
>
> Sorry. Hab mich dumm außgedrückt. Ich hab max. 3 Adern PLUS GND...
> ...also 4

Und du musst keine Versorgung über die Leitung bewerkstelligen ? Über 
welche Leitungslänge reden wir ?

von row-she (Gast)


Lesenswert?

Ach Mist... Vcc muss natürlich auch noch drüber.
Wollte ein XLR-Kabel verwenden (max. 3m).
Ich gaub ich muss das Projekt nochmal genauer überdenken...

Danke für eure Antworten auf jeden Fall!

von Einer K. (Gast)


Lesenswert?

> Wollte ein XLR-Kabel verwenden (max. 3m).
RS232C geht auf 3 m noch blendend.
RS485 bis 1200m auch in (elektrisch) dreckiger Umgebung.

Tipp:
DMX512 tut fast das was du willst, und verwendet auch mal XLR.
Da kann man sich viel abschauen.

von Blinky (Gast)


Lesenswert?

Braucht noch irgendwas die Spannungsversorgung außer den Schaltern?

Man könnte z.B. auch ein Signal auf VCC aufmodulieren, z.B. das Sync der 
beiden Schieberegister. Dann reichen die 4 Leitungen.

VCC (Sync)
GND
Data
Clock

von The D. (thedaz)


Lesenswert?

row-she schrieb:
> Ach Mist... Vcc muss natürlich auch noch drüber.
> Wollte ein XLR-Kabel verwenden (max. 3m).
> Ich gaub ich muss das Projekt nochmal genauer überdenken...
>
> Danke für eure Antworten auf jeden Fall!

Geht doch super. Wenn du 2 uCs mit UART verbindest dann reicht dir sogar 
ein stinknormales 3-poliges XLR Microkabel.

von row-she (Gast)


Lesenswert?

Ok... mal angenommen ich würde einen MC programmieren.
Kann ich dann mit den 3 plus Masse Adern eines XLR Kabels arbeiten?

Also Vcc/D-Gnd/Data und A-Gnd ?

Dann müsste es auch möglich sein, dass ich bei der Steuereinheit
mit temporären Tastern arbeite und hinten raus die Relais permanent
schalten kann, oder? Dann könnte ich mir nämlich den FlipFop-Aufwand 
auch noch sparen...

Wenn das so geht wie ich mir das vorstelle, habt ihr eine Empfehlung
wie ich da am besten rangeh. Hab noch nie einen MC programmiert
geschweige denn mich damit auseinander gesetzt.

Ein einfaches Tutorial  ein Beispielprogramm für eine solche Schaltung 
etc.

Hab einen Arduino Uno daheim rumliegen...

Wäre alles hilfreich! (Ich weiß ich könnte jetzt natürlich auch
die Suchfunktion nutzen, aber vielleicht kennt ja jemand was,
was einigermaßen auf meine Bedürfnisse zurecht geschneidert ist...)

Danke schonmal!

von The D. (thedaz)


Lesenswert?

row-she schrieb:
> Ok... mal angenommen ich würde einen MC programmieren.
> Kann ich dann mit den 3 plus Masse Adern eines XLR Kabels arbeiten?
>
> Also Vcc/D-Gnd/Data und A-Gnd ?

Wozu A-GND ?

>
> Dann müsste es auch möglich sein, dass ich bei der Steuereinheit
> mit temporären Tastern arbeite und hinten raus die Relais permanent
> schalten kann, oder? Dann könnte ich mir nämlich den FlipFop-Aufwand
> auch noch sparen...

Ja, die Taster könnte der uC erfassen und "hinten raus" in 
Schaltzustände umwandeln.

>
> Wenn das so geht wie ich mir das vorstelle, habt ihr eine Empfehlung
> wie ich da am besten rangeh. Hab noch nie einen MC programmiert
> geschweige denn mich damit auseinander gesetzt.
>

Dann ist das Ding erstmal ein oder zwei Nummern zu gross, egal wie du es 
machst (auch bei diskretem Aufbau). Tutorials gibts genug. Lektion 1 : C 
lernen und eine LED auf dem Steckbrett mit uC zum blinken bringen.

> Ein einfaches Tutorial / ein Beispielprogramm für eine solche Schaltung/
> etc.
>
> Hab einen Arduino Uno daheim rumliegen...

Pssst ... sag das nicht laut. Unbeliebt hier.

>
> Wäre alles hilfreich! (Ich weiß ich könnte jetzt natürlich auch
> die Suchfunktion nutzen, aber vielleicht kennt ja jemand was,
> was einigermaßen auf meine Bedürfnisse zurecht geschneidert ist...)
>
> Danke schonmal!

von Captain Albern (Gast)


Lesenswert?

Falls du Platz und Geld für einen Mikrocontroller hast, wäre das 
wirklich die beste Lösung. Man kann den Controller über zwei Leitungen 
versorgen und die 3. Leitung für eine halbe serielle Verbindung nutzen. 
Das Programmieren ist wirklich sehr einfach, wenn man z.B. ein fertiges 
µC-Board nimmt braucht man nix löten und es gibt entsprechende 
Programmbeispiele für Schalter einlesen, Serielle Schnittstelle etc.

Für 8 Schalter reicht es, immer wieder nur ein Byte zu übertragen, da 
braucht man nicht mal ein Protokoll o.ä. (wenn es nicht 
sicherheitsrelevant oder besonders fehleranfällig ist). Einfach in einer 
Schleife die Schalter abfragen, zu einem Byte verODERn und absenden. 
Dazwischen ein Delay, damit der UART-Puffer nicht überläuft (für 
handbetätigte Schalter z.B. 20ms).

Ja, und ich gebe es zu, mit fertigem Board meine ich z.B. ein Arduino. 
Lebt halt damit.

von The D. (thedaz)


Lesenswert?

Tutorial : http://stefanfrings.de/mikrocontroller_buch/index.html

(danke StefanUs für den link)

von The D. (thedaz)


Lesenswert?

Captain Albern schrieb:
> ...
> Das Programmieren ist wirklich sehr einfach, wenn man z.B. ein fertiges
> µC-Board nimmt braucht man nix löten und es gibt entsprechende
> Programmbeispiele für Schalter einlesen, Serielle Schnittstelle etc.

Wenn man keine Programmiererfahrung hat und erstmal C lernen muss, dann 
ist das eine SEHR große Aufgabe, selbst wenn vieles auf dem Arduino 
vereinfacht ist.
>
> Für 8 Schalter reicht es, immer wieder nur ein Byte zu übertragen, da
> braucht man nicht mal ein Protokoll o.ä. (wenn es nicht
> sicherheitsrelevant oder besonders fehleranfällig ist). Einfach in einer
> Schleife die Schalter abfragen, zu einem Byte verODERn und absenden.
> Dazwischen ein Delay, damit der UART-Puffer nicht überläuft (für
> handbetätigte Schalter z.B. 20ms).

Ich würde trotzdem ein Protokoll einsetzen, um das Front- und Backend 
synchron zu halten (sonst sind die sich irgendwann uneins über den 
Sollzustand wenn immer nur Deltas übertragen werden).

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

row-she schrieb:
> Dann müsste es auch möglich sein, dass ich bei der Steuereinheit
> mit temporären Tastern arbeite und hinten raus die Relais permanent
> schalten kann, oder? Dann könnte ich mir nämlich den FlipFop-Aufwand
> auch noch sparen...

 Bei deinen Kenntnissen (ist nicht böse gemeint) und nur 3m Lange ist es
 am Besten wenn du ein 10-Adriges Kabel nimmst. Geeignete Kabel gibt es
 zu günstigen Preisen überall zu kaufen.
 GND ist gemeinsam und jedes Relais wird einzeln über einen Schalter
 ein- und ausgeschaltet.
 In der Zwischenzeit etwas über uC lernen ;)

von Einer K. (Gast)


Lesenswert?

The D. schrieb:
>> Hab einen Arduino Uno daheim rumliegen...
>
> Pssst ... sag das nicht laut. Unbeliebt hier.

Ist ein Stück Hardware, mehr nicht.
Es ist die Einstellung einiger Arduino Anfänger, welche Anstoß erregt.
Den Boards darf man das nicht anlasten.

row-she schrieb:
> Ok... mal angenommen ich würde einen MC programmieren.
> Kann ich dann mit den 3 plus Masse Adern eines XLR Kabels arbeiten?
Jawoll!
Das sollte gehen.

von row-she (Gast)


Lesenswert?

So... danke zusammen!

Ich will mich sowie so schon lange mal in die düstere C-Welt des
AVR-Programmierns wagen ;-)

Vielleicht ist das hier mal der richtige Anlass.

@thedaz: Danke für den Link - werd ich auf jeden Fall mal studieren.

Ich meld mich dann wieder bei euch wenn ich auf die ersten Probleme,
welche mich in den Wahnsinn treiben werden, stoßen sollte...

derweilen... Cheers

von Axel S. (a-za-z0-9)


Lesenswert?

row-she schrieb:
> Ok... mal angenommen ich würde einen MC programmieren.
> Kann ich dann mit den 3 plus Masse Adern eines XLR Kabels arbeiten?
>
> Also Vcc/D-Gnd/Data und A-Gnd ?

3 Adern reichen. Vcc, GND, Daten.

> Dann müsste es auch möglich sein, dass ich bei der Steuereinheit
> mit temporären Tastern arbeite und hinten raus die Relais permanent
> schalten kann, oder?

Sicher doch. Ich denke mal, du willst 8 Taster und bei jedem Druck auf 
einen Taster soll das zugehörige Relais umschalten (von aus zu ein bzw. 
umgekehrt). Korrekt?

> Wenn das so geht wie ich mir das vorstelle, habt ihr eine Empfehlung
> wie ich da am besten rangeh. Hab noch nie einen MC programmiert
> geschweige denn mich damit auseinander gesetzt.

Dann fang damit an. Die Zeiten dafür sind günstig wie nie. Von der 
Hardware mehr als ausreichend und außerdem noch spottbillig sind Arduino 
nano Module aus China. Stückpreis um die €2,- bei ebay oder AliExpress. 
Da tickert ein ATmega328P drauf und ein CH340 für USB. Stabilen Takt 
haben sie auch. Auf der Relais-Seite brauchst du noch 8 Transistoren 
(oder einen 8-Kanal Treiber a'la ULN2803).

Die UART-Verbindung läßt du einfach mit niedriger Geschwindigkeit (z.B. 
1200Bd) und 5V CMOS-Pegel laufen. Nur noch ein 100R Serienwiderstand auf 
der Senderseite und fertig. Bei 3m Leitungslänge reicht das.

> Ein einfaches Tutorial / ein Beispielprogramm für eine solche Schaltung/
> etc.
>
> Hab einen Arduino Uno daheim rumliegen...

Na bitte. Arduino-IDE installieren und Beispiele/Tutorials zu Digital-In 
und Digital-Out ansehen. Dann noch UART. Und du bist fast fertig. An 
sich bin ich ja kein Fan des Arduino-Zeugs, aber du bist doch voll in 
der Zielgruppe. Also ran an den Feind!

von row-she (Gast)


Lesenswert?

Danke für die Tipps a-za-z0-9!

Der nano sieht tatsächlich recht interessant aus für so
Lainen wie mich :-)

von Jobst M. (jobstens-de)


Angehängte Dateien:

Lesenswert?

Auf einer Seite den Empfänger weg lassen, auf der anderen Seite den 
Sender weg lassen ...
Ist mit µC allerdings eleganter und 'einfacher'.


Gruß

Jobst

von The D. (thedaz)


Lesenswert?

Jobst M. schrieb:
> Auf einer Seite den Empfänger weg lassen, auf der anderen Seite den
> Sender weg lassen ...
> Ist mit µC allerdings eleganter und 'einfacher'.
>
>
> Gruß
>
> Jobst

Hab nie verstanden warum manche bei 5V Vcc immernoch die 40er Reihe 
verarbeiten. Schnarchlahm und höllisch empfindlich. Entweder 74HCT oder 
eben 74HC.

von Jobst M. (jobstens-de)


Lesenswert?

Das kann man ja gerne tun, wenn man möchte. Für diesen Zweck sind sie 
aber schnell genug. Mittlerweile würde ich das auch machen. Was ich 
damals tatsächlich verbaut habe, weiß ich aber nicht mehr.


Gruß

Jobst

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.