Hallo,
ich möchte für Testzwecke ein Gerät über eine serielle Schnittstelle
steuern. Die Schnittstelle ist bereits konfiguriert.
Mir stellt sich dabei jedoch folgende Frage:
Als Befehl zu dem Gerät soll Beispielsweise der Befehl
! T R D CR übermittelt werden, wobei CR für carriage return steht und
das Fragezeichen dem Gerät sagt, dass die Nachfolgenden Zeichen ein
Befehl sind, welcher das besagte Gerät einschalten soll.
Nun zur Frage:
Kann ich diesen Befehl einfach in ein Array schreiben und diesen an das
Gerät senden?
Oder muss ich dabei noch etwas beachten?
Viele Grüße
m.s. schrieb:> Als Befehl zu dem Gerät soll Beispielsweise der Befehl> ! T R D CR übermittelt werden, wobei CR für carriage return steht und> das Fragezeichen dem Gerät sagt, dass die Nachfolgenden Zeichen ein> Befehl sind, welcher das besagte Gerät einschalten soll.
Da ist kein Fragezeichen.
> Nun zur Frage:> Kann ich diesen Befehl einfach in ein Array schreiben und diesen an das> Gerät senden?> Oder muss ich dabei noch etwas beachten?
Versuch's erst mal mit einem Terminalprogramm (z.B. Hterm).
Prinzipiell geht es aber, wie du es vorhast.
STK500-Besitzer schrieb:> Da ist kein Fragezeichen.
Ausrufezeichen, Sorry!
Wenn dies so funktioniert wäre die Frage, wie ich eine Baudrate von
500.000 einstellen kann. Im Gerätemanager kriege ich nur 460.000 hin.
Wahrscheinlich reicht es nicht, wenn im Programm selbst 500.000 als
Baudrate definiert ist, richtig? Wie stelle ich diese ein?
>..wie ich eine Baudrate von 500.000 einstellen kann..
Nimm eine Baudrate von 115200. Das ist die höchste Baudrate die in der
Regel von allen Geräten unterstütz wird und für eine Command-Shell ist's
bei weitem schnell genug.
Mike schrieb:> Nimm eine Baudrate von 115200.
Hallo Mike,
im Geräte-Manager von Windows ist die höchste Wählbare Baudrate 921600.
Sollte ich diese wählen?
Es wird aber darauf hingewiesen, dass das Gerät explizit eine Baudrate
von 500.000 haben soll.
Klingt so, als ob sein Gerät schon auf 500baud steht. Das sollte aber
z.b. mit einem FTDI USB-Seriell Wandler kein Problem sein. Einfach im
Terminslprogramm einstellen, z.b. HTERM kann da auch frei konfiguriert
werden.
Windows Einstellungen sind zumindest für virtuelle com Ports schnurz.
m.s. schrieb:> Als Befehl zu dem Gerät soll Beispielsweise der Befehl> ! T R D CR übermittelt werden, wobei CR für carriage return steht und> das Fragezeichen dem Gerät sagt, dass die Nachfolgenden Zeichen ein> Befehl sind, welcher das besagte Gerät einschalten soll.
Ich glaube aber nicht, daß zwischen zwei Zeichen jeweils ein Leerzeichen
sein muß...
Oleg schrieb:> Ich glaube aber nicht, daß zwischen zwei Zeichen jeweils ein Leerzeichen> sein muß...
Das war nur so geschrieben, um zu verdeutlichen, dass CR zusammenhängt.
Ich habe mit QT jetzt folgendes gemacht:
Initialisierung:
Kann man die Baudrate so einfach auf 500.000 setzen? Es gibt beim
compilieren kein Problem, aber das Programm funktioniert nicht.
Verbindung:
1
if(serial.isOpen()&&serial.isWritable()){
2
3
4
serial.write("?TRd\r");
5
constQStringdata2=serial.readAll();
6
qDebug()<<data2;
7
8
9
qDebug()<<"Erfolgreich"<<endl;
10
}else
11
{
12
qDebug()<<"Fehler"<<endl;
13
}
Ich komme zwar soweit, dass das innere der If-Abfrage erreicht wird,
allerdings bekomme ich eine leere qDebug Ausgabe, obwohl eigentlich
etwas Empfangen werden sollte.
Die COM-Port Nummer ist richtig und die Treiber sind ebenfalls richtig
installiert. Das Gerät benötigt leider zwingend 500.000 baud. Verbunden
ist es über einen normalen USB-Stecker.
Hat jemand eine Idee, wo der Fehler liegen könnte?
Dirk B. schrieb:> Kommt in jedem Fall eine Antwort?
Ja, es soll in jedem Fall eine Antwort kommen.
Das ! ist ein Befehl, auf welchen eine Bestätigung folgt.
Das ? ist eine Abfrage, auf welche eine Antwort kommt.
Rufus Τ. F. schrieb:> Das ist mindestens ungewöhnlich.
Leider ja.
Joachim B. schrieb:> weder mit hterm
Das dachte ich damals auch.
Bei htem (vom Hammer...) einfach eine Verbindung öffnen und die
Wunschbaudrate in die Baudraten-Dropdown-Liste eintragen - geht.
STK500-Besitzer schrieb:> Bei htem (vom Hammer...) einfach eine Verbindung öffnen und die> Wunschbaudrate in die Baudraten-Dropdown-Liste eintragen - geht.
schrieb ich ja
Toralf W. schrieb:> in HTerm kannst auch 1 MHz einstellen, einfach nicht die Auswahlbox> nehmen, sonder per Hand dort eintragen was Du brauchst / willst, das> geht.Joachim B. schrieb:> aber> Beitrag "Re: Hterm 1M Baud"
> kann man die Baudrate so einfach auf 500.000 setzen? Es gibt beim> compilieren kein Problem, aber das Programm funktioniert nicht.
Man..immer die Leute mit der Gnade der spaeten Geburt. :-)
Urspruenglich wurden in einem PC diverse Uart verwendet (z.B 16450) die
haben ihre Baudrate durch das runterteilen von einer Quarzfrequenz
erzeugt. Und aehnliches galt auf immer fuer die Gegenstelle im
Mikrocontroller.
Deshalb haben auch nur so krumme Baudrate von 1200,2400....115200
funktioniert. Die Hardware kann einfach nichts anderes!
Bei USB-RS232 Wandler kann das anders aussehen. Es gibt ja garkeine
Baudrate bei der Verbindung PC-nach USB-Wandler. Die Baudrate wird erst
im USB-RS232 Baustein neu erzeugt. Und da gibt es welche die koennen
dann vollkommen beliebige Baudraten. (rationale Teiler) Die ueblichen
FTDI gehoeren dazu. Aber das kann laengst nicht jeder Baustein! Moderne
Microcontroller koennen das dann auch.
Jetzt muss man dem Wandler aber auch noch seine ungewoehnliche Baudrate
mitteilen koennen. Da ist dann leider mal Windows im Vorteil. Dort wird
die Baudrate direkt als Zahl uebergeben. Wenn das Terminalprogramm
selbst die Eingabe von 1234Baud unterstuetzt dann funktioniert es. Hterm
gehoert zu den Programmen wo es funktioniert.
Bei Linux sieht das etwas anderes aus. Da gibt es fuer die Baudraten
spezielle Defines. Das sind dann ungewoehnliche Baudraten erstmal nicht
vorgesehen und auch nicht moeglich. Allerdings wurde das Interface mal
irgendwann erweitert und es gibt da einen ungewoehnlichen Weg der Port
doch eine andere Baudarte mitzuteilen. Ich hab mal vor ein paar Jahren
mein minicom fuer 250000Baud gepatcht. Da geht es also auch.
Grundvoraussetzung ist aber immer das de USB-RS232 Wandler das koennen
muss!
Olaf
m.s. schrieb:> const QString data2 = serial.readAll();
readALL() wartet bis ein CR kommt, oder will es ein LF/CR. Oder gibt es
einfach den akktuellen Empfangsbuffer zurück? Sendet das Gerät Oberhaupt
CR oder LF?
Sende einfach mal das Kommando und lasse dir alle Byte anzeigen die dir
das Gerät zurück sendet. Bei deinem Code siehst du überhaupt nicht was
da passiert.
m.s. schrieb:> Das Gerät benötigt leider zwingend 500.000 baud. Verbunden ist es über> einen normalen USB-Stecker.
Irgend etwas stimmt nicht.
Bitte Gerät angeben (Datenblatt, Foto, ...).
Wie sind denn die anderen Daten der Schnittstelle?
Ob die eingestellte baudrate stimmt, mit Oszi oder Stoppuhr messen (Led
dran, 100Mb-file per copy übertragen, Zeit stoppen, rechnen)
"\n" ist aber nicht CR, sondern "newline".
Ich würde es mit "\r" versuchen. Mal mit beiden Kombinationen "\r\n",
usw.
mit "wem" musst du dich denn da auf der seriellen rumärgern? Evtl. hätt
Schimmel jemand das gleiche "Problem" gehabt.
Forum eben. Schwarmwissen abrufen setzt aber auch ein gewisses Maß an
Input voraus.
Also: welches Gerät? Datenblatt, Typ, Foto?