chrisuu
17.08.2009, 15:46
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 verwende
#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;
}
Wäre sehr dankbar wenn mir jemand ein Tip geben könnte woran es liegt und wie ich den Servo zum "laufen" bekomme.
mfg
ps: benutze internen 1mhz Takt auf dem Atmega8
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 verwende
#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;
}
Wäre sehr dankbar wenn mir jemand ein Tip geben könnte woran es liegt und wie ich den Servo zum "laufen" bekomme.
mfg
ps: benutze internen 1mhz Takt auf dem Atmega8