Schnitstelle (FT232) mit VB6 auslesen

Gast #1095833
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 ???
#1096253
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
Gast #1096390
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.