Arduino serielle Kommunikation über TTL mit einem anderen Gerät zeigt kryptische Zeichen

Gast #5375794
Lesenswert?

Hallo,
ich möchte einen Datenstring von einem Messgerät mit einem Arduino 
auslesen. Dies soll über serielle Kommunikation laufen. Ich weiß das der 
serielle Ausgang meines Messgeräts TTL-Logik (0 bis +5V) hat. Daher habe 
ich meinen Arduino Mega direkt an TX, RX und GND angeschlossen. Für die 
Datenerfassung und Ausgabe an den seriellen Monitor verwende ich 
folgenden Sketch:
String input;
//////////////////////////////////////////////////////////////////////// 
/////
void setup() {
  Serial.begin(38400);
  Serial.println("ttl started");

  Serial1.begin(115200);
}
//////////////////////////////////////////////////////////////////////// 
/////
void loop(){
  if (Serial1.available()) {
    input = Serial1.readString();
    Serial.println(input);
  }
}

Mein Problem ist nun, dass die empfangenen Daten nur aus kryptischen 
Zeichen besteht (siehe Bild). Ich weiß, dass die Baudrate von 115200 
stimmt.
Könnt ihr mir da weiterhelfen woran das liegt?
Angehängte Dateien:
#5375879
Lesenswert?

Hallo,

welcher Arduino?
Ist Serial1 hardware oder Softserial?
SoftSerial schafft mit einem Mega328 keine 115200Baud.
Warum sendest Du mit 38400? Wenn mehr Zeichen mit 115200 reinkommen 
läuft der Buffer von Serial1 sowieso über weil er die Zeichen nicht los 
wird.

Gruß aus Berlin
Michael
Gast #5376010
Lesenswert?

Darius schrieb:
> Mein Problem ist nun, dass die empfangenen Daten nur aus kryptischen
> Zeichen besteht (siehe Bild).

Die Daten sehen doch sehr regelmäßig aus, d.h. es handelt sich lediglich 
um ein Verständnisproblem.
Hast du einen Logikanalysator oder ein Oszi - dann zeige mal, was in den 
µC seriell rein läuft.

Wenn das mit der hohen Baudrate beim Empfang und der niedrigen beim 
Senden klappen soll, muss die Datenquelle regelmäßig Pausen machen und 
du brauchst einen ausreichend großen Puffer.
Gast #5376056
Lesenswert?

Patrick C. schrieb:
> Wie weiszt du dass ? Mit oscilloscope geprueft ? Versuch mal ob andere
> baudrates vielleicht eine besser lesbaren text geben.

Genau!

Wolfgang schrieb:
> Die Daten sehen doch sehr regelmäßig aus, d.h. es handelt sich lediglich
> um ein Verständnisproblem.

Genau!

Du hast ganz ziemlich sicher eine falsche Baudrate eingestellt! 
Interessant dass Du anscheinend ein CR/LF hast. Wieviele Zeichen 
erwartest Du pro Datensatz? So könntest Du etwa die wirkliche Baudrate 
abschätzen!
Die ist warscheinlich VIEL niedriger! Das zeigen schon die vielen 
Zeichen im Extended-ASCII-Raum.

Und überprüfen:

Route 6. schrieb:
> TTL-Logik wie es der UART ausgibt oder RS232-Logik aber mit TTL-Pegel?

Gruss Chregu
Gast #5376890
Lesenswert?

Vielen Dank für eure vielen Kommentare.

Route 6. schrieb:
> TTL-Logik wie es der UART ausgibt oder RS232-Logik aber mit TTL-Pegel?

RS232-Logik mit TTL-Pegel

Florian schrieb:
> Soll das Messgerät etwas anderes ausgeben oder gibt das die Messugnen
> einfach nicht als menschenlesbaren Text aus?

Es gibt sie nur nicht lesbar aus.

Matthias S. schrieb:
> Bevor du mit dem Arduino da rumfummelst, vergewissere dich mal mit einem
> PC und einem Terminalprogramm für Entwickler (z.B. HTerm), was da aus
> dem Gerät rauskommt.
> Wäre auch gar nicht so dumm, uns zu schreiben, um was es sich bei diesem
> Gerät handelt.

Also ich habe es mal direkt an einen PC angeschlossen und über CoolTerm 
laufen lassen. Siehe Anhang. Es handelt sich um eine Foxbox (sie misst 
O2 und CO2 Gehalt in der Luft).

Ingo D. schrieb:
> Hi,
> da der erste String ja noch passt, lass mal das
>
> Serial1.begin(115200);
>
> weg.

Dann geht nix mehr. Ich muss doch auch die zweite serielle Schnittstelle 
initialisieren, oder?

Patrick C. schrieb:
> Wie weiszt du dass ? Mit oscilloscope geprueft ? Versuch mal ob andere
> baudrates vielleicht eine besser lesbaren text geben.

Steht so in der Betriebsanleitung. Und nein dann kommt kein besserer 
Text raus.

Christian M. schrieb:
> Du hast ganz ziemlich sicher eine falsche Baudrate eingestellt!
> Interessant dass Du anscheinend ein CR/LF hast. Wieviele Zeichen
> erwartest Du pro Datensatz? So könntest Du etwa die wirkliche Baudrate
> abschätzen!
> Die ist warscheinlich VIEL niedriger! Das zeigen schon die vielen
> Zeichen im Extended-ASCII-Raum.

Ich habe nachgezählt und ich erwarte genau so viele Zeichen wie ankommen 
bloß halt andere (siehe Anhang).
Angehängte Dateien:
Gast #5376921
Lesenswert?

Lass mal auf deinem Mikrocontroller eine LED blinken, etwa so:
1
while (1)
2
{
3
    LED_AN;
4
    _delay_ms(500);
5
    LED_AN;
6
    _delay_ms(500);
7
}

Und dann kontrollierst du mal bitte, ob sie wirklich genau im 1s Takt 
blinkt.
Gast #5391139
Lesenswert?

Danke für eure Beiträge.
Ich habe eine Lösung gefunden. Es lag daran, dass das Signal invertiert 
ankam. Um das zu lösen kann man zum einen über SoftwareSerial direkt 
angeben, dass das Signal invertiert ist.

#include <SoftwareSerial.h>;
SoftwareSerial ttl(50, 51, true);

Für HardwareSerial habe ich einen Invertierer (HCF4049) verwendet. Mit 
beiden Lösungen funktioniert es jetzt einwandfrei.

Grüße
Darius

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren