PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo Steuerung



Projekt 2252
23.07.2011, 17:42
Hallo, Ich habe mir gerade ein kleines Programm geschrieben womit ich ein Servo steuern kann wenn ich ein Port auf High setzte. Jetzt ist meine frage wie ich das machen kann das meine Servo nur am Anfang also wenn ich das Bord einschalte eine bestimmte Bewegung macht und denn darauf "wartet" ob ich den Port auf high setzte oder ob der low bleibt. Ich benutze den Servo um bei meinem Roller den Reflektor zu verstellen und möchte beim einschalten sowas wie ein kleinen Funktionstest haben ;) hier ein Video wie es im Moment aussieht.
http://imageshack.us/clip/my-videos/690/k07.mp4/
Gruß Tjark

Programm:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$swstack = 32
$framesize = 32






Config Servos = 1 , Servo1 = Porta.0 , Reload = 10
Config Porta.0 = Output
Config Porta.1 = Input
Config Porta.6 = Output
Enable Interrupts




Do
Porta.1 = 1
If Pina.1 = 1 Then
Servo(1) = 180
Else
Servo(1) = 40
End If
Loop

DanielSan
23.07.2011, 17:52
Naja wenn du es soweit geschafft hast gebe ich dir mal nur Tips und keine fertige Lösung. Ich denke da hast du am meisten von ;-)

Dein Funktionstest kannst du einfach zwischen "Enable Interrupts" und "Do" schreiben. Jetzt musst du nurnoch die Startposition und die Endposition angeben. Dazwischen brauchst du immer eine Pause (z.b. "waitms 250") damit das Servo auch Zeit hat die Position zu erreichen.

Wenn du nicht klarkommst helfe ich dir natürlich weiter.

Gruß Daniel

Kampi
23.07.2011, 17:53
Du machst einfach vor dem Do die Servobewegung und dann eine If-Abfrage. Den Port ziehst du dann mit einem Pull-down auf 0.
In etwa so:

Config PortX.Y = Input
Enable Interrupts

PortX.Y = 0
Servo(1) = 180

Do

If PortX.Y then
Servo(1) = 40
Else
Wait 100

Loop

Das Else kannst du auch weglassen.
Meinst du sowas in der Art? Du hast in deinem Programm deine Anforderung quasi schon erledigt :)
Befehle die nur beim Einschalten ausgeführt werden sollen schreibst du immer vor der eigentlichen Do - Loop Schleife.

radbruch
23.07.2011, 18:01
ABE (http://de.wikipedia.org/wiki/Betriebserlaubnis)?
...
Enable Interrupts

Servo(1) = 180
Wait 1
Servo(1) = 40
Wait 1

Do

...

Projekt 2252
23.07.2011, 18:04
Ok danke an euch beide. Peinlich hätte ich auch selbst drauf kommen können :) Klappt jetzt.
Gruß Tjark