Byte über SerialPort senden

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von logic88.

    Byte über SerialPort senden

    Hallo!

    Da auf meinen Thread niemand mehr antwortet, schreibe ich eben einen neuen Thread, der vielleicht auch andere interessieren könnte:

    Ich möchte über die Serielle Schnittstelle eine Zahl von 0-255 schicken, also 1 Byte.

    Nun hatte ich das Problem, dass bei einer HyperTerminal-Eingabe mein Mikrocontroller die eingegebenen Ziffern als jeweils 1 Byte sieht.

    Beispiel.: Eingabe im HyperTerminal : 42 er hat erst die 4 in ASCII gewandelt, und dann die 2. Ich möchte aber, dass er die 42 als Byte sieht und nicht die darin enthaltenen ASCII-Bytes.

    Geht das mit SerialPort1.write(42)?

    Versteht ihr?

    Danke!
    Der code sollte eig. funktionieren ;)

    oh seh grad, da musst du noch offset und cnt angeben

    VB.NET-Quellcode

    1. SerialPort.Write(New Byte() {&HFF},0,1)
    2. SerialPort.Write(New Byte() {45,&H3E},0,2)


    usw...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „bsHobbit“ ()

    Also. zum Text: SerialPort.Write(New Byte() {&HFF},0,1)

    ok, aber das mit dem offset und count habe ich noch nicht ganz verstanden...könntest du es mir nochmal erklären?

    Ist der count nix anderes als ein pointer auf das gesendete Byte. das heißt, ich sende byte1,byte2,byte3,byte4. Byte1 hätte jetzt den count1. byte2 hätte count2 usw?!

    wofür ist aber der offset?

    wäre nett, wenn du mir nacheinander die einzelnen "Funktionen" der funktion erklären könntest.

    Sendet der jetzt einen String (was er NICHT soll) oder sendet der einzelne Bytes?

    vielen Dank

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „logic88“ ()

    Du hast ein Byte Array mit folgenden Daten

    Quellcode

    1. 0
    2. 1
    3. 2
    4. 3
    5. 4
    6. 5


    Jetzt gibts ein Zeiger auf die Anfangsadresse von diesem Array, der Inhalt des Zeigers ist die 0.

    Der OFFSET wird zu der ERSTEN Adresse dazugerechnet, würdest du OFFSET 0 angeben, dann fängt der halt bei der ersten Adresse an aus dem Array zu lesen, bei nem offset von 1(einem Byte) fängt der dann bei der 1 an.

    Count sagt nix anderes aus, als WIEVIEL Datensätze sollen nach dem ersten geschrieben werden.

    Ich hoffe das ist einiegermaßen verständlich erklärt ;)
    Zu einem weiteren Problem:

    Ich frage ständig eine Variable "poll" über den Timer1 ab, den ich bei form_load enable.

    [VB]
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim poll As Byte
    poll = SerialPort1.ReadByte()
    If poll <> "" Then Label11.Text = "Controllerboard connected"
    End Sub

    [\VB]


    Der sinn dahinter ist, dass der pc anzeigt, ob das controllerboard an die serielle schnittstelle angeschlossen ist, während der controller ständig irgend ein zeichen über die serielle schnittstelle an den pc schickt. sobald das nicht mehr so ist, soll er in einer label disconnected anzeigen.

    Jedoch hängt sich mein rechner auf, wenn ich das ablaufen lasse. Rechner ist ein intel2core.


    danke!
    Original von logic88
    das heißt ich muss den counter bei jedem gesendeten byte um eins erhöhen?


    Hoffentlich letzte Frage: ;) Sendet er damit nun ein Byte als reinen Wert oder ein ASCII-Zeichen?

    Danke


    Den counter musst du nicht erhöhen. Den musst du so einstellen, das du deine Daten verschicken kannst, wenn du also 5 bytes verschicken willst, dann stellst du den Count auf 5, bei 100 Bytes eben auf 100....


    Selbstverständlich wird der Wert übermittelt, den du in dein Byte-Array schreibst. Bei 0x42 kommt auch 0x42 an der anderen Seite an.

    Für dein anderes Problem brauchst du keinen Timer sondern, folgende Methode von deinem SerialPort:

    VB.NET-Quellcode

    1. Private Sub SerialPort_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived
    2. 'Es kamen Daten an ....
    3. End Sub