Ich bin total begeistert! Ich habe soeben einen Servo aus alten Zeiten (mindestens schon 300 Jahre alt) mit Bascom und dem ATmega8 innerhalb von zehn Minuten wieder zum Leben erweckt. Dass es so einfach sein würde, hatte ich mir nicht gedacht. Aber so wie es aussieht, kann man mit Bascom und einem ATmega8 bis zu 16 Servos ansteuern. Und das mit ein paar kinderleichten Befehlen.
Mit Config Servos = 1, Servo1 = Portd.7, Reload = 10
habe ich angegeben, dass ich einen Servo auf Portd.7 anhängen möchte. Was "Reload = 10" bedeutet habe ich nicht verstanden, aber es funktioniert trotzdem. :-) (CONFIG SERVOS-Hilfe)
Und im Programm kann ich mit Servo(1) = <Zahlenwert>
die Position des Servos angeben. Das war's! :-D
Mit diesem Code lasse ich meinen alten Servo in großen Schritten vor und zurück laufen. Man muss dem Servo natürlich die Zeit lassen, um eine Position zu erreichen, bevor man ihm eine neue Position übergibt. Das mache ich, indem ich mit Waitms
300 Millisekunden warte.
'Hardware: Rote LED (mit Vorwiderstand) und Servo (direkt) an Pin PD7
' Servo und µC an 5V
$regfile = "m8def.dat"
$crystal = 8000000
Config Servos = 1 , Servo1 = Portd.7 , Reload = 10
Declare Sub Main
Enable Interrupts
'LED und Servo an PD7
Ddrd = &B10000000
Call Main()
End
Sub Main
Local Neue_position As Byte
Const Startwert = 50
Const Endwert = 150
'Startposition einnehmen
Servo(1) = Startwert
Waitms 300
'In der Schleife vor und zurück
Do
For Neue_position = Startwert To Endwert Step 20
Servo(1) = Neue_position
Waitms 300
Next Position
For Neue_position = Endwert To Startwert Step -20
Servo(1) = Neue_position
Waitms 300
Next I
Loop
End Sub
Weiterführende Infos:
(2008-01-03)
Ich habe eine Aussage gefunden, die die Bedeutung der Impulslänge erklärt und auch warum mein Code erst mit einer Taktfrequenz von 8 Mhz so richtig funktionierte. :-)
Für die Benutzung des Servo-Befehls solltest du mindestens 8Mhz Taktfrequenz und einen Mindest-Reload-Wert von 10 haben. Der Reload Wert multipliziert mit dem Wert von Servo() ergibt die Impulslänge in Mikrosekunden. Sie sollte zwischen 1000 und 2000 liegen. Ist die Taktfrequenz und/oder der Reload Wert zu niedrig, gibt es Überläufe, die man schwer vorausberechnen kann -> Servo ruckelt.
Ich empfehle also mindestens 8 MHz Taktfrequenz für den Betrieb mit einem Servo. Wenn mehr Servos angesteuert werden sollen und auch sonst noch einiges im Programm gemacht wird, dann ist ein externer schneller Quarz siche keine schlechte Empfehlung.
Ich programmiere Progressive Web Applications, Mobile Apps, Desktop-Programme und noch vieles mehr. Falls es dich interessiert, findest du mehr Informationen darüber auf meiner Business-Website.