Kommunikation uC mit PC via UART und VCP



  • 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

    Ansonsten stimme ich hustbaer natürlich zu. Das einfachste Für Dich wird sein, den VCP zu verwenden. Von SiLabs gibt es hierzu die AN197. Für deren USBXpress schaust Du in die AN169. Aber wie gesagt, bleibe am Anfang besser beim COM-Port...



  • Ist VCP eine übliche Abkürzung? In dem Fall ziehe ich meine diesbezügliche (und dann deplazierte) Bitte zurück 😉
    EDIT: Tatsache, es ist. Man lernt nie aus 🕶



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





  • 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-ports

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







  • 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!!


Anmelden zum Antworten