Hi
Also ich versuche einen Servo ein meinem myAVR Board zu betreiben.
Als Beispiel habe ich den Code aus dem RN-Wissen Artikel genommen und er sieht jetzt wie folgt aus:
Code:
#include <avr/io.h> // I/O Port definitions
#include <avr/interrupt.h> // Interrupt macros
#define F_CPU 4000000
#define SERVOPIN 7
#define SERVOPORT PORTD
#define DDRSERVO DDRD
volatile unsigned char servopos;
void servo_init()
{
TIMSK|=(1<<OCIE2);
TCCR2 |= (1<<WGM21) | (1<<CS20); //Prescale=1, CTC mode
OCR2 = F_CPU/100000; //alle 10µS ein IRQ
DDRSERVO|=(1<<SERVOPIN);
};
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(void)
{
DDRD = 0xFF;
PORTD = 0x00;
sei();
servo_init();
servopos=120;
while(1)
{
}
return 0;
}
Nur leider macht er bis auf wie verrückt "zucken" nichts.
Was hab ich falsch gemacht?
gruß
Tobi
Edit:
So, habs nun doch noch selbst hinbekommen.
Das Beispiel für Bascom hat mich fehlgeleitet, dort steht man soll einen Wert zwischen 50 und 150 eingeben, bei C ist es aber ein Wert zwischen 0 und 100.
Und zum zucken... der Servo ist sehr alt, vielleicht kommt es ja davon.
Lesezeichen