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?
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?
Darius schrieb:> Könnt ihr mir da weiterhelfen woran das liegt?
Du benutzt Serial1 und Serial, mit unterschiedlichen
Baudraten. Entscheide dich für eine
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.
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.
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
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.
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
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).
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?
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
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?