Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo ansteuerung
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. :)
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.... :)
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
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?
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.
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
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
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.
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.
Ich habe gerade die Fusebits auf 8MHz gestellt, und jetzt funzt es!!! Vielen Dank nochmal für die Tipps!!!!!!!!!!!!!!!!!!!!!!!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.