String in Byte umwandeln

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • String in Byte umwandeln

      Hallo Zusammen, ich möchte bei der UART-Schnittstelle 8 Bytes einlesen und mit diesen dann weiter arbeiten, Einlesen kann ich diese als String aber leider kann ich diese nicht in Bytes umwandeln. Könnt ihr mir bitte mitteilen was ich da falsch mache?
      Mit dem "Signal" steuere ich lediglich einen Ausgang an um am Oszi das Einlesen zu sehen.
      Danke
      V_K

      Hier mein Empfangscode:
      $regfile = "m32u4def.dat" 'Arduino Micro eingesetzter Mikrocontroller
      $crystal = 16000000
      $hwstack = 40
      $swstack = 32
      $framesize = 100
      $baud = 115200
      '---------Konfiguration------------------------------------------------------------------------------------------------------------
      '-Eingang---------------------------------------------------------------------------------------------------------------------------
      Config Portd.6 = Output 'Pin 17 Ausgang
      '----------Aliasnamen-------------------------------------------------------------------------------------------------------------
      Signal Alias Portd.6
      Signal = 1
      Dim Str_dat_ein As String * 1
      Dim B As Byte
      Do
      If Ischarwaiting() = 1 Then
      Signal = 0
      Str_dat_ein = Inkey()
      B = Val(str_dat_ein)
      Printbin B
      Signal = 1
      End If
      Loop
    • Hallo Ulrich, meintest du das so:
      If Ischarwaiting() = 1 Then
      Signal = 0
      Str_dat_ein = Inkey()
      B = Val(str_dat_ein)
      Print Bin(b)
      Signal = 1
      End If

      Damit bekomme ich 8mal den Wert 30 (Ascii-Wert für "0") und danach "0D 0A", es ist also ein String.
    • Hallo Michael,
      wie kann ich die 8 Byte die ich als String empfange als Byte weiterverarbeiten, der Befehl "Val" wandelt mir den String nicht in Byte um?
      Oder gibt es eine Möglichkeit auch tatsächlich Bytes auch als Bytes zu empfangen?
    • Hallo zusammen, danke dass ihr mir helfen wolltet, aber an manchen Tagen sollte man nicht aufstehen, da habe ich vor lauter Google-Suche die einfachste Sache übersehen. Jetzt empfange ich keinen String mehr sondern ein Byte. Um zu sehen ob meine eingelesenen Werte auch tatsächlich Zahlen sind, wird einfach eine 1 dazu addiert, diese Zahlen werden korrekt ausgegeben.
      _____________________
      Hier mein neuer Code:

      Dim Str_dat_ein As Byte
      Do
      If Ischarwaiting() = 1 Then
      Signal = 0
      Str_dat_ein = Inkey()
      Str_dat_ein = Str_dat_ein + 1
      Printbin Str_dat_ein
      Signal = 1
      End If
      Loop
      ______________
    • V_K schrieb:

      wie kann ich die 8 Byte die ich als String empfange als Byte weiterverarbeiten, der Befehl "Val" wandelt mir den String nicht in Byte um?
      Ich hatte nichts von VAL geschrieben, schau nochmal genau hin

      V_K schrieb:

      Oder gibt es eine Möglichkeit auch tatsächlich Bytes auch als Bytes zu empfangen?
      ja, ein serieller Interrupt beim Empfang eines Bytes.
      Im Interrupt wird geprüft, ob eine Ende-Kennung kommt (CRLF), dann werden die Daten umkopiert, ansonsten werden sie in ein Array aufgesammelt.

      V_K schrieb:

      Dim Str_dat_ein As Byte
      eben war es noch ein String.
      Das ist wie mit Corona, etwas Hygiene im Programm schadet nicht. ;)
    • V_K schrieb:

      Jetzt empfange ich keinen String mehr sondern ein Byte. Um zu sehen ob meine eingelesenen Werte auch tatsächlich Zahlen sind, wird einfach eine 1 dazu addiert, diese Zahlen werden korrekt ausgegeben.
      Hallo V_K,
      tatsächlich empfängst du immer bytes, aber die verschiedene Funktionen zum Einlesen fassen die evtl. zusammen.
      Inkey() liest immer nur ein Byte ein, in deiner Variablen Str_dat_ein wird also immer der übertragene Byte Wert stehen. Und da du immer zu einem Byte eine 1 dazuaddieren kannst, ist das echter Test, ob eine zahl übertragen wurde.
      Demgegenüber liest Input() evtl. mehrere Bytes ein, abhängig davon, welchem Variablentyp du dies zuweist. Ist es ein String, liest Input bis zum CRLF, falls du das nicht anders konfiguriert hast. CRLF wird dabei nicht an den String angehangen.
      Anders bei Inkey(). Nach dem Einlesen deines Bytes kommt anschließend wieder das CR und das LF. Auch diese werden deiner Variable zugewiesen und es passieren evtl. seltsame Dinge. Das musst du entsprechend überprüfen.
    • Hallo Franz,
      bei meinem Testprogrämmchen komme ich von dem ersten Signal= 0 bis zum 8chten Signal= 1 auf 600µs,
      wenn ich das "By_dat_ein = Inkey()" in ein "Inputbin By_dat_ein" ändere habe ich die gleiche Laufzeit. Jetzt habe ich die Variable "By_dat_ein" von Byte auf "Word" geändert, die Laufzeit bleibt immer gleich.
      Gibt es eine Möglichkeit das Empfangen von 8 Byte zu beschleunigen?
      Gruß
      V_K
    • Danke Michael,
      ich bin halt am experimentieren, bin kein Programmierer, aber es macht richtig Spaß mit diesen Dingern zu spielen. Kannst du mir sagen ob es schneller geht wenn ich die 8 Byte einzeln 8 Variablen zuordne oder wenn dies über ein Array gemacht wird. Ist ein Array lediglich für die Übersichtlichkeit des Codes oder verkürzt es tatsächlich die Laufzeit?
    • V_K schrieb:

      Kannst du mir sagen ob es schneller geht wenn ich die 8 Byte einzeln 8 Variablen zuordne oder wenn dies über ein Array gemacht wird. Ist ein Array lediglich für die Übersichtlichkeit des Codes oder verkürzt es tatsächlich die Laufzeit?
      Deine Laufzeit wird hier durch die Geschwindigkeit der seriellen Schnittstelle begrenzt. Das hatte ich dir schon vorgerechnet.
      Prinzipiell ist es schneller, die Bytes direkt in ein Array zu packen, wie ich es schrieb. String-Routinen kosten Zeit zum Umrechnen, was du ja eh nicht willst. Diese Zeit geht dir von deiner restlichen Rechenzeit weg. Von der hast du aber vermutlich genug, pro Byte bleiben etwa 1300 Takte.