Forum: Mikrocontroller und Digitale Elektronik UART => zwischen zwei Sendern umschalten


von Andi R. (Gast)


Lesenswert?

Hallo Schwarmwissen,

ich bastle gerade an einem Messgerät für unseren Mähdrescher.
Dieses kommuniziert per Funk mit einem Terminal in der Garage und 
liefert
verschiedene Messwerte (Temperatur, Füllstand, etc.) bzw. empfängt auch 
Statusinformationen, wieviel Kapazität noch im Silo frei ist.

An dem Modul, was am Mähdrescher montiert ist, soll man aber 
verschiedene Parameter einstellen können.
Dazu gibt es einen kleinen avr controller mit LCD Display, über das sich 
z.B. baudrate und sendeleistung konfigurieren lassen.


Es arbeiten also insgesamt zwei controller und ein Funkmodul im 
Mähdrescher.

Controller A sammelt die Informationen von der Maschine und sendet sie 
über das Funkmodul raus.

Controller B sendet bei Bedarf Konfigurationseinstellungen an das 
Funkmodul.

Das Funkmodul hat aber nur einen UART.

Mein Ziel ist es, dass Controller B durch setzen eines Pins die 
Kommunikation zwischen Controller A und Funkmodul unterbricht und 
gleichzeitig eine Verbindung vom UART des Controller B mit dem Funkmodul
hergestellt wird.

Also im Grunde sowas wie ein Relais was zwischen den RX/TX Leitungen hin 
und herschaltet.

Kann man sowas mit einem USB Switch machen?
Dieser Chip von TI hat im Grunde ja genau das Verhalten, was ich 
suche...

http://www.ti.com/product/ts3usb221

Oder geht es einfacher?

Freu mich auf eure ideen!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Andi R. schrieb:
> Oder geht es einfacher?

Viel einfacher. Wenn du da mit UART Pegel aus dem MC (0-3,3V oder 0-5V) 
umgehst, reichen im einfachsten Fall zwei Dioden als Wired-OR, die gegen 
einen Pullup arbeiten (Ausgang ist low, wenn mindestens ein Eingang low 
ist).
Du kannst auch ein einfaches 'echtes' AND Gatter verwenden. (Ausgang nur 
high, wenn beide Eingänge high sind).
Den RX vom Empfänger leitest du einfach auf beide MC. Wenn die nichts 
voneinander wissen, ist es aber sinnvoll, per Portpin des Masters dem 
Slave zu sagen, wann er darf bzw. die Schnauze halten muss.

von Eric B. (beric)


Lesenswert?

> Oder geht es einfacher?

Ja.
1) Installiere einfach ein 2. Funkmodul, oder
2) Controller B sendet Daten an Controller A (über UART, SPI, I2C, such 
dir was aus) und Controller A funkt an die Zentrale.

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


Lesenswert?

Andi R. schrieb:
> Das Funkmodul hat aber nur einen UART.
Welche UART-Pegel hast du da?
TTL oder "richtige" V24 Pegel mit +-5V (aufwärts)?

> Kann man sowas mit einem USB Switch machen?
RS232 != USB
Ergebnis: nein.

> Also im Grunde sowas wie ein Relais was zwischen den RX/TX Leitungen hin
> und herschaltet.
Nimm doch so ein Relais...

Und vor Allem: zeiche dir und uns einen Schaltplan, dann weiß man wovon 
und worüber man diskutiert...

> ich bastle gerade an einem Messgerät für unseren Mähdrescher.
> Es arbeiten also insgesamt zwei controller und ein Funkmodul im
> Mähdrescher.
Und warum brauchst du da jetzt 2 Controller, die die mit dem Funkmodul 
kommunizieren? Könnte das nicht 1 Einziger machen?

von Andi R. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo und vielen Dank schonmal für die Anregungen.

@Matthias:
Das klingt vielversprechend. Kannst Du mal in den anliegenden Schaltplan 
schauen? Ist das ungefähr das, was Du meintest?

