Forum: Mikrocontroller und Digitale Elektronik Serielle Daten auf verschiedene Leitungen schicken (Demux)


von Adrian E. (ahsd)


Lesenswert?

Hi,

wenn man serielle Daten von einem Mikrocontroller an verschiedene 
Empfänger schicken will, z.B. mal an eine MIDI Schnittstelle, oder RS232 
und im nächsten Moment an ein Schieberegister, wie stellt man das 
üblicherweise an?

Einfachere µCs haben ja nur eine serielle Schnittstelle. Wenn ich 
mehrere Schieberegister habe, kann ich jeweils bei einem den ENABLE Pin 
verwenden. Wenn ich allerdings noch eine MIDI Schnittstelle ansteuere, 
wie sorge ich dafür dass diese sich nur zur richtigen Zeit angesprochen 
fühlt? Muss ich einen Solid-State Switch davor setzen?
Wie sieht es mit Demultiplexern aus, verwendet man die an solcher Stelle 
um Signale zu "routen" und könnt ihr mir ein Standardmodell nennen, z.B. 
im DIP8 Format?

Liebe Grüße und Frohe Weihnachten!
Adrian

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

Adrian E. schrieb:
> wie sorge ich dafür dass diese sich nur zur richtigen Zeit angesprochen
> fühlt? Muss ich einen Solid-State Switch davor setzen?

Kommt drauf an, wo du umschalten willst - auf TTL-Niveau oder auf 
Leitungsniveau, z.B. RS232C. Bei letzterem brauchst du Schalter, die die 
Spannungen schalten können, ja das ist sowas wie ein Relais, egal ob 
mechanisch oder Halbleiter.

Wenn du auf TTL-Niveau umschaltest, brauchst du für jeden Zweig eigene 
Treiber, das aber dafür den Vorteil, dass du zum Umschalten 
Logikbausteine verwenden kannst und dass die Treiber verschieden sein 
können, z.B. RS232C oder RS485 usw.

Demultiplexer im 8pol Gehäuse gibt es meines Wissens nicht, weil da 
zuwenige Pins zur Verfügung stehen, gut geeignet ist ein 74xx138.

Georg

von Adrian E. (ahsd)


Lesenswert?

Hi,

der 74xx138 ist auf jeden Fall schon mal das richtige für etwas größere 
Schaltungen.

Könnte mir noch jemand ein standard Solid State Relais für 5V 
Digitalsignale empfehlen? Kein nennenswerter Strom, am besten TO-92 
Gehäuse.

Gruß!

von Adrian E. (ahsd)



Lesenswert?

In meinem konkreten Anwendungsfall geht es darum, wahlweise einen MIDI 
Ausgang oder ein Schieberegister anzusprechen. Da ich nur normale 
Transistoren da habe, würde ich eine "Enable" Funktion des MIDI Ausgangs 
jetzt folgendermaßen realisieren: (Siehe Bild)

5V (µC)   - Wird vom µC auf high gehalten, beim MIDI Senden
Rechteck  - Die seriellen Daten vom µC

Rechts sieht man noch wo mein Oszilloskop angeschlossen war.
Laut MIDI Spezifikation werden 5mA übertragen (In der Testschaltung 
durch den 1K Belastungswiderstand).

Sind die sehr geringen Ströme vom µC zum ersten Transistor problematisch 
in Bezug auf die Störanfälligkeit?

Was mache ich mit so einer Schaltung wenn auf der Leitung zum Empfänger 
quasi gar kein Strom übertragen wird? (Was für Basisströme berechne ich 
dann?)

Liebe Grüße,
Adrian.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Was sind denn Deine Anforderungen?
SPI-Master, I2C-Master oder UART-TX kann man bequem mit beliebigen 
IO-Pins machen. Dazu brauchst Du keine externen ICs.

von Frank K. (fchk)


Lesenswert?

Adrian E. schrieb:

> Einfachere µCs haben ja nur eine serielle Schnittstelle.

Dann nimm halt einen, der mehr hat. Gibt ja genug davon, auch in DIP.
Der PIC24FJ128GA202 hat sogar 4 UARTs, 3 SPI und 2 I2C - in SDIP28.

