![Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht](misc/logos/logo.png) |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Peter Treytl
Anmeldungsdatum: 25.03.2016 Beiträge: 3
|
Verfasst am: 25.03.2016, 13:05 Titel: USB-COM Port wird nicht erkannt |
|
|
Ich bitte um Hilfe bei folgendem Problem:
Ich möchte ein Messgerät mit USB-Schnittstelle (Microchip 18F4550) vom PC (WIN10) aus mittels FreeBASIC steuern. Dazu lade ich den entsprechenden USB-Treiber von Microchip (usbser.sys wird angezeigt) in den PC. Bei Anschluss des Messgerätes über die USB Schnittstelle wird im Gerätemanager und in der Registry des PC die verwendete COM-Schnittstelle (COM4) angezeigt. In FreeBASIC lässt sie sich aber nicht öffnen.
Ein Kommunikationsprogramm, das ich in VB.net geschrieben habe, erkennt die Schnittstelle und man kann auch mit dem Messgerät kommunizieren.
Ein weiteres Messgerät verwendet als Interface zu USB einen FTDI Chip (USART/USB). Mit den zugehörigen FTDI Geräte-Treibern arbeitet FreeBASIC einwandfrei zusammen (COM9). Das Gerät lässt sich einwandfrei vom PC aus mittels FreeBASIC steuern.
Was muss ich tun, damit FreeBASIC die für WIN sichtbare Schnittstelle ebenfalls erkennt? Da es sich um komplexe grafische Auswertungsprogramme handelt, die ich in FreeBASIC geschrieben habe, möchte ich nicht alles in VB neu programmieren.
Vielen Dank bereits jetzt
Peter |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
dreael Administrator
![](images/avatars/112279543641421ec80e8e2.gif)
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 25.03.2016, 17:42 Titel: |
|
|
Im internationalen Forum gefunden:
http://www.freebasic.net/forum/viewtopic.php?f=6&t=24119
Ansonsten das Problem bei Dir mit kurzem Beispielcode vollständig dokumentieren (möglichst in Englisch) und als Bug den Entwicklern melden. Dabei auch ganz genaue Angaben zum PC (z.B. Lenovo ThinkCentre M57 6075-BQG) und Betriebssystem (z.B. Windows 7 Home Edition Service Pack 1 x64) und genaue Details zur USB-Hardware angeben, damit sich das Problem reproduzieren lässt.
Wichtig natürlich: Vorher aber noch die allerletzte Version des FB-Compilers (aktuel 1.05.0) verwenden (=> alles frisch übersetzen), um ganz sicher zu sein, ob das Problem nicht zwischenzeitlich bereits gelöst wurde. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Sebastian Administrator
![](images/avatars/563932275488e4d20c5ee9.jpg)
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 25.03.2016, 18:17 Titel: OPEN COM und die Datenfluss-Steuerung mit Hardware-Handshake |
|
|
Hallo und willkommen im Forum!
Ein häufiges Problem beim Benutzen der COM-Ports in FreeBASIC ist, dass FB standardmäßig wohl Hardware-basiertes Handshaking für die Datenflusssteuerung (über die Leitungen DTR, DSR usw.) erwartet.
Siehe dazu https://de.wikipedia.org/wiki/Datenflusssteuerung#Serielle_Daten.C3.BCbertragung
Diesen Modus der Datenflusssteuerung kann man in üblichen Terminal-Programmen für serielle Schnittstellen (z. B. HyperTerminal) auch aktivieren (siehe http://webimg.ssteiner.de/view/htcom2.png).
Bei selbstgebauten Mikrocontrollerschaltungen setzt man diese hardwarebasierte Datenflusssteuerung über spezielle Zusatzleitungen aber meiner Erfahrung nach oft nicht um. Sondern hat nur die eigentlichen Datenleitungen RX und TX in Gebrauch, die man quasi "über Kreuz" mit den Leitungen der PC-Schnittstelle verbindet.
Siehe dazu: http://www.mikrocontroller.net/articles/RS-232#Flusssteuerung
Mikrocontroller.net Wiki hat Folgendes geschrieben: | Bei Mikrocontrollern wird jedoch sehr oft auf jegliche Flusssteuerung verzichtet, so dass nur die Leitungen von RxD, TxD und GND (Masse) verdrahtet werden. Diese Schnittstelle wird auch als 3-wire bezeichnet, da sie nur drei Drähte benötigt. |
Wird vom PC-Programm aus aber die hardwarebasierte Flusssteuerung angenommen, kommt keine funktionierende Übertragung zustande.
Wegen der expliziten Schnittstellen-Konfiguration können sich zwischen individuellen FreeBASIC-Programmen und fertigen Tools / Lösungen in anderen Programmiersprachen Unterschiede ergeben.
Um in FreeBASIC eine einfache Datenübertragung hinzubekommen, die lediglich RX, TX und die Masse/GND als Leitungen benötigt, muss man die "Signalerkennung" auf den Handshake-Leitungen abschalten. Das passiert über Parameter in dem Konfigurations-String, den man OPEN COM mitgibt.
Ein kleines Programmbeispiel gibt es z. B. hier:
https://forum.qbasic.at/viewtopic.php?p=106896#106896
Man beachte insb. diesen Teil:
Code: | Const COMPortKonfig = "COM1:4800,N,8,1,ME,CS0,DS0,CD0,RS" |
Hier muss die Baud-Rate entsprechend des Geräts eingetragen werden, z. B. wie hier 4800 Baud oder bspw. 9600 oder so. Eine automatische Erkennung der Baud-Rate wird m.W. nicht unterstützt.
Die kommaseparierten Parameter werden z. B. in der deutschsprachigen Befehlsreferenz zu OPEN COM erläutert:
Befehlsreferenz hat Folgendes geschrieben: |
- CSn Setze die CTS-Dauer (in ms) (n>=0), 0 = abschalten, Standard = 1000
- DSn Setze die DSR-Dauer (in ms) (n>=0), 0 = abschalten, Standard = 1000
- CDn Setze die "Carrier Detect"-Dauer (in ms) (n>=0), 0 = abschalten
- OPn Setze "Open Timeout" (in ms) (n>=0), 0 = abschalten
- RS Unterdrücken der RTS-Erkennung
- ME Alle Fehler ignorieren
|
Ergänzend zu dem o.g. Beispiel-Konfigurations-String könnte man also noch OP0 ausprobieren.
In dem verlinkten Programmbeispiel werden eingehende Daten direkt auf den Bildschirm ausgegeben. Wenn man auf der Tastatur die [1] drückt, wird ein definierbares Kommando an das angeschlossene Gerät gesendet. Das Programm ist natürlich beliebig erweiterbar.
Viele Grüße & schöne Osterfeiertage!
Sebastian, der immer lieber mit ATMEL AVRs gebastelt hat ![happy](images/smiles/icon_happy.gif) _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Peter Treytl
Anmeldungsdatum: 25.03.2016 Beiträge: 3
|
Verfasst am: 25.03.2016, 19:12 Titel: |
|
|
Euch beiden, lieber drael und lieber Sebastian, vielen Dank für die schnelle Antwort auf meine Frage. Ich werde Euren Hinweisen nachgehen, allerdings wird es etwas dauern, bis ich alles ausgetestet habe. Ich werde mich dann wieder melden.
Sollte ich auf keinen grünen Zweig kommen, werde ich den Vorschlag aufnehmen und das Problem in englischer Sprache zusammenfassen.
Auch Euch beiden ein frohes Osterfest
Peter |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Peter Treytl
Anmeldungsdatum: 25.03.2016 Beiträge: 3
|
Verfasst am: 25.03.2016, 23:31 Titel: |
|
|
Es funktioniert! Vielen Dank für den Hinweis auf das Handshaking. Nach entsprechender Einstellung der Parameter auf
comrtn=Open Com("COM4:9600,N,8,1,CS0,DS0,CD0" AS #a)
gibt es keine Probleme mehr.
Aus bisheriger Erfahrung und verschiedenen Publikationen war ich der Meinung, dass ein zur USB-Schnittstelle umgewidmeter COM-Port sowohl die eingestellte Datenrate als auch das Handshaking ignoriert. Beim FTDI-Treiber wird dem wohl Rechnung getragen, indem das Handshaking dem Datenfluss auf dem USB entsprechend vom Treiber generiert wird. Im Fall von Microchip wird der Standard USB-Treiber von Windows usbser.sys verwendet, der diese Signale wohl nicht zur Verfügung stellt. Wieder etwas dazugelernt!
Nochmals herzlichen Dank
Peter |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Sebastian Administrator
![](images/avatars/563932275488e4d20c5ee9.jpg)
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|