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

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • 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 Source Code

      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
      Display All
      So sieht allerdings kein "Hauptprogramm" aus.
      Es sollte so aussehen:

      BASCOM Source Code

      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.
    • Übrigens hab ich mir auch mal deinen anderen Code angesehen und da hast du auch keine Main-Loop (Hauptprogramm) drin und auch viele GOTO-Anweisungen die du vermeiden solltest. Unterprogramme schreibt mal so:

      BASCOM Source Code

      1. Relais1:
      2. 'mach irgendwas
      3. Return
      4. 'der Aufruf erfolgt so
      5. Gosub Relais1
      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 Source Code

      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
      Display All
      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
    • ja, gibt es.
      Zb. das RST System R=Lesbarkeit S=Lautstärke T=Tonqualität
      QR / QS Gruppen
      Abkürzungen zb. cq=an alle , cw=Telegrafie , fone=Telefonie , tnx=danke , om=alter freund
      73=viele Grüße , 99=verschwinde! , und viele andere.

      also 73
      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.