Hi Picnick,
inzwischen läuft mein Servo! wenigstens in eine Richtung!!
denn ich hab was entscheidendes vergessen:
TIMSK = (1<<TOIE0);
aktueller Code:
Code:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <math.h>
volatile unsigned char servowert;
volatile unsigned char puls;
volatile unsigned char zaehler;
int set_servo(volatile uint8_t pos)
{
servowert = (pos/180) + 1;
}
int main(void)
{
zaehler = 0;
sei();
DDRB = (1<<PB0);
PORTB = (1<<PB0);
//Timer0 übernimmt die Highphase
//muss 1ms sein also 25 Takte bei einem Prescaler von 64
puls = 25;
TCCR0 = (1<<CS01)|(1<<CS00);
TCNT0 = (255-puls);
TIMSK = (1<<TOIE0);
for(;;)
{
}
}
SIGNAL(SIG_OVERFLOW0)
{
if(zaehler == 0)
{
PORTB = (0<<PB0);
TCNT0 = (255-puls);
zaehler++;
}
else if ( (zaehler > 0 ) && (zaehler < 20 ) )
{
TCNT0 = (255-puls);
zaehler++;
}
else
{
TCNT0 = (255-puls);
zaehler = 0;
PORTB = (1<<PB0);
}
}
warum Preload 6 ich hab doch 25 ausgerechnet?
Wie mach ich das wenn ich in die andere Richtung will? Preload verdoppeln?
Gruß Michi
Lesezeichen