Uart als kleine Programmier-Hilfe.

    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!

    • Uart als kleine Programmier-Hilfe.

      Terminalprogramm > AVR mit 2 freie Pins Rx/Tx mehr ist nicht nötig.

      Bin mit Sicherheit nicht der einzige der sich beim Programmiertest ärgert wenn eine oder mehrere Konstanten oder Voreinstellungen geändert werden müssen(Denkfehler usw.), dann wieder zu flashen und wieder und wieder.
      Nun habe ich einen einfachen Terminal-Code erstellt der dies „ruckzuck“ über serielle Schnittstelle erledigt.
      Wichtig war Änderungen sollten während des Testlauf erfolgen und wenn nötig, viele Parameter gleichzeitig zu übergeben und natürlich auch gleich mit Rückmeldung des Ergebnis.
      In Gosub „Abgleich“ wird Terminal -String in die einzelnenParameter zerlegt. Nenne ich hier Protokoll für Wert().

      Bild-Termi.jpg
      Nun sehe ich Ergebnis, was aus den eingetippten Parametern gemacht wurde.
      Der Code kann in der Testphase in die Hauptschleife eingebunden werden. Ist natürlich auch für Dauerbetrieb und Fehlersuche interessant.
      Dann sollte der Vorteil(Optimal) erkannt werden.
      Uart_1.bas

      Quellcode

      1. '****** Variablen mit COM - Terminal setzen ***********
      2. '***** Arbeitet sozusagen im Hintergrund *****
      3. '** Hauptschleife wird nur kurz gestoppt wenn N>0 **
      4. '** bis zu 255 Byte mit einem Ruck empfangen **
      5. '** Abgleich könnte als Potokoll bezeichnet werden **
      6. '** Aktuell 4 Blöcke a 5 Zeichen = 20 Byte + 4 Tz **
      7. '** sind 24 Byte also noch viel Luft nach Oben **
      8. '** Sendestring muss nicht 24 Byte und Block nicht **
      9. '** 5 Byte Länge haben.Ist hier nur als Maximum **
      10. '** eingestellt. **
      11. '******** (c)fredred 2017 Ver Uart_1 ******************
      12. $regfile = "M32def.dat"
      13. $crystal = 16000000
      14. $baud = 9600 '19200
      15. $hwstack = 100
      16. $swstack = 100
      17. $framesize = 100
      18. 'µC auslesen
      19. Print
      20. Print "erstallt am : " ; Version(1)
      21. Print "Version Code : " ; Version(3)
      22. Print
      23. Wait 1
      24. '## Einstellung #########################
      25. Dim Sx As String * 25 'Stringlänge gesamt + Endzeichen
      26. Dim B(24) As Byte At Sx Overlay 'Feld mit 24 Byte anlegen
      27. Dim N As Byte
      28. Dim Scount As Byte
      29. Dim Temps(4) As String * 5 'Anzahl Blöcke/Länge vor Trennzeichen
      30. Dim Wert1 As String * 5 'Zeichen je Block
      31. Dim Wert2 As String * 5
      32. Dim Wert3 As String * 5
      33. Dim Wert4 As String * 5
      34. '########################################
      35. Enable Urxc 'Uart Rx aktivieren
      36. Enable Interrupts
      37. On Urxc Onrxd 'ISR festlegen
      38. Do
      39. Wait 1 'für Test
      40. If N > 11 Then
      41. 'Hinweis: N sollte immer 1Byte kleiner sein als die min. Anzahl
      42. 'der Sendebyte. Für Test auch N > 0 möglich.
      43. Print "String = " ; Sx 'für Test
      44. Print "N = " ; N 'für Test
      45. Gosub Abgleich
      46. N = 0 'Zähler zurücksetzen
      47. Print "Wert1 = " ; Val(wert1) 'für Test
      48. Print "Wert2 = " ; Val(wert2) 'für Test
      49. Print "Wert3 = " ; Val(wert3) 'für Test
      50. Print "Wert4 = " ; Wert4 'für Test
      51. End If
      52. '(
      53. 'Dein Programm
      54. Print "mache meine eigentliche Arbeit" 'für Test
      55. Print "Blablabla" 'für Test
      56. Print "..............." 'für Test
      57. ')
      58. Loop
      59. '**** Trennzeichen kann jedes ASCII- Zeichen sein *************
      60. Abgleich:
      61. Scount = Split(sx , Temps(1) , "|") 'zerlegt String
      62. Wert1 = Temps(1) 'Wert vor 1. Trennzeichen
      63. Wert2 = Temps(2) 'Wert vor 2. Trennzeichen
      64. Wert3 = Temps(3) 'Wert vor 3. Trennzeichen
      65. Wert4 = Temps(4) 'Wert vor 4. Trennzeichen
      66. '--- String Übergabe ---
      67. ' Print "W1 = " ; Wert1
      68. ' Print "W2 = " ; Wert2
      69. ' Print "W3 = " ; Wert3
      70. ' Print "W4 = " ; Wert4
      71. '--- Dez Übergabe ---
      72. ' Print "W1 = " ; Val(wert1) 'für Test
      73. ' Print "W2 = " ; Val(wert2) 'für Test
      74. ' Print "W3 = " ; Val(wert3) 'für Test
      75. ' "W4 ist ein String"
      76. ' Print "W4 = " ; wert4 'für Test
      77. Return
      78. 'hier wird in Uart geschaut ob neue Byts gesendet wurden
      79. Onrxd:
      80. Incr N 'Byte von UDR hochzählen
      81. B(n) = Udr
      82. Return
      Alles anzeigen


      Mit Print N wird die Anzahl der Byte des Sendestring angezeigt. Nun kannIf N >0 durch If N = „Anzahl der Byte“ minus 1 gesetzt werden. Erst dann macht die direkte UDR- Abfrage Sinn. Warum?
      Das ist die Ineffizienz der Input-Funktion(Poll-Methode). Mal grob überschlagen, spare ich ca. 330.000 Takte ein.
      Ein verballern von Rechenkapazität ist okay, wer hat der hat, aber Zeit die man sich nur leisten sollte, wenn der µC eh nichts anderes zu tun hat.
      Na klar nutze ich auch mal Input#() in Verbindung mit Puffer.
      1. Aufgabe ist Code grob mit serielle Schnittstelle Ein- und Ausgabe, der vielen Aktionen zu testen (Printanzeigen zulassen).
      2. Die Anzeigebremse zu deaktivieren aber immer noch Variablen oder was auch immer im Codetest mit COM zu ändern. So werden auch Programmlaufzeiten mit betrachtet.
      Hoffe im Code das wichtigste kommentiert zu haben.

      Idee kam mit ThreadAnsteuerung 28byj-48 Steppermotor.
      Um die Theorie zu verstehen ist es doch das einfachste, wenn es die Praxis zeigt ob verstanden oder nicht.

      Ja für mich sind die Grenzfälle ein Reitz.
      Somit im Anhang mein Praxistest für Schritt-Motoren ohne H- Brücke.

      Stepper-Test.zip
      P.S. Damit konnte ich auch die Parameter für perfekter „Rampenfahrt“ ermitteln, bevor ich die Formel entgültig geflasht habe.
      War schon lustig zu sehen auf welch ein Blödsinn mein altes Hirn kam.
      Gruß


      Sollte ein Admin der Meinung sein Thread und Unterthema passen hier nicht in Meta.
      Okay dann Bitte diese Spielerei gleich löschen.

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