Hallo zusammen! Ich muss einen Servo über einen ATMega128 ansteuern... kenn moch aber mit Servos Null aus! Könnte mir jemand sagen, wie ich ihn anschließe ? (PWM, Port,...) Und, hätt eventuell jemand einen source code für mich.. oder einige funktionen ? Und andere Wichtige Sachen ? Mit bestem Danke, lg Nickl
Mit der Suche kennst du dich wohl auch nicht aus: http://www.mikrocontroller.net/forum/read-1-75205.html
Danke Rahul... Jetzt kenn ich mich mit der theorie aus... aber nach was ich noch auf der sucha bin wäre ein source beispiel wo genau 1 servo angesteuert wird.. möglichst einfach, damit ich mich auch auskenna... danke niki
// Steuerung zweier Servos über einen ATmega162 und dessen Timer1 // Setzen der Portpins durch das Overflow-Interrupt // Rücksetzen der Portpins durch die Output-Compare-Interrupts. // Servo1 an PORTE 0, Servo 2 an PORTE 1 // 15.Oktober 2005 #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define Startwert 0x0E66 // Timer-Ticks für 1ms bei 3,686MHz #define Endwert 0x1CCC // Timer-Ticks für 2ms bei 3,686MHz #define Mittelwert 0x1599 // Timer-Ticks für 1,5ms bei 3,686MHz volatile unsigned int Servo1, Servo2; // Reload-Werte volatile unsigned int inkrement1, inkrement2; // Änderungswerte volatile unsigned char umsch1, umsch2; // Richtungsangabe volatile unsigned char dec,dec0; // Refresh volatile unsigned char Buffer[BufferMax]; volatile unsigned char Buffercount, send; SIGNAL(SIG_OVERFLOW1) { PORTE = 0x06; // beide Servos "einschalten" dec--; if (dec == 0) { dec = dec0; if (umsch1 == 0) { Servo1 += inkrement1; } else { Servo1 -= inkrement1; } if ((Servo1 < Startwert) || (Servo1 >= Endwert))umsch1 = ~umsch1; if (umsch2 == 0) { Servo2 += inkrement2; } else { Servo2 -= inkrement2; } if ((Servo2 < Startwert) || (Servo2 > Endwert)) umsch2 = ~umsch2; OCR1A = Servo1; OCR1B = Servo2; } } SIGNAL(SIG_OUTPUT_COMPARE1A) { PORTE &= ~0x02; // Servo 1 ausschalten } SIGNAL(SIG_OUTPUT_COMPARE1B) { PORTE &= ~0x04; // Servo 2 ausschalten } int main(void) { DDRE = 0x06; // zwei Pins als Ausgang PORTE = 0x01; // low am Ausgang. Pull-Up einschalten Servo1 = Mittelwert; Servo2 = Startwert; OCR1A = Servo1; OCR1B = Servo2; inkrement1 = 0x25; inkrement2 = 0x12; dec0 = 1; dec = dec0; umsch1 = 0; umsch2 = 0; TIMSK = ((1<<TOIE1) | (1<<OCIE1A) | (1<<OCIE1B) | (1<<TICIE1)); sei(); TCCR1B = (1<<CS10); for(;;) } ganz einfach ist es nicht. Aber du willst ja noch was lernen...
auf www.hannes.de.md findest du ein Beispiel für mehrere Servos am AT90S4433. Ist in Assembler, aber gut kommentiert. ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.