-         

Ergebnis 1 bis 3 von 3

Thema: ( Bascom ) Servo ansteuern und danach Impuls ausschalten

  1. #1

    Frage ( Bascom ) Servo ansteuern und danach Impuls ausschalten

    Anzeige

    Hallo zusammen,

    ich habe ein großes Problem und finde einfach keine Lösung dazu. Ich möchte mit einem Tiny13 einen Servo ansteuern. Es gibt 2 Stellungen - auf und zu. Diese werden durch 2 Taster angefahren. Nun soll es aber so sein, dass wenn das Servo die Position erreicht hat, das Servo Signal weg sein soll, damit es nicht brummt.

    Ich habe mir überlegt, es mit Enable und Disable Interrupts zu machen. Nach dem ersten Einschalten funktioniert das auch einwandfrei. Das Servo fährt in die Position ( hier 66 ) und ich kann es von Hand bewegen. Sobald ich jedoch die Abfrage der Taster einbaue, funktioniert das Ausschalten des Servo Signals nicht mehr. Das Servo Signal ist IMMER da. Ich weiß bald nicht mehr weiter .... Es muss noch eine möglichkeit geben, das Signal mittels Software auszuschalten.

    Vielen Dank im Voraus !!!

    Code:
    '*************************************************************************************************
    '*                                                                                               *
    '*                                    Servo Tiny Kieswerk                                        *
    '*                                                                                               *
    '*                                 Controller ist ein Tiny13                                     *
    '*                                                                                               *
    '*************************************************************************************************
    
    $regfile = "Attiny13.dat"                                   ' Controller ist ein Tiny13
    $crystal = 4800000                                          ' 4,8 Mhz Takt
    
    $hwstack = 10
    $framesize = 10
    $swstack = 20
    
    Config Pinb.0 = Input                                       ' Ein- / Ausgänge definieren
    Config Pinb.1 = Input
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Output
    
    Taster_zu Alias Pinb.0
    Taster_auf Alias Pinb.1
    Gruen Alias Portb.3
    Rot Alias Portb.4
    
    Enable Interrupts
    
    
    Config Servos = 1 , Servo1 = Portb.2 , Reload = 10
    
    Portb.0 = 1                                                 ' Interne Pullups ein
    Portb.1 = 1
    Portb.3 = 1
    
    ' Werte von 40 - 75 = 90° Drehung
    
    
    Servo(1) = 66
    Gruen = 0
    
    Waitms 100
    
    Disable Interrupts
    
    
    Taster_abfrage_zu:
    Do
    If Taster_auf = 0 Then
    Enable Interrupts
    Servo(1) = 66
    Rot = 1
    Gruen = 0
    Waitms 100
    Disable Interrupts
    Else
    Goto Taster_abfrage_auf
    End If
    
    Loop
    
    
    Taster_abfrage_auf:
    Do
    If Taster_zu = 0 Then
    Enable Interrupts
    Servo(1) = 95
    Rot = 0
    Gruen = 1
    Waitms 100
    Disable Interrupts
    Else
    Goto Taster_abfrage_zu
    End If
    Loop
    
    End
    Geändert von Sven Löffler (06.04.2013 um 15:23 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    24558
    Alter
    39
    Beiträge
    1.356
    Hallo Sven,

    ja, soweit wie ich das sehe... wäre es doch gut wenn man einfach sagt: "PortB.2 = 0 wenn tasterX gedrückt" oder PortB.2 als Eingang umschalten < sollte ja kein Strom/Puls vom Servo zurück kommen. Übernehme keine Gewähr.

    Sonst könnte man auch die Stromversorgung selbst trennen...aber das ist immer unsauber, weil es dann bei einschalten Pulsspitzen geben kann wobei der Servo unkontrolliert zuckt.

    Ein Problem sehe ich: Es ist auf den ersten Blick nicht günstig Interrups und waits gleichzeitig auch zu benutzen.
    Vorallem da die Interrups hier wohl nur für die Steuerung des Servos vorgesehen sind.

    Den Programmablauf würde ich grundsätzlich nochmal überdenken. Das geht sehr viel übersichtlicher anstatt mit "if-else" mit "if-elseif-else" - und dann ohne Goto und ohne den 2.loop.

    Du könntest auch einfach mit "Pulsout" auf PortB.2 arbeiten... dann wäre die Neutralstellung etwa 1500 (+- 450). Das ist aber auch abhängig vom der Crystalfrequenz > könnte man ausprobieren
    Geändert von HeXPloreR (06.04.2013 um 17:02 Uhr)
    "Es ist schwierig, jemanden dazu zu bringen, etwas zu verstehen, wenn er sein Gehalt dafür bekommt, dass er es nicht versteht" [Upton Sinclair] gez-boykott

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Ich habe Deinen Code mal in einen ATMega8 gebrannt (da ich gerade keinen Tiny13 da habe), mit minimalen Änderungen: Erstens habe ich das ganze mit einem Takt von 8 MHz laufen lassen, und zweitens die Wait-Phase auf 1000 ms verlängert (damit man das Signal auf dem Oszi etwas länger sehen kann) - und es funktioniert einwandfrei!

    Das Servo Signal ist IMMER da.
    Woran machst Du das denn fest - hast Du Dir das Signal auf einem Oszi angesehen?

Ähnliche Themen

  1. Kernkraft und danach?
    Von Searcher im Forum Offtopic und Community Tratsch
    Antworten: 16
    Letzter Beitrag: 28.09.2012, 22:28
  2. [gelöst] 2 Servos mit Bascom ansteuern - Servo 2 ruckelt!
    Von Cairol im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 12.11.2007, 22:08
  3. Servo ansteuern und Funkübertragung
    Von BlackBroom im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 07.01.2006, 12:02
  4. [ERLEDIGT] Servo dreht ohne Impuls
    Von Raimond1 im Forum Motoren
    Antworten: 23
    Letzter Beitrag: 06.05.2005, 16:15
  5. Servos ohne Impuls ansteuern?
    Von im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 11.02.2005, 19:19

Stichworte

Berechtigungen

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