PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servos über Tasten Positionieren



sreuss
13.09.2009, 17:20
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



$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

Horstel
14.09.2009, 18:04
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/Pullup_Pulldown_Widerstand

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

Mfg
Jens