Schieberegister kannst Du auch per GPIO steuern.

Und wenn Du mehr UARTs brauchst, gibts dawas von Ratiopharm ... äh ... 
NXP:
http://www.nxp.com/documents/leaflet/75015676.pdf

fchk

von Adrian E. (ahsd)


Lesenswert?

Peter D. schrieb:
> Was sind denn Deine Anforderungen?
> SPI-Master, I2C-Master oder UART-TX kann man bequem mit beliebigen
> IO-Pins machen. Dazu brauchst Du keine externen ICs.

In diesem Fall geht es um MIDI, also UART-TX, denke ich. Die 
Mikrocontroller, die ich bis jetzt verwendet habe (Attiny2313, Atmega8) 
können nicht die I/O Pins der seriellen Schnittstelle wechseln, soweit 
ich weiß.
Gibt es welche von Atmel die das können? Oder würdest du eine manuelle 
"Bit-Banging" Lösung vorschlagen?

Ich würde gerne erst mal bei Atmel bleiben, da ich dafür die Programmer 
habe.

Gruß!
Adrian

von Frank K. (fchk)


Lesenswert?

Adrian E. schrieb:

> In diesem Fall geht es um MIDI, also UART-TX, denke ich. Die
> Mikrocontroller, die ich bis jetzt verwendet habe (Attiny2313, Atmega8)
> können nicht die I/O Pins der seriellen Schnittstelle wechseln, soweit
> ich weiß.

Nein, Programmeble Pin Select, d.h. die Zuordnung von 
Peripheriefunktionen zu (fast) beliebigen IO-Pins, hat AVR nicht. Das 
haben die meisten PIC24, einige PIC32 und wenige PIC16/PIC18. Ist, wenn 
vorhanden, sehr schön, um ein optimales Layout einfach hinzubekommen.

Du brauchst doch aber nur einen UART für MIDI und ein SPI für Deine 
Schieberegister. Das hat sogar der Mega8, wobei ich eher den 
pinkompatiblen, aber besseren Mega88 kaufen würde.

Wenn Du zwei UARTs brauchst, gibts zB den Tiny841.

> Ich würde gerne erst mal bei Atmel bleiben, da ich dafür die Programmer
> habe.

Sei doch ehrlicher und sage "weil ich mich darin gerade mit Müh und Not 
irgendwie eingearbeitet habe". Ein Pickit3-Clone kostet 20 Euro, ist 
also kein Kostenargument.

fchk

von Peter D. (peda)


Lesenswert?

Adrian E. schrieb:
> Oder würdest du eine manuelle
> "Bit-Banging" Lösung vorschlagen?

Wieviel MIDIs willst Du denn?
Die genannten haben doch eine UART.

Bit-Banging für weitere MIDIs geht natürlich auch.

von U. M. (oeletronika)


Lesenswert?

Hallo,
> Adrian E. schrieb:
> wenn man serielle Daten von einem Mikrocontroller an verschiedene
> Empfänger schicken will, z.B. mal an eine MIDI Schnittstelle, oder RS232
> und im nächsten Moment an ein Schieberegister, wie stellt man das
> üblicherweise an?
MIDI und RS232 sind asynchrone Schnittstellen. Für diese verwendet man 
möglichst eine UART.

Schieberegister haben eine synchrone Schnittstelle (Clock + Data).
Dafür ist eine UART NICHT zweckmäßig.
Meist gibt es Pins, die leicht als SPI-Interface zu verwenden sind.
Einzelne GPIO-Pins als Chip-Selekt bzw. als Latch-Sigbnal zu verwenden 
bleibt dir dabei völlig frei gestellt.
Gruß Öletronika

: Bearbeitet durch User
von Adrian E. (ahsd)


Lesenswert?

U. M. schrieb:
> MIDI und RS232 sind asynchrone Schnittstellen. Für diese verwendet man
> möglichst eine UART.
>
> Schieberegister haben eine synchrone Schnittstelle (Clock + Data).

Du hast völlig Recht. Ich war mir irgendwie sicher, dass sich die I/O 
Pins von SPI und UART überschneiden. Dafür muss ich mich entschuldigen, 
hätte ich mal gleich ins Datenblatt geschaut...

: 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.