Forum: Mikrocontroller und Digitale Elektronik RS232 Arduino


von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

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:)

von Chris (Gast)


Lesenswert?

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

von Chris (Gast)


Lesenswert?

PS: schonmal im Arduino-Forum gefragt?

von Adrian (Gast)


Lesenswert?

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

von Jürgen S. (jurs)


Lesenswert?

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?

von Adrian (Gast)


Lesenswert?

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

von Jürgen S. (jurs)


Lesenswert?

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
Noch kein Account? Hier anmelden.