Problem mit CAN-Bus und Serielle Schnittstelle gleichzeitig

    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!

    • Problem mit CAN-Bus und Serielle Schnittstelle gleichzeitig

      Hallo Leute,

      ich bin neu hier und möchte mich gleich mit einem Problem an euch wenden.
      Vielleicht kann mir hier jemand weiterhelfen.

      Es ist eigentlich relativ trivial, aber ich habe jetzt schon Tage damit verbracht, dem Problem auf den Grund zu gehen, leider ohne Erfolg.

      Ich möchte einen Wert auf dem CAN-Bus senden und gleichzeitig aber auch die Serielle Schnittstelle auf ein Zeichen abfragen.

      Das funktioniert auch einwandfrei, wenn ich das eine oder das andere mache, aber nicht beides gleichzeitig.
      Dazu habe ich den Code vereinfacht angehängt.

      Wenn ich "canstatus = Cansend(10 , Can_msg1(1), 8)" ausblende (als Kommentar markiere), dann kann ich die Zeichen von der seriellen Schnittstelle ohne Probleme einlesen.
      Wenn ich "canstatus = Cansend(10 , Can_msg1(1), 8)" wieder einblende, dann kann ich über inkey, oder auch waitkey, etc. keine Zeichen von der seriellen Schnittstelle einlesen, das Senden auf dem CAN funktioniert aber einwandfrei.

      Egal ob ich die SW oder HW Variante der seriellen Schnittstelle (USART) wähle, oder die CAN Botschaft über Interrupt verschicke, beides gleichzeitig funktioniert nicht richtig.
      Ein über das Terminal an die serielle Schnittstelle geschicktes Zeichen wird nicht über Inkey erkannt bzw. Inkey gibt immer 0 aus.

      Wer kann mir hier weiterhelfen?
      Bitte entschuldigt, wenn ich vergessen habe etwas anzugeben. Sagt mir einfach, was noch an Infos fehlt, um weiterhelfen zu können.
      Vielen Dank vorab!

      BASCOM-Quellcode

      1. $regfile = "m128can.dat"
      2. $crystal = 16000000
      3. $hwstack = 100
      4. $swstack = 100
      5. $framesize = 100
      6. $prog &HFF , &HFF , &HB9 , &HFF
      7. $baud = 19200
      8. '******************* Globale Variablen *******************
      9. Dim A As Byte
      10. Dim Can_msg1(8) As Byte
      11. Dim _canpage As Byte , _canid As Dword , _can_mobints As Word
      12. Dim Can_byte As Word
      13. Dim canstatus as byte
      14. '******************* Konfiguration CAN-Bus *******************
      15. Canreset ' reset can controller
      16. Canclearallmobs ' clear alle message objects
      17. Canbaud = 500000 ' use 500 KB
      18. Config Canbusmode = Enabled ' enabled,standby,listening
      19. Config Canmob = 10 , Bitlen = 11 , Idtag = &H0100 , Msgobject = Disabled , Msglen = 8 ' this mob is used for sending data
      20. '******************* Konfiguration RS232 *******************
      21. Config Serialin = Buffered , Size = 169
      22. Enable Interrupts
      23. '------------------------------------------------------------------------------
      24. '-------------------- Hauptprogramm -------------------------
      25. '------------------------------------------------------------------------------
      26. Do
      27. A = Inkey()
      28. If A > 0 Then
      29. Print "ASCII code " ; A ; " from serial"
      30. End If
      31. Can_msg1(1) = 100
      32. canstatus = Cansend(10 , Can_msg1(1), 8)
      33. Loop
      34. End
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bascomuser ()

    • Du hast recht, das habe ich in dem angehängten Code vergessen.

      "Config Serialout = Buffered , Size = 100"

      Habe es eingefügt und es läuft nun mit dem angehängten Code.
      Komisch, das habe ich vor lauter Bäumen nicht gesehen ...

      Der endgültige Code, in den ich noch ein paar Funktionen mehr gepackt habe (wie Zykluszeiten, etc.), läuft weiterhin nicht richtig.
      Ist halt alles ziemlich interruptlastig ...
      Werde jetzt Schritt für Schritt vorgehen und die Codeschnipsel einfügen. Mal schauen, ab wann es zu Problemen kommt.

      Du hast mir auf jeden Fall sehr geholfen. Danke!!

      Wenn ich wieder einen Hänger habe, dann stelle ich den erweiterten Code hier ein.