Ardunio Mega 2560 Serial1 RS 232 Eingang

Hallo Zusammen,

vielleicht hat jemand ein Idee und kann mir helfen. Ich habe ein Touchpanel und sende von dort ein Short RS232. Aber egal was ich von dort sende (BIN, DEC oder HEX) kommt es nicht richtig am Arduino an. Ich benutze folgenden Sketch

void setup() {
  // initialize both serial ports:
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  // read from port 1, send to port 0:
  if (Serial1.available()) {
    short inByte = Serial1.read();
    
    Serial.println(inByte, BIN);
  }

}

Wenn ich zum Beispiel eine 2, DEC sende dann bekomme ich eine 63, DEC zurück. sende ich eine 11111111, BIN (255) dann bekomme ich eine 1011, BIN zurück.

Ich habe noch nicht verstanden, ob ich ein falsches Byte auslese. Ich sende eine RS232 (9600,N,8,1)

Vielen Dank

Der Mega kann kein RS232, ohne Zusatzhardware.

Und ein "Short RS232" ist mir noch nie begegnet. Den Begriff gibt es im RS232 Standard nicht.

Übrigens:

Reference > Language > Variables > Data types > Short short

[Data Types] Description A short is a 16-bit data-type.

On all Arduinos (ATMega and ARM based) a short stores a 16-bit (2-byte) value. This yields a range of -32,768 to 32,767 (minimum value of -2^15 and a maximum value of (2^15) - 1).

Willst du das?

OK, dachte schon ich bin zu blöd. :-) dann werde ich mir mal ein Shield oder IC zulegen. Danke.

Naja, war nur ein Versuch mit dem SHORT, da vom Panel auch nur ein CHAR, SHORT oder INT kommt. Byte kann das Panel nicht.

Du sprichst in Rätseln...

RS232 ist eine eine Byteweise Kommunikation.

OK, da muss ein Byte nicht unbedingt 8 Bit haben, aber Trotzdem.

Ich habe ein Touchpanel

Interessant.

Und was sagen die Kollegen im "Touchpanel" Forum? Die sollten zumindest einen Arduino dem Namen nach kennen.

dachte schon ich bin zu blöd

Hmm, deine Kommunikation ist verbesserungsfähig, würde ich mal zustimmen. Sorry ;)

CHAR und byte sind eventuell nicht weit auseinander, aber da die Gegenseite völlig unklar ist, ist selbst meine Super-Glaskugel trüb geworden.

Ja, das meine Dinge nicht immer ganz logisch sind, weiß ich. :-)

Das war auch jetzte der letzte Auszug den ich probiert habe. Habe alles durch. Mit INT BYTE SHORT und BIN BCD DEC

Wo der Unterschied liegt, weiß ich. Aber das Panel hat nun mal nur das Char als Byte. Und wird auch als dieses deklariert und nicht als ZEICHEN.

Die habe ich schon angefragt, aber leider noch keine Antwort erhalten.

Aber da Combie ja schrieb, ohne zusätzliche Hardware geht es nicht werde ich das mal mit nem Shield Aufbau versuchen. Kommt dann am WE dran.

Ein bisschen stellst du dich an.... Sage doch einfach, dass geheim bleiben soll, welches TouchPanel du verwenden willst.

Denn: Dann können wir uns alle zurücklehnen und sagen: Lies das Datenblatt doch selber!

Vielleicht meint dein ominöses Touchpanel das mit dem "RS 232" ja gar nicht wörtlich. ;) Ein Arduino hat jedenfalls KEINE RS 232 - Schnittstelle. Abgesehen von den Steuersignalen gibt es keine Pegel -15V .. +15V

Kannst du es denn direkt an einen PC anschliessen und sehen, was da gesendet wird?

Wenn ja, wie schliesst du das an, und was siehst du genau? (Unter einem PC kann ich mir was vorstellen, ein Touchpanel kann alles mögliche sein)

Das ist ein Weintek TouchPanel. WBGSE070. Das blöde ist, dass ich am PC leider keinen Seriellen Eingang habe und auch kein USB-Serial Adapter.

