Hexdaten über die serielle Schnittstelle empfangen und auswerten

    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!

    • Michael schrieb:

      Nein, meine ich nicht, ich fragte in #34 nach den verwendeten Ports.
      Daran hätte man gesehen, welchen COM du ansprechen wolltest.
      Jetzt hab ichs geschnallt, PH0 und PH1.

      Totales Desaster hier, mir ist ein Zahnriemen gerissen und ich hab keinen Ersatz. Hoffentlich können die schnell liefern.
      Hab die Kräfte wohl unterschätzt, liegt vielleicht auch an dem Ruckeln, was jetzt weg ist.
    • Da mir dieser Beitrag sehr auf die Sprünge geholfen hat und er gut bei Google zu finden ist, hier meine sehr gut funktionierende Lösung zum Auslesen von einem Benewake TFmini Plus per UART mit einem Xmega. Das Auslesen dauert 47 µs. Natürlich bin ich offen für Verbesserungen. Der Code ist hier aber erstmal absichtlich deutlich:

      BASCOM-Quellcode

      1. $regfile = "xm128A1def.dat"
      2. [...]
      3. Config Com1 = 115200 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
      4. Open "com1:" For Binary As #1
      5. Config Serialin0 = Buffered , Size = 100
      6. Config Serialout0 = Buffered , Size = 100
      7. Config Com2 = 115200 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
      8. Open "com2:" For Binary As #2
      9. Config Serialin1 = Buffered , Size = 100
      10. Dim Data_available_1 As Byte
      11. Dim Lidar_1(7) As Byte
      12. Dim Temp1 As Byte
      13. Dim Temp2 As Byte
      14. Dim Distance_1 As Word
      15. Dim Strength_1 As Word
      16. Dim Checksum_1 As Byte
      17. Dim Valid_1 As Bit
      18. Echo Off
      19. 'LIDAR KONFIGURIEREN
      20. Printbin #1 , 90 ; 6 ; 3 ; 0 ; 0 ; 99 'setzen auf null Hz, manuelle Abfrage
      21. 'Printbin #1 , 90 ; 6 ; 3 ; 10 ; 0 ; 109 'setzen auf 10 Hz automatisch
      22. Waitms 10
      23. Printbin #1 , 90 ; 4 ; 17 ; 111 'speichern
      24. Waitms 1000
      25. Do
      26. Waitms 100 'Dieses Waitms bestimmt nun die Frequenz des Abfragens
      27. Clear Serialout0
      28. nop
      29. Portq.3 = 0 '46 µs from asking for data to receiving / decoding data
      30. Printbin #1 , 90 ; 4 ; 4 ; 98 'ask for data
      31. Data_available_1 = Ischarwaiting(#1)
      32. If Data_available_1 > 0 Then
      33. Inputbin #1 , Temp1 , 1
      34. Inputbin #1 , Temp2 , 1
      35. If Temp1 = 89 And Temp2 = 89 Then 'Header ist so wie er sein soll
      36. Inputbin #1 , Lidar_1(1) , 7 'Frage weitere 7 Bytes ab
      37. Checksum_1 = Temp1 + Temp2 'errechne Checksumme
      38. Checksum_1 = Checksum_1 + Lidar_1(1) 'ach Bascom, wann gibts denn endlich mal mehr als eine OPeration pro Zeile...?
      39. Checksum_1 = Checksum_1 + Lidar_1(2)
      40. Checksum_1 = Checksum_1 + Lidar_1(3)
      41. Checksum_1 = Checksum_1 + Lidar_1(4)
      42. Checksum_1 = Checksum_1 + Lidar_1(5)
      43. Checksum_1 = Checksum_1 + Lidar_1(6)
      44. Distance_1 = Lidar_1(2) * 256 'aus zwei Bytes zusammensetzen
      45. Distance_1 = Distance_1 + Lidar_1(1)
      46. Strength_1 = Lidar_1(4) * 256 'aus zwei Bytes zusammensetzen
      47. Strength_1 = Strength_1 + Lidar_1(3)
      48. If Checksum_1 = Lidar_1(7) Then 'Vergleich empfangene Checksum mit errechneter Checksum
      49. Valid_1 = 1
      50. Else
      51. Valid_1 = 0
      52. End If
      53. Portq.3 = 1
      54. Print #2 , Distance_1 ; Chr(009) ; Strength_1 ; Chr(009) ; Valid_1 'Ausgabe Ergebnis auf anderem serialport
      55. Else 'wenn header nicht wie erwartet, dann Buffer löschen
      56. Clear Serialin0
      57. End If
      58. End If
      59. Loop
      60. End
      Alles anzeigen
    • Willa schrieb:

      Checksum_1 = Checksum_1 + Lidar_1(1) 'ach Bascom, wann gibts denn endlich mal mehr als eine OPeration pro Zeile...?
      Checksum_1 = Checksum_1 + Lidar_1(2)
      Checksum_1 = Checksum_1 + Lidar_1(3)
      Checksum_1 = Checksum_1 + Lidar_1(4)
      Checksum_1 = Checksum_1 + Lidar_1(5)
      Checksum_1 = Checksum_1 + Lidar_1(6)


      for zaehler=1 to 6
      Checksum_1 = Checksum_1 + Lidar_1(zaehler) ' Antwort Bascom // ach willa, das brauchst du doch nicht ;) ...
      next