Kommunikation uC mit PC via UART und VCP
-
hustbaer schrieb:
Mach den Port auf (
CreateFile
auf\\.\COMx
mit x=die COM Port Nummer)HANDLE hFile = CreateFile(lpszDevice, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
,konfiguriere den Port soweit notwendig ...
Wenn man sich nicht mit den ganzen Details rumschlagen will macht es Sinn eine der als gut funktionierend bekannten Quellen zu nutzen.
Beispiel: Serial library for C++ by Ramon de Klein
http://www.codeproject.com/Articles/992/Serial-library-for-C
-
Hallo zusammen,
vielen Dank für die guten Antworten! Ich glaube das hilft mir erst mal sehr viel weiter, weil ich jetzt weiß wie ich beginnen kann. Hoffe dass die nächsten Tage mal etwas Zeit neben der Arbeit ist, damit ich das ausprobieren kann...
Möchte noch auf eure Gegenfragen antworten:
hustbaer schrieb:
> Welche Möglichkeiten gibt es? Welche sind einfach zu realisieren?
Möglichkeiten für was?--> Ich meine damit, welche prinzipiellen Möglichkeiten bestehen, wenn ich physikalisch einen uC, USART/USB-Wandler und PC mit USB-Buchse habe. Welche Methoden bestehen den uC mit dem PC kommunizieren zu lassen?
(So wie ich das verstehe ist eine Methode über einen Virtuellen COM PORT und RS232. Mein Verständnis ist, dass es aber auch noch über eine echt USB-Verbindung gehen müsste oder?)hustbaer schrieb:
> Wie kann ich mich auf den VCP beziehen?
Was heisst VCP? Virtual COM Port etwa? Bitte keine Abkürzungen erfinden.
Und was meinst du mit "dich auf den VCP beziehen"? Huch?--> Ich hab das mit VCP öfters schon gelesen. Ist nicht von mir erfunden
--> Mit "mich auf den VCP beziehen" meine ich: Wie kann ich in meinem C-Code den Virtuellen COM Port ansprechen? Brauche ich dafür spezielle includes? Muss ich irgendwas installieren? Mit welchem Code kann ich den ansprechen (das wurde ja bereits weiter oben erklärt, danke dafür!!!)Mox schrieb:
Hilfe, Hilfe. Der CP2101 ist seit mindestens 8 Jahren NRND: "The CP2101 is a mature product and is not recommended for new designs." Warum nimmst Du nicht wenigstens den CP2102?
Siehe auch: CP210x Comparison Chart
--> Sagen wir es so: Ich habe diese Platine inkl. uC und CP2101 schon seit mehreren Jahren so im Regal rumliegen. Erst seit kurzem habe ich wieder mehr Zeit für uC Projekte und würde ungern die Platine umbauen. Aber werde mir deinen Hinweis für spätere Projekte gerne im Hinterkopf behalten.
merano schrieb:
Beispiel: Serial library for C++ by Ramon de Klein
http://www.codeproject.com/Articles/992/Serial-library-for-C--> Danke dafür. Der Code ist nur leider in C++. Gibts etwas ähnliches in C?
-
Bize schrieb:
--> Danke dafür. Der Code ist nur leider in C++. Gibts etwas ähnliches in C?
Ob du auf dem PC C oder C++ verwendest, ist ziemlich egal. Nutz doch die Gelegenheit um in C++ einzusteigen.
-
Bize schrieb:
--> Ich meine damit, welche prinzipiellen Möglichkeiten bestehen, wenn ich physikalisch einen uC, USART/USB-Wandler und PC mit USB-Buchse habe. Welche Methoden bestehen den uC mit dem PC kommunizieren zu lassen?
(So wie ich das verstehe ist eine Methode über einen Virtuellen COM PORT und RS232. Mein Verständnis ist, dass es aber auch noch über eine echt USB-Verbindung gehen müsste oder?)Natürlich geht das. Wird Dich aber erst recht überfordern, wenn du schon Probleme hast die Systemaufrufe aus einem C++ Programm (notfalls) auch mit C zu verwenden.
-
@merano
Die von dir verlinkte Library ist halt schon etwas hardcore.
Das ganze asynchrone Gedöns braucht man oft auch gar nicht.Gut, manchmal ist die einzige Alternative zu asynchronem IO Threads zu verwenden - wenn man damit keine Erfahrung hat ist es fraglich womit man besser fährt.
Aber ich schätze dass der OP für sein Programm vielleicht überhaupt nix asynchron machen muss, weder mit Threads noch sonstwie.@Bize
Hast du dir mal die von mir genannten Funktionen angesehen? Ich hab schon viel Code geschrieben der serielle Schnittstellen verwendet, alles direkt auf WinAPI aufbauend. Ich fand das nicht besonders erschreckend. Das Zusammensuchen der benötigten Funktionen um die ganzen Einstellungen des COM Ports programmatisch zu setzen war dabei das lästigste.
-
schau ob damit weiter kommst:
http://members.inode.at/anton.zechner/az/Seriell.htm
http://softwaresouls.com/softwaresouls/2011/12/11/simple-c-class-example-using-serial-port/
http://sourceforge.net/projects/cppserialcom/
http://stackoverflow.com/questions/1652698/control-usb-ports
-
Mr C schrieb:
schau ob damit weiter kommst:
http://members.inode.at/anton.zechner/az/Seriell.htm
http://softwaresouls.com/softwaresouls/2011/12/11/simple-c-class-example-using-serial-port/
http://sourceforge.net/projects/cppserialcom/
http://stackoverflow.com/questions/1652698/control-usb-portsDer erste Link geht wohl für C.
2. und 3. Link
Wenn der OP schon kein "normales" C++ mag wird er C++.NET erst recht nicht mögen.4. Link
Der Hinweis auf libusb for win32 http://libusb-win32.sourceforge.net/ ist da schon eher das was er eigentlich will.
Leider muss man dann aber erstmal einen Treiber (libusb0.sys) installieren.
Das will man eigentlich ja auch nicht ...
-
merano der TE hat in seinem zweiten Post gefragt ob der Code nicht in C gibt, also der erster link wird passen zu mindest Ansatzweise.
Währe nicht nötig mein letzten Post zu zitieren, bin nicht blind.
-
Der 1. Link sieht wirklich gut aus.
Hält den Ball schön flach, was gut für Anfänger ist.
Und er unterstützt sogar den Device-Path abzufragen. Was nützlich ist, wenn man den COM Port eines USB Geräts mit einer bestimmten VID/PID automatisch bestimmen möchte.
-
vieleicht wär das noch hilfreich:
https://msdn.microsoft.com/en-us/library/windows/hardware/ff540174(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/hardware/ff540046(v=vs.85).aspx#winusb
-
https://github.com/rsta2/uspi
oder
schau dir libusb (open source):
https://git.libusb.org/?p=libusb.git;a=summary;js=1
-
hustbaer schrieb:
@merano
@Bize
Hast du dir mal die von mir genannten Funktionen angesehen? Ich hab schon viel Code geschrieben der serielle Schnittstellen verwendet, alles direkt auf WinAPI aufbauend. Ich fand das nicht besonders erschreckend. Das Zusammensuchen der benötigten Funktionen um die ganzen Einstellungen des COM Ports programmatisch zu setzen was dabei das lästigste.Hallo Hustbaer,
ja, hab ich. Es klappt sehr gut!
Kann nun die COM Schnittstelle öffnen, Baudrate setzen, Parität usw....
Endlich kann ich mit meinem uC via serieller Schnittstelle kommunizieren.
Ich brauch da meistens immer den ersten Anstupser bis ich weiß wie ich mal anfangen kann, danach läuft es dann meistens von selber. Und mit den Schnittstellen eines PCs habe ich bisher noch nie was gemacht.Vielen Dank dafür!!
merano schrieb:
4. Link
Der Hinweis auf libusb for win32 http://libusb-win32.sourceforge.net/ ist da schon eher das was er eigentlich will.
Leider muss man dann aber erstmal einen Treiber (libusb0.sys) installieren.
Das will man eigentlich ja auch nicht ...Ja, mit der libusb für win32 habe ich mich auch schon mal ein wenig beschäftigt, leider hab ich das mit dem Treiber nicht hinbekommen. Ich denke ich werde mich erst mal mit der COM Schnittstelle beschäftigen wie oben geschrieben und dann mal schauen
Merci!!