Das Panel macht RS232 sowie RS485 2W und 4W.

Ich sende dort über das freie Protocol. Einstellung RS232 (9600,N,8,1)

Bekomme ja Daten aus dem Panel aber ich kann die leider nicht zuordnen.

Bekomme ja Daten aus dem Panel

Ganz schön robust, so ein Arduino.

RS 232 und Serial sind zwei verschiedene Dinge!

Hab zu Hause noch ein MAX 485 rum liegen. Da das TouchPanel das auch kann werde ich das mal versuchen. :-)

Danke

Hab ich jetzt auch verstanden. Bin davon ausgegangen, da ja bei unseren Elektroniken auch immer Serial gesendet wird (RS232 oder RS484, zumindest wird es so genannt), dass es das gleiche ist.

Der Arduino hat eine serielle Schnittstelle mit 5V Pegeln. Auch TTL genannt. Rs232 ist vom Protokoll her das gleiche, jedoch mit anderen Spannungspegeln. Könnten u.U. Auch 5V sein, dann aber -5V für high und +5V für Low Pegel.

Ich glaube aber eher, dass dein Touch Modul 5 V TTL Schnittstelle hat.

Wenn dem so ist, dann muss ich mir die Daten mal vom TouchPanel vornehmen.

Ich glaube aber eher, dass dein Touch Modul 5 V TTL Schnittstelle hat.

Ich eher nicht.

Solche Hersteller irren sich in solchen Details nicht. Wenn die RS232 sagen, dann meinen die das auch.

ich werde das TTL Shield mal versuchen und dann gebe ich eine Rückmeldung, ob das geklappt hat.

Danke schon mal für die Hilfe

combie: Ich eher nicht.

Solche Hersteller irren sich in solchen Details nicht. Wenn die RS232 sagen, dann meinen die das auch.

Hast recht. Bei 461€ :money_mouth_face: Data sheet

Hi

Warum nicht zuerst Mal messen, was das Panel raus spuckt? Wenn Logik-Pegel: LA (Logic analyser) dran und schauen, ob man Da was heraus findet. Wenn kein TTL, hat man zumindest die groben Spannungen und kann mit einem Oszi bewaffnet (DSO wäre hier wohl von Vorteil) dem Protokoll auf den Zahn fühlen.

Wenn man aber nur einen Arduino, ein Panel und etwas C&P-Code hat - wird's mit der Analyse schwieriger.

MfG

Da muss man nix messen...

Die Doku ist eindeutig! TTLSeriell ist halt nicht RS232 Und darum sollte ein Adapter mit einem MAX232 dazwischen gesetzt werden, welcher unter anderem die Pegel invertiert.

Das der Arduino bisher noch nicht explodiert ist, liegt sicherlich daran, dass RS232 per Definition Kurzschlussfest ist, also eine eingebaute Strombegrenzung hat.

Ich habe immer noch das gleiche Problem.
Hab das TouchPanel auf RS485 2W umgestellt und ein RS485 TTL SHiled dazwischen.

Ich bekomme aber immer noch nicht die richtigen Daten.

Das bekomme ich zurück
253
246
242
247
234

gesendet habe ich aber eine
0
1
2
3
4

und zwar mit diesem Sketch:

void setup() {
  // initialize both serial ports:
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  // read from port 1, send to port 0:
  if (Serial1.available()) {
    byte inByte = Serial1.read();
    
    Serial.println(inByte);
  }

}

und das im TouchPanel

macro_command main()

unsigned char MIDIControl[10] = {0,1,2,3,4,5,6,11,22,33}
unsigned char MIDIControlNeu[2]
short nn

GetData(MIDIControlNeu[0], "Local HMI", LW, 85, 1)


//FILL(MIDIControl, 120, 1)

OUTPORT(MIDIControl[0],"Arduino",10)
OUTPORT(MIDIControlNeu[0],"Arduino",1)
end macro_command

kann mir jemand helfen?