USB-Datenaustausch mit µC, Hilfe beim Einstieg in C gesucht

OP (Firma: Funkenflug Industries) #5730543
Lesenswert?

Hier der zweite Teil, den ich voraussichtlich demnächst brauche.
Den Hardware-Teil gibts hier: 
Beitrag "Controller via USB an Computer: Wie am besten?"

Es geht um den Datenaustausch zwischen PC und µC, den ich irgendwie 
hinkriegen muß. Alte DOS-PCs und RS232 sind tot - verdammt, hätte locker 
gereicht und das hätte ich gekonnt - also muß ich es mit USB und Windows 
hinkriegen... und das bedeutet eine Variante von C lernen. Mich gleich 
erhängen wäre auch eine Alternative, aber ich will's wenigstens versucht 
haben.

Hat jemand Erfahrung auf diesem Gebiet und auch die Lust, mir beim 
Einstieg in dieses Thema zu helfen? Ich bin gut in Assembler und PHP, 
man liest immer C sei ähnlich zu PHP, aber immer wenn ich was mit C 
probiert habe, hatte ich massive Probleme damit, vor allem was die 
Syntax angeht oder mit Compiler-Fehlermeldungen. Aber vielleicht kann 
jemand darauf aufbauend einen Compiler empfehlen, der mir liegen könnte.

Was ich brauche sind so Standard-Eingabefelder, Buttons, evtl. 
Tabellen/Scollbars. Kein 3D, kein Sound, keine störenden Extras, evtl. 
die Möglichkeit das Fenster farblich zu gestalten oder im Fenster 
einfachste Grafiken zu malen.

Das Programm sollte mit Windows 7 32bit aufwärts kompatibel sein, also 
bin Windows 10 oder was immer da noch kommt und egal ob 32 oder 64 bit.

Die USB-Kommunikation braucht nicht besonders schnell zu sein, einfach 
und robust reicht für die zu erwartenden Datenmengen locker aus. Bekommt 
man da irgendwas zustande, daß man "seinen" Controller am USB findet und 
mit ihm Daten austauschen kann, ohne einen extra Treiber installieren zu 
müssen? Also reichen die Windows-Bordmittel dafür aus?

Die Programmiersprache sollte eine Variante von C sein. Wenn ich das 
schon lernen muß, dann hoffentlich auf eine Weise, daß es mir bei der 
PC-Programmierung und bei der Programmierung größerer µCs (Richtung 
STM32 bzw. ARM Cortex) nutzt. Für beides völlig verschiedene Lösungen 
lernen wäre hoher Aufwand, der sich evtl. vermeiden lässt.

Danke schon mal, auch für die vielen Fragen, die da leider noch kommen 
werden.
Gast #5730590
Lesenswert?

Wenn es als µC ein PIC sein darf, kannst du dir ja mal die Seite von 
sprut.de anschauen. Da gibt es eine ganz brauchbare Einführung in C und 
die Grundlagen von USB. Von Microchip gibt es auch ein Framework, wo 
einige USB-Anwendungen drin sind.
OP (Firma: Funkenflug Industries) #5730591
Lesenswert?

Sorry, hast Du meinen Beitrag oben überhaupt gelesen? Ich brauche C für 
die Controller sowieso, denn die lassen sich nicht in VB oder Excel 
programmieren. Irgendeine vernünftige C-Variante mit Tips zur Verwendung 
bzw. zum Compilieren wäre schon schön, das hilft mir evtl. auch bei C 
für die Mikrocontroller weiter.

Edit @Jens:

Wenn anderer Controller als AVR dann irgendwas 32bittiges
mit guter Zukunft. Eher kein PIC...
#5730604
Lesenswert?

Ben B. schrieb:
> Die Programmiersprache sollte eine Variante von C sein. Wenn ich das
> schon lernen muß, dann hoffentlich auf eine Weise, daß es mir bei der
> PC-Programmierung und bei der Programmierung größerer µCs (Richtung
> STM32 bzw. ARM Cortex) nutzt.

