Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
hedo
Anmeldungsdatum: 03.04.2006 Beiträge: 19
|
Verfasst am: 10.09.2007, 17:01 Titel: USB zu seriell Converter |
|
|
Hallo,
ich steuere mein Stoppuhr am PC über COM1. Das klappt wunderbar. Es gibt keine Probleme. Jetzt muss ich aber für einen Wettkampf die Stoppuhr mit dem Laptop steuern. Er hat aber keinen COM- Port, sondern nur USB Schnittstellen. Deshalb habe ich mir einen USB zu Seriell Converter zugelegt, installiert und mit den neuesten Treibern versehen.
Jetzt funktioniert meine Steuerung nich mehr. Das COM- Port lässt sich nicht mehr mit FreBasic ansprechen. Mein Test- Code hat mir das auch bestätigt. Hier mal mein Code Code: |
COLOR 15, 1
CLS
OPEN "com1:9600,n,8,1,cs0,ds0,cd0" FOR INPUT AS #1
Do
IF INKEY$ = CHR$(27) THEN End
'ein = (INP (1022) AND 32)/32 'DSR
'ein = (INP (1022) AND 64)/64 'RI
'ein = (INP (1022) AND 128)/128 'DCD
ein = (INP(1016 +6) AND 16)/16 'CTS
LOCATE 12, 9 :PRINT ein
Sleep 100
Loop
| Vielleicht hat schon jemand das Problem gelöst und kann mir helfen.
Mit besten Dank
Hedo |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 10.09.2007, 17:19 Titel: |
|
|
Mein Vater hatte auch einen, jedoch wird der standartm. als COM5 (!) installiert... es sollte eigtl. auch auf der Treiber-CD ein Programm beiliegen, welches sich im Tray verankert, womit man den Namen der Schnittstelle auswählen kann. |
|
Nach oben |
|
|
hedo
Anmeldungsdatum: 03.04.2006 Beiträge: 19
|
Verfasst am: 10.09.2007, 17:38 Titel: |
|
|
Danke für die Antwort.
Das beiliegende Programm habe ich genutzt und den COM1 eingestellt.
Standartmäßig ist Com4 vorgesehen. Auch die Adressänderung auf Com4 gringt keine positiven Ergebnisse.
Hedo |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1874 Wohnort: D59192
|
Verfasst am: 10.09.2007, 17:52 Titel: |
|
|
Hi,
nein, du kannst die Hardware 'INP (1022)' nicht mehr ansprechen, da sie nicht existiert.
Der Com-Port wird hier nur simuliert.
Nur mit get #1 und put #1 kannst du Daten empfangen und übertragen. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 10.09.2007, 17:55 Titel: |
|
|
?
Das Programm MC51 nutzt afaik auch direkte Portadressen... und funktioniert auf dem Laptop meines Dads einwandfrei... |
|
Nach oben |
|
|
hedo
Anmeldungsdatum: 03.04.2006 Beiträge: 19
|
Verfasst am: 10.09.2007, 18:53 Titel: |
|
|
Hallo,
ich danke erstmal für beide Antworten.
Gleich mal eine Frage an PMedia:"von welchem Hesteller kommt MC51?"
Das scheint mir am Einfachsten zu gehen.
Mit get und put komme ich noch nicht zurecht.
Grüße
Hedo |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 10.09.2007, 19:02 Titel: |
|
|
MC51 ist ein Makroassembler für den 8051 von Reiner Burkhardt, wenn ich mich richtig entsinne... nützt dir also nix denk ich mal |
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 11.09.2007, 00:13 Titel: |
|
|
Mit Benutzung der Win-API geht es auch mit den USB-Adaptern. Such in der win32.hlp nach den fett hervorgehobenen Funktionen.
1. Die (folgenden) Funktionen aus kernel32.dll einbinden:
(Habe ich mit freeBasic allerdings noch nie gemacht, vielleicht kann jemand helfen)
2. Schnittstelle öffnen mit CreateFile; etwa so
CHandle = CreateFile("COM5", &hC0000000, 0, 0, 3, 0, 0) oder falls die ensprechenden Konstanten irgendwie eingebunden werden können:
CHandle = CreateFile("COM5", GENERIC_READ or GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0)
Das (den?) Handle brauchst du für die folgenden Funktionen.
3. RTS, DTR, TxD setzen mit EscapeCommFunction.
4. CTS, DSR, RI, DCD auslesen mit GetCommModemStatus.
5. Schnittstelle schließen mit CloseHandle. _________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1874 Wohnort: D59192
|
Verfasst am: 11.09.2007, 13:20 Titel: |
|
|
Hi,
mit der WinAPI kann man den (simulierten) Portstatus abfragen.
Hier ist ein Beispiel von MichaelW aus dem engl. Forum:
http://www.freebasic.net/forum/viewtopic.php?p=35695#35695
Zwar geht es dort um die Fehlerabfrage aber im Listing ist die Statusabfrage mit WinAPI ersichtlich.
Noch einmal: wegen fehlender Hardware kann man nicht mit Inp(xx) oder Out xx,y arbeiten.
(Es soll DOS-Emulatoren geben, die die USB-Signale auf den UART umleiten?)
Mit USB - RS232 - Converter kann man nicht in Echtzeit arbeiten wie mit dem alten Comport.
Nicht nur wegen der bekannten Probleme bei Multitasking Betriebssystemen.
USB - RS232 - Converter arbeiten zumeist nicht mit Hardware-Handshaking, deshalb wird der Portstatus nicht geändert wenn keine Übertragunsdaten anliegen.
Auch wenn man versucht mit polling den Status aktuell zu halten können die USB-Systemtreiber den Status minimal alle 16ms erneuern (wenn keine Daten übertragen werden).
Es gibt spezielle Lösungen, dass sind dann aber keine USB - RS232 - Converter für ~10 Euro. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
hedo
Anmeldungsdatum: 03.04.2006 Beiträge: 19
|
Verfasst am: 11.09.2007, 17:04 Titel: |
|
|
Hallo,
allen ein herzliches Dankeschön.
Ich habe sicherlich die Sache einfacher gesehen. Auf alle Fälle probiere ich die beiden letzten Vorschläge aus.
Allerdings hat mir Volta die Augen geöffnet. Für eine Stoppuhr mit hundertstel Sekunden ist die Sache nicht geeignet. Mir ist da eine PCMCIA- Karte in den Sinn gekommen, die müsste ja den kompletten Bus verwalten können und der COM- Port wäre dann nicht mehr virtuell.
Vielleicht habe ich damit Erfolg.
Mit besten Grüßen
Hedo |
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 11.09.2007, 20:15 Titel: |
|
|
Ich habe mal den Quelltext aus Voltas Link umfrisiert. Damit kannst du alle 4 Eingangsleitungen abfragen. Um den Zustand zu ändern, reicht eine einfache elektrische Verbindung von einem der Ausgangspins zu einem Eingangspin.
Wie Volta schon erwähnte, wird das so richtig "echtzeitig" nicht sein, für weniger zeitkritische Aufgaben aber brauchbar. Ob es es für deine Stoppuhr ausreicht, musst du entscheiden.
compilert mit Version 0.18 und Parametern:
-lang deprecated -s console
Code: | #include once "windows.bi"
Dim hCom As handle
Dim PortNr As String = "COM1"
Dim modemStat As dword
'Serielle Schnittstelle öffnen:
hCom = CreateFile(PortNr, GENERIC_READ Or GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)
Print "Handle = "; hCom
'Fehlerbehandlung, falls Öffnen fehlschlägt:
If hCom = INVALID_HANDLE_VALUE Then
Print "Fehler beim Oeffnen von "; PortNr
Sleep
End
Else
Print PortNr; " geoeffnet"
EndIf
'Alle Ausgangsleitungen auf positive Spannung setzen:
EscapeCommFunction(hCom, SETRTS) 'RTS +12V
EscapeCommFunction(hCom, SETDTR) 'DTR +12V
EscapeCommFunction(hCom, SETBREAK) 'TxD +12V (Break)
Print
Print
Print "Ende mit [Esc]"
'Eingangsleitungen per Polling abfragen:
Do
GetCommModemStatus(hCom, @modemStat)
Locate 8,1
If modemStat And MS_CTS_ON Then Print "CTS = 1" Else Print "CTS = 0"
If modemStat And MS_DSR_ON Then Print "DSR = 1" Else Print "DSR = 0"
If modemStat And MS_RING_ON Then Print "RING = 1" Else Print "RING = 0"
If modemStat And MS_RLSD_ON Then Print "RLSD = 1" Else Print "RLSD = 0"
Loop Until InKey = Chr(27)
'Alle Ausgangsleitungen auf negative Spannung zurücksetzen:
EscapeCommFunction(hCom, CLRRTS) 'RTS -12V
EscapeCommFunction(hCom, CLRDTR) 'DTR -12V
EscapeCommFunction(hCom, CLRBREAK) 'TxD -12V
'Serielle Schnittstelle schließen:
closeHandle(hCom) |
_________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++
Zuletzt bearbeitet von Steini63 am 12.09.2007, 20:03, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1874 Wohnort: D59192
|
Verfasst am: 11.09.2007, 22:03 Titel: |
|
|
Hi steini,
das Prog ist natürlich auch zum testen der realen Comports unter Windows bestens geeignet .
2 Kleinigkeiten:
man kann auch einfach Code: | DIM PortNr AS STRING = "Com1" | schreiben und FB hat 'INVALID_HANDLE_VALUE' definiert, also Code: | IF hCom = INVALID_HANDLE_VALUE THEN |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
hedo
Anmeldungsdatum: 03.04.2006 Beiträge: 19
|
Verfasst am: 11.09.2007, 22:15 Titel: |
|
|
Danke noch mal,
habs gleich ausprobiert. Funktioniert einwandfrei zum Testen. Mit der Stoppuhr klappt es nicht, sie läuft zwar, aber das Wichtigste, die Zeitwerte stimmen nicht. Es liegt sicherlich an dem von Volta genannten Problem der 16ms.
Ich gebe aber noch nicht auf!
Mit besten Grüßen
Hedo |
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 12.09.2007, 20:01 Titel: |
|
|
So, ich habe Voltas Tipps oben in den Quelltext reingefrickelt.
Ihr werdet's nicht glauben: Er funktioniert imer noch
Nee im Ernst, "so einfach wie möglich" ist natürlich immer am Besten. Danke für die Hinweise. _________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 12.09.2007, 21:37 Titel: |
|
|
Hallo Frank,
dein Quellcode ist ja wirklich super! Damit bekomme ich selbst auf meinem ansonsten in Hardwareangelegenheiten so störrischen Windows 2000 Rechner den COM-Port ohne Probleme mit FB 0.18 angesprochen! Sogar meine Eingangserweiterung lässt sich nutzen! Wow!
Könnten wir dich vielleicht dafür gewinnen, den Source und gerne auch weiteres Material zum Thema auf http://www.freebasic-portal.de zur Verfügung zu stellen?
Viele Grüße!
Sebastian _________________
Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 14.09.2007, 18:52 Titel: |
|
|
Zitat: | Könnten wir dich vielleicht dafür gewinnen, den Source und gerne auch weiteres Material zum Thema auf http://www.freebasic-portal.de zur Verfügung zu stellen? |
Hab's hochgeladen als Code-Beispiel, Rubrik 'System'. Die Redaktion prüft es jetzt
Zitat: | ... Sogar meine Eingangserweiterung lässt sich nutzen! Wow! |
Was'n das??? _________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 14.09.2007, 19:35 Titel: |
|
|
Hallo,
der Code ist jetzt online, jedoch in der Rubrik "Elektronikansteuerung". Danke fürs Einstellen!
Zitat: | Zitat: | ... Sogar meine Eingangserweiterung lässt sich nutzen! Wow! |
Was'n das??? |
Ich hab auf Basis eines Artikels von Skilltronic mehrere 4021-Bausteine "kaskadiert" und nutze die, um Taster und Lichtschranken zu überprüfen. Link: http://www.skilltronics.de/versuch/elektronik_pc/4021.html Dank der Schaltung kann ich über den COM-Port jetzt ganz viele Eingänge abfragen und nicht nur die, die "direkt" vorhanden sind. Deshalb nennt Skilltronic das "Eingangserweiterung".
Viele Grüße!
Sebastian _________________
Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
|