Forum: PC-Programmierung USB-Datenaustausch mit µC, Hilfe beim Einstieg in C gesucht


von Ben B. (Firma: Funkenflug Industries) (stromkraft)


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.

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Nimm einen USB to Seriell Adapter.
Den kannst du an den Controller anschließen
und dort die Daten seriel übertragen.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Danke Dir, das wäre die Notlösung für die nicht USB-fähigen AVRs, hilft 
mir aber nicht beim PC-Programm weiter.

von Stefan (Gast)


Lesenswert?

Dafür braucht man kein C.
Kann man auch in Visual Basic oder sogar
in Excel machen.

von Jens (Gast)


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.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


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...

: Bearbeitet durch User
von Volker S. (vloki)


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/

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Wie schwer ist die USB-Kommunikation mit Qt oder C#?

von Volker S. (vloki)


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)

von Zeno (Gast)


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 vom Autor gelöscht.
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


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?

von Oliver S. (oliverso)


Lesenswert?

Ben B. schrieb:
> Ok, mit Qt wahrscheinlich auch nicht.
>
> C++ anyone?

Qt ist ein C++ Framework. Das liefert dir die passenden libs, um mittels 
C++ auf die Schnittstellen zuzugreifen. Denn die low-Level-Zugriffe 
willst du nicht selber basteln, egal, in welcher Sprache.

Oliver

von Volker S. (vloki)


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!

: Bearbeitet durch User
von Stefan F. (Gast)


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();

von Vn N. (wefwef_s)


Lesenswert?

Ben B. schrieb:
> Ok, mit Qt wahrscheinlich auch nicht.

QT ist C++. Du kannst also mit der gleichen Sprache auch gleich den 
Controller programmieren. Ein gutes(!) Buch wird dir sagen,  auf welche 
Sprachfeatures du in Embedded-Umgebungen verzichten solltest.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.