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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Darius (Gast)


Angehängte Dateien:

Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von och nööö (Gast)


Bewertung
-3 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
Hi,
da der erste String ja noch passt, lass mal das

Serial1.begin(115200);

weg.

von Patrick C. (pcrom)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Anzahl der Stopbits? Anzahl der Datenbits? Parity (odd, even, no)?

von Michael U. (amiga)


Bewertung
1 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Michael U. schrieb:
> welcher Arduino?
> Ist Serial1 hardware oder Softserial?

Arduino Mega mit ATMega2560 drauf.
Serial1 ist ein HardwareSerial

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Doppelt genäht hält besser.

Alte Bauernregel.

von Darius (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.