Genau so ist es!
Mal ne dumme Frage: Bedeutet 16 Mhz gegenüber 1 Mhz auch 16x Geschwindigkeit ?
Genau so ist es!
Mich laust der Affe, das ist ja verrückt :P
Hi
ich habs jetzt auch wieder hingekriegt. Das Programm(mit Sirene , Lauflicht, etc. funktioniert. Nnur mien programmierter Servo zuckelt nur.
Ich schließe daruas, dass die Ports noch nicht ansprechbar sind, woran liegt das. (Jtag gibts ja beim Mega 8 nicht)
Du hast zwar nicht geschrieben, was du genau mit dem servo angestellt hast, aber: Ein Servo wird über ein PWM-Signal angesteuert (Das kommt über das letzte kabel, neben Vcc und GND zum Servo...
Mal ein Quote aus dem RN-Wissen:
An die PWM-Leitung wird ein pulsweitenmoduliertes Signal angeschlossen. Die Repetition-Period(Periode) entspricht bei den meisten Modellen 20ms. Innerhalb/zu Beginn dieser 20ms wird ein Puls erwartet, der sich zwischen 1ms und 2ms bewegt, wobei diese Werte jeweils den Endlagen des Servos entsprechen. D.h. 1ms ist ganz links und 2ms ist ganz rechts(Einige Sevos haben in diesem Wertebereich jedoch nicht die volle Bewegungsfreiheit ausgenutzt, die Werte, bei denen der Servo ganz links/rechts ist können auch unter 1ms/über 2ms liegen). 1,5ms würde demnach die Mittelstellung bedeuten. Aufgrund der Pulslänge lässt sich also eine direkte Aussage über die Position des Servos treffen. Der Motor sorgt dann intern mithilfe des Potis dafür, dass die Position gehalten wird.
Ich denke schon das die Ports funktionieren. Wird sicherlich programmierfehler sein. Vielleicht postest du mal code und Anschlussbeschreibung.
Bei JTAG hab ich mich vertan, Mega8 hat natürlich keinen. Somit musst du nur irgendwann Quarz aktivieren wenn du volle Power brauchst.
Hier ist der code
Code:$regfile = "m8def.dat" $crystal = 1000000 $baud = 4800 Dim A As Word Dim B As Word Dim C As Word Config Servos = 3 , Servo1 = Portd.6 , Servo2 = Portd.7 , Servo3 = Portb.0 , Reload = 20 Config Pinb.0 = Output Config Pind.6 = Output Config Pind.7 = Output A Alias Servo(1) B Alias Servo(2) C Alias Servo(3) Enable Interrupts Do A = 100 B = 100 C = 100 Waitms 1000 A = 150 B = 150 C = 150 Waitms 1000 Loop
Du musst für Alias keine Variable vorher erstellen.
Das $baud brauchst du auch nicht, weil du nichts über RS232 ausgeben willst.
Dann versuch nochmal die Servo werte runterzustellen.
Und wenn mich nicht alles täuscht, heißt es nicht Config pinb.0 = output
sondern Config portb.0 = output
Also ungefähr so:
MFG PcVirusCode:$regfile = "m8def.dat" $crystal = 1000000 Config Servos = 3 , Servo1 = Portd.6 , Servo2 = Portd.7 , Servo3 = Portb.0 , Reload = 20 Config Portb.0 = Output Config Pord.6 = Output Config Pord.7 = Output A Alias Servo(1) B Alias Servo(2) C Alias Servo(3) Enable Interrupts Do A = 50 B = 50 C = 50 Waitms 1000 A = 150 B = 150 C = 150 Waitms 1000 Loop
Meine Page: http://royalclan.de
Hallo simon_751,
läuft der AVR auch mit 1MHz ?
dann würd ich sagen der Reloadwert ist zu gross, sollte max. 10 sein, und je mehr Servos definiert werden immer kleiner, damit so einigermassen die 20ms passen.
Probiers erstmal mit 10, evtl. aber doch mit 8.
Ansonsten mit dem Code vom PcVirus weitermachen !
So
ich hab jetzt heruasgefunden, dass auch die Ausgänge funktionieren.(also if pinc.0=1 then ...)
Das geht also. Er kann nur keine Servos bewegen. Die zucken nur ganz kurz wenn ich sie anschleiße. Daher vermute ich er kann kein Pwn Signal ausgeben.
Wodran kann das liegen?
Lesezeichen