Wenn der KONFIG Pin des Steuercontrollers auf LOW ist,
kommunizieren Sensorboard der Maschine und Funkmodul miteinander.

Wenn der KONFIG Pin auf HIGH gelegt wird, kann der Konfig-Controller mit 
dem Funkmodul reden. Etwaige Antworten des Funkmoduls auf die 
Konfigbefehle gehen dabei nicht zurück zum Sensormodul...

Würde das funktionieren?

Bei dem UART handelt es sich jeweils um 3.3V Pegel.

@Eric: Ein zweites Funkmodul erscheint mir hier nicht zweckdienlich. 
Leider kann ich auch die beiden Controller nicht miteinader sprechen 
lassen, weil es sich bei dem Sensormodul um ein Zubehörteil der Maschine 
handelt.

@Lothar:
Ein mechanisches Relais möchte ich nicht verwenden, da ich schlechte 
Erfahrung mit Datenleitungen über Relaiskontakte gemacht habe.
Bzgl. des USB Umschalters, so handelt es sich nach meinem Verständnis 
doch um einen simplen Schalter, der halt nur für hohe Frequenzen (z.B. 
USB) ausgelegt ist.

von Anton (Gast)


Lesenswert?

Ich glaube nicht, dass das geht.
Wenn dein konfig port auf high geht, kommen bei dem sensor doch lauter 
einsen an...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Andi R. schrieb:
> Leider kann ich auch die beiden Controller nicht miteinader sprechen
> lassen, weil es sich bei dem Sensormodul um ein Zubehörteil der Maschine
> handelt.

Dann solltest du das alles schnell vergessen und dein Modul völlig 
unabhängig von der bisher vorhandenen Hardware über ein eigenes 
Funkmodul ankoppeln. Du kannst ja gar nicht rausfinden, ob das 
'Zubehörteil' gerade was senden will und jeder MC sendet, wann er will.

Dein Modul müsste also die Telegramme des 'Zubehörteils' mitschneiden 
und selbst verarbeiten, um sie dann nach Hause zu senden. Alles andere 
führt früher oder später zur Datenkollision zwischen den beiden MC.

von Andi R. (Gast)


Lesenswert?

Hi Matthias,

das macht nix. Das Sensormodul sendet immer wieder die gleichen 
Telegramme
an das Terminal und in die andere Richtung genauso.
Wenn die Übertragung unterbrochen wird, arbeiten beide Systeme jeweils 
mit dem zuletzt erfolgreich empfangenen Wert.

Ich kann also jederzeit die Kommunikation unterbrechen, ohne dass mir 
die Maschine oder das Terminal übel nehmen.

Wichtig ist für diese Schaltung nur, dass im Konfigurationsmodus

a) keine Sensordaten zum Funkmodul gelangen und
b) die Antworten auf die Konfigbefehle nicht zum Sensorboard gelangen 
können

Und Kollisionen sollten doch eigentlich mit der oben stehenden Schaltung 
vermieden werden, oder?

Wenn der Konfig-Pin HIGH geht, ist die Kommunikation zwischen Sensor und 
Funk gekappt - der Konfig-Controller hat freies Schussfeld.

Ich muss halt nur sicherstellen, dass der Konfig-Controller nicht 
sendet, wenn der Konfig-Pin LOW ist. Aber das ist ja Sache meines 
Programmes.

von Joachim B. (jar)


Lesenswert?

Andi R. schrieb:
> Das Funkmodul hat aber nur einen UART.
>
> Mein Ziel ist es, dass Controller B durch setzen eines Pins die
> Kommunikation zwischen Controller A und Funkmodul unterbricht und
> gleichzeitig eine Verbindung vom UART des Controller B mit dem Funkmodul
> hergestellt wird.

nimm doch einen analog switch einen stino Umschalter

CD HEF 74HC 4053

3 Stk 1xUM

: Bearbeitet durch User
von Axel R. (Gast)


