Empfangen von Hexcode mit der Uart des XMega 256A3u macht Probleme

    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!

    • Empfangen von Hexcode mit der Uart des XMega 256A3u macht Probleme

      Einen schönen guten Tag,
      ich habe für meine Heizungssteuerung Temperatursensoren mit Funkmodulen und dem Atmega 8 für alle Zimmer erstellt,
      welche beim Erreichen der Solltemperatur einen Code für das Schließen oder Öffnen der Regler an die Basisstation senden.
      Die Temperatursensoren geben zum Beispiel den Code 50 für das Erreichen der Temperatur 23 Grad und den Code 60 für die
      Unterschreitung der Temperatur 21 Grad an die Basis.
      Die Basis soll nun neben der Anzeige der Temperatur der einzelnen Zimmer auch das Empfangsteil an den Reglern bedienen,
      und mit diesen oder andern Code das Öffnen oder Schließen
      der Ventiele veranlassen.
      Nun stellt sich das Problem, es funktioniert zwar das Senden der Basisstation mit der allgemeinen Config für die Com 5 (#1),
      aber es werden die eingehenden Codes nicht ausgegeben und stehen zur Auswertung nicht zu Verfügung.
      Mit If Ischarwaiting <> 0 und Inputbin Code gab es mit Atmegas bisher keine Probleme, siehe Prorammbeispiel für die direkte Reglersteuerung.
      Beim XMegas stehe ich nun vor dem Probleme, wie weiter. Ich bekomme keinen Binärwert zum Auswerten
      Wie Konfiguriere ich die Schnittstelle um die Empfangenen Codes mit Ischarwaiting <> 0 auszuwerten.
      Wer hilft mir auf die Sprünge.
      Danke für die Mühe und das Verständnis.
      Ischartwaiting.basReglersteuerungCodeUntergeschoß.bas
    • BASCOM-Quellcode

      1. ' Programmbeginn *************************************************************
      2. Beginn:
      3. Ta = Ischarwaiting(#1)
      4. If Ta <> 0 Then Goto Lesen
      5. Goto Beginn
      6. Lesen:
      7. Inputbin #1, Code
      8. Printbin #1,Code
      9. Goto Beginn
      Alles anzeigen
      So sieht allerdings kein "Hauptprogramm" aus.
      Es sollte so aussehen:

      BASCOM-Quellcode

      1. ' Programmbeginn *************************************************************
      2. Do
      3. Ta = Ischarwaiting(#1)
      4. If Ta <> 0 Then
      5. Inputbin #1, Code
      6. Printbin #1,Code
      7. End If
      8. Loop
      9. End
      Ansonsten sollte es funktionieren.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • @dg8ngj
      Ich hab mir mal erlaubt deinen Code von der ReglersteuerungCodeUntergeschoß.bas etwas an zu passen.

      BASCOM-Quellcode

      1. ' ############################################################################
      2. '
      3. ' # Heizungssteuerung mit RFM22b
      4. ' # bis 20 Regler Fussbodenheizung
      5. ' # 14.01.2016
      6. ' ############################################################################
      7. 'Codes für Reglerplatine Untergeschoß
      8. ' Code(hex) Bedeutung
      9. '-------------------------------
      10. ' 50 bis 57 Regler 1 bis 8 auf'
      11. ' 60 bis 67 zu
      12. '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      13. $regfile = "m644adef.dat"
      14. $hwstack = 32
      15. $swstack = 10
      16. $framesize = 40
      17. $crystal = 11059200
      18. $baud = 9600
      19. 'Baud = 9600
      20. '----------------------------------------------------------------------------
      21. Dim Code As Byte
      22. Dim Ta As Byte 'Übertragungscode
      23. Config Watchdog = 4096
      24. Start Watchdog
      25. '-----------------------------------------------------------------------------
      26. Config PortA = Output
      27. wait 1
      28. 'Print "Bereit";
      29. wait 1
      30. code = 0
      31. ' Programmbeginn *************************************************************
      32. Do
      33. Reset Watchdog
      34. Ta = Ischarwaiting()
      35. If Ta <> 0 Then
      36. Inputbin Code
      37. Select Case Code
      38. Case &H50 : Porta.0 = 1 'Rollo 1
      39. Case &H51 : Porta.1 = 1
      40. Case &H52 : Porta.2 = 1
      41. Case &H53 : Porta.3 = 1
      42. Case &H54 : Porta.4 = 1
      43. Case &H55 : Porta.5 = 1
      44. Case &H56 : Porta.6 = 1
      45. Case &H57 : Porta.7 = 1
      46. '--------------------------------------------
      47. Case &H60 : Porta.0 = 0 'Rollo 1
      48. Case &H61 : Porta.1 = 0
      49. Case &H62 : Porta.2 = 0
      50. Case &H63 : Porta.3 = 0
      51. Case &H64 : Porta.4 = 0
      52. Case &H65 : Porta.5 = 0
      53. Case &H66 : Porta.6 = 0
      54. Case &H67 : Porta.7 = 0
      55. End Select
      56. End If
      57. Loop
      58. End
      Alles anzeigen
      Ich denke mal so ist es übersichtlicher und sauberer geschrieben :)
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Guten Morgen,
      ich bedanke mich nochmals für die Unterstützung. Strukturiert ist es natürlich sauberer und Übersichtlicher und mit Case zweckmäßiger programmiert.
      Danke für die Anregung, ich bin ja auch noch Anfänger und da geht man manchmal einen eigenen andere Weg.

      Es läuft zwar tadellos bisher als Rollo Steuerung und auch als Heizungsregelung, dies vom Temperatursensor direkt über Funk zum Relaissteuergerät.
      Nun soll aber eine Basisstation mit etwas mehr Kontrolle und Funktion über ein SSD1963 Display gesteuert werden.
      Dazu hatte ich ja die Funkuhr als Bildschirmschoner gedacht, was ja auch als eigenständiges Projekt vorliegt.
      Einen schönen guten Tag und 73