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