- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 3 von 3

Thema: Großes Problem mit Servo-Ansteuerung

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    189

    Großes Problem mit Servo-Ansteuerung

    Anzeige

    Powerstation Test
    Hallo!

    Ich steh momentan vor einem Problem, dass ich mir selbst nicht erklären kann:
    Servo-Ansteuerung unter Bascom ist ja recht leicht und wurde hier ja auch schon mehrfach besprochen...
    Mein Anliegen ist jedoch, dass der Controller (AtMega solange Befehle ausführen soll, bis er über die serielle Schnittstelle eine "1" empfängt... Soweit auch kein Problem...
    Nachdem er diese Zahl empfangen hat, soll er einen Servo in Einzelschritten drehen. Auch das hat bereits in einem anderen Projekt bestens funktioniert!
    Nur wenn ich alles zusammen pack, also die Schnittstellen- mit der Servogeschichte, versagt die Drehung jämmerlich...
    Ich habe versucht, dem ganzen auf den Grund zu gehen und am Programmanfang und nach dem Schleifendurchlauf eine vollständige Drehung nach links, sowie am Programmende eine Drehung nach rechts eingeleitet... Das funktioniert auch bestens!
    Nur in der FOR-Schleife tut sich mit dem Servo rein gar nichts...

    Hier der Code:
    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    $baud = 9600
    
    Dim Servopos As Integer
    Dim L As Integer
    Dim R As Integer
    Dim S As Integer
    Dim Inpt As String * 1
    
    Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
    Config Portb = Output
    
    On Urxc Onrxd
    Enable Urxc
    Enable Interrupts
    
    
    L = 100
    R = 30
    S = -1
    
    
    Print "Servo wird ausgerichtet..."
    
    Servo(1) = L
    
    Print "Servo linksseitig ausgerichtet!"
    
    
    Do
    
    
    Main:
    
    Print "Main"
    
    Wait 1
    
    Goto Main
    
    
    Command:
    
      Print "Command"
    
      If Inpt = "1" Then Gosub Rotation
    
      Inpt = ""
    
    Return
    
    
    Rotation:
    
      Print "Starte Drehung..."
    
    
      For Servopos = L To R Step S
    
        Servo(1) = Servopos
    
        Waitms 3
    
      Next
    
    
      Print "Drehung beendet!"
    
      Servo(1) = L
    
      Print "Servo zurückgesetzt!"
    
    Return
    
    
    Onrxd:
    
      Print "Empfange Signal..."
    
      Inpt = Inpt + Chr(udr)
    
      Gosub Command
    
      Print "Signalempfang beendet!"
    
      Servo(1) = R
    
      Print "Servo rechtsseitig ausgerichtet!"
    
    Return
    
    
    Loop
    Hat jemand eine Idee, woran das liegen könnte und was ich tun muss, damit es funktioniert?
    Ich hab schon alles versucht... Controller ausgetauscht, den Servo an einen anderen Port angeschlossen... Es tut sich jedoch rein gar nichts...
    Könnte es daran liegen, dass der Servo innerhalb eines Interrupts irgendwie deaktiviert ist?
    Wenn ich die FOR-Schleife in den Main-Bereich verlege, funktioniert die Servo-Drehung...

    Ich hoffe, ihr könnt mir helfen!

    Mit freundlichen Grüßen

    Philipp

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Versuch doch mal, diese ganzen verschachtelten Gosubs aufzulösen - da wird einem ja schwindelig!
    Besonders pikant ist der Gosub-Aussprung in der eigentlichen Interrupt-Routine - da spielt der Stack Pointer ganz schnell Roulette.

    Lieber ein paar If-Then in der Hauptschleife, und gut ist.

    Grüße

    Torsten

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    189
    Ich hab das Problem gelöst...
    Es scheint wirklich so zu sein, dass während eines Interrupts bestimmte Dinge nicht funktionieren und so hab ich einfach noch eine zusätzliche Variable eingefügt, die von der Hauptschleife ständig abgefragt wird und bei Empfang über die serielle Schnittstelle ihren Wert ändert.
    Trotzdem vielen Dank für deine Bemühungen und Tipps!

    Mit freundlichen Grüßen

    Philipp

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress