c# und FT232 nur ein Byte kommt an

OP #2419089
Lesenswert?
• ▲
▼
Hi Leute

Ich versuche gerade eine serielle Verbindung mit einem Mirkrocontroller 
herzustellen. Dies soll ueber USB funktioniern und dazu benutze ich 
einen FT232.

Ueber Docklight, hab ich schon die "Trockenversuche" gemacht und hier 
kam alles wunderbar an. Ohne irgendwann einen Aussetzer zu haben.

Jetzt wollte ich mein C# Programm erweitern und anstatt ueber die 
Serielle Schnittstelle des PC's ueber die USB Schnittstelle auf den uC 
zugreifen.

Und das funktioniert jetzt nicht******

Kann es sein, dass es hier eine Besonderheit, mit den Vituellen Comports 
gibt? Dass er z. B. nur immer ein Byte lesen kann?

Hier is mal ein ausschnitt meines codes:
1
 
2

3
 // Create and Set the Serialport
4
            ComPort = new SerialPort();
5
            ComPort.PortName = Comport;
6
            ComPort.BaudRate = 4800; //9600
7
            ComPort.Parity = Parity.None;
8
            ComPort.DataBits = 8;
9
            ComPort.StopBits = StopBits.One;
10
 
11
            try
12
            {
13
                ComPort.Open();
14
 
15
                ComPort.Write(SendMessage, 0, SendMessage.Length);
16
 
17
                while (proceed)
18
                {
19
                    try
20
                    {
21
                        Timeout.Start();
22
                        ComPort.Read(ReceiveMessage, 0, 2);
23
                        Timeout.Abort();
24
                        Errorcode = ReceiveMessage[1];
25
                        proceed = false;
26
                    }
27
                    catch
28
                    {
29
                        Timeout.Abort();
30
                        proceed = false;
31
                        break;
32
                    }
33
// ab hier nur weitere Verarbeitung...

ich hoffe ihr koennt mir helfen!!

Mfg

sebastian_s25
Gast #2419105
Lesenswert?
• ▲
▼
> Kann es sein, dass es hier eine Besonderheit, mit den Vituellen Comports
> gibt? Dass er z. B. nur immer ein Byte lesen kann?
Nein, das geht wie beim normalen COM-Port auch mit mehreren Bytes. Das 
einzige, was man beachten muss ist dass USB eine paket- und eine 
RS232-Schnittstelle eine byteorientierte Schnittstelle ist.
USB holt die Daten der Slaves in einem bestimmten Zeitraster ab, während 
"echte" RS232-Schnittstellen die Daten quasi sofort zur Verfügung haben.

Was veranlasst dich zur Vermutung dass man nur ein Byte bekommt?
Du hast in der Schleife sowohl im Try- als auch im catch-Block "proceed 
= false", liegt es daran, dass du nur ein Byte bekommst?

Was ist das Timeout-Objekt?

Ralf
OP #2419110
Lesenswert?
• ▲
▼
Hi Ralf

Also das Problem mit den paket- bzw. byteorientieren Schnittstelle hat 
FTDI hoffentlich schon in ihren Driver geloest... Ich konnte auch nichts 
finden, dass irgendwas anders waere...

Weil ich immer nur 0x87 0x00 anstatt 0x87 0xAC bekomme.

Proceed = false; hab ich eingefuegt, weil ja die Funktion 
ComPort.Read(byte[], 0, 2) auf 2 Bytes wartet. Oder etwa nicht??

Das TimeoutObjekt is mein eigener Timeout, den ich mir gebastlt habe, 
weil im CF 3.5 in dem ich Programmiere die Timeoutfunktionen nicht hat. 
Hier wird nur ein extra Thread aufgemacht, der ne best. Zeit wartet und 
dann ne exeption in den Raum wirft....

mfg
Bastian

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.