Arduino 2560 Serial Signale invertieren

OP #4427341
Hallo zusammen,
ich hab ein Problem mit einer Seriallen-Schnittstelle.
Ich hab ein Bedieneinheit welches unter folgenden Eigenschaften Signale 
sendet/empfängt:
5V TTL
8N2
Baudrate 9600
Keine Flusssteurung sendet
Tx sendet invertiert
Rx nicht invertiert

Die Frames welche gesendet werden invertiere ich mit einer einfachen 
Transistorschaltung (siehe Bild)und lese Sie mit einem Arduino Mega 2560 
ein.

Die Frames welche ich empfange sind soweit auch plausibel.
Aufbau: <DLE> <STX> <Data> <DLE> <ETX> <BCC>
Signal von Bedieneinheit: 0x67 0x1A 0x02 0xDF 0xF2 0xC5
Eingang des Mega2560: 0x10 0x02 0x79 0xFF 0x10 0x03 0x9d

Das Senden an die Bedieneinheit funktioniert ebenfalls.

Jetzt möchte ich gern den Arduino als Serial-Switch verwenden.
Bedeutet ich möchte die Signale welche von der Bedieneinheit kommen mal 
verarbeiten und ein anderes Mal über eine andere Serialschnittstelle 
raus senden.
Wenn ich die Signale allerdings weiterleite, muss ich diese nach dem 
Ausgang am Mega2560 wieder zurück invertieren.
Mein Gedanke war hier "ich bau die Transistorschaltung einfach ein 
zweites mal und invertiere alles wieder zurück".
Leider scheint dies nicht ganz zu klappen, da die ersten 3 Bytes in dem 
Datenpaket stimmen, die letzten drei jedoch fehlerhaft sind:
Also ich sende das Datenpaket: 0x10 0x02 0x79 0xFF 0x10 0x03 0x9d
Erhalte nach dem invertieren: 0x67 0x1A 0x02 0x27 0x8A 0x00
Erwartet (bzw benötigt) hätte ich: 0x67 0x1A 0x02 0xDF 0xF2 0xC5

Invertiere ich (0x67 0x1A 0x02 0x27 0x8A 0x00) erneut zurück, empfange 
ich wieder: 0x10 0x02 0x79 0xFF 0x10 0x03 0x9d

Wieso kommt es zu diesem Phänomen? Hat jemand eine Idee von euch?
Wieso wird aus 0x67 0x1A --> 0x10 0x03 müsst hier nicht stehen: 0x98 
0xE5
Oder wird hier nicht Bitweise gedreht????

Um das ganze zu testen, schick ich die Signale an Serial1 raus und 
empfang sie wieder am Serial2. Also komplett ohne die Bedieneinheit
Mein Code:
1
byte Buffer[7]= {0x10, 0x02, 0x79, 0xff, 0x10, 0x03, 0x9d};
2

3
void setup()
4
{
5
  Serial.begin(9600, SERIAL_8N2);
6
  Serial1.begin(9600, SERIAL_8N2);
7
  Serial2.begin(9600, SERIAL_8N2);
8
  
9
}
10

11

12
void loop() {
13
  
14
  while(true){
15
    Serial1.write(Buffer,sizeof(btest));
16

17
    delay(500);
18
    Serial.println("");
19

20
    while(Serial2.available()){
21
      Serial.print(Serial2.read(),HEX);
22
    }  
23
  }
24
}

Beste Grüße
Alex
Angehängte Dateien:
#4427399
Läuft deine externe Schnittstelle evtl. auf 0V/12V oder -12V/+12V, und 
du kommst mit deinem Inverter auf nur 0V/5V?

edit: sorry, du schreibst ja die Bedienheinheit hat auch 0V/5V. Daran 
kann es also vermutlich nicht liegen.

Trotzdem:

Poste doch mal den ganzen Schaltplan, incl. dem 2. Inverter, und einem 
Hinweis, wo der Arduino angeschlossen ist (ich nehme an, am Signal ganz 
rechts in deinem ersten Posting).
Gast #4428633
Hi

>Ich hab ein Bedieneinheit welches unter folgenden Eigenschaften Signale
>sendet/empfängt: ....

Gibt es dazu eine auch eine Beschreibung?

Hört sich irgendwie krank an.

MfG Spess
OP #4428654
spess53 schrieb:
> Hi
>
>>Ich hab ein Bedieneinheit welches unter folgenden Eigenschaften Signale
>>sendet/empfängt: ....
>
> Gibt es dazu eine auch eine Beschreibung?
>
> Hört sich irgendwie krank an.
>
> MfG Spess
 Ne leider nicht.
Aber die Kommunikation zur der bedieneinheit ist ja eigentlich auch 
nicht mein Prob sonder das ich das Signal nicht anständig zurück wandeln 
kann...

Hm das mit Software serial kann ich mal probieren, nur verstehen würd 
ichs ned :-I
OP #4431000
Also ich hab das ganze mal an nem RS232 Port am PC getestet.
RS232 --> TTL Converter, Signal mit meiner Schaltung invertiert, 
TTL-->RS232 Converter (am PC wieder empfangen).

Gesendetes Frame:0x10 0x02 0x79 0xFF 0x10 0x03 0x9d
Erhalte nach dem invertieren: 0x67 0x1A 0x02 0x27 0x8A 0x00

Also genau das selbe wie wenn ich es am Arduino MEGA2560 rausschick.
Das ganze kann man doch sicher auch berechnen was beim invertieren 
rauskommen soll? Weiß jemand wie das geht?

Ich dachte eigentlich das Bitweise invertiert wird,
also aus 0x10 0x02 --> 0XEF 0XFD
Aber das kann ja wohl nicht der Fall sein... :-(

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.