- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: ZeichenKETTE einlesen und damit G'keit von 2 Steppern regeln

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.11.2004
    Ort
    Luzern
    Alter
    37
    Beiträge
    80

    ZeichenKETTE einlesen und damit G'keit von 2 Steppern regeln

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo zusammen,

    Ich habe eine Frage zum einlesen von Daten via RS232 in meinen ATmega8. Hab zwar schon zig Threads gelesen, bin aber doch nicht schlau geworden. Ich kann zwar schon einzelne Ascii-Werte einlesen und die als Echo an meinen PC zurücksenden, jedoch holt der Inkey() Befehl doch nur ein Zeichen nach dem anderen aus dem Buffer heraus und nicht eine ganze Zeichenfolge. Wie stelle ich das jetzt an, dass wenn ich dem AVR z.B. den Wert 255 sende, er mir nicht nacheiander 2 dann 5 und nochmal 5 zurückgibt, sondern er 255 in eine Variabel abspeichert. Hab dazu im Anhang mein bisheriges Programm angefügt.

    Gruss commander7
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    $regfile = "m8def.dat"

    Enable Interrupts

    $crystal = 8000000
    $baud = 9600

    Dim Test As String * 10

    Do

    Input Test
    waitms 500
    print test

    Loop

    End

    mfg pebisoft

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.11.2003
    Beiträge
    355
    $regfile = "m8def.dat"
    $crystal = 16000000
    $baud = 38400

    On Urxc Rs232int
    Enable Urxc
    Enable Interrupts



    Rs232int:
    If Udr = 13 Then 'return?

    Instring = Buf + Chr(udr)
    Bc = Len(instring)
    Bc = Bc - 1
    Instring = Mid(instring , 2 , Bc)



    Buf = ""
    'Print "instring: " ; Instring


    Else
    Buf = Buf + Chr(udr)

    'add to buffer
    End If

    Return


    Nur so ca. halt lässt sich noch vereinfachen in Instring steckt dann die der aktuelle Inhalt der bis zum letztn Chr(13) gekommen ist

    Fehlen halt noch die Dims der Variablen aber das wirst du hinbekommen oder?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    22.11.2004
    Ort
    Luzern
    Alter
    37
    Beiträge
    80
    hallo zusammen

    ich bin nun einen Schritt weiter gegangen, da das einlesen der Zeichenkette nun funktioniert. Bei meinem weiterentwickelten Programm will ich per RS232 einen Wert einlesen und anhand von diesem die Geschwindigkeit des Timer1 regeln. Wenn der Timer1 abgelaufen ist, soll ein Interrupt ausgelöst werden und in diesem soll der Motor einen Schritt machen.

    Erfreulicherweise dreht sich der Motor auch ganz langsam, aber leider bewirkt das Senden einer neuen Geschwindigkeit beim Timer gar nichts. Das Zeichen empfängt er aber richtig, da ich es mit dem Echo konrollieren kann.

    Kann mir jemand einen Tipp geben, was an meinem Programm falsch ist, das der Timer1 seine "Geschwindigkeit" nicht ändert?
    Angehängte Dateien Angehängte Dateien

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo commander7,
    du mußt den Timer im Interrupt verstellen bzw. neu laden.
    Bei deiner Variante ist beim nächsten IRQ alles beim alten.
    Gruß, Michael

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    22.11.2004
    Ort
    Luzern
    Alter
    37
    Beiträge
    80
    hallo michael,
    danke für die antwort. mit welchem befehl tue ich das?

    gruss commander7

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo commander7,
    mit welchem befehl tue ich das?
    mit Timer1 = Tempo.
    Der muß aber aus dem Hauptprogramm raus und in den IRQ.
    Gruß, Michael

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    22.11.2004
    Ort
    Luzern
    Alter
    37
    Beiträge
    80
    hallo michael,

    ich habe jetzt Timer = Tempo im Interrupthandler gleich oben an Return geschrieben. Leider aber dreht der Motor immer noch stur seine Runden ohne die Geschwindigkeit zu ändern. Hast du noch einen Rat?

    gruss commander7

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo commander7,
    Leider aber dreht der Motor immer noch stur seine Runden ohne die Geschwindigkeit zu ändern.
    Das mag daran liegen, daß Tempo eine Byte-Variable ist und Timer1 ein Word.
    Du änderst also maximal den 256ten Teil, oder 0,4%. Klar daß du nicht merkst, ob der Motor schneller wird.
    Hast du noch einen Rat?
    Du könntest die Variable Tempo mit 256 multiplizieren und diesen Wert in den Timer1 schreiben. Vermeide aber Rechenaufgaben im Interrupt.
    Gruß, Michael

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    22.11.2004
    Ort
    Luzern
    Alter
    37
    Beiträge
    80
    hallo,

    Hab es nun hingekriegt, dass Tempo zu ändern *freu*. Aber eben erst mit einem Motor und ich will aber schon zwei ansteuern. Mit dem jetztigen Programm dreht sich der linke Stepper (Timer0) einwandfei. Ich habe nun für den rechten Motor den Timer2 eingesetzt, da Timer1 ja ein 16Bit Timer ist. Das Problem ist aber, dass sich betreffende Motor zwar vorwärts und rückwärts dreht, aber sein Tempo ist viel zu schnell und es kann nur geringfügig geändert werden. Das heisst im Klartext: Linker Motor läuft richtig, Rechter aber schon bei kleinem Tempo ( < 10) viel schneller und wenn ich mit dem Tempo hochfahre dann fängt er schon früh an zu stocken, da er wie ich vermute nicht so schnell drehen kann.

    Ist es möglich, dass der Fehler eintritt, weil sich Timer0 und Timer2 irgendwie in die Quere kommen oder hab ich was falsch programmiert?

    Erklärung zur Ansteuerung:
    Über das CommControl sende ich via RS232 zuerst die Geschwindigkeit (-236 bis 236) und für den linken Motor als Code für den AVR eine 100 und für den Rechten ein 101.


    gruss commander7
    Angehängte Dateien Angehängte Dateien

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen