kif
13.01.2011, 21:47
Hey,
ich habe ein kleine Atmega8 Platine, mit der ich schon erfolgreich LEDs angesteuert habe.
Nun möchte ich einen Servo ansteuern, jedoch klappt das nicht!
Der Servo wird seperat mit 6V betrieben. Die Massen von Servoversorgung und Atmega8-Versorgung hab ich verknüpft.
Der Signaleingang des Servo hängt an PORTC.0.
Das Programm sieht so aus:
Ich habe es von der Seite
http://mikrocontroller.jacob-pirna.de/myavr_modellbau_servo_bascom.html
und habe die Ports auf meine Platine angepasst.
' Taktfrequenz des Quarzes einstellen (3,686411 MHz -> 1 Takt=0,00000027127s=0,27127ys)
$crystal = 3686411
' Verwendete CPU festlegen (ATmega8)
$regfile = "m8def.dat"
' alle Pin's an Port C als Ausgang festlegen
Config Portc = Output
' alle Pin's an Port B als Eingang festlegen
Config Portd = Input
' Interne Pullup Widerstände setzten für Taster Pin 0 & 1
Portd = &H03
' 65536-56320 = 9216*0.27127us = 2,5ms * 8(Vorteiler) = 20ms
Const Reload = 56320
' 1 Timertakt = 2,17us
Config Timer1 = Timer , Prescale = 8
Timer1 = Reload
On Timer1 Timer1_isr
Enable Timer1
Enable Interrupts
Dim Winkel As Word
Winkel = 700
' Hauptprogrammschleife
Do
If Pind.6 = 0 Then
' ist Schalter an Pin 2 Port D gedrückt
If Winkel > 300 Then Winkel = Winkel - 10 ' 0,65 ms
Elseif Pind.7 = 0 Then
' ist Schalter an Pin 3 Port D gedrückt
If Winkel < 1100 Then Winkel = Winkel + 10 ' 2,38 ms
End If
Waitms 2
Loop
End
Timer1_isr:
If Pinc.0 = 1 Then
' Pause ca. 20 ms
Portc.0 = 0
Timer1 = Reload
Else
' Impuls 0ms bis 2ms
Portc.0 = 1
Timer1 = 65536 - Winkel
End If
Return
Aber leider funktioniert es nicht. Der Servo steuert immer bis fast ganz nach links. Auch wenn ich den Startwert für "Winkel" ändere, dreht er sich bis fast ganz nach links.
Hat jemand eine Idee wo der Fehler liegen könnte?
Wäre nett wenn mir jemand helfen könnte.
Mfg kif
ich habe ein kleine Atmega8 Platine, mit der ich schon erfolgreich LEDs angesteuert habe.
Nun möchte ich einen Servo ansteuern, jedoch klappt das nicht!
Der Servo wird seperat mit 6V betrieben. Die Massen von Servoversorgung und Atmega8-Versorgung hab ich verknüpft.
Der Signaleingang des Servo hängt an PORTC.0.
Das Programm sieht so aus:
Ich habe es von der Seite
http://mikrocontroller.jacob-pirna.de/myavr_modellbau_servo_bascom.html
und habe die Ports auf meine Platine angepasst.
' Taktfrequenz des Quarzes einstellen (3,686411 MHz -> 1 Takt=0,00000027127s=0,27127ys)
$crystal = 3686411
' Verwendete CPU festlegen (ATmega8)
$regfile = "m8def.dat"
' alle Pin's an Port C als Ausgang festlegen
Config Portc = Output
' alle Pin's an Port B als Eingang festlegen
Config Portd = Input
' Interne Pullup Widerstände setzten für Taster Pin 0 & 1
Portd = &H03
' 65536-56320 = 9216*0.27127us = 2,5ms * 8(Vorteiler) = 20ms
Const Reload = 56320
' 1 Timertakt = 2,17us
Config Timer1 = Timer , Prescale = 8
Timer1 = Reload
On Timer1 Timer1_isr
Enable Timer1
Enable Interrupts
Dim Winkel As Word
Winkel = 700
' Hauptprogrammschleife
Do
If Pind.6 = 0 Then
' ist Schalter an Pin 2 Port D gedrückt
If Winkel > 300 Then Winkel = Winkel - 10 ' 0,65 ms
Elseif Pind.7 = 0 Then
' ist Schalter an Pin 3 Port D gedrückt
If Winkel < 1100 Then Winkel = Winkel + 10 ' 2,38 ms
End If
Waitms 2
Loop
End
Timer1_isr:
If Pinc.0 = 1 Then
' Pause ca. 20 ms
Portc.0 = 0
Timer1 = Reload
Else
' Impuls 0ms bis 2ms
Portc.0 = 1
Timer1 = 65536 - Winkel
End If
Return
Aber leider funktioniert es nicht. Der Servo steuert immer bis fast ganz nach links. Auch wenn ich den Startwert für "Winkel" ändere, dreht er sich bis fast ganz nach links.
Hat jemand eine Idee wo der Fehler liegen könnte?
Wäre nett wenn mir jemand helfen könnte.
Mfg kif