C++, bzw. mehr oder weniger auch C, bloß in einer C++ Umgebung?
Kannst ja mal da einen Blick drauf werfen, ob das in etwa in deine 
Richtung geht:
http://www.hs-ulm.de/nocache/wir/Personal/PersonalSaSchr/vschilli/QtProjekte/
#5730652
Lesenswert?

Ben B. schrieb:
> Wie schwer ist die USB-Kommunikation mit Qt oder C#?

Zu C# kann ich nichts sagen. Bei Qt finde ich es persönlich recht 
einfach, wenn man ein funktionierendes Beispiel hat.

USB ist auch nicht gleich USB. Das ist in verschiedenen Geräteklassen 
organisiert, von denen die am einfachsten ( bei neueren OS ohne 
zusätzliche Treiber) CDC, Kommunikation  Device Classic (Vortrag COM 
Port wie z.B. die FTDI USBSerial Wandler) oder HID, Human Interface 
Device (Tastatur Mais, oder beliebige Geräte mit Datenraten < 64kBit/s)
Gast #5730656
Lesenswert?

Ben B. schrieb:
> Wie schwer ist die USB-Kommunikation mit Qt oder C#?

Mit C# kannst Du aber keine Controller programmieren.

Kauf Dir ein gutes Buch zu C und mach erst mal einfache 
Consolenprogramme. Wenn Du dann so einigermaßen fit bist kannste Dich ja 
an ein einfaches GUI Progrämmle ran wagen.
Als IDE würde ich Eclipse nehmen. Damit kannst Du einfache C-Programme - 
auch für den Controller - und C++ ebenso compilieren. Wenn Du dann in 
C/C++ fit bist kannst Du im Prinzip auch C#. Dafür wäre dann 
Visualstudio die geeignete IDE.
Beitrag #5730666 wurde von einem Moderator gelöscht.
OP (Firma: Funkenflug Industries) #5730688
Lesenswert?

> Mit C# kannst Du aber keine Controller programmieren.
Ok, mit Qt wahrscheinlich auch nicht.

C++ anyone?

64kbit/s wären prinzipiell erstmal genug, aber für USB ziemlich wenig, 
vor allem wenn man in ein paar Jahren vielleicht doch mal größere 
Datenmengen hat... Gibts da Luft nach oben oder muss man sich damit 
begnügen wenn man es einfach haben möchte?
#5731114
Lesenswert?

Ben B. schrieb:
> Mit C# kannst Du aber keine Controller programmieren.
>
> Ok, mit Qt wahrscheinlich auch nicht.
>
> C++ anyone?
>
> 64kbit/s wären prinzipiell erstmal genug, aber für USB ziemlich wenig,
> vor allem wenn man in ein paar Jahren vielleicht doch mal größere
> Datenmengen hat... Gibts da Luft nach oben oder muss man sich damit
> begnügen wenn man es einfach haben möchte?

Wie Olli schon erwähnte, ist Qt C++.
64kBit/s sind einfach das Maximum für HID bei full Speed USB Geräten. 
Das hat zwar mit dem verwendeten Controller erst mal nichts zu tun, aber 
falls wirklich absehbar wäre, dass in naher Zukunft deutlich höhere 
Datenraten benötigt werden, sollte das durchaus in die Wahl des 
Controllers und der Geräteklasse einfließen!
Gast #5731137
Lesenswert?

Ben B. schrieb:
> Wie schwer ist die USB-Kommunikation mit Qt oder C#?

Hier ein Beispiel für USB-UART Kommunikation mit Qt:
1
QSerialPort port("COM3");
2
port.setBaudRate(QSerialPort::Baud115200);    
3
port.open(QIODevice::ReadWrite);
4

5
// Send a message
6
port.write("Hello\n");  
7
port.flush();
8
    
9
// Receive the answer (one line, wait max. 1s)
10
QTime time;
11
time.start();
12
while (!serialPort.canReadLine())
13
{
14
    if (time.elapsed()>1000) 
15
    {
16
        break;
17
    }
18
    QThread::msleep(10);
19
    QCoreApplication::processEvents();
20
}
21
QByteArray response=serialPort.readAll().trimmed();
22

23
port.close();

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren