Forum: PC-Programmierung Schnitstelle (FT232) mit VB6 auslesen


von Michael (Gast)


Lesenswert?

Hallo !

Ich habe folgendes Problem :

Nachdem die gute RS232 scheinbar langsam zum aussterben verdammt ist 
habe
ich angefangen meine Daten mit einem FT 232 RL aus dem Atmel Mega 8 
rauszuschaufeln.

Die Schnittstelle wird von XP einwandfrei erkannt und kann unter VB6 
parametriert und geöffnet werden (scheinbar ?).

Allerdings wird kein "On Comm" Event ausgelöst.

Setze ich die Baudrate auf 19200 Baud obwohl die Schnittstelle mit 9600 
Baud sendet werden zumindest Trümmer empfangen...das gleiche passiert 
bei 4800 Baud.

Ich will dazu noch sagen, daß das nicht meine erste RS232 ist und ich 
die Schnittstelle auch programmmässig viele Male problemlos auf Anhieb 
verwurstet habe.

Als Sahnehäubchen kommt noch hinzu, daß das Terminalprogramm Commtest 
von B&B die Schnittstelle einwandfrei mit 9600 Baud lesen kann.

Ein Hardwarefehler scheidet also scheinbar aus !?

Kann Irgendwer helfen ???

von Manfred B. (manib)


Lesenswert?

Hi Michael,

das Problem liegt sicherlich an einer falsch initialisierten 
Schnittstelle.
Prüfe vor allem den Wert für RThreshold.

Hier ein VB6 Beispiel:
1
Private Sub Form_Load()
2
    With MSComm1
3
        'DTREnable  Legt fest oder gibt zurück, ob die Leitung "Endgerät betriebsbereit" (Data Terminal Ready, DTR) während eines Kommunikationsvorgangs aktiviert ist. Üblicherweise sendet ein Computer das Signal "Endgerät betriebsbereit" an ein Modem, um diesem mitzuteilen, daß er bereit ist, ankommende Daten zu empfangen.
4
        .DTREnable = False
5
        
6
        'EOFEnable  Die EOFEnable-Eigenschaft bestimmt, ob das Kommunikation-Steuerelement (MSComm) während der Eingabe auf EOF (End Of File) überprüft. Wenn ein EOF-Zeichen gefunden wird, wird die Eingabe angehalten, und das OnComm-Ereignis wird ausgelöst, wobei die CommEvent-Eigenschaft auf comEvEOF festgelegt ist.
7
        .EOFEnable = False
8
        
9
        'Handshaking    Legt fest oder gibt zurück, welches Handshaking-Protokoll die Hardware verwendet.
10
        'comNone        0 (Voreinstellung) Kein Handshaking.
11
        'comXOnXOff     1 XON/XOFF-Handshaking.
12
        'comRTS         2 RTS/CTS-Handshaking (Request To Send/Clear To Send-Handshaking).
13
        'comRTSXOnXOff  3 Sowohl RTS/CTS- als auch XON/XOFF-Handshaking.
14
        .Handshaking = comNone
15
        
16
        'InBufferSize   Legt fest und gibt zurück, wie groß der Empfangspuffer in Bytes ist.
17
        .InBufferSize = 1024
18
        
19
        'InputLen   Legt fest oder gibt zurück, wie viele Zeichen die Input-Eigenschaft aus dem Empfangspuffer liest.
20
        .InputLen = 1
21
        
22
        'InputMode  Legt den Typ der durch die Input-Eigenschaft abgerufenen Daten fest oder gibt diesen zurück.
23
        'comInputModeText   0 (Voreinstellung) Daten werden durch die Input-Eigenschaft als Text abgerufen.
24
        'comInputModeBinary 1 Daten werden durch die Input-Eigenschaft als Binärdaten abgerufen.
25
        .InputMode = comInputModeBinary
26
        
27
        'OutBufferSize  Legt fest und gibt zurück, wie groß (in Bytes) der Sendepuffer ist.
28
        .OutBufferSize = 512
29
        
30
        'ParityReplace  Legt fest und gibt zurück, welches Zeichen ein im Datenstrom entdecktes unzulässiges Zeichen ersetzt, wenn ein Paritätsfehler auftritt.
31
        .ParityReplace = "?"
32
        
33
        'RThreshold Legt fest und gibt zurück, wie viele Zeichen im Empfangspuffer angekommen sein sollen, bevor das Kommunikation-Steuerelement (MSComm) die CommEvent-Eigenschaft auf comEvReceive festlegt und ein OnComm-Ereignis auslöst.
34
        .RThreshold = 1
35
        
36
        'RTSEnable  Bestimmt, ob die Leitung "Sendeteil einschalten" (Request To Send, RTS) aktiviert werden soll bzw. aktiviert ist. Das Signal "Sendeteil einschalten" fordert die Erlaubnis an, Daten übertragen zu dürfen, und wird üblicherweise von einem Computer an ein angeschlossenes Modem gesendet.
37
        .RTSEnable = False
38
        
39
        'SThreshold Legt fest und gibt zurück, welche Anzahl an Zeichen unterschritten werden muß, bevor das Kommunikation-Steuerelement (MSComm) die CommEvent-Eigenschaft auf comEvSend festlegt und das OnComm-Ereignis auslöst.
40
        .SThreshold = 0
41
    End With
42
End Sub

von Michael (Gast)


Lesenswert?

Hallo Manfred !

Ja Du hast recht!!! (auch wenn ich's nicht wirklich verstehe...wie 
peinlich...)

Die RThreshold und SThreshold Eigenschaft müssen beide auf 1 gesetzt 
werden, obwohl ich nur Daten sende. Sobald einer der Werte über 1 liegt 
gibt es Probleme.....

Der Witz :

Verbinde ich den Atmel direkt (zB. Mit einem MAX232) mit dem PC scheint
diese Einstellung nicht so wichtig zu sein und hat "nur" Einfluss auf 
die Performance der Schnittstelle. Nutze ich einen FT232, dessen Treiber 
für Windows ja auch nicht mehr als einen virtuellen COM Port zu 
Verfügung stellt muss diese Einstellung scheinbar korrekt gesetzt 
werden.

Danke für die Hilfe, Dein Beitrag hängt jetzt quasi als "Erste Hilfe" 
neben dem Rechner - man lernt scheinbar nie aus

Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.