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
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.
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
- '****** Variablen mit COM - Terminal setzen ***********
- '***** Arbeitet sozusagen im Hintergrund *****
- '** Hauptschleife wird nur kurz gestoppt wenn N>0 **
- '** bis zu 255 Byte mit einem Ruck empfangen **
- '** Abgleich könnte als Potokoll bezeichnet werden **
- '** Aktuell 4 Blöcke a 5 Zeichen = 20 Byte + 4 Tz **
- '** sind 24 Byte also noch viel Luft nach Oben **
- '** Sendestring muss nicht 24 Byte und Block nicht **
- '** 5 Byte Länge haben.Ist hier nur als Maximum **
- '** eingestellt. **
- '******** (c)fredred 2017 Ver Uart_1 ******************
- $regfile = "M32def.dat"
- $crystal = 16000000
- $baud = 9600 '19200
- $hwstack = 100
- $swstack = 100
- $framesize = 100
- 'µC auslesen
- Print "erstallt am : " ; Version(1)
- Print "Version Code : " ; Version(3)
- Wait 1
- '## Einstellung #########################
- Dim Sx As String * 25 'Stringlänge gesamt + Endzeichen
- Dim B(24) As Byte At Sx Overlay 'Feld mit 24 Byte anlegen
- Dim N As Byte
- Dim Scount As Byte
- Dim Temps(4) As String * 5 'Anzahl Blöcke/Länge vor Trennzeichen
- Dim Wert1 As String * 5 'Zeichen je Block
- Dim Wert2 As String * 5
- Dim Wert3 As String * 5
- Dim Wert4 As String * 5
- '########################################
- Enable Urxc 'Uart Rx aktivieren
- Enable Interrupts
- On Urxc Onrxd 'ISR festlegen
- Do
- Wait 1 'für Test
- If N > 11 Then
- 'Hinweis: N sollte immer 1Byte kleiner sein als die min. Anzahl
- 'der Sendebyte. Für Test auch N > 0 möglich.
- Print "String = " ; Sx 'für Test
- Print "N = " ; N 'für Test
- Gosub Abgleich
- N = 0 'Zähler zurücksetzen
- Print "Wert1 = " ; Val(wert1) 'für Test
- Print "Wert2 = " ; Val(wert2) 'für Test
- Print "Wert3 = " ; Val(wert3) 'für Test
- Print "Wert4 = " ; Wert4 'für Test
- End If
- '(
- 'Dein Programm
- Print "mache meine eigentliche Arbeit" 'für Test
- Print "Blablabla" 'für Test
- Print "..............." 'für Test
- ')
- Loop
- '**** Trennzeichen kann jedes ASCII- Zeichen sein *************
- Abgleich:
- Scount = Split(sx , Temps(1) , "|") 'zerlegt String
- Wert1 = Temps(1) 'Wert vor 1. Trennzeichen
- Wert2 = Temps(2) 'Wert vor 2. Trennzeichen
- Wert3 = Temps(3) 'Wert vor 3. Trennzeichen
- Wert4 = Temps(4) 'Wert vor 4. Trennzeichen
- '--- String Übergabe ---
- ' Print "W1 = " ; Wert1
- ' Print "W2 = " ; Wert2
- ' Print "W3 = " ; Wert3
- ' Print "W4 = " ; Wert4
- '--- Dez Übergabe ---
- ' Print "W1 = " ; Val(wert1) 'für Test
- ' Print "W2 = " ; Val(wert2) 'für Test
- ' Print "W3 = " ; Val(wert3) 'für Test
- ' "W4 ist ein String"
- ' Print "W4 = " ; wert4 'für Test
- Return
- 'hier wird in Uart geschaut ob neue Byts gesendet wurden
- Onrxd:
- Incr N 'Byte von UDR hochzählen
- B(n) = Udr
- Return
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 ()