UART => zwischen zwei Sendern umschalten

Gast #4449631
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!
(Firma: matzetronics) #4449641
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.
Moderator (Firma: Titel) Persönliche Seite #4449655
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?
Gast #4449717
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.
Angehängte Dateien:
(Firma: matzetronics) #4450681
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.
Gast #4450697
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.
#4450725
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
Gast #4451202
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
Gast #4451260
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.
Gast #4451283
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.
Gast #4451439
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!
#4455820
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.
Gast #4455842
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren