Forum: PC-Programmierung c# und FT232 nur ein Byte kommt an


von Sebastian S. (sebastian_s25)


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

von Ralf (Gast)


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

von Sebastian S. (sebastian_s25)


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

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.