PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servoansteuerung mit AVR Mega8



fauldrache
13.06.2004, 20:22
Hallo,

ich habe ein Problem.
Ich schaffe es irgendwie nicht, ein handelsübliches modellbauservo mit meinem Mega8 anzusteuern. In der Hilfe von BascomAVR steht, dass man das einfach mit dem Servo-befehl machen kann.
Aber wenn ich das Beispielprogramm ablaufen lasse, fährt das Servo nur auf vollen linksanschlag und bleibt dort (drückt gegen mech. Anschlag).
Ich habe auf einer anderen Site folgende beschreibung gefunden:

Bei einer Pulsweite von 1 Millisekunde dreht das Servo z.B. voll auf die eine Seite , bei 1,5 Millisekunden auf Mittelstellung und bei 2ms voll auf die andere Seite. Je nach Auflösung und Genauigkeit des PWM-Signals in diesem Bereich zwischen 1 und 2ms, kann somit jede Position zwischen den beiden Anschlägen angefahren werden.

Welche Werte muss ich denn für Reload und Servo(1) einstellen, um auf die benötigten Werte zu kommen ?

Das Beispielprogramm findet ihr unten.
Ich wäre für eine Hilfe sehr dankbar.

Ciao
Basti

--------------------------------------------------
' (c) 2001 MCS Electronics
' servo.bas demonstrates the SERVO option
'---------------------------------------------------

'Servo's need a pulse in order to operate
'with the config statement CONFIG SERVOS we can specify how many servo's we
'will use and which port pins are used
'A maximum of 16 servos might be used
'The SERVO statements use one byte for an interrupt counter and the TIMER0
'This means that you can not use TIMER0 anymore
'The reload value specifies the interval of the timer in uS
Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
'we use 2 servos with 10 uS resolution

'we must configure the port pins used to act as output
Config Portb = Output

'finally we must turn on the global interrupt
Enable Interrupts

'the servo() array is created automatic. You can used it to set the
'time the servo must be on
Servo(1) = 100 '1000 uS on
Servo(2) = 200 ' 2000 uS on


Dim I As Byte
Do
For I = 0 To 100
Servo(1) = I
Waitms 1000
Next

For I = 200 To 0 Step -1
Servo(1) = I
Waitms 1000
Next
Loop
End

13.06.2004, 21:27
Deine Farbe ist kaum lesbar, vielleicht kannst du eine Farbe mit besseren Kontrast wählen! Mit EDIT kannst du das noch ändern

13.06.2004, 23:06
Eigentlich sieht es richtig aus.
Schreib mal folgendes davor in den Quelltext.
$crystal = 16000000
$regfile = "m8def.dat"

Oder halt $crystal = 8000000, je nach Quarz

fauldrache
13.06.2004, 23:17
Danke, aber hat sich schon erledigt.
Ich hatte gedacht, dass es reicht, im Menü den richtigen Chip auszuwählen.
Mein Fehler.

Trotzdem danke für die schnelle antwort
basti