Hallo, wie kann ich in VisualBasic Express 2008 bei einer Sendekommunikation über RS232 dafür sorgen, dass das erste Byte mit der Baudrate x und die nachfolgenden mit der Baudrate y übertragen werden, ich möchte also bei aufeinanderfolgenden Bytes direkt hintereinander die Baudrate ändern. Bei meinen bisherigen Versuchen vergehen mindestens 20ms bis umgeschaltet wird, manchmal gar nicht. Ich bekomme einfach kein halbwegs zeitlich definiertes Verhalten hin. Es geht um die Nachbildung eines LIN-Masters im PC zur Generierung des Sync-Breaks. Hier mein Code: Module Module1 Public mySerialPort As New System.IO.Ports.SerialPort Public Sub CommPortSetup() With mySerialPort .PortName = "COM1" .BaudRate = 6600 .DataBits = 8 .Parity = IO.Ports.Parity.None .StopBits = 1 .Handshake = 0 End With End Sub Public Sub WriteSerialPort() Dim DataOut(9) As Byte mySerialPort.Open() DataOut(0) = &H0 DataOut(1) = &H6 DataOut(2) = &HF4 DataOut(3) = &H1 DataOut(4) = &HFF DataOut(5) = &HFF DataOut(6) = &HFF DataOut(7) = &HFF DataOut(8) = &HFF With mySerialPort .DiscardOutBuffer() .BaudRate = 6600 .Write(DataOut, 0, 1) .DiscardOutBuffer() .BaudRate = 9600 .Write(DataOut, 1, 8) .DiscardOutBuffer() .Close() End With End Sub End Module Mir ist klar dass ein PC kein Mikrocontroller ist mit dem man exakte Zeitbedingungen schaffen kann. Aber bei diesen relativ langen Zeiten müsste das doch gehen. Mit Timern habe ich auch schon experimentiert, jedoch erfolglos. Danke für Tipps! Gruss, Armin
Es könnte Dir helfen, wenn Du die Granularität des Schedulers verfeinerst. Das geht mit der eigentlich für Multimedia-Anwendungen gedachten Win32-API-Funktion timeBeginPeriod (http://msdn.microsoft.com/en-us/library/ms713413%28v=vs.85%29.aspx), der Du als minimalen Wert 1 für 1 Millisekunde übergeben kannst. Desweiteren ist wichtig, daß Du bei der Schnittstelle den Sende-FIFO komplett deaktivierst, und daß Du eine "echte" Schnittstelle, also keine USB-Seriell-Bridge verwendest. Bei den Onboard-Schnittstellen (8250/16550 etc.) ist es im übrigen nicht möglich, eine Baudrate von 6600 Baud zu erzeugen; die Baudrate wird durch ganzzahliges Teilen aus der höchstmöglichen Baudrate (115200) erzeugt. 115200 / 17 = 6776 115200 / 18 = 6400 Der Devicetreiber, der die Onboard-Schnittstelle ansteuert, wählt den nächsten passenden Wert aus, wenn ihm ein Baudratenwert übergeben wird. Wie Du schon selbst erkannt hast, ist das Zeitverhalten von Windows generell ziemlich ungeeignet, um Dein Ziel zu erreichen, mit den von mir beschriebenen Hinweisen kannst Du es allenfalls etwas verbessern.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.