PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zwei Microcontroller an einem RS232



fxt
14.08.2009, 01:36
Hi,

Mein Problem ist folgendes:
Bis jetzt habe ich einen fahrenden Roboter der mit einem rs232 Bluetooth Modul und dem RN Motorcontroll über Bluetooth mit dem PC gesteuert werden kann. Das Motorcontroll wird nur zum Fahren benutzt. Jetzt möchte ich meinen Roboter um einen Greifarm erweitern und für diesen einen eigenen Microcontroller benutzen.

Gibt es eine Möglichkeit, beide Microcontroller über das eine Bluetooth Modul zu steuern?

Ich hoffe es gibt eine Lösung, bei der nicht der Microcontroller die Daten dem richtigen Microcontroller zuordnen muss.

Hier ist ein Video von meinem Roboter: http://www.youtube.com/watch?v=i-yn_aqDDZA

Viele Grüße Felix

recycle
14.08.2009, 02:32
Gibt es eine Möglichkeit, beide Microcontroller über das eine Bluetooth Modul zu steuern?

hmm, viele Möglichkeiten kann ich mir da eigentlich nicht vorstellen.
Wenn der 1. Microcontroller die Daten nicht an den zweiten weitergeben soll, bleibt doch eigentlich nur noch den zweiten Controller auch direkt and die R232 Schnittstelle des Bluetooth Moduls anzuschliessen.
Wenn die Controller nur Daten empfangen, fällt mir spontan nichts ein, warum man deren Eingange nicht beide and den Ausgang vom Bluetooth Modul klemmen können sollte.
In die andere Richtung wird das allerdings nicht so problemlos gehen.

OK, du könntest auch noch einen 3. Controller der die Daten zwischen Bluetoothmodul und den beiden anderen vermittelt, aber ich vermute mal das ist in dem was du nicht willst eingeschlossen.

sast
14.08.2009, 07:41
Hier ist ein Beispiel, wie du es Hardwareseitig verschalten kannst https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=450073&highlight=#450073

Von der Software sollte es so sein, das du entweder eine Adressierung der Kontroller vornimmst, oder aber in den beiden Kontrollern unterschiedliche Befehle nimmst, die du eindeutig zuordnen kannst.Die falschen Befehle müssen dann aber ohne Kommentar vom anderen ignoriert werden.

Wichtig bei dieser Master Slave Variante ist, das immer nur einer redet sonst kommt nur Müll bei den anderen an. Wenn du das beachtest, kannst du ohne Probleme vom PC mit beiden Kontrollern kommunizieren (und zwar inklusive response).

Ach ja, bei dir ist natürlich an Stelle des MAX232 und des USB jeweils ein µC angeschlossen, und wo im Beispiel der µC ist sollte dein MAX232 dran oder was du auch immer zum Pegelwandeln für die PC Schnittstelle nimmst.

sast

Ceos
14.08.2009, 08:46
also die veschaltung ist mir ein wenig spanisch, aber du musst auf jedenfall 2 transistoren verbauen, denn wenn du einfach so die Tx leitung beider µCs an das modul klemmst da ein querstrom zwischen den controllern entstehen würde...

am besten nen pullup an den dateneingang des modul und dann 2 transistoren (je controller einer) die bei einem LOW des µC durchschalten und den moduleingang auf gnd ziehen

by the way du redest von RS232, meinst du nicht UART ? also 5V Pegel? oder haste da noch RS232 wandler drinne ?

sast
14.08.2009, 09:14
Die Verschaltung funktioniert so nur bei der TTL Pegel Seite.

Was für Querströme fließen denn zwischen den Kontrollern? Und wo überhaupt?

Also ich habe anfänglich das Ganze auch immer mit Transistoren aufgebaut und bin irgendwann mal zur Dioden Methode gewechselt. Bisher gabs da noch nie Probleme. Mir ist auch nicht so richtig klar wo die auftreten sollten. Habe schon Schaltungen aufgebaut in denen so 5 und mehr Kontroller an einem Max232 hingen und auch noch mehrere MAX232 miteinander verschaltet waren um dann über eine RS485 Schnittstelle mit der 200m entfernten Controleinheit zu kommunizieren.

sast

Ceos
14.08.2009, 22:12
wenn die beiden sendeleitungen verbunden sind, und der eine seinen sendepin auf gnd legt ud der andere seinen auf VCC hat ... gibtsn kurzen der dir auch mal die uart zerschiessen kann

sast
14.08.2009, 23:44
VCC +5V
|
| | R
|_|
_________ TX | TX ________
|µC |-----------|<|-----+----------|>|------------|µC |
| | |RX | |
| | ____|______ | |
| | RX TX| MAX232 | RX | |
|________|-------+------|___________| ----------|_______|
|___________________________|


So habs mal auf die Problemstellung angepasst

Wie man sieht sind die beiden Transmit-Leitungen durch die Dioden getrennt. Der Strom fließt durch den Widerstand und den RX vom MAX. Und wenn ein Controller die Leitung auf Masse zieht, dann läßt das den anderen völlig kalt.

sast

fxt
15.08.2009, 00:35
Hi,
danke schon mal für die Hilfe. Hier ist der Schaltplan für die derzeitige Schaltung zwischen dem Bluetoothmodul und dem RN MotorCtrl.

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2369

Ich hoffe es ist möglich den Datenverkehr in beide Richtungen laufen zu lassen.

Felix

fxt
16.08.2009, 13:49
Wie groß wäre denn der Aufwand, wenn man den Arm über das Arduino steuern würde und das Arduino gleichzeitig die Befehle, die an das MotorCNTRL gehen sollen, weiterleitet?

sast
17.08.2009, 08:11
RX ------------------+--------------------------------------------- TXD
RX___________________|

5V
|
| |
|_|
| ___ 0..3V Signal
TX -------|<|----------------+------------------------|___|---+-------RXD
| |
| | |
TX _____|<|__________________| |_|
|


Wenn du das Arduino zum Weiterleiten nimmst wird der Aufwand auch bloss nicht geringer, da du ja auch gern die Antworten vom RN Control möchtest, wenn ich das richtig verstanden habe.

sast

Richard
17.08.2009, 18:10
Moin moin.

Erst einmal ist es dem Funkmodul voll egal was da kommt,
das überträgt quasie alles. Wenn mann dann beigeht und die
Datenleitungen TX/RX (BUS) Elektrisch wie einen CAM BUS =
open Kollecktor ausführt können jede Menge Teilnehmer
Parallel angeschlossen werden. :-)

Natürlich nur auf der µC Seite. Die Pegelanpassung kann dann
die Software übernehmen, in Bascom kann die RS232 auch
invertiert arbeiten. Der Master PC muß dann allerdings vor jeder
Sendung eine Adress ID stellen und der jeweilige Slave alles
verwerfen was nicht für ihn bestimmt ist.

Das könnte in etwa so aussehen:

ID = xy.....................Slave Adresse
Senden = >...............Slave soll seineParameter senden
Empangen = <...........Slave soll Befehl empfangen
Byte = xyz.................PC erwartet/sendet xyz Byte und "legt auf"

RS232 input IRQ..

ID richtig

.....Senden = > sub senden

.....else Sub Empfangen = <

ID Falsch

ret

OK. das ist jetzt natürlich kein "Programm", sollte aber als
denkansatz helfen.

Gruß Richard

fxt
25.10.2009, 00:05
ich könnte doch auch die Befehle über I2C weiter an den Motortreiber geben oder?