PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo ansteuerung



avus17
10.07.2012, 20:01
Hallo, ich habe gerade zum ersten mal versucht zwei Servos mot nem Attiny 2313 anzusteuern.
Allerdings bewegen sich die Servos einfach nur ein Stück und bleiben dann stehen. Das Programm sieht folgendermaßen aus:

$regfile = "attiny2313.dat"
$crystal = 1000000

Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10



Do

Servo(1) = 150
Servo(2) = 150

Waitms 50




Loop

Weiß jemand woran dass liegt???

Thomas E.
10.07.2012, 20:09
Hallo!


Ich sehe auf den schnellen Blick folgende Dinge:

Interrupts nicht global freigegeben (werden für den Timer benötigt)
Servo-Pins nicht als Ausgang definiert


Du musst also ersteinmal deine verwendeten Pins als Ausgang deklarieren. Zum Beispiel so:

Config Portb.0 = Output
Config Portb.1 = Output
Wenn du später einmal den gesamten Port B als Ausgang benötigst, kannst du das natürlich so abkürzen:

Config Portb = Output

Als nächstes musst du die Interrupts freigeben, denn der Timer (welcher zum Generieren des Servo-Signals verwendet wird) benötigt einen Interrupt.

Enable Interrupts

Ich hoffe, dir geholfen zu haben. :)

avus17
10.07.2012, 20:24
Danke ich habe es gerade geändert, aber jetzt fahren die Servos wieder nur ein Stück nach vorne, und dann Fahren sie Ruckelnd bis zum Linken anschlag und drehen noch weiter.

Thomas E.
10.07.2012, 20:25
Zeig doch bitte deinen abgeänderten Code, vielleicht hat sich doch noch ein Fehler eingeschlichen.... :)

avus17
10.07.2012, 20:38
Hier ist der neue code:
$regfile = "attiny2313.dat"
$crystal = 1000000

Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10

Config Portb.0 = Output
Config Portb.1 = Output

Enable Interrupts



Do

Servo(1) = 100
Servo(2) = 100

Waitms 50




Loop

avus17
11.07.2012, 11:23
Kann es sein, dass die Elektronik vom ersten Programm zerstört wurde???

oberallgeier
11.07.2012, 11:37
... zum ersten mal ... Servos mot nem Attiny 2313 anzusteuern ...Hast Du das hier (klick) durchgelesen? (http://www.rn-wissen.de/index.php/Servos) Besonders Ansteuerung: Signalform und Schaltung. Servoversorgung getrennt vom Controller? GND verbunden ? Verbindung Controller - Se rvo?

avus17
11.07.2012, 12:44
Also der Servo wird von nem Netzteil und der Controler von einer Batterie/Programieradapter Versorgt und die GND's sind auch verbunden.
Die Signalleitung habe ich einfach an den Controlerpin angeschlossen.

Rone
11.07.2012, 15:41
Hallo!

Wie sollte das mit diesem Programm auch funktionieren. Du sendest immer und immer wieder die selbe Adresse an den Servo.
Teste mal so:
Servo = 100
Wait
Servo = 110
Wait
usw.

MfG
Rone

avus17
11.07.2012, 18:43
Also ich habe das Programm nun Geändert, aber der Servo hört wieder mal nicht auf sich in eine Richtung zu drehen. Das Programm sieht so aus:
$regfile = "attiny2313.dat"
$crystal = 1000000

Config Servos = 1 , Servo1 = Portd.6 , Reload = 20

Config Portd.6 = Output


Enable Interrupts



Do

Servo(1) = 100

Waitms 50

Servo(1) = 110

Waitms 50

Servo(1) = 120

Waitms 50

Servo(1) = 130

Waitms 50

Servo(1) = 140

Waitms 50

Servo(1) = 150

Waitms 50


Loop

Sauerbruch
11.07.2012, 23:03
Hallo avus,

ich habe zwar noch nicht allzuviel mit dem Servo-Befehl gearbeitet, habe aber mal gehört, dass er bei "niedrigen" Taktfrequenzen keine verwertbaren Impulse liefert (die selben Probleme wie Du hatte ich nämlich auch).
Wo genau die Grenze liegt weiß ich zwar nicht, aber 1 MHz liegt sicher darunter. Versuch´s doch mal mit 8 MHz, das kann der Tiny2313 ja problemlos.

Daniel

avus17
12.07.2012, 13:05
Danke, ich habe es gerade mal auspobiert und die Fusebits auf: Low Fuse= (0x64) High Fuse= (0xDF) Extended Fuse = (0x01) gestellt. Nun bewegt sich der Servo immernoch genauso aber Langsamer und
in kleineren Schritten und hört beim Anschlag wieder nicht aus sich zu drehen. Das Programm habe ich auf die Frequenz angepasst.

Socke
12.07.2012, 13:17
Hallo avus,
funktioniert der Servo an einem Empfänger mit Fernsteuerung oder an einem Servotester richtig?
Wenn ja, dann wäre es an der Zeit, das Signal vom Attiny mit dem Oszilloskop anzuschauen.
Gruß Socke

Sauerbruch
12.07.2012, 13:18
Also, für alle Experimente mit Fusebits kann ich nur den sensationell praktischen "Fusebit-Calculator" empfehlen, den Du hier findest:

http://www.engbedded.com/fusecalc

Dort wird ersichtlich, dass 0x64 Low Fuse den internen 8MHz-Oszillator und eine Taktteilung durch 8 (!!) bewirken (CKDIV8-Bit gesetzt!), also ein Takt von 1 MHz resultiert.

Mit 0xE4 als Low Fuse sollte der Controller dagegen tatsächlich mit 8 MHz laufen.

avus17
12.07.2012, 18:13
Ich habe gerade die Fusebits auf 8MHz gestellt, und jetzt funzt es!!! Vielen Dank nochmal für die Tipps!!!!!!!!!!!!!!!!!!!!!!!