Empfangen // Senden von Daten über Rs232 Shield

Hallo Community,

das ist mein 1.ster Beitrag, dementsprechend auch neu hier :slight_smile:

Kurz zu meinem jetztigen Stand - Bin schon länger im Bereich Arduino tätig die Grunddinge sind mir soweit auch geläufig (Das Starterkit vom Arduino Uno durchgearbeitet und noch mehr) bin auch soweit fit in der Programmierung.

Nun zu meinem eigentlichen Problem, ich habe mit vor kurzem jetzt ein Rs232-Shield für den Arduino besorgt (Bestellt bei: ARD SHD RS232: Arduino Shield - RS232, MAX232 bei reichelt elektronik )

Wollte mich soweit in die Thematik einlesen zwischen der Kommunikation von PC und Arduino über das Rs232 Shield am Ardunio.

Nur finde ich (nach längerer Suche sei es Google oder auch hier im Forum) nicht was sich da mit den Anfängen befasst.

Bis jetzt habe ich immer über den Seriellen Monitor von der Arduino IDE "gearbeitet" und diese Daten gingen ja aber über den USB Port vom Arduino an den PC.

Nun würde ich da aber gerne weiter gehen.

Hoff ich konnte soweit meine Situation verständlich schildern. Bei weiteren Fragen und Antworten stehe ich gerne bereit.

Danke schonmal im Vorraus :slight_smile:

ich verstehe jetzt nicht genau, was dein Problem ist. das Modul benutzt die vorhandene serielle schnittstelle, da wo auch der usb dranhängt, und stellt anstatt mit 5V die Signale mit rs232 konformen Pegeln zur Verfügung.

Schreib mal, was du letztendlich damit vorhast

Im Grund ist es ein recht kompaktes Projekt,

mein ehemaliger Ausbilder hat mich drum gebeten an einem Sensor der an ein Lesegerät angeschlossen ist die Daten auszulesen die über die Rs232 Schnittstelle ausgegeben werden.

Heißt also das ich die Daten die von dem Anschluss des RS232 normalerweise an einen PC ausgegeben werden über den Arduino weiterleiten soll und diese dann auf einem LCD-Shield ausgeben soll.

Letzten Endes musst du wissen wie die Daten aus deinem Sensor abgefragt werden d.h. wie die Befehle aussehen um dies zu Bewerkstelligungen und die dann mit dem Arduino per Arduino Seriell nachbilden z.B. mit Hilfe von serial.Read() bzw serial.Write().
Das Projekt schein eigentlich gut umsetzbar.
Was sind denn jetzt deine genauen Fragen.
Also

  • Schritt rausbekommen wie die Daten abegfragt werden.
  • Das mal per Hand mit Hterm und einem Rechner nachbilden.
  • Arduino mit LCD ausgabe bauen
  • Arduino mit RS232 den Sensor auslesen (hier würde sich fürs erste ein Arduino MEGA anbieten da man mehere UART Schnitstellen hat mit denen man arbeiten kann. Da kann man die Serielle Console zum debuggen nehmen)
  • Arudino mit LCD und RS232 gemeinsam nutzen
  • Erfolg hier im Forum posten.

Sind zwischendurch Fragen da hier gerne Fragen. Fertige Programme werden hier selten erstellt.
Gruß
DerDani

Benni1005:
Im Grund ist es ein recht kompaktes Projekt,

mein ehemaliger Ausbilder hat mich drum gebeten an einem Sensor der an ein Lesegerät angeschlossen ist die Daten auszulesen die über die Rs232 Schnittstelle ausgegeben werden.

Heißt also das ich die Daten die von dem Anschluss des RS232 normalerweise an einen PC ausgegeben werden über den Arduino weiterleiten soll und diese dann auf einem LCD-Shield ausgeben soll.

So, Du hast nun also einen Adapter mit D-SUB Steckbuchse, an den Du einen D-SUB Stecker mit RS232 -Signal anschließen kannst und der Dir das serielle Signal (hoffentlich in beide Richtungen, zwischen RS232-Pegeln und 5V-TTL Pegeln wandelt.

Was fehlt Dir?

Ein Arduino-Board mit mehr als einer seriellen Schnittstelle?

Die meisten Arduino-Boards haben EINE serielle Hardwareschnittstelle, die softwaremäßig über "Serial" angesprochen wird. Diese Schnittstelle dient dazu, um eine serielle Verbindung zum PC über einen(im allgemeinen bereits auf dem Arduino-Board vorhandenen) USB-Seriell-Wandler und ein USB-Kabel herzustellen.

Manche Arduino-Boards haben mehrere serielle Schnittstellen, zum Beispiel ein MEGA2560 hat insgesamt vier Stück, und neben Serial kann man auf diesem Board auch Serial1, Serial2 und Serial3 nutzen. Zum Beispiel zum Anschluß weiterer Geräte mit serieller Schnittstelle. So wie Du es möchtest.

Hast Du ein Arduino-Board, das mehr als nur eine serielle Schnittstelle hat?

Wenn ja, bist Du fein raus.

Wenn nein, und Du hast nur ein Arduino-Board mit einer einzigen seriellen Schnittstelle und möchtest trotzdem ein weiteres serielles Gerät anschließen, bleibt Dir noch diese Krücke: Die fehlende serielle Schnittstelle auf dem Board per Software emulieren. Das erfordert zwei Pins zum Senden (TX) und Empfangen(RX), und eine Library, die an zwei Pins Deines Boards eine serielle Schnittstelle emuliert. Eine Library namens SoftwareSerial wird von der Arduino-IDE bereits mitgeliefert. Für niedrige Baudratenkann das funktionieren. Maximal 9600 Baud.

Mit welcher seriellen Baudrate möchtest Du Dein externes Meßgerät anschließen?

Okay da ich sogar einen Mega2560 besitze bzw. hier rumliegen habe werde ich denn mal weiter nutzten und das mal ausprobieren.

Danke schonmal für die Hilfe und die Denkanstöße :slight_smile:

Erfolge werde ich so schnell wie möglich ich kann hier posten

Bist du dann fertig mit dem Nano und weiss das alles geht kannst du den Arduino pro mini nehemen und alles über eine serielle Schnittstelle machen und hast dann kein "pinMonster" nur für ne serrielle Kommunnikation und LCD.
Gruß
DerDani

So habe mich jetzt mal die letzten 2 Tage hingesetzt und für mich doch eine recht annehmbare Lösung gefunden, habe die Möglichkeit über die <SoftwareSerial.h> mit einen "künstlichen RX und TX zu “basteln”.

Habe dafür des RS232 Shiela auf dem Arduino befestigt und Pin 10 als RX und 11 als TX stelle genommen. Was für Nachteile des hat weiß ich nicht - bin erstmal froh das ich auf die Rs232 Schnittstelle Daten übertragen kann die auf den Arduino kommen. Lange Rede kurzer Sinn… meine Lösung

Des ist der Teil der für die Übertragung wichtig ist - bin gerade dabei das auf den LCD anstatt auf den Debug Monitor zu bringen

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

SoftwareSerial RS232(10, 11);
LiquidCrystal myLcd (51, 49, 47, 45, 43, 41);

char rs232_inChar;
String Sensor_input;

const int LED = 13;
void setup()
{
  Serial.begin(57600);
  myLcd.begin(16, 2);
  RS232.begin(57600);
}

void loop()
{
  while (RS232.available() > 0) 
  {
    rs232_inChar = RS232.read();            
    Sensor_input.concat(rs232_inChar);      
    if (rs232_inChar == '\r')              
    {                 
      Serial.print(Sensor_input);           
      Befehlseingabe();
      Serial.print('\n');                   
      Sensor_input = "";                    
    }
  }
}

jurs:
Für niedrige Baudratenkann das funktionieren. Maximal 9600 Baud.

Schön zu hören, dass SoftwareSerial bei dir auch mit 57600 geht !

Ich weiß zwar wofür die Baudrate steht und habe das auch mit den 9600 Baud max. gelesen, aber ich war neugierig und wollte wissen ob das auch mit höherer geht, und ich sehe keinen Unterschied. Es kommt beides mit dem gleichen Ergebnis an.

michael_x:
Schön zu hören, dass SoftwareSerial bei dir auch mit 57600 geht !

Also kann ich deine Aussage nicht einordnen als Sarkasmus oder erstaunen :smiley: oder so.

Wäre klasse wenn du mir sagen könntest wie du des meinst, weil für mich zählt jetzt erstmal am Ende des Ergebniss und wenn ich bei beiden das bekomme was ich möchte - ist es ja erstmal nicht relevant oder überseh ich da was?

Also meine Erfahrung mit SoftwareSerial sind so:

  • Bis 9600 Baud funktioniert das ziemlich zuverlässig (Senden und Empfangen).
  • Größere "Geschwindigkeiten" können funktionieren, aber die Zuverlässigkeit nimmt ab, wobei Senden meiner Erfahrung nach besser funktioniert als Empfangen.
  • Große Probleme gibt es, wenn mit höheren Baudraten (also über 9600) "gleichzeitig" gesendet und empfangen werden soll.

Wenn also bei dir SoftwareSerial mit 57600 Baud funktioniert, dann liegt das durchaus im Bereich des Möglichen.
Es könnte vielleicht auch deshalb funktionieren, weil der Mikrocontroller sonst wenig zu tun hat.
Aber es kann passieren, dass Fehler dann auftreten, wenn er plötzlich mehr zu tun bekommt (weil du das Programm ein wenig erweiterst).
Das sind dann so unverhersehbare, versteckte Fehlerquellen, die echt frustrierend sein können.

Es gibt eine Software-Serial-Library, die auch mit höhreren Baudraten umgehen kann (allerdings ist man an bestimmte Anschlusspins gebunden): AltSoftSerial
Siehe:
http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

uxomm:
Also meine Erfahrung mit SoftwareSerial sind so:

Das kann ich nur bestätigen und noch ein wenig erweitern:

Die Funktionssicherheit ist stark von der Kabelqualität und Länge sowie von der Datenmenge abhängig.

Derzeit teste ich das mit ca. 2 Meter Kabel und nur wenigen Bytes per Sendung mit 57600 Baud und das geht problemlos. Hier hat der sendende Controller wenig und der empfangende schon mehr (alles relativ) zu tun.

Bei ihm dürften es bis zum rs232 relativ kurz sein

Also kann ich deine Aussage nicht einordnen als Sarkasmus oder erstaunen :smiley: oder so.

Sorry. Eher erstaunen, bzw. einfach ehrlich gemeint: "Schön zu hören, dass es geht." ( Echt ehrlich jetzt :wink: )

Ich habe so viel schlechtes über SoftSerial gelesen, dass ich gleich zu AltSoftSerial gegriffen habe, als sich mir die Aufgabe stellte.

Probleme wegen Kabellänge sollten aber eigentlich weniger vom Unterschied HardwareSerial/SoftSerial abhängen, sondern von den elektrischen Verhältnissen, und die sind auf Pin 0/1 nicht anders als auf anderen, oder (?)
Die anderen Erläuterungen (Danke uxomm + HotSystems) leuchten mir ein.