OC1A ist auf PD5 oder hast du auf PD5 was anderes. Wenn du den Port7 auf Ausgang stellst dann setzt du nicht den PullUp sondern das Port7 auf high.
Meinte auf PD7 was anderes.
Hallo,Code:#include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> #include <util/delay.h> #ifndef F_CPU #define F_CPU 4000000 #endif int main(void) { cli(); //interrupts aus uint8_t i; TCCR1A |= (1<<WGM11)|(1<<COM1A1)|(1<<COM1A0); //9-Bit PWM, Invertierend TCCR1B = (1<<CS12); //Prescaler 256 DDRD |= (1<<PD7); PORTD |= ( 1 << PD7 ); //pullup sei(); while(1) { OCR1A = 500; } }
nachdem ich heute einige tutorials gemacht habe, und ein LCD an dem STK 500 zum laufen gebracht habe, habe ich mich daran gemacht ein Servo anzuschliessen, und versucht es sich zum bewegen zu ermuntern. Leider ist das einzige was passiert ein müdes zucken, was nicht wirklich dolle ist.
Ich habe ein Atmega 32 mit 4 mhz interner clock, und ein hitec hs-300 standard Servo (Analog, Datenblatt kann ich leider keines finden)
Ich nutze 9 Bit PWM, Invertierend und prescaler 256.
Das Servo hat 0,15 s Stellzeit (Was auch immer das bedeutet)
Der Puls wird mit meinen Einstellungen alle 16,3 ms gesendet.
Ich habe bereits verstanden, dass mein Counter und mein Vergleichswert
OCR1A beeinflussen, wielange ein high anliegt.
Leider verstehe ich nicht, wie ich die Vergleichswerte berechnen. Ich habe einfach mal 500 gewählt, und alles was passiert, ist dass der Servo im Uhrzeigersinn vor sich hinruckelt mit minimalen Bewegungen.
Manchmal bewegt er sich auch gar nicht.
Ich hoffe mir kann jemand weiterhelfen, denn ich habe jetzt schon stunden damit verbracht da rumzuprobieren.
OC1A ist auf PD5 oder hast du auf PD5 was anderes. Wenn du den Port7 auf Ausgang stellst dann setzt du nicht den PullUp sondern das Port7 auf high.
Meinte auf PD7 was anderes.
Hallo mcnanuk,
in diesem Thread ...
https://www.roboternetz.de/phpBB2/viewtopic.php?t=34407
... für den RP6 gibt es einige Varianten, ein Servo in C anzusprechen.
Angefangen von einer vollständig blockierenden Lösung (Impuls wird durch Delays bei gesperrten Interrupts erzeugt) über eine Lösung mit Timer-overflow bis hin zu einer PWM-Lösung ist alles drin.
Da kannst du bestimmt was anpassen!
Gruß Dirk
@hubert: muss OCR1A auf PD5 sein ? Mein Servo hat doch ein gelbes Kabel, sozusagen das Signalkabel, und das habe ich mittels eines Steckers auf PD7 gelegt ? kann das dann gar nicht funktionieren ?
Woher weiss ich denn sowas, dass OCR1A auf PD5 ist ?
@ Dirk: danke, ich werde mir die ösungen anschauen. Thread ist gebookmarked...
OC1A! Aus dem Datenblatt deines Prozessors!Woher weiss ich denn sowas, dass OCR1A auf PD5 ist ?
Gruß Dirk
Hi, mcnanuk
das komplette Datenblatt ist zu haben bei:Zitat von mcnanuk
http://www.atmel.com/dyn/resources/p...ts/doc2486.pdf
... und das Blatt mit der Pindefinition ist beispielsweise hier als attmnt. Da siehst Du den OC1A auf Pin 15
Ciao sagt der JoeamBerg
Der Steuerimpuls muß alle 20ms wiederholt werden. Die Impulslänge ist 1-2 ms, wobei 1ms maximaler linker Ausschlag, 1,5ms Neutralstellung und 2ms maximaler rechter Ausschlag darstellt.
Wenn Du die 20ms nicht einigermaßen genau einhälst zappelt das Servo rum.
Gruß
Planung ersetzt Zufall durch Irrtum
Gruß aus dem Ruhrgebiet Hartmut
Hi, Ihr,
Servo zappelt beispielsweise auch, wenn die Impulslänge falsch ist, wenn die Versorgungsspannung zu klein ist oder wenn z.B. eine Strombegrenzung (zu kleines Netzteil, zu kleiner Akku oder wie ich es gemacht hatte - blos am tiny-port angeschlossen ) den erforderlichen Strom nicht bereitstellt.Zitat von Hessibaby
Siehe auch meine früheren Probleme (mit zwei kleinen Schaltbildern im Code) unter
https://www.roboternetz.de/phpBB2/ze...751&highlight=
Viele Grüße, viel Erfolg
Ciao sagt der JoeamBerg
Lesezeichen