Hi,
ich würde gerne Daten von einem µC(bzw einer USB-Bridge) in einem
Qt-Programm verarbeiten; bis jetzt habe ich immer hTerm genutzt. Nach
etwas googeln bin ich dann auf QextSerialPort gestoßen und habs mal
ausprobiert. Allerdings läuft es nicht und ich weiß auch nicht warum .
Zum Test hab ich den TXD-Pin der Bridge auf den RXD-Pin gelegt, nun
sollte alles was gesendet wird wieder zurück kommen... Es passiert aber
nichts.
Meine Vermutung: die Verbindung zur Bridge schlägt fehl, da die
SLOT-Methode onDataAvailable() nicht aufgerufen wird (port sendet nicht
readyRead())
Hier mal mein Beispiel-Code:
///mainwindow.cpp
1
#include "mainwindow.h"
2
#include "ui_mainwindow.h"
3
4
MainWindow::MainWindow(QWidget *parent) :
5
QMainWindow(parent),
6
ui(new Ui::MainWindow)
7
{
8
ui->setupUi(this);
9
this->setFixedSize(1200,650);
10
port = new QextSerialPort("COM18", QextSerialPort::EventDriven);
11
port->setPortName("COM18"); /// habe ich aus hTerm übernommen; da war mein Gerät immer "COM18"
Hmm oke, der Link hat schon mal geholfen.
port->open(..) ergibt nur true wenn das Gerät angeschlossen ist und der
Name auf "\\\\.\\com18" steht. Nur wird onDataAvailable() immer noch
nicht aufgerufen...
Nein, das hilft leider auch nicht. Ein Fehler war allerdings ein
"Rechtschreibfehler" bei der Methode onDataAvailable(). Die war als
onDataAvialable() deklariert und implementiert-> die in der
Connect-Anweisung als Slot aufgeführte Methode gab es also gar nicht.
Frage mich nur warum das nicht als Fehler angezeigt wurde. Na jedenfalls
ist dieser Fehler behoben, hat allerdings null Auswirkung gezeigt. Das
Problem muss also noch von irgendwas anderem verursacht werden...
jax schrieb:> Die war als> onDataAvialable() deklariert und implementiert-> die in der> Connect-Anweisung als Slot aufgeführte Methode gab es also gar nicht.
Das wird beim Ausführen auf der Konsole angezeigt.
Gruß Oliver
Oliver J. schrieb:> jax schrieb:>> Die war als>> onDataAvialable() deklariert und implementiert-> die in der>> Connect-Anweisung als Slot aufgeführte Methode gab es also gar nicht.>> Das wird beim Ausführen auf der Konsole angezeigt.>> Gruß Oliver
Wie meinst du das, auf der Konsole ausführen...?
Ahhhhh.....:
OnDataAvailable() wird nur dann aufgerufen, wenn Daten gesendet wurden.
Und da ich in meiner Testschaltung (RXD on TXD) ja keine Daten senden
kann, muss erst vom PC aus etwas gesendet werden.
Hi,
leider musste ich die Erfahrung machen, dass alle QT Implementierungen
für serielle Ports nicht wirklich gut funktionieren (sei es auf Linux
oder Windows).
Für Linux habe ich eine gut funktionierende Lösung mit
http://sourceforge.net/projects/libserial
gefunden.
Grüße,
Martin
jax schrieb:> Oliver J. schrieb:>> jax schrieb:>>> Die war als>>> onDataAvialable() deklariert und implementiert-> die in der>>> Connect-Anweisung als Slot aufgeführte Methode gab es also gar nicht.>>>> Das wird beim Ausführen auf der Konsole angezeigt.>>>> Gruß Oliver>> Wie meinst du das, auf der Konsole ausführen...?
Oliver meinte wohl, daß es eine Runtime-Meldung geben sollte, wenn ein
Signal einen nicht vorhandenen Slot aufruft. Das sollte entweder in
deiner Entwicklungsumgebung oder eben auf der Konsole angezeigt werden.
Martin
Martin B. schrieb:> leider musste ich die Erfahrung machen, dass alle QT Implementierungen> für serielle Ports nicht wirklich gut funktionieren (sei es auf Linux> oder Windows).
Bei mir funktioniert es auf allen 5 Linux-Rechnern perfekt.
Gruß Oliver
jax schrieb:> Eine Frage hätte ich allerdings noch...> Warum empfange ich auf dem PC nur Daten vom µC wenn der ISP-Programmer> eingesteckt ist?
Fehlt eventuell die Masseverbindung?
Gruß Oliver
Ne ne, die ist da. Ich hatte das Problem schon früher mal mit dem selben
µC und der selben Versorgungsschaltung (die aus dem AVR-Tutorial hier).
Damals ging das LCD nur wenn der ISB-Programmer eingesteckt war. Ich
benutze den "mySmartUSB light". Könnte das was damit zu tun haben?
Ansonsten habe ich den Eindruck dass der Pc ne Menge Schrabbel empfängt.
Ich denke allerdings dass das von der Software verursacht wird. Weil oft
einfach vollkomen falsche Daten ausgegeben werden. Ich lade das Projekt
mal hoch, wäre toll wenn jemand mal drüber gucken könnte.
Zum Projekt:
Der µC sendet in einer Dauerschleife drei Werte aus gewonnenen
Messungen(10Bit). Ein Wert wird in zwei Bytes übertragen, wobei das
erste Byte die unteren 8Bit der Messung sind und die zwei
niederwertigsten Bits des zweiten übertragenen Bytes, die
höchstwertigsten der Messung(Bit 8 und 9).
Auf dem Pc soll aus je zwei Bytes die ursprüngliche 10Bit Messung als
Zahl rekonstruiert werden(evtl noch in Volt umrechnen). Dann werden 50
Messungen gemittelt und ausgegeben. Das ganze halt für jede der drei
Messwerte.