-         

Ergebnis 1 bis 2 von 2

Thema: Servos über Tasten Positionieren

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.09.2009
    Beiträge
    6

    Servos über Tasten Positionieren

    Anzeige

    das Problem, wenn ich den Taster 1 oder 2 drücke sollen die Servos auf eine bestimmte position fahren, das machen sie zwar auch.
    Wenn ich die taster jedoch längere Zeit drücke fahren die Servos wieder auf die ursprüngliche Position zurück.

    Taster 1 an + und PORTB.0 angeschlossen
    Taster 2 an + und PORTB.1 angeschlossen

    Will damit irgenwann mal ein Freiflugmodell steuern, bin aber erst am Anfang meiner Programmierkarierre. Hab mal im Anhang noch eine Ausführliche funktiosbeschreibung falls es jemanden interessiert

    Code:
    $regfile = "m168def.dat"
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    
    Dim Center11 As Byte
    Dim Center21 As Byte
    Dim Pos11 As Byte
    Dim Pos21 As Byte
    Center11 = 105
    Pos11 = 30
    Center21 = 125
    Pos21 = 70
    
    Servo config
    Config Servos = 2 , Servo1 = Portd.2 , Servo2 = Portc.1 , Reload = 10
    Config Portd = Output
    Config Portc = Output
    Config Portb = Input
    Portb = &H04
    
    'finally we must turn on the global interrupt
    
    Enable Interrupts
    
    'ende Servo config
    
    Do
       If Pinb.0 = 1 Then Goto Glide
       If Pinb.1 = 1 Then Goto Glide
       If Pinb.0 = 0 Then Goto Bunt
       If Pinb.1 = 0 Then Goto Bunt
       End
    
          Loop
    
        Glide:
          Servo(1) = Center11
          Servo(2) = Center21
          Waitms 1000
    
    
       Bunt:
          Servo(1) = Pos11
          Servo(2) = Pos21
          Waitms 1000
    
           'Loop
       End                                                      'end program
    Angehängte Dateien Angehängte Dateien

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    17.12.2006
    Beiträge
    39
    Hallo sreuss,

    Zum Anfang deiner Programierkarriere solltest du dir befehle wie Goto garnicht erst angewöhnen. Das springen von einem Punkt zum anderen verringert die Übersichtlichkeit eines Programms ungemein. Des weiteren gehören der "Do" und der "Loop" befehl auf eine höhe und nur was sich in der Schleife befindet wird eingerückt. So kann man auf einen Blick sehen welcher Teil des Codes wiederhohlt wird.
    Dann ist mir aufgefallen das du einen "End" befehl in deiner Schleife hast was bedeutet dass die Schleife genau EINMAL durchlaufen werden würde was ja nicht Sinn einer Schleife ist

    Abgesehen davon wird dieser Befehl aber sowieso nie erreicht da du vorher mittels Goto die Schleife verlässt die Servos zu einer bestimmten position fährst und dann eine Sekunde wartest bevor das Programm Beendet wird. Es wird also nur ein einziges mal geprüft ob ein Taster gedrückt ist und zwar beim starten des Controllers. Danach nie wieder.

    Taster 1 an + und PORTB.0 angeschlossen
    Wenn ich das richtig verstehe ist dein Taster mit einer Seite an +5V angeschlossen und mit der anderen am PortB0. Das funktioniert so nicht, da wenn der Taster offen ist kein bestimmtes potential an Port B0 anliegt. Das heißt das dieser alles mögliche empfängt und ständig ein und ausschaltet. Um den Pin auf ein bestimmtes Potential zu legen wenn der Taster offen ist benötigst du einen Pullup oder Pulldown widerstand. Mehr dazu hier: http://www.rn-wissen.de/index.php/Pu...own_Widerstand

    zu guter letzt: Wofür steht Portb = &H04 ?

    Mfg
    Jens

Berechtigungen

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