Lesenswert?

2 x MAX3375. Über PIN6 (Standby) kannst Du den nicht benötigten 
hochohmig schalten. Nur als Idee.

von Joachim B. (jar)


Lesenswert?

Axel R. schrieb:
> 2 x MAX3375. Über PIN6 (Standby) kannst Du den nicht benötigten
> hochohmig schalten. Nur als Idee.

OMG, warum Pegelwandler, er kann doch direkt auf der 5 oder 3,3V Seite 
schalten und im 4053 sind 3 STK 2x UM drin, da braucht er nur ein IC 
sogar für beide Richtungen.

von Andi R. (Gast)


Lesenswert?

Hallo Joachim,

vielen Dank für Deinen Beitrag. Den 4053 gibt es ja auch als LV 
Variante, so dass ich direkt die 3.3V UART damit durchschalten könnte. 
Das gefällt mir.

Jetzt habe ich noch zwei Fragen zu dem Datenblatt:

http://www.nxp.com/documents/data_sheet/74LV4053.pdf

1) Was ist Vee? Lege ich den auf GND?

2) Auf Seite 8 ist die On-Resistance dargestellt. Dort steht, bei Vcc = 
3.3V ist RON typ. 100 Ohm. Ist das nicht ein bisschen viel für einen 
UART?

Danke für die Hilfe

von Jay (Gast)


Lesenswert?

Andi R. schrieb:
> Oder geht es einfacher?

Ja, die Ursache des Problems lösen, nämlich dass Controller A und B 
unkoordiniert um eine Ressource (das Funkmodul) konkurrieren.

Damit gibt es einen ganz offensichtlichen Lösungsansatz: Zugriff auf die 
Ressource (Funkmodul) koordinieren. Dazu gehört mehr als die Leitungen 
zu beliebigen Zeiten umzuschalten. Also, z.B.:

Lösung 1) [einfach] Controller A und Controller B in einem einzigen 
Controller vereinigen, der damit exklusiv Kontrolle über das Funkmodul 
erhält und die beiden Funktionen im Controller (Daten übertragen und 
Konfiguration) intern koordiniert.

Lösung 1) [aufwendig] Das Funkmodul erhält einen eigenen Controller C. 
Controller C bedient exklusiv das Funkmodul. Controller A, B und C 
werden über einen geeigneten Bus verbunden. Es wird für den Bus ein 
Anwendungs-Layer definiert und implementiert, der es A und B erlaubt 
koordiniert mit Controller C zu kommunizieren.

Da ich so einen Verdacht habe, wie der Krusch mit Controller A und B 
zustande kam: Arduino? Wenn ja, egal ob Lösung 1 oder 2, schmeiß den 
Arduino-Müll raus und mach es richtig. Du hast einen Mähdrescher. Du 
hast ausreichend Energie um eine anständige, leistungsfähige 
Embedded-Plattform, notfalls sogar einen Car-PC (nicht empfohlen, aber 
es würde gehen) betreiben zu können. Also etwas, was die Funktion von 
Controller A und B in sich vereinen kann.

von Andi B. (Gast)


Lesenswert?

Jay schrieb:
> Ja, die Ursache des Problems lösen, nämlich dass Controller A und B
> unkoordiniert um eine Ressource (das Funkmodul) konkurrieren.

So unkoordiniert ist das nun auch nicht.
Immerhin hat ein Controller die Macht, dem anderen das Wort zu 
verbieten.

Es tut mir sehr leid, dass Dir das Improvisieren einer Lösung so schwer 
fällt aber ich werde nicht gleich den ganzen Mähdrescher neu bauen, nur 
damit ich den Kanal eines Funkmoduls wechseln kann. Auch ein CarPC 
erscheint mir hier völlig daneben. Was soll das bringen?

Es gibt Umgebungsparameter, auf die ich nur bedingt Einfluss habe und es 
gibt welche, die ich beeinflussen kann.

Der ganze Aufbau mit dem Umschalten funktioniert einwandfrei mit zwei 
simplen Kippschaltern. Es geht nur darum, das ganze jetzt elektronisch 
zu machen, damit der zweite Controller seine Modembefehle absetzen kann, 
sobald jemand die Konfiguration geändert hat.
...ohne, dass der Maschinenbediener erst den Kippschalter umlegen muss.

Ein Arduino ist hier nirgendwo im Einsatz, falls Dir das jetzt irgendwas 
bringt.

von Joachim B. (jar)


Lesenswert?

Andi R. schrieb:
> 2) Auf Seite 8 ist die On-Resistance dargestellt. Dort steht, bei Vcc =
> 3.3V ist RON typ. 100 Ohm. Ist das nicht ein bisschen viel für einen
> UART?

auf der µC Seite für Signale interessieren doch 100 Ohm nicht, 100 Ohm 
nach GND ist am Inport genauso low wie 100 Ohm am Inport nach high/VCC 
auch high ist.

: Bearbeitet durch User
von Andi R. (Gast)


Lesenswert?

Habe diesen hier noch in der Kramkiste gefunden.
https://www.fairchildsemi.com/datasheets/FS/FSUSB42.pdf

Funktioniert bestens.

von Joachim B. (jar)


Lesenswert?

Andi R. schrieb:
> Funktioniert bestens.

siehste, der Funktion nach auch ein elektronischer Umschalter, sieht dem 
Symbol nach auch analog aus, wie der 4053.

freut mich wenn es nun klappt was du wolltest.

von Andi R. (Gast)


Lesenswert?

Ja genau. Ich finde das auch ästhetischer als ein paar Logikgatter, die 
vielleicht billiger sind, aber in Summe dann auch aufwendiger 
nachzuvollziehen sind.

Z.B. bei der schaltung oben mit dem AND und den beiden OR Gattern muss 
man beim Lesen wissen, dass ein inaktiver TX immer HIGH ist - sonst 
würd's nicht gehen.

Der Switch ist super easy zu verstehen und zudem spart man noch ein 
Bauteil.

Vielen Dank für den Tip mit dem 4053!

von Joachim B. (jar)


Lesenswert?

Andi R. schrieb:
> Vielen Dank für den Tip mit dem 4053

gerne, mit sowas habe ich schon Porterweiterungen gestrickt ohne mich 
drum kümmern zu müssen welche Signalrichtung gilt!

Die gibt es ja von 1xUM bis 1aus8 oder 1aus16 (De)Multiplexer

: Bearbeitet durch User
von Peter R. (peterfido)


Lesenswert?

Hallo,

ich kenne die Protokolle jetzt nicht. Die Umschaltung soll doch bestimmt 
immer funktionieren. Durch einen einfachen Umschalter würde mitten in 
einem Datentelegramm 'plötzlich' die Konfiguration zwischenfunken und 
umgekehrt.

Da könnte man einen AVR mit 2 HW-UARTs oder als zweites ein Soft-UART 
als Kontroller B nutzen. Wenn das der Kontroller B nicht mit übernehmen 
kann, dann halt ein Kontroller C. So passiert die Umschaltung zwischen 
zwei vollständigen Diagrammen.

Ich persönlich würde, gerade bei einem Eigenbau, nur einen 
Mikrokontroller für alles nehmen.

von Sascha (Gast)


Lesenswert?

Sind deine UART Daten die du an Modul 1 schickst für Modul 2 Geheim?

Weil sonst könnte man seine Software auch entsprechend umschreiben dass 
Daten für Modul 1 immer mit einer "1" anfangen und Daten für Modul 2 
immer mit einer "2".
Wenn dem nicht so ist, ignoriert das entsprechende Modul die Meldung 
einfach.

Klappt natürlich nur, wenn man eine klare Master/Slave Trennung hat und 
die Slaves auch wirklich alle die Schnauze halten sofern sie vom Master 
nichts gefragt werden.

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.