Hi,
vom RN-Wissen Portal habe ich mal den Servo-Ansteuerungs-Code ausprobiert, jedoch zuckt der Servo nur wild rum. Habe F_CPU richtig definiert, eine extra Stromquelle für den servo(6V) und schon mehrere Servos ausprobiert. Alles ohne Erfolg; er Zuckt weiter nur rum.
Hier mal den Code den ich verwendeWäre sehr dankbar wenn mir jemand ein Tip geben könnte woran es liegt und wie ich den Servo zum "laufen" bekomme.Code:#include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000UL #define SERVOPIN 1 #define SERVOPORT PORTB #define DDRSERVO DDRB volatile unsigned char servopos; void servo_init() { TIMSK|=(1<<OCIE2); TCCR2 |= (1<<WGM21) | (1<<CS20); OCR2 = F_CPU/100000; DDRSERVO|=(1<<SERVOPIN); sei(); } ISR(TIMER2_COMP_vect) { static int count; if(count>servopos)SERVOPORT&=~(1<<SERVOPIN); else SERVOPORT|=(1<<SERVOPIN); if(count<2000+servopos)count++; else count=0; } int main(){ servo_init(); DDRD &= ~(1<<2); //für den Taster DDRC |= (1<<5); // für die LED while(1){ if(PIND & (1<<2)){ //wenn taster gedrückt: PORTC |= (1<<5); // LED anschalten und- servopos = 100; // servo mittelstellung } else { PORTC &= ~(1<<5);//andernfalls LED ausschalten, und servopos = 50; //servoposition aussen } } return 0; }
mfg
ps: benutze internen 1mhz Takt auf dem Atmega8
Lesezeichen