Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

USB zu seriell Converter

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hedo



Anmeldungsdatum: 03.04.2006
Beiträge: 19

BeitragVerfasst am: 10.09.2007, 17:01    Titel: USB zu seriell Converter Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 10.09.2007, 17:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
hedo



Anmeldungsdatum: 03.04.2006
Beiträge: 19

BeitragVerfasst am: 10.09.2007, 17:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 10.09.2007, 17:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 10.09.2007, 17:55    Titel: Antworten mit Zitat

?
Das Programm MC51 nutzt afaik auch direkte Portadressen... und funktioniert auf dem Laptop meines Dads einwandfrei...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hedo



Anmeldungsdatum: 03.04.2006
Beiträge: 19

BeitragVerfasst am: 10.09.2007, 18:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 10.09.2007, 19:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 11.09.2007, 00:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 11.09.2007, 13:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hedo



Anmeldungsdatum: 03.04.2006
Beiträge: 19

BeitragVerfasst am: 11.09.2007, 17:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 11.09.2007, 20:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 11.09.2007, 22:03    Titel: Antworten mit Zitat

Hi steini,
das Prog ist natürlich auch zum testen der realen Comports unter Windows bestens geeignet zwinkern .

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hedo



Anmeldungsdatum: 03.04.2006
Beiträge: 19

BeitragVerfasst am: 11.09.2007, 22:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 12.09.2007, 20:01    Titel: Antworten mit Zitat

So, ich habe Voltas Tipps oben in den Quelltext reingefrickelt.
Ihr werdet's nicht glauben: Er funktioniert imer noch grinsen

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 12.09.2007, 21:37    Titel: Antworten mit Zitat

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! lächeln

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? lächeln

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 14.09.2007, 18:52    Titel: Antworten mit Zitat

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 zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 14.09.2007, 19:35    Titel: Antworten mit Zitat

Hallo,

der Code ist jetzt online, jedoch in der Rubrik "Elektronikansteuerung". Danke fürs Einstellen! lächeln

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". lächeln

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz