Forum: Mikrocontroller und Digitale Elektronik Arduino serielle Kommunikation über TTL mit einem anderen Gerät zeigt kryptische Zeichen


von Darius (Gast)


Angehängte Dateien:

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?

von Route_66 H. (route_66)


Lesenswert?

Darius schrieb:
> Ich weiß das der
> serielle Ausgang meines Messgeräts TTL-Logik (0 bis +5V) hat.

TTL-Logik wie es der UART ausgibt oder RS232-Logik aber mit TTL-Pegel?

von Florian (Gast)


Lesenswert?

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

von och nööö (Gast)


Lesenswert?

Darius schrieb:
> Könnt ihr mir da weiterhelfen woran das liegt?

Du benutzt Serial1 und Serial, mit unterschiedlichen
Baudraten. Entscheide dich für eine

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Ingo D. (ingo2011)


Lesenswert?

Hi,
da der erste String ja noch passt, lass mal das

Serial1.begin(115200);

weg.

von Patrick C. (pcrom)


Lesenswert?

Darius schrieb:
> Ich weiß, dass die Baudrate von 115200 stimmt.

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

von Hanns-Jürgen M. (yogy)


Lesenswert?

Anzahl der Stopbits? Anzahl der Datenbits? Parity (odd, even, no)?

von Michael U. (amiga)


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

von Einer K. (Gast)


Lesenswert?

Michael U. schrieb:
> welcher Arduino?
> Ist Serial1 hardware oder Softserial?

Arduino Mega mit ATMega2560 drauf.
Serial1 ist ein HardwareSerial

von Wolfgang (Gast)


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.

von Christian M. (Gast)


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

von Darius (Gast)


Angehängte Dateien:

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

von Darius (Gast)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Anzahl der Stopbits? Anzahl der Datenbits? Parity (odd, even, no)?

no parity, 8 Bits und ein Stopbit.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Darius schrieb:
> Ich weiß das der serielle Ausgang meines Messgeräts TTL-Logik (0 bis
> +5V) hat.

Darius schrieb:
> Also ich habe es mal direkt an einen PC angeschlossen und über CoolTerm
> laufen lassen.

Das bedeutet, daß Du da zusätzliche Elektronik verwendet hast. Oder?

von Stefan F. (Gast)


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.

von Feldkurat K. (feldkurat)


Lesenswert?

Stefan U. schrieb:
> LED_AN;
>     _delay_ms(500);
>     LED_AN;
>     _delay_ms(500);

Na, noch anner als an geht es kaum noch.
:)

von Opti Coder (Gast)


Lesenswert?

Doppelt genäht hält besser.

Alte Bauernregel.

von Darius (Gast)


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

von Wolfgang (Gast)


Lesenswert?

Darius schrieb:
> Ich habe eine Lösung gefunden. Es lag daran, dass das Signal invertiert
> ankam.

Genau danach hat dich Route 66 im ersten(!) Reply gefragt ...

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

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.