Hallo:) Über den RS232 möchte ich ein Arduino über zwei Terminals Daten senden und Empfangen d.h wenn ich vom Arduino aus was senden möchte soll es am Terminal vom RS232 erscheinen und wenn ich vom RS232 schreiben möchte sollte es am Arduino Terminal anzeigen. Mein RS232 ist mit einem Pegelwandler Max232CPE verbunden und dieser ist mit dem Tx udn Rx am Arduino verbunden. Nun versuche ich ein Programm zuschreiben bei dem ich beliebig Zeichen senden kann dass zum einen am Terminal vom Arduino angezeigt werden soll und am Terminal vom RS232. Zwar weiss ich im groben dass ich eine read und write Funktion brauche aber ich weiss nicht wie ich die einbinden sollte dass wenn ich was vom Arduino aus schreibe dass er die daten sendet. Und wenn ich vom RS232 schreibe dass er die daten empfangen soll. Für RS232 verwende ich Putty. Über hilfreiche Tipps wäre ich sehr dankbar:)
Hi, Soweit ich weiß, benutzt du einen Arduino Uno. Dieser hat nur EINE serielle Schnittstelle. Das Terminal der Arduino IDE kommuniziert nur über ein "gefaktes" USB mit dem Arduino. Es ist ein USB-Seriell-TTL-Wandler auf dem Board, welcher mit den UART-Pins des Atmelcontrollers verbunden ist. Wenn du an diese Pins jetzt einen MAX232 hängst und über eine echte serielle Schnittstelle komunizierst brauchst also absolut keinen Code in deinem Arduino. Eig brauchst du nichteinmal einen Controller auf dem Board denn die beiden seriell-wandler sind schon Hardwaremäßig über das Board verbunden. Typischer Fehler: RX/TX vertauscht? Chris
Habe noch nicht dort nachgefragt werde ich vielleicht es tun. Ich möchte aber wenn ich was am Terminalschreibe dass es zum RS232 über tx gesendet wird. Ist das nicht möglich? Das versuche ich gerade mit meinem Programm zu schreiben
Adrian schrieb: > Mein RS232 ist mit einem Pegelwandler Max232CPE verbunden > und dieser ist mit dem Tx udn Rx am Arduino verbunden. Bei den meisten Arduino-Board sind Rx/Tx mit dem USB-Seriell Wandler auf dem Arduino-Board verbunden und wenn Du bei eingestecktem USB-Kabel da noch eine zweite serielle Schnittstelle anschließt, fabrizierst Du einen Kurzschluss. Welches Arduino-Board verwendest Du?
Ein Arduino-Uno. Sorry Ich glaube ich hab da was falsch beschrieben. Also am TTL-Ausgang vom Max232 gehen die Pins zum TX und RX nicht von dem RS232 aus. Genau so sieht meine Schaltung gerade aus: http://cdn.webdca.com/avr/images/schematics/max-232-arduino-lg.png und hier möchte über Rs232 daten zum Arduino senden
Adrian schrieb: > Ein Arduino-Uno. > Sorry Ich glaube ich hab da was falsch beschrieben. Also am TTL-Ausgang > vom Max232 gehen die Pins zum TX und RX nicht von dem RS232 aus. > Genau so sieht meine Schaltung gerade aus: > http://cdn.webdca.com/avr/images/schematics/max-232-arduino-lg.png und > hier möchte über Rs232 daten zum Arduino senden Also Du möchtest den Arduino in der Mitte von zwei Terminals haben, die sich gegenseitig hin- und herschreiben können? Das eine Terminal ist ein PC mit USB-Anschluß und das andere Terminal hat einen RS232-Anschluß? In dem Fall benötigt der Arduino zwei serielle Schnittstellen. Da ein UNO nur eine HardwareSerial hat, kommt beim UNO als zweite serielle Schnittstelle nur eine SoftwareSerial in Frage. HardwareSerial ist über RX/TX (Pin-0/1) und das USB-Kabel verbunden, das Du an einen PC anstöpseln kannst. Deinen Max232 kannst Du an ANDERE Pins des Arduino-Boards anschließen, über die Du per SoftwareSerial eine serielle Schnittstelle in Software emulieren kannst. Dann kannst Du das Board über USB an einen PC anschließen und bekommst eine serielle Schnittstellen. Und Du kannst (denselben oder einen anderen) PC an den RS232 Adapter anschließen und der PC bekommt noch eine serielle Schnittstelle. Zwischen beiden seriellen Schnittstellen kannst Du dann ungefähr mit so einem Code hin und her schreiben (ungetestet):
1 | #include <SoftwareSerial.h> |
2 | SoftwareSerial rs232(8,9); |
3 | |
4 | void setup() |
5 | {
|
6 | Serial.begin(9600); // HardwareSerial an Pin-0/1 aktivieren |
7 | rs232.begin(9600); // SoftwareSerial an Pin-8/9 aktivieren |
8 | }
|
9 | |
10 | void loop() |
11 | {
|
12 | while (Serial.available()) // HardwareSerial hat Zeichen |
13 | {
|
14 | rs232.write(Serial.read()); // Zeichen auf Serial lesen und an rs232 senden |
15 | }
|
16 | while (rs232.available()) // SoftwareSerial "rs232" hat Zeichen |
17 | {
|
18 | rs232.write(Serial.read()); // Zeichen auf SoftwareSerial lesen und an HardwareSerial senden |
19 | }
|
20 | }
|
Zum Testen mag das mit SoftwareSerial vielleicht reichen, allerdings ist die standardmäßige SoftwareSerial-Library eine den Arduino-Machern total mißratene Library. Nach Möglichkeit solltest Du als per Software emulierte Schnittstelle besser die AltSoftSerial-Library verwenden: https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.