Mega 8 mit der uart schalten

    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!

    • Mega 8 mit der uart schalten

      Hallo ihr Fachleute
      ich möchte gerne über einen empfangenen Text eine Led schalten.
      ich sende mit meinem Display (nextion) "Lampean", dieser text wird empfangen und auf einem Display 2x16 angezeigt (Lampean).
      soweit so gut das funktioniert auch. Dieser Text soll nun einen Port auf H setzen ist das überhaupt möglich oder muß
      ich mit meinen Nextion einen Schaltbefehl ?? senden??

      Über eine Antwort würde ich mich freuen !!
      Mfg Werner
    • Hi, geht alles. Du hast jetzt sicherlich einen string, in dem dein empfangener Text 'Lampean' drin steht. Wenn du jetzt was empfangen hast, musst du nur abfragen if empfangenertext='Lampean' then portx.y=1 else portx.y=0.
      Zeig doch mal dein Programm vom Empfänger.

      edit: @Cable meint das auch :rolleyes:
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • '***************************************************************************
      '* *
      '* Program-name: Nextion Test *
      '* Programmer: W.Klaus Date: 29.05.2017 *
      '* *
      '* Purpose: AVR-Board mit Chip ATMega8 *
      '* *
      '* 2x16 Display *
      '* *
      '* BASCOM-AVR Version: 2.0.7.8 OSC-f: 8.000.000 MHz *
      '* *
      '***************************************************************************



      $regfile = "m8def.dat"
      $framesize = 32
      $swstack = 32
      $hwstack = 32

      $crystal = 8000000

      Config Adc = Single , Prescaler = Auto , Reference = Avcc 'avcc_Pin auf 5 Volt legen HW

      Config Single = Scientific , Digits = 2 '2 nachkommastellen-----------------------------------------

      $baud = 9600

      '$hwstack = 100
      '$swstack = 100
      '$framesize = 100


      Config Lcd = 16 * 2
      Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
      Config Lcdbus = 4

      Config Pind.2 = Input
      Config Pind.3 = Input
      'Config Pind.4 = Input
      'Config Portc.2 = Output

      'Portd.2 = 1
      'Portd.3 = 1 'intern pullup auf high 'PortX setzt einen Pin H(1) L(0)
      Config Portd.4 = Output
      'intern pullup auf high 'oder man schaltet den pullup wenn als Eingang
      'Config Header1 As Word

      Dim Activ As Word




      Dim Header1 As String * 20

      Cls


      Locate 1 , 1 : Lcd " Nextion test "
      Locate 2 , 1 : Lcd " "

      'On Urxc Rec_isr
      'enable Urxc
      'Enable Interrupts


      'Dim Help_str As String * 20

      Dim Rs232 As Byte
      Dim T As String * 10
      Dim I As Word


      '***************************************************************************************************
      '
      On Urxc Isrempf 'define serial receive ISR
      Enable Urxc 'enable receive isr

      Enable Interrupts 'enable interrupts
      '***************************************************************************************************



      Do

      '------------------------------------------------------------- zum Nextion senden------------------------
      Cls


      Header1 = "temp.val=20"


      Print Header1;
      Printbin &HFF ; &HFF ; &HFF; 'Semikolon war die lösung !!!!!!!!!!--------------------------------
      Wait 2

      Print "temp.val=80" ;
      Printbin &HFF ; &HFF ; &HFF;
      Wait 2


      If Len(t) > 0 Then
      Cls
      Locate 1 , 1 : Lcd "Empfangen: "
      Locate 2 , 1 : Lcd ; T
      End If

      If T = Chr(activ) Then Portd.4 = 1 'geht nicht!!!!!!!!!!


      T = ""
      Wait 2

      Loop

      '***************************************************************************************************
      'Der Interrupt wird immer ausgelöst,wenn ein Zeichen empfangen wurde.
      'Wurde eine komplette Zeichenkette empfangen, also das Ende (FF FF FF) erkannt
      'wird New_data auf 1 gesetzt damit wird dem Hauptprogramm mitgeteilt
      'daß eine neue Zeichenkette zur Verarbeitung bereit steht.
      '***************************************************************************************************
      Isrempf:
      Rs232 = Inkey()
      T = T + Chr(rs232)
      Return

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pocketpcuser () aus folgendem Grund: Hallo ich habe den Code mal Gepostet

    • Dein empfangener Text steht in der Variablen 't'. Die vergleichst du mit dem 'Schlüsselwort' 'Lampean', wenn Gleichheit herrscht, dann den portx.y=1 setzen. Der Vergleich darf aber erst bei kompletten Empfang gemacht werden. Das ist bei deiner Programmversion jetzt nicht so einfach. Auch das du in der do..loop-Schleife 't="" 'setzt ist ungünstig. Nur durch die wait 2 funktioniert dein Programm, zeigt 't' im display.
      Versuche die vollständige Übertragung des Textes zu erkennen, wenn das so ist, dann Text an das disply senden und auf das Schlüsselwort abfragen und ggf. den pin setzen und dann den Text wieder löschen.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Versuche die vollständige Übertragung des Textes zu erkennen,
      Eigentlich hast du das ja schon vor gehabt, nur nicht gemacht:

      Pocketpcuser schrieb:

      'Der Interrupt wird immer ausgelöst,wenn ein Zeichen empfangen wurde.
      'Wurde eine komplette Zeichenkette empfangen, also das Ende (FF FF FF) erkannt
      'wird New_data auf 1 gesetzt damit wird dem Hauptprogramm mitgeteilt
      'daß eine neue Zeichenkette zur Verarbeitung bereit steht.
      Wenn du die isr entsprechend änderst und nur mit einem 'Endezeichen' &HFF arbeitest:

      BASCOM-Quellcode

      1. Isrempf:
      2. Rs232 = Inkey()
      3. if rs232=&HFF then
      4. New_data=1
      5. else
      6. T = T + Chr(rs232)
      7. end if
      8. Return
      So wird aus den empfangenen Zeichen der string t zusammen gesetzt, bis das Ende erkannt wird

      In der do..lopp steht dann

      BASCOM-Quellcode

      1. do
      2. if new_data=1 then
      3. new_data=0
      4. if t="Lampean" then
      5. portd.4=1
      6. else
      7. portd.4=0
      8. end if
      9. cls
      10. locate 1,1:Lcd "Empfangen:"
      11. locate 2,1:Lcd t
      12. t=""
      13. end if
      14. loop
      Alles anzeigen
      Alle Angaben ohne Gewähr!
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • oscar schrieb:

      Die Nextion-Displays arbeiten mit 3 &HFF in Folge als Endekennung
      Ok, da kennst du dich besser aus. Sind das immer &HFF, oder können da auch andere Daten übertragen werden, vom Tatsch oder sowas?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hallo tschoeatsch,
      diese intelligenten TFT-Displays nehmen dem eigentlichen µC viel Arbeit ab, der muß sich nicht um die Graphic kümmern und so.
      Der User legt auch den String fest welchen das Display auf UART z.B. bei Tatsch auf ein Element an den Controller sendet.
      Hier eine kleine Einführung:https://www.boecker-systemelektronik.de/epages/63381271.sf/de_DE/?ObjectPath=/Shops/63381271/Categories/Tutorials/Nextion_Tutorials
    • Hallo Pocketpcuser,

      was mir nicht ganz klar ist, du benutzt Teile aus dem Programm

      BASCOM-Quellcode

      1. ' Test mit Nextion Display 3.5 320x480 Enhanced
      2. '
      3. 'Nextion Befehl:
      4. 'für Button
      5. 'print "b1" für ID Button
      6. 'printh ff ff ff für End Sequenz
      7. '
      8. '
      9. 'für Slider
      10. 'print "h0" für ID Slider
      11. 'get h0.val Befehl Get sendet wert vom Slider und die End Sequenz
      12. '
      13. '
      14. '
      15. 'erster grundlegender Test
      16. '
      17. 'Date:21.04.2017
      18. '
      19. 'hkipnik@aol.com
      20. '***************************************************************************************************
      21. $regfile = "m328pdef.dat"
      22. $crystal = 16000000
      23. $hwstack = 100
      24. $swstack = 100
      25. $framesize = 100
      26. '***************************************************************************************************
      27. 'Serial for Nextion Display
      28. 'RX Pin D0 --> TX Pin Nextion TX Pin D1 --> RX Pin Nextion
      29. $baud = 9600
      30. '***************************************************************************************************
      31. 'Config PortC.3 for Serial Debug 9600 Baud
      32. 'mit RS232 Konverter Daten zum PC senden
      33. Open "comc.3:9600,8,n,1" For Output As #2
      34. '***************************************************************************************************
      35. Dim Bc As Byte 'byte counter
      36. Bc = 0
      37. Dim Datin(30) As Byte 'Data in Buffer
      38. Dim Datstr As String * 30 At Datin(1) Overlay
      39. Dim Din As Byte
      40. Dim Ende As Byte
      41. Dim New_data As Byte
      42. Dim Lang As Byte
      43. Dim Zbv As Byte
      44. Dim Id_str As String * 3
      45. Dim Help_str As String * 20
      46. Dim Keybord As String * 20
      47. Dim Zahler As Byte
      48. '***************************************************************************************************
      49. '
      50. On Urxc Rec_isr 'define serial receive ISR
      51. Enable Urxc 'enable receive isr
      52. Enable Interrupts 'enable interrupts
      53. '***************************************************************************************************
      54. Print #2 , "Test Nextion"
      55. Do
      56. If New_data = 1 Then
      57. New_data = 0
      58. Lang = Bc 'Byte counter sichern
      59. Bc = 0 'Byte counter reset
      60. Id_str = Chr(datin(1)) 'ID ersten 2Byte
      61. Id_str = Id_str + Chr(datin(2))
      62. ' Print #2 , Id_str
      63. ' For Zbv = 3 To Lang
      64. ' Print #2 , Chr(datin(zbv));
      65. ' Next
      66. ' Print #2,
      67. Select Case Id_str
      68. Case "b1": 'Button B1 n0++
      69. Print #2 , "Button n0++"
      70. Incr Zahler 'Test Dummy
      71. Help_str = "n0.val="
      72. Help_str = Help_str + Str(zahler) 'Wert an Ausgabe n0 senden
      73. Print Help_str; 'Befehl senden
      74. Printbin &HFF ; &HFF ; &HFF; 'Stopp-Sequenz
      75. Case "b2":
      76. Print #2 , "Button n0--"
      77. Decr Zahler 'Test Dummy
      78. Help_str = "n0.val="
      79. Help_str = Help_str + Str(zahler) 'Wert an Ausgabe n0 senden
      80. Print Help_str; 'Befehl senden
      81. Printbin &HFF ; &HFF ; &HFF;
      82. Case "b4":
      83. Print #2 , "Button newtext"
      84. Case "b3":
      85. Print #2 , "Page0"
      86. Help_str = "n0.val="
      87. Help_str = Help_str + Str(zahler) 'Test Wert an Ausgabe n0 Page0 senden
      88. Print Help_str;
      89. Printbin &HFF ; &HFF ; &HFF;
      90. Case "b0":
      91. Print #2 , "Page1"
      92. Incr Zahler
      93. Help_str = "j0.val="
      94. Help_str = Help_str + Str(zahler) 'Test Wert an Progress Bar j0 Page1 senden
      95. Print Help_str;
      96. Printbin &HFF ; &HFF ; &HFF;
      97. Case "b5":
      98. Print #2 , "Page2"
      99. Case "kb":
      100. Print #2 , "Rückgabe"
      101. Lang = Lang - 5 'Start ab 3Byte Letzten 3 Byte sind FF FF FF
      102. Keybord = Mid(datstr , 3 , Lang)
      103. Print #2 , Keybord
      104. Case "h0": 'Slider Page0
      105. Print #2 , "Sliderwert: ";
      106. ' Print #2 , Datin(3) '113 Hex 71 Rückgabe einer 4-Byte-Zahl
      107. Print #2 , Datin(4) 'Wert Slider
      108. ' Print #2 , Datin(5) 'Bei bedarf 2 wert little endian
      109. End Select
      110. End If
      111. 'mach irgendwas
      112. Loop
      113. Close #2
      114. End
      115. '***************************************************************************************************
      116. 'Der Interrupt wird immer ausgelöst,wenn ein Zeichen empfangen wurde.
      117. 'Wurde eine komplette Zeichenkette empfangen, also das Ende (FF FF FF) erkannt
      118. 'wird New_data auf 1 gesetzt damit wird dem Hauptprogramm mitgeteilt
      119. 'daß eine neue Zeichenkette zur Verarbeitung bereit steht.
      120. '***************************************************************************************************
      121. Rec_isr:
      122. Din = Udr 'Byte einlesen
      123. If Bc <= 30 Then 'byte conter kleiner als 30
      124. Incr Bc 'Byte Conter +1
      125. Datin(bc) = Din 'din nach Datin Array kopieren
      126. Else
      127. Bc = 0 'wenn byte conter größer als 30 auf null zurücksetzen
      128. End If
      129. If Din = &HFF Then 'Nextion sendet 3xFF als end marker
      130. Incr Ende
      131. If Ende = 3 Then 'wenn 3xFF angekommen Newdata=1
      132. Set New_data
      133. Ende = 0 'FF End Zähler wieder auf 0 setzen
      134. End If
      135. End If
      136. Return
      Alles anzeigen

      Warum benutzt du es nicht?
    • ich nutze das komplette Programm nicht weil ich nicht alles verstehe.
      Das Senden vom Mega8 habe ich hinbekommen, nur mit dem Uart Empfang stehe ich auf Kriegsfuß.
      ich habe bei Rowalt nachgelesen bei Kühnel usw. aber mir ist leider kein Licht aufgegangen
      deshalb habe ich mich an das Forum gewendet.
      ich möchte folgendes erreichen: mit dem Display tasten_infos senden z.b. Lampe an, + -; usw
      diese werte im Mega bearbeiten und dann auf das Nextion zurücksenden.
      wenn ich natürlich nicht mal eine Led ansteuern kann dann sehe ich schwarz für mein Vorhaben.
      Ich hoffe auf eure Hilfe.

      mfg Werner
    • Keine Sorge, das wird schon. Nimm den code von @hkipnik und verwende die Zeilen 72-80, also was bei ihm auskommentiert wurde wieder als code verwenden und lasse dafür den Bereich von 82 -133 weg. Den Rest alles unverändert lassen. Jetzt sollte der eingegebene Text auf deinem Lcd erscheinen. Wäre mal ein Anfang.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hm, war etwas ungeschickt von mir, bei @hkipnik geht die Ausgabe über die serielle Schnittstelle in den Pc, du hast ja das Lcd. Also statt dem print bei hkipnik muss bei dir natürlich der Lcd-Befehl stehen.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Id_str = Chr(datin(1)) 'ID ersten 2Byte
      Id_str = Id_str + Chr(datin(2))


      Cls
      Locate 1 , 1 : Lcd "Empfangen: "
      Locate 2 , 1 : Lcd ; Id_str
      'End If

      Wait 2
      Cls
      Loop

      Rec_isr:
      Din = Udr 'Byte einlesen
      If Bc <= 30 Then 'byte conter kleiner als 30
      Incr Bc 'Byte Conter +1
      Datin(bc) = Din 'din nach Datin Array kopieren
      Else
      Bc = 0 'wenn byte conter größer als 30 auf null zurücksetzen
      End If

      If Din = &HFF Then 'Nextion sendet 3xFF als end marker
      Incr Ende
      If Ende = 3 Then 'wenn 3xFF angekommen Newdata=1
      Set New_data
      Ende = 0 'FF End Zähler wieder auf 0 setzen
      End If
      End If
      Return
    • Weil du auch nur 2 Zeichen hast anzeigen lassen, die Ids. Wenn du jetzt noch die restlichen Zeichen an dein LCD sendest, dann müsste es erstmal passen. Dazu diese Zeilen verwenden

      BASCOM-Quellcode

      1. Id_str = Chr(datin(1))
      2. Id_str = Id_str + Chr(datin(2))
      3. For Zbv = 3 To Lang
      4. Id_str = Id_str + Chr(datin(zbv));
      5. Next
      6. cls
      7. locate 1,1:LCD"Empfangen:"
      8. locate 2,1:Lcd;id